I tried Kavita and immediately recoiled at the fact that basic features like progress sync or metadata matching are behind a paywall - literally features that don’t cost the developers anything, while having open, active bug reports going back a year on these “premium” features.
Progress sync works fine for me in KOReader with OPDS. Progress Sync Scrobble (to third-parties) is the Kavita+ feature.
My understanding was the Kavita+ items are things to do with third-party services and meta data providers that are an API/cost-based service to the dev. That being said I don’t use any of those features.
which is fucking useless for actual progress sync of books because it doesn’t handle concurrency (multiple readers reading the same content, potentially offline), and more importantly, modern ebook formats have no concept of “page” in transit. Oh, you read page 10? Awesome! Now do tell, is it page 10 on a 5" 800x480 eink display with 48px font size and giant margins/lineheights/word paddings, or is it page 10 on a 13" display of 2480x1860 resolution with 11px font size and barely any margins? Since you’ll get wildly different results in both cases, and OPDS doesn’t really allow for adapting this simple integer to a precise position.
No, for that you require a proper locator scheme, something OPDS doesn’t provide and cannot enforce.
Page based progress is fine for fixed format publications - comics, PDF/DOCX files, etc., but that approach breaks irreparably the moment you switch to dynamically formatted content. In case of EPUV/MOBI/the various Kindle formats, you want to determine the reader’s position based on the first and last paragraph/sentence visible on the reader and correlate that to a position within the actual files of the book, which is actually dynamic, as it can be resolved regardless if it’s XML formatted EPUB or if you dumbed the book down to a simple TXT file.
So no, OPDS’s PSE is at best a stopgap solution for syncing progress.
Now do tell, is it page 10 on a 5" 800x480 eink display with 48px font size and giant margins/lineheights/word paddings, or is it page 10 on a 13" display of 2480x1860 resolution with 11px font size and barely any margins
Again, it’s a protocol and developer discression can be used. Page 10 could be word 10, or word 1000/avg 10 words = 10. PSE can be used to store progress, without needing to request the page because the eBook is local. It could be any API format.
by concurrency I meant multiple devices of the same user, not multiple users. I don’t know why you’d even consider that I think other users’ progress should be exposed on a single call?
and yet again, that progress doesn’t mean anything when you base it on a number. locator patterns that find the SECTION you’re in based on first-last word (or rather, sentence, for actual precision) are the way to go. you can try hacking this simplified protocol as much as you want, it will never work as well as a dedicated one.
I tried Kavita and immediately recoiled at the fact that basic features like progress sync or metadata matching are behind a paywall - literally features that don’t cost the developers anything, while having open, active bug reports going back a year on these “premium” features.
All while licensing the code under GPLv3…
Progress sync works fine for me in KOReader with OPDS. Progress Sync Scrobble (to third-parties) is the Kavita+ feature.
My understanding was the Kavita+ items are things to do with third-party services and meta data providers that are an API/cost-based service to the dev. That being said I don’t use any of those features.
OPDS doesn’t do progress sync, at all… you’re running something else there if that works for you.
https://anansi-project.github.io/docs/opds-pse/specs/v1.2
They use the PS extension. I believe Komga and Kavita maintain the spec now. Reader support for Kavita specifically is in the Wiki.
PSE is page streaming, not progress sync…
PSE is a protocol, how information is used on each side of that protocol is at the developers discretion.
pse:lastRead="10" pse:lastReadDate="2010-01-10T10:01:11Z"which is fucking useless for actual progress sync of books because it doesn’t handle concurrency (multiple readers reading the same content, potentially offline), and more importantly, modern ebook formats have no concept of “page” in transit. Oh, you read page 10? Awesome! Now do tell, is it page 10 on a 5" 800x480 eink display with 48px font size and giant margins/lineheights/word paddings, or is it page 10 on a 13" display of 2480x1860 resolution with 11px font size and barely any margins? Since you’ll get wildly different results in both cases, and OPDS doesn’t really allow for adapting this simple integer to a precise position.
No, for that you require a proper locator scheme, something OPDS doesn’t provide and cannot enforce.
Page based progress is fine for fixed format publications - comics, PDF/DOCX files, etc., but that approach breaks irreparably the moment you switch to dynamically formatted content. In case of EPUV/MOBI/the various Kindle formats, you want to determine the reader’s position based on the first and last paragraph/sentence visible on the reader and correlate that to a position within the actual files of the book, which is actually dynamic, as it can be resolved regardless if it’s XML formatted EPUB or if you dumbed the book down to a simple TXT file.
So no, OPDS’s PSE is at best a stopgap solution for syncing progress.
Kavita is multiuser, each with their own progress sync. https://wiki.kavitareader.com/getting-started/
Again, it’s a protocol and developer discression can be used. Page 10 could be word 10, or word 1000/avg 10 words = 10. PSE can be used to store progress, without needing to request the page because the eBook is local. It could be any API format.
by concurrency I meant multiple devices of the same user, not multiple users. I don’t know why you’d even consider that I think other users’ progress should be exposed on a single call?
and yet again, that progress doesn’t mean anything when you base it on a number. locator patterns that find the SECTION you’re in based on first-last word (or rather, sentence, for actual precision) are the way to go. you can try hacking this simplified protocol as much as you want, it will never work as well as a dedicated one.