Skip to content
ZornTaov edited this page Oct 16, 2026 · 5 revisions

ZornCoMix

ZornCoMix - formerly ZC-ComicUpdater - is two programs: ZornCoMix Updater and the Reader.

The updater (the "Comic Mirror" scripts) downloads a webcomic page by page, packs it into a .cbz, and remembers enough to carry on where it stopped next time. Point it at a library folder and it updates every comic in it unattended, on a timer, in a container if you like.

The problem it solves is the fifth year of updates, not the first download: a decade-old comic is a 250 MB archive, and adding this week's three pages should not mean rewriting or re-syncing 250 MB. It can also work out which file came from which page, split comics into chapter archives, adopt comics you already have, and be driven from a small web page.

The web page: a comic being scraped with two updates queued behind it, the library, the add form and an upload waiting to go in

Script What it does
mirror_base.py Scrapes one comic, saves the pages, appends them to its .cbz, writes its metadata.
update_comics.py Resumes every comic in a library from its metadata, on demand or on a schedule.
chapters.py Works out which file is which page and where chapters are; packs one .cbz per chapter.
adopt_comic.py Writes metadata for comics you already have, so they join without re-downloading.
run_plugin.py Runs a comic another downloader scrapes, through a plugin, and takes in what it fetched.
web_ui.py, web_page/ The optional web page update_comics.py --web serves.
comiclib/ Shared code; not run directly, but must sit beside the scripts.
reader/ A separate web reader for the library, with its own image (Reader).
config/ ComicScraper.json (settings), element_paths.json (extra XPaths), index/ (page records), plugins/ (Scraper Plugins).

Pages

Where did a README section go?

  • Home: The scripts
  • Installation and Quick Start: Requirements · Quick start · Priming comics to download elsewhere
  • Library Layout: Library layout
  • Adopting Comics: Adopting comics you already have
  • Running Unattended: Running unattended · Starting an update without waiting · Restarting without reaching the container · the exit code table
  • The Web Page: The web page
  • Docker: Running in Docker · Changing the scripts without rebuilding
  • Archives and ComicInfo: How the archives stay cheap to sync · ComicInfo.xml
  • Page Index and Alignment: Working out which file came from which page · Comics on WordPress: no walk needed · A page the comic's own links skip · A page the site itself has lost · When the names say nothing: lining up by when files were written · Numbering the files
  • Chapters: Chapters · Putting a boundary right by hand · Packing · Keeping chapters current
  • Settings and Metadata: Settings · The metadata file
  • Element Paths: Element paths · Adding a path for a new comic · Several pages on one address
  • Notes and Limits: Notes and limits
  • Contributing: Running the tests · Credits and license

Clone this wiki locally