Calibre-Web with more authority over your books
Calibre-Web Automated combines a browser library interface with ebook processing. The project's README describes watched-folder ingest, conversion, cover and metadata enforcement, duplicate management, processed-file backups and reader sync. It aims to reduce the need to run Calibre and Calibre-Web side by side.
That makes it relevant to self-hosters who want automation as well as browsing. It also means evaluating what happens to the files. According to the README, cover and metadata changes can be written into ebooks, duplicate management includes optional automatic resolution, and conversion can replace files. Keep a separate library backup and trial these operations on copies.
The README says originals processed by CWA are stored in /config/processed_books by default, with a setting to disable that behavior. Treat this as a documented recovery feature whose contents and restore process you still need to check.
What our recorded run establishes
Our recorded run took place on September 28, 2026, at commit 9805ac09e03359fecf12e23e2c112c019651f2d7. The sandbox used ghcr.io/astral-sh/uv:python3.12-bookworm, with 3 CPUs and 8 GB of memory. It was a source-checkout run, not a validated production deployment.
The stored checkout measurements were 1,197 files, 162,511 lines of source and 154.1 MB. The harness recorded 62 dependencies and 93 MB, and marked its 26-second install step successful. But the raw install tail shows python-ldap@3.4.8 failing to compile because lber.h was missing. We cannot use the step's exit status to claim that all dependencies installed.
The build-labeled step exited 0 in 2.779 seconds. Its recorded output is empty, so it supplies no evidence that a Docker image was built or that CWA started successfully. There is no recorded installed-binary check or measured ingest, conversion, restore or device-sync workload.
The test step exited 1 in 22.336 seconds. The pytest summary says 26 failed, 90 passed, 90 skipped, 46 errors in 19.11s. These are recorded summary counts, not independently reconciled unique coverage. The parser's stored total is 162, while the tail also contains collected 238 items / 14 errors. A pass percentage would misrepresent this record.
The failures include missing tabulate, a missing /config directory, imports reporting that cps is not a package, and an absent _timestamp_or_default attribute. Some failures named duplicate and queue tests, but import failures do not demonstrate that those product workflows malfunctioned. The log establishes an unsuccessful test execution in this sandbox; it does not isolate product defects from environment or test setup problems.
The pip-audit record lists zero findings and zero packages. With no demonstrated package coverage, it provides no basis for a clean dependency-security claim.
Check conversion results rather than the closing message
The README documents automatic ingest and conversion, with EPUB as the default conversion target. It labels ingest support as 27 formats and conversion support as 28 file types, although the displayed conversion list contains 29 extensions. Those are documentation claims with an internal count mismatch, not formats exercised in our run. The README also notes that .acsm requires an additional Calibre plugin.
A separate report gives a concrete conversion check to perform. In issue 1551, opened September 20, 2026, a user reports that Convert Library on v4.0.6 added no formats after ingest while logging success. The report attributes this to a removed temporary directory and subprocess failures falling through to success messages. This was not an observation from our sandbox.
PR 1552 proposes recreating the directory and reporting failed commands. In a September 29 comment, its author also reports reproducing the problem with the stock v4.0.8 image and testing the proposed replacement script against a scratch library. Those are contributor-reported results, not our tests. The supplied extract shows follow-up changes through October 4 but does not establish that the CWA pull request was merged or released. A merged reference to Calibre-Web-NextGen is a different repository.
Before bulk conversion, record the formats present for a few copied books. Run ingest and then Convert Library, check that the requested formats actually appear, and open the resulting files. A successful closing message alone cannot resolve the reported problem.
Ownership reports have a documented resolution
Issue 1472 concerns files whose ownership prevented metadata edits, deletion or directory moves on v4.0.6. It is closed as completed in the supplied source, rather than an unresolved issue.
The maintainer's September 28, 2026 comment says the fixes span v4.0.7 and v4.0.8: ingest runs as abc from v4.0.7, and the cover and metadata enforcer also runs as abc in v4.0.8. The comment says existing root-owned files still need a one-time ownership correction to the configured PUID and PGID. It also advises running manual calibredb commands as abc to avoid creating root-owned files.
The v4.0.7 release notes independently document the ingest change and an ownership upgrade note. Neither source proves that every storage configuration is trouble-free. After a trial import and metadata edit, check that CWA can still edit, move and delete the copied book.
Storage and proxy settings are part of setup
The README recommends Docker Compose and provides settings for PUID, PGID, timezone, the default web port of 8083 and an optional Hardcover token. Its library discovery supports one library per instance; it recommends parallel instances for separate libraries that you do not want to consolidate.
For NFS and SMB, the documented setting is NETWORK_SHARE_MODE=true. It disables WAL for metadata.db and app.db, skips recursive ownership changes and replaces filesystem-event watching with polling. The README describes slightly higher I/O and up to a few seconds of detection delay. These are documented tradeoffs, not latency measurements from our run. It also documents automatic polling selection on Docker Desktop and the override CWA_WATCH_MODE=poll.
For reverse proxies, CWA's documented default is to trust one proxy. The README's Cloudflare Tunnel followed by nginx example uses TRUSTED_PROXY_COUNT=2. Set the count for your actual chain; the documentation connects an incorrect count with repeated session-protection warnings and logins.
Kobo sync, KOReader progress sync, OAuth/OIDC and metadata providers are further reasons to evaluate CWA, but our run did not verify their configuration or behavior.
Read release fixes separately from our test result
The supplied v4.0.7 release notes describe access-control fixes for Kobo tokens, administrative service pages, internal endpoints and the single-book EPUB fixer. These are maintainer-reported fixes, not security findings from our sandbox. The notes also describe test isolation and CI fixes; their presence does not reconcile our local test failures.
The practical decision is whether CWA's documented automation is useful enough for you to validate on your own storage. Trial a copied library, inspect conversion output and ownership, check the processed originals, and perform a restore before making it responsible for your collection. Our recorded source run supports that evaluation process, but does not establish production readiness or a product-wide failure.

