Kobo Sync not syncing read progress correctly
Short Notice from the maintainer
After 6 years of more or less intensive programming on Calibre-Web, I need a break.
The last few months, maintaining Calibre-Web has felt more like work than a hobby. I felt pressured and teased by people to solve "their" problems and merge PRs for "their" Calibre-Web.
I have turned off all notifications from GitHub/Discord and will now concentrate undisturbed on the development of “my” Calibre-Web over the next few weeks/months.
I will look into the issues and maybe also the PRs from time to time, but don't expect a quick response from me.
Please also have a look at our Contributing Guidelines
Describe the bug/problem
Kobo Libra Color sometimes doesn't realize it's on the correct page when syncing reading progress, thus showing the Return to last page popup. This seems to happen almost exclusively with comics/mangas.
To Reproduce
Steps to reproduce the behavior:
- Open a comic on the Kobo
- Scroll through it for a bit
- Put Kobo Libra Color to sleep
Logfile
I will append Wireshark logging here
>6<>s2E v@@ 8R#=
~JPUT /kobo/d9bccc6b9fb9c0bbffb4c44b417efd4b/v1/library/6a71970e-ee10-4fbb-bd2a-18856167edc3/state HTTP/1.0
Host: cali.bre
X-Forwarded-For: 172.26.238.25
X-Scheme: https
Connection: close
Content-Length: 499
Accept-Encoding: gzip
Accept: application/json
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4NkI4NjkzNUQyQ0FFMDM0MzJGQTFGOTY5MDJGQzIyQzVFNkU4NzkiLCJ4NXQiOiJDR3VHazEwc3JnTkRMNkg1YVFMOElzWG02SGsiLCJ0eXAiOiJKV1QifQ.eyJuYmYiOjE3NTYyMzUxODQsImV4cCI6MTc1NjIzODc4NCwiaXNzIjoiaHR0cHM6Ly9hdXRoLmtvYm9ib29rcy5jb20iLCJhdWQiOlsiaHR0cHM6Ly9hdXRoLmtvYm9ib29rcy5jb20vcmVzb3VyY2VzIiwicHJvZmlsZWF1dGgiLCJwdWJsaWNfYXBpIl0sImNsaWVudF9pZCI6Im5pY2tlbCIsInN1YiI6IjFjM2EzMmU2LTc0ODYtNDYxYi0xZThiLTA4ZGM5ZDlhYWFjOCIsImF1dGhfdGltZSI6MTc1NTkxMzcyNCwiaWRwIjoiS29iby5Qcm9maWxlLkF1dGgiLCJrb2JvX3VzZXJfaWQiOiJjOThjNjQ0NC0wOTY4LTQ1MWMtYWYzYy02NjFhZmRmZTg3MzQiLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwia29ib19wcm9maWxlIiwicHJvZmlsZWF1dGhfY2xpZW50X2F1dGhkX3JlZmVycmFsIiwicHVibGljX2FwaV9hdXRoZW50aWNhdGVkIiwicHVibGljX2FwaV9hbm9ueW1vdXMiLCJvZmZsaW5lX2FjY2VzcyJdfQ.GMmXYllt83ecjZ3raxS17NQGOa1t2JRlRmIAqLLUCLUALzFaMKMezqAi_Gm7zOvvMXUjTqVfZu5aoZnaw7j0wSpuRDzmkdmOX82jShTHS6XCASE_iK0hLVeInzhEYSrC0eoWlwacqZISVsCPxYoDjzp1iSntr62XIYgnLthCD713MqYwx-H35JClxDg0nfCjgGLPLngei4IQvuLxR0S8ktwoyX1FpTGhJ49PvfOWvshibeJ8W2N2GTx__4Xql93ObL0GtDUaFpUyTxrbLaQiD5OxHusw9dubcXw05oVXOOJ6oy6bJpYTVGH-B5dGYVf1OzVFjQ6xNINufnS87a7RKg
Content-Type: application/json
x-kobo-affiliatename: Kobo
x-kobo-appversion: 4.42.23296
x-kobo-deviceid: 9e291b9f8feb56ccd98d7c7833e5536fd1612eca2cb46a90e924c11dea50f370
x-kobo-devicemodel: Kobo Libra Colour
x-kobo-deviceos: 4.9.77
x-kobo-deviceosversion: NA
x-kobo-platformid: 00000000-0000-0000-0000-000000000390
User-Agent: Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/538.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/538.1 (Kobo Touch 0390/4.42.23296)
Accept-Language: de-DE, de;q=0.9, en;q=0.8, *;q=0.7
{"ReadingStates": [{"CurrentBookmark": {"ContentSourceProgressPercent": 0,"LastModified": "2025-08-26T19:32:38Z","Location": {"Source": "text/part0085.html","Type": "KoboSpan","Value": "kobo.1.1"},"ProgressPercent": 33},"EntitlementId": "6a71970e-ee10-4fbb-bd2a-18856167edc3","LastModified": "2025-08-26T19:32:38Z","Statistics": {"LastModified": "2025-08-26T19:32:38Z","RemainingTimeMinutes": 0,"SpentReadingMinutes": 45},"StatusInfo": {"LastModified": "2025-08-26T19:32:38Z","Status": "Reading"}}]}
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 556
Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; font-src 'self' data:; img-src 'self' data:; object-src 'none';
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=31536000
X-RateLimit-Limit: 3
X-RateLimit-Remaining: 3
X-RateLimit-Reset: 1756236925
Retry-After: 0
Vary: Cookie
Set-Cookie: session=.eJwlzkEOAiEMheG7sHbRlgJlLjMptEQXasI4K-Pdxbh7iy8v_zvsY_pxDdtrnn4J-83CFrpWSSUmZUg9l5YMBjWK1nR0NClr4EBUqC6N0xCgQh1cSKBRbYnYpJpTdm5Ru4mqSmVNOrikjMjLqDu7jGEeBUV611zIgWNYIVMf9ryvGFBe10uhsBG5R6YfOA-f_9wYPl_PKDlw.aK4MfA.AVhFMi9UI4LSRlyXq5qoZxV_jgo; HttpOnly; Path=/; SameSite=Lax
Connection: close
Date: Tue, 26 Aug 2025 19:35:24 GMT
[{"Created":"2025-02-15T20:34:52Z","CurrentBookmark":{"LastModified":"2025-08-26T19:32:39Z","Location":{"Source":"text/part0085.html","Type":"KoboSpan","Value":"kobo.1.1"},"ProgressPercent":33.0},"EntitlementId":"6a71970e-ee10-4fbb-bd2a-18856167edc3","LastModified":"2025-08-26T19:32:39Z","PriorityTimestamp":"2025-08-26T19:32:39Z","Statistics":{"LastModified":"2025-08-26T19:32:39Z","SpentReadingMinutes":45},"StatusInfo":{"LastModified":"2025-08-20T23:29:27Z","LastTimeStartedReading":"2025-08-20T23:29:27Z","Status":"Reading","TimesStartedReading":1}}]
Expected behavior
Kobo Libra Color should show the last read page without the popup opening if the Ebook wasn't read on another device
Screenshots
If applicable, add screenshots to help explain your problem.
Environment (please complete the following information):
- OS: Debian 13
- Calibre-Web version: [0.6.25]:
- Docker container: [LinuxServer]:
- Special Hardware: [LXC Container]
Additional context Might be related / the same issue as #2304. All Mangas and Comics are converted to KEPUB.
The only thing I can imagine being a problem is the "ProgressPercent":33.0 having a decimal point. As soon as I have the time I'll try to remove it on the fly. Does anyone know how Kobos own server answers? Does the answer include a decimal point?