Vellum/internal/modules/comics
mithral c3b7db7114 Phase 4: CBZ comics module and reader
- comics: reads pages straight out of the archive on demand. No extraction
  pass, so a 200-page CBZ is not materialised for a reader who views three
  pages. Pages are read into memory and served via http.ServeContent, which
  gives Range for free.
- natural page ordering: page2 sorts before page10. Lexical ordering shuffles
  a numbered archive, which is the difference between a readable book and a
  scrambled one.
- skips __MACOSX and dotfiles; rejects archives with no images.
- cover is the first page.
- media.Item gained ModTime (from the backing file) so page responses carry a
  Last-Modified and support conditional GETs.
- web: ComicReader with a bounded prefetch window (two pages each way), page
  jump, keyboard nav, and progress stored as a page number.

Verified: 3-page CBZ served in natural order, out-of-range 404, cover from
page 1, progress round-trip. svelte-check 0/0.
2026-10-09 21:07:59 -04:00
..
comic.go Phase 4: CBZ comics module and reader 2026-10-09 21:07:59 -04:00
comic_test.go Phase 4: CBZ comics module and reader 2026-10-09 21:07:59 -04:00
cover.go Phase 4: CBZ comics module and reader 2026-10-09 21:07:59 -04:00
handlers.go Phase 4: CBZ comics module and reader 2026-10-09 21:07:59 -04:00