Kavita Support

Hi I’m the developer of Kavita, a new open source reading server for books, comics, and manga.

I’m implementing OPDS support, however I cannot for the life of me get Panels to connect to my OPDS feed.

I’ve tried IP with PORT or through reverse proxy and it never hits my API.

Is there something that the Panel’s team needs to do? My connection is like: (ip):(port)/api/opds

Not sure how to edit my original post, but I did see:

I will confirm I have tried via https://subdomain.reverseproxy/api/opds and also did not get any hits to my API.

1 Like

Hey @majora2007

Awesome work with Kevita :raised_hands:

Let me look into this and get back to you soon. I’ll set up a Kevita server and try to replicate your environment.

Thanks, would appreciate it.

Please use https://github.com/Kareadita/Kavita/tree/feature/opds branch as that has the OPDS work on it.

You can drop by our discord if you need help (https://discord.gg/b52wT37kt7) and message me (same username). You have to enable OPDS on the server in server settings then get the url from your user settings page.

This was released, so if you are still looking into it, you can just download the release to setup.

Thanks!! Sorry I haven’t been able to look into this yet :sweat: We are preparing an important release and it’s taking all my time. I promise I’ll look into supporting Kavita soon :pray:

Hey @majora2007

I finally found some time to look into the Kavita integration. I was able to configure a local server and access it. But I found some issues with the feeds.

The Libraries list looks fine. But when I open one of them, I get another feed reference suffixed with (Archive). They match my folders on the server.
If I open an Archive, I get a “Volume” level. I guess Kavita automatically generates those volumes for me.

Then I can see multiple feed references corresponding to each comic file.

I cannot download them because we are missing the correct acquisition reference.
We are expecting a link reference with the rel http://opds-spec.org/acquisition. Otherwise, Panels treat the entry as a link to a subsection. The attributes representing the file mime-type (type) and size (length) are also recommended, but we treat them as optional.

I’ve made a couple of tweaks in our parser to recognize Kavita correctly, and the next version of Panels will show it with the right icon and default name.

I just sent a new build, including all the changes to show Kavita correctly in the list, to Testflight review. As soon as Apple approves it, I’ll share a link so you can give it a whirl.

Thanks Dani,

Thank you for taking a look.

Interesting, so you’re saying when you navigated from Library -> Volume -> Chapter, the Chapters were missing the Acquisition link on them?

From the output below, I do see the Acquisition link, could it be that we use the open-access part after?

localhost:5000/api/opds/{apiKey}/series/5/volume/12/chapter/16

Edit after noticing how small the image was (had to take the < off link to render:
link rel=“http://opds-spec.org/acquisition/open-access” type=“application/pdf” href="/api
/opds/d809287f-5e92-403b-b435-cbc38760cdad/series/5/volume/12/chapter/16/download
/A%20Chronicle%20of%20the%20Last%20Pagans.pdf"/>

Oh! interesting :thinking:

this is what I got:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <updated>2021-09-24T10:53:00</updated>
   <title>Akira - Volume 0 - Chapters</title>
   <icon>/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/favicon</icon>
   <author>
      <name>Kavita</name>
      <uri>https://kavitareader.com</uri>
   </author>
   <link rel="self" type="application/atom+xml;profile=opds-catalog;kind=acquisition" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1" />
   <link rel="start" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff" />
   <link rel="search" type="application/opensearchdescription+xml" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/search" />
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/1" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=1" />
      <updated>2021-09-24T10:53:00</updated>
      <id>1</id>
      <title>Chapter 1</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/2" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=2" />
      <updated>2021-09-24T10:53:00</updated>
      <id>2</id>
      <title>Chapter 2</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/3" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=3" />
      <updated>2021-09-24T10:53:00</updated>
      <id>3</id>
      <title>Chapter 3</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/4" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=4" />
      <updated>2021-09-24T10:53:00</updated>
      <id>4</id>
      <title>Chapter 4</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/5" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=5" />
      <updated>2021-09-24T10:53:00</updated>
      <id>5</id>
      <title>Chapter 5</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/6" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=6" />
      <updated>2021-09-24T10:53:00</updated>
      <id>6</id>
      <title>Chapter 6</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/7" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=7" />
      <updated>2021-09-24T10:53:00</updated>
      <id>7</id>
      <title>Chapter 7</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/8" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=8" />
      <updated>2021-09-24T10:53:00</updated>
      <id>8</id>
      <title>Chapter 8</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/9" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=9" />
      <updated>2021-09-24T10:53:00</updated>
      <id>9</id>
      <title>Chapter 9</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/10" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=10" />
      <updated>2021-09-24T10:53:00</updated>
      <id>10</id>
      <title>Chapter 10</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/11" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=11" />
      <updated>2021-09-24T10:53:00</updated>
      <id>11</id>
      <title>Chapter 11</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/12" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=12" />
      <updated>2021-09-24T10:53:00</updated>
      <id>12</id>
      <title>Chapter 12</title>
   </entry>
   <entry>
      <link rel="subsection" type="application/atom+xml;profile=opds-catalog;kind=navigation" href="/api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/13" />
      <link rel="http://opds-spec.org/image" type="image/jpeg" href="/api/image/chapter-cover?chapterId=13" />
      <updated>2021-09-24T10:53:00</updated>
      <id>13</id>
      <title>Chapter 13</title>
   </entry>
</feed>

I’ll give this another look tonight and double-check that I didn’t make any mistake.

Nevertheless… now that you mention it, It’s very likely that our pattern matching is looking for http://opds-spec.org/acquisition exactly and will fail to match http://opds-spec.org/acquisition/open-access. I’ll make sure that it works with anything starting with that string, that is what the RFC defines.

Ahh you’re one level more from the acquisition link.

In Kavita, we have Library -> Series -> Volume -> Chapter -> File. As you mentioned Volume/Chapter are generated for the user.

So opening /api/opds/75448f24-3808-4903-a930-57e92bc8c1ff/series/1/volume/1/chapter/5 should give you the actual acquisition link

gotcha!! I’ll give this another look to fix the http://opds-spec.org/acquisition/open-access issue on our side.
I’ll keep you posted. Thanks for the help :raised_hands:

It’s working now :raised_hands:

I was able to read the comic using OPDS streaming, and also download it.

The next version of Panels will include support for Kavita. Thanks for the help!

1 Like

Awesome! Thanks for the help Dani.