Two front-ends, one toolkit
The Lazarus application is the reference implementation; the Flutter port reuses the same documented behaviour and ships to mobile. Both expose the same commands in headless mode.
Lazarus (Qt6) application
The original comic manager: a two-pane browser with thumbnails, an in-place page editor with staged changes, a volume sequence builder, a job monitor and internet cover search.
- Linux and Windows builds from one codebase
- ZIP operations entirely in RAM — no temp files
- CLI mode inside the same binary
Flutter port
A mobile-first rewrite with the same engine semantics, plus SMB share browsing so a library can live on a NAS and be edited from a phone or tablet.
- Android, Linux and Windows
- SMB2/3 shares with safe replace-on-write
- Batch edit, page editor, merge, convert, validate
What it does
Every operation is per-file safe: one broken archive never aborts a
batch, failures are reported per file, and originals are kept as
*_OLD.cbz unless deletion is requested.
Validate
A deep check: the archive must be a valid ZIP and every image entry must decode. Pages are checked in parallel with identical results at any thread count.
Convert to WebP
Re-encode at quality 75, keeping the WebP version only when it is smaller. Existing WebP pages stay byte-identical, pages are renumbered, ComicInfo.xml is handled explicitly.
CBR → CBZ
RAR archives are read through libarchive and rewritten as CBZ entirely in memory. Sources are kept unless you ask for them to be deleted; .cbr previews are read-only.
Merge chapters into volumes
Series - 0001.cbz becomes
Series V001.cbz, with chapters-per-volume derived
from the existing volumes or set by hand. Volumes build in
parallel; a failed run rolls its own output back and never
touches files that predate it.
Page editor
Resize, adjust colours (invert, grayscale, sepia, RGB gains, saturation, contrast, brightness, gamma) and split pages — staged in memory and written only when you save.
Batch page edit
Apply the same resize, colour pipeline and split to a whole selection of archives, one worker per core, with a live preview of the first page.
ComicInfo.xml
View, edit, remove or generate the metadata embedded in an archive, per file or across a selection.
Internet image search
Search key-less sources (Openverse, Wikimedia Commons, museum collections, and more) for a cover and stage it as a new first page. Nothing is written until you save.
Headless CLI
validate, convert-webp,
merge and cbr-to-cbz with a strict
exit-code contract (0 success, 1 runtime error, 2 usage error)
for scripting and cron jobs.
Install
Prebuilt binaries come from the release workflow; the Arch package and source builds cover the rest. Optional runtime dependencies (libwebp, libarchive, OpenSSL) are loaded dynamically and only needed by the features that use them.
From the releases page
Lazarus build for Linux and the Flutter port for Linux, Windows and Android.
# Linux tarball
tar xf cbzmanager-*-linux-x86_64.tar.gz
sudo cp -r usr /
cbzmanager --version
Build a package
Uses the PKGBUILD in pkg/.
# from the repository root make pkg sudo pacman -U cbzmanager-*.pkg.tar.zst
Build it yourself
Lazarus 2.2+/FPC 3.2+ for the desktop app, Flutter for the port.
make release # Lazarus, Linux make test # FPCUnit suite cd flutter/app && flutter build apk
Command line
The same operations without a GUI. Flags may precede or follow the
directory; --threads 0 means automatic.
$ cbzmanager validate "/library/Saga" Checking 12 CBZ file(s)... OK Saga - 0001.cbz (24 image(s)) FAIL Saga - 0007.cbz: 23/24 images valid Valid: 11 Invalid: 1 Total: 12 $ cbzmanager convert-webp "/library/Saga" --delete Found 12 CBZ file(s) Saga - 0001.cbz: 24 page(s) converted Summary: Converted: 12 Skipped: 0 $ cbzmanager merge "/library/Saga" --chapters-per-volume 7 Writing volume 1/3 Writing volume 2/3 Writing volume 3/3 Saga: 3 volume(s) created $ cbzmanager cbr-to-cbz /library/old --delete Found 2 CBR file(s) old - 01.cbr: 20 page(s) -> .cbz Summary: Converted: 2 Skipped: 0
The Flutter port exposes the same four commands through
dart run bin/cbzmanager.dart <command> with the same
exit codes; run it with --help for the port's own
summary.
Built to be trusted with a library
In RAM, always
Archives are read, transformed and rewritten in memory; the only
disk writes are the final file and the optional
*_OLD.cbz backup. Failures restore the original
instead of leaving a half-written book.
Deterministic parallelism
Workers claim inputs and fill their own result slots, so the output is byte-identical whether you run one thread or eight. The test suites assert exactly that.
Documented parity
Behaviour follows a Python reference CLI and the Lazarus application, including the intentional divergences — all recorded in PARITY.md.
Tested on every push
FPCUnit for the Lazarus side and the Flutter suite (unit, service, widget and CLI integration tests, with live-SMB tests behind a flag) run in CI, together with formatting and static analysis.