Bug: comix.to cover still not fetched for the web and userscript so the web is using the placeholder cover image, kagane.to cover image showed up in web but not propperly shown in userscript #47
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
comix.to verified by me, when i bookmark 'Full-Time Awakening' series in comix, it doesnt show the cover in the web and userscript.
for kagane.to in the web it shows the cover but in the userscript it shows only image icon on the top left corner of the cover.
Triage Notes
Category
bug, stateneeds-triage— evaluation in progress. Both reported symptoms reproduce; they are two independent defects that happen to land on the same slot.What we've established so far:
comix.to/title/qqwrm-full-time-awakening. On the series page the adapter'scoverFromPageworks and returnshttps://static.comix.to/9c57/i/8/6d/68df89f72ae62@280.jpg. On the chapter page (.../11173862-chapter-154) the document has three images, all withalt="Page N", and still noog:image— socoverFromPagecorrectly returns"". Bookmarking while reading, the normal flow, therefore stores an empty cover.Store.Upsert's seriesON CONFLICT DO UPDATEwrites onlykindand the latest-chapter columns;title/series_url/coverare creation-only by ADR-0003. A later visit to the series page cannot fill the blank, and nothing backfills server-side: the poller'sprefetchCoveris kagane-bytes-only, and no site parser extracts a cover. So even after cause 1 is fixed, series already recorded stay coverless.Bookmark.CoverURL(), which rewrites a kagane cover to the same-origin proxy/img/kagane/{id}. The userscript panel instead rendersb.coverdirectly — the rawhttps://kagane.to/api/v2/image/<uuid>/compressed, which kagane serves withcross-origin-resource-policy: same-originbehind its challenge (measured 2026-08-08). That is exactly the broken-image icon reported.GET /bookmarksreturns the rawcover, neverCoverURL, and the proxy route is session-gated, so the bearer-credential userscript cannot reach it as things stand.Open decisions (grilling next, not agent-ready):
COALESCE(NULLIF(series.cover,''), excluded.cover)) so a blank cover can be repaired, versus a narrower backfill path..
5. Wire becomes an absolute URL from a configured public base; until bytes exist.
6. Both userscripts: cover scraping deleted, falls back to the existing placeholder.
7. s
sr.Site != "kagane"prefetch guard generalises to all six Sites, both Libraries.Only kagane still needs the CDP browser. novelfulls HTML is challenge-gated but its image paths
answer 200 with .
Extractor gotchas: asuras
.webpcover URL answersContent-Type: image/jpeg(trust theheader); demonics contains a raw unencoded space (percent-encode before fetching).
EOF
)
Design settled (grilling session, 2026-08-09). Decisions recorded in
docs/adr/0007-backend-hosts-cover-bytes.md;
Coveradded to CONTEXT.md; the deferredadmin refetch is #54.
Root causes (verified live, not inferred)
comix —
coverFromPagematchesimg[alt] === document.title. That element exists on theseries page but not on a chapter page (only
alt="Page 1..3"), so bookmarking mid-readstores
cover = "", andStore.Upsertwrites Series facts only at creation (ADR-0003), so theblank is permanent. comix serves no
og:imageanywhere.kagane — the stored cover is a raw kagane URL. The web UI survives only because
store.CoverURL()rewrites it to/img/kagane/<id>in the templates; the JSON API returnsthe raw URL, and kagane sends
cross-origin-resource-policy: same-origin, so the userscript's<img>cannot load it. Noonerroranywhere, so it paints the native broken-image glyph.Novel side has the same bug: lightnovelworld exposes no cover on chapter pages either, so it
fails exactly like comix. novelfull is fine (its
meta[name=image]is present on chapter pages).The novel panel renders covers through identical code, so both scripts are affected.
The fix
at Series creation instead of waiting for the poll queue.
volume; the DB holds the path. No client ever renders a third-party URL.
per redirect hop, size and content-type capped — not by a host allowlist.
<img>cannot send a bearer token, and the panel's shadow root ismode: "open", so a token insrcwould be readable by the host page).coverbecomes an absolute URL from a configured public base;""until bytes exist.onerrorfalls back to the existing placeholder.poller.go'ssr.Site != "kagane"prefetch guard generalises to all six Sites, both Libraries.Only kagane still needs the CDP browser. novelfull's HTML is challenge-gated but its image paths
answer 200 with
access-control-allow-origin: *.Extractor gotchas: asura's
.webpcover URL answersContent-Type: image/jpeg(trust theheader); demonic's
og:imagecontains a raw unencoded space (percent-encode before fetching).sulthan referenced this issue2026-08-09 23:12:11 +07:00
sulthan referenced this issue2026-08-09 23:12:11 +07:00
sulthan referenced this issue2026-08-10 00:35:10 +07:00
sulthan referenced this issue2026-08-10 01:05:56 +07:00