ComicRack Metadata Sync
A high-performance metadata sync plugin for ComicRack Community Edition that writes ComicInfo.xml directly to your CBZ files.
Why This Exists
ComicRack stores metadata in its internal database (ComicDB.xml) and writes some of it to ComicInfo.xml inside CBZ files. However, CR doesn't export everything (like custom fields), and its built-in export is slow.
This plugin solves both problems:
- Exports all metadata including custom values using an extended ComicInfo.xml schema
- Uses multi-threaded processing that's significantly faster than CR's native export
CR's built-in "Write Info to File":
- Processes files sequentially (one at a time)
- Makes CR sluggish while running
- Does not write all info to file
This plugin:
- Multi-threaded processing (4 parallel workers)
- Non-blocking - ComicRack stays responsive
- Progress bar with elapsed timer
- Skips unchanged files automatically
- Writes to SSD temp first, then copies to destination (faster for USB/HDD storage)
Features
- Export - Write CR metadata to CBZ files as ComicInfo.xml
- Import - Read ComicInfo.xml from CBZ files into CR (for migrating from other apps)
- Smart Skip - Automatically skips files where ComicInfo.xml is already identical
- Streaming I/O - Memory-efficient, handles large CBZ files without loading into RAM
- Cross-drive Support - Builds new CBZ on local temp (SSD), then copies to storage drive (HDD/USB)
- Status Tracking - Clears CR's "Modified Info" flag after successful sync
Requirements
- ComicRack Community Edition
- Python 3.10+
Installation
- Download the Release files from the repository.
- Install into ComicRack's script folder:
%APPDATA%\cYo\ComicRack Community Edition\Scripts\CompleteMetadata\ - Ensure Python 3.10+ is installed and accessible via
pythonw.exein your PATH. - Restart ComicRack
- The toolbar buttons should appear in the ComicRack UI.
Usage
Exporting (CR to CBZ) 
- Select the books you want to export
- Click "Sync: Export to CBZ" (or right-click menu)
- A progress window appears - click Start
- Wait for completion
- Back in CR, with the same books selected, click "Sync: Apply Status"
- This marks books as synced and clears the "Modified Info" flag
Importing (CBZ to CR) 
- Select the books you want to import metadata for
- Click "Sync: Read from CBZ"
- Wait for completion
- Click "Sync: Apply Status" to write the metadata into CR's database
Apply 
Sync: Apply Status looks for sync_results.json to import into CR. This file will have information about which comics had their information exported or which comics has information to import.
Files
| File | Description |
|---|---|
Package.py |
ComicRack plugin (IronPython) - handles UI and CR integration |
cr_sync_worker.py |
Python 3 worker - does the actual CBZ processing |
sync_results.json |
Temporary results file (auto-deleted after apply) |
sync_errors.log |
Error log for failed files |
sync.lock |
Lock file to prevent applying while sync is running |
Technical Details
- Uses
shutil.copyfileobj()instead ofzin.read()which would load entire images into RAM - Writes to
tempfile.NamedTemporaryFile()(usually on SSD), thenshutil.move()to destination. Huge help for slow USB/HDD storage. - Uses uncompressed storage since CBZ images are already JPEG/PNG compressed - no point recompressing
- Generates the XML first, then compares with existing
ComicInfo.xml. If identical, skips the entire archive rewrite. - Tkinter progress window runs on the main thread while workers run in background.
- Uses
shutil.move()which handles cross-drive moves.
ComicInfo.xml Schema
Based on the Anansi v2.0 schema with extensions:
- All standard metadata fields (Series, Title, Writer, etc.)
- Page information with dimensions and types
<CustomValues>section - Exports CR's custom fields<HasBeenRead>- Read status as a standard element
Troubleshooting
"Sync is still in progress"
The worker is still running. Wait for it to finish, or delete sync.lock if it crashed.