Komga reading progress sync

Hey! I wanted to make sure I’m understanding this feature correctly.

Right now I have Komga setup as a library and I’m streaming my comics from it. This morning I started reading Poison Ivy. If I go to Reading Now it shows the issue I’m reading with the reading progress in the cover. That’s working how it’s supposed to I think.

If I go to my library though, the cover has a streaming icon on the top left corner and does not have any reading progress. So while Panels knows how far I am in the issue, I can’t see it when looking at my actual library.

Does that sound about right, or am I missing something important? I’m currently on v2.14.2 (202302130035) in TestFlight.

Thanks for pointing this out @GsMumbo
The progress on the OPDS Library was a missing feature. The next Testflight will add support for it and streamed comics will show the expected progress (make sure the show reading progress option is enabled in the library settings).

Additionally, we have added the options for Mark as read and mark as unread from the OPDS library. This is also compatible with Komga reading progress sync. You won’t have to open the comic and manually jump to the last page to mark it as read on Panels and Komga.

We have fixed a bunch of other bugs regarding OPDS and reading progress.
We are testing the Testflight internally and will release it to everyone else within 24h.

1 Like

I am so excited for this! It’s the main thing I needed to make this my go to app. I have ADHD so keeping track of reading process in multiple places ends up falling apart every time. Having it right there in the streamed library is perfect. Looking forward to the TestFlight update!

1 Like

Just installed the new update in TestFlight. It’s working beautifully so far!

1 Like

Excellent! Thanks for letting us know. I’m about to upload another one with some tweaks in the widget, so they support streamed comics correctly.

1 Like

Hi, are there any plans to also support tracking and syncing page progress between panels and komga? For example, if I start reading on komga and then continue reading on panels but I don’t finish and then I go back to reading on komga at a later time, can I continue where I left off and vice versa?

In the past I’ve primarily downloaded files into the local iPad library, but because of the progress sync, I’ve started reading files directly through the OPDS library, using the “download to this iPad” feature. I’m wondering if something is wrong, or maybe the feature just isn’t implemented yet, because in the series overview it only reports titles as finished if I have finished them on the iPad. If they were already finished on the Komga server, there is no difference. Please see the following screenshots for an example:

In Komga:

In Panels:


I couldn’t easily send the entire XML, but the screenshot above illustrates that there isn’t any difference in how the library reports Volume 3 vs. Volume 4, but in Panels, only Volume 4 is reported as Finished as that’s the one that I marked complete in Panels itself rather than it already having been complete in Komga.

I am quite new to reading stuff directly in the OPDS library though, so I’m certainly not discounting the possibility that I may be using it incorrectly.

1 Like

Ok, this one is quite tricky.

Panels only fetches the reading progress from Komga when you open the comic, not when listing them.
The progress only appears on the list when it exists on Panels.

There are a few things to consider:

  • Panels syncs with Komga optimistically. It’s a fire-and-forget action. Whenever the reading session is saved in Panels, it calls Komga API to update the progress. But that request can fail due to many reasons. And Panels does not implement any recovery mechanisms. That means the source of truth is the Panels’ reading session. Not Komga.
  • When you open the comic, Panels fetches the reading session from Komga and compares the last update Date. If Komga’s reading session is newer than Panel’s, it updates the local session with the Komga information, and they are now in sync.

Unfortunately, we can’t trust startOnPage because it has no Date associated with it. lastRead: 191 means nothing to Panels in the list context. After all, we can’t know whether 191 is newer than the local session or outdated. If the OPDS feed had a lastReadDate, we could know whether it’s newer or older than the local session.
Until you open the comic, and we fetch the information from the API, we don’t update the local session.
lastRead is only used when you open a comic on Panels for the first time, or when no API exists for the OPDS Server (like Calibre or Maylar).
We can’t use the API in the list because of two reasons:

  • The API is a pure OPDS frontend. It knows nothing about the type of server or APIs. We can only work with the information in the OPDS feed. It’s similar to this other issue.
  • Using the API would require multiple calls. One per comic. And that doesn’t scale for us.

TLDR; The reading session only gets synced when the comic is opened so you can continue reading. But it is not when they are listed.

Hi, are there any plans to also support tracking and syncing page progress between panels and komga? For example, if I start reading on komga and then continue reading on panels but I don’t finish and then I go back to reading on komga at a later time, can I continue where I left off and vice versa?

This should work already. But the comment above might clarify why they might not look in sync all the time.

Any way we could get a UI to bulk-sync all elements in the current directory or something? That would help to properly mark everything in the current directory as FINISHED without having to open them all manually, and also let me update Komga when internet connection is restored (ie, “I just read 4 books while I was on the plane”). Basically just do an “open, then immediately close” on every book in the directory.

Frankly, I don’t think we will implement something like that anytime soon.

The Komga progress sync started as something we could put together very quickly to satisfy the needs of a few users. And it has escalated quickly in the last few weeks.

We understand that many of you are huge fans of Komga (I include myself in that group), but Panels is not a Komga client.
We already offer reading session synchronization with offline support. We don’t plan to reimplement that feature only to support Komga.

I hope that makes sense.

Maybe I am missing a configuration or something? Because this never works for me. I’ve tried with different comics and have waited for a while after closing a book on panels (unfinished) to see if it would sync with komga but it never does. It keeps my progression on the panels app but if I go to komga it opens again at the page where I was before continuing reading on panels. I’ve also noticed that marking a book as read or unread in the app has no effect in komga and the book still shows up in Keep Reading.

The panels app version I am running:
Version: 2.14.2 Build: 202302201550 Env: Production (Testflight)

When you set up Komga on Panels, you get two things: an “Import Service” and a “Library”. Which one are you using? The sync works for titles you read through the Library, not ones that you’ve copied to your iPad using the Import Service.

I am streaming them so I always use library not the import service


Could you send create a testing account for us on your server? Drop us a DM with the info, if you can.

I figured out why it doesn’t work. First off my WAF was in the way and was blocking requests. I turned it off and I now see the PATCH requests but they still fail because the request uri doesn’t prefix the baseUrl. I’m seeing requests being made directly to /api/v1/books/bookid/read-progress instead of /komga/api/v1/books/bookid/read-progress and obviously the path /api/v1/books/bookid/read-progress doesn’t exist.

Interesting :thinking:

I’ll look into this. Thanks for the info!

We just released a new Testflight. Could you try and let us know if it fixed the issue?

It works! Thank you so much.

1 Like


I’ve made a proposal to the OPDS-PSE repo to add a new lastReadUpdate attribute. If it gets approved and servers adopt it, we will be able to use that information to know whether the reading session coming from the backend is newer than the one stored locally and show the correct progress in Panels.