Releases: jarynclouatre/bindery
Release list
v3.3.1 — Fix Startup Crash When SKIP_CHOWN Unset
What's new
This is a bugfix release. entrypoint.sh crashed on startup with
SKIP_CHOWN: unbound variable for any deployment that did not explicitly
set the SKIP_CHOWN environment variable — which is the default for
almost everyone. The script runs under set -u, and the SKIP_CHOWN
check had no default, so the container exited before the app started.
SKIP_CHOWN now defaults to false, matching how PUID / PGID are
already handled. Setting SKIP_CHOWN=true still behaves exactly as
before.
Changes
- Fixed:
entrypoint.shstartup crash (SKIP_CHOWN: unbound variable) whenSKIP_CHOWNis not set — it now defaults tofalse, consistent with the existingPUID/PGIDpattern - Note: behaviour is unchanged when
SKIP_CHOWNis set explicitly
If you were affected, just pull the new image — no compose or config
changes needed.
v3.3.0 — PDF Support for Comics
What's new
Bindery now recognises .pdf as a comic input format. Drop a PDF into Comics_in alongside your .cbz / .cbr / .zip / .rar files and it gets picked up by both the poll scanner and the inotify watcher, then handed to KCC just like any other comic source.
A note on EPUBs since an issue mentioned them too: KCC does not accept EPUB as an input format (EPUB is one of its outputs). Graphic-novel EPUBs should go in Books_in — they'll be handled by the kepubify pipeline. They won't get KCC's image-optimisation treatment, but that's a KCC limitation, not something Bindery can route around.
Changes
- New:
.pdfadded to the comic input extension set — recognised by both poll-mode and inotify-mode watchers - Note: EPUBs continue to be handled by the books pipeline via kepubify; KCC does not accept EPUB as input
- Added: unit test covering PDF dispatch in
scan_directories
Existing setups need no changes — drop a PDF in Comics_in and it just works. Thanks to @ponchohoncho for the report (#X).
v3.2.0 — Optional chown Skip
What's new
By default, Bindery chowns its data folders on every container start so files end up owned by your PUID/PGID. That works everywhere a privileged container can write ownership — but on NFS shares mounted into unprivileged LXC containers, the kernel blocks chown even when normal reads and writes work fine. The result was Bindery aborting at startup over a step it didn't strictly need.
This release adds a SKIP_CHOWN environment variable to opt out. Set it to true in your compose file and the chown step is bypassed entirely — Bindery trusts that whatever ownership the volumes already have is good enough.
Changes
- New
SKIP_CHOWNenvironment variable — set totrueto skip the initialchownstep entirely - Useful for NFS/SMB mounts in unprivileged LXC containers, or any setup where the container can read and write but not change ownership
- Default behaviour is unchanged —
chownstill runs unlessSKIP_CHOWN=trueis explicitly set
Disabled by default. Existing setups need no changes. Thanks to @ponchohoncho for the report (#7).
v3.1.1 — Skip Dot-Folders
What's fixed
Syncthing (and similar sync tools) create hidden dot-folders inside watched directories — .stfolder, .stversions, etc. Bindery was scanning inside them and attempting to convert whatever files it found there.
Changes
- Any directory whose name starts with
.is now skipped universally in both poll and inotify modes — covers.stfolder,.stversions,.archive, and anything else like them
No config changes needed. Existing setups will pick this up automatically on container restart.
v3.1.0 — Preserve Originals
What's new
By default, Bindery deletes source files from Comics_in after a successful conversion. For most setups that's fine — but if you're running Bindery as part of a larger workflow and need the originals to stick around, there was no way to stop it.
This release adds a Preserve Originals toggle in Bindery Settings. When enabled, source comics are moved to Comics_in/.archive instead of deleted. The subfolder structure is mirrored — a file at Comics_in/Marvel/issue01.cbz archives to Comics_in/.archive/Marvel/issue01.cbz. The .archive folder is never scanned or reprocessed.
Changes
- New Preserve Originals toggle in Bindery Settings — moves source comics to
Comics_in/.archiveafter conversion instead of deleting them Comics_in/.archiveis excluded from both the poll scanner and the inotify watcher — files there are never reprocessed
Disabled by default. No config changes needed for existing setups. Has no effect on book conversions.
v3.0.2 — Fix premature processing of in-progress file transfers
What's fixed
Bindery was processing files that hadn't finished copying yet.
When dropping files into /Comics_in via FileBrowser, the file watcher would start a conversion before the transfer was complete. FileBrowser (and most copy tools) briefly pause between write chunks — if that pause hit Bindery's 2-second poll window, the file appeared stable when it wasn't. KCC then tried to convert a partial/corrupt CBZ, failed, and renamed it to .failed, which blocked FileBrowser from finishing the copy.
Changes
wait_for_file_readynow requires 3 consecutive stable size readings (~6 seconds) instead of 1 before passing a file to the converter- inotify mode now also handles
on_closed(IN_CLOSE_WRITE), which fires only after the writing process fully closes the file — a definitive "transfer complete" signal for clients like FileBrowser
No config changes needed. Existing setups will pick this up automatically on container restart.
v3.0.1 — Bug Fixes & Housekeeping
What's new
- Fixed: entrypoint.sh crashed on startup when PUID/PGID matched an existing system UID/GID
- Fixed: wait_for_file_ready waited up to 2s less than configured on odd timeout values
- Fixed: _notify used hardcoded fallback values instead of DEFAULT_CONFIG
- Improved: comic conversions now log STARTING when conversion begins, matching book log style
- Added: .dockerignore to reduce Docker build context
- Added: apprise to requirements-dev.txt so notification tests run in CI
- Added: 5 unit tests covering _notify paths
v3.0.0 — Status, File Browser & Notifications
What's new
- Added: Processing Status card — live table showing every conversion job with state, timestamps, duration, and a Retry button for failed files; history persists across restarts
- Added: File Browser card — browse and download files from Books Out and Comics Out directly from the WebUI; no Samba or SSH required
- Added: Notifications via Apprise — send push notifications on success and/or failure to ntfy, Discord, Slack, Telegram, Pushover, email, and 60+ other services
- Fixed: Save Configuration button moved below all settings cards so it clearly applies to both KCC and Bindery Settings
v2.8.2 — Inotify Initial Scan Fix
What's new
- Fixed: inotify watcher mode did not scan existing files on startup — files already sitting in Comics_in, Books_in, or Comics_raw when the container started were silently ignored; an initial scan now runs before the observer starts
v2.8.1 — Bug Fixes & Project Structure
What's new
- Fixed: Dockerfile was hardcoding pip dependencies instead of installing from requirements.txt — now uses COPY requirements.txt + pip install -r for proper layer caching
- Fixed: CI workflow hardcoded pip install flask pytest instead of using requirements-dev.txt
- Fixed: requirements-dev.txt only contained pytest — added flask and watchdog so it reflects what tests actually need
- Added: pyproject.toml with project metadata and pytest configuration