github juanra/audiobook-forge v2.12.0

4 hours ago

Three fixes contributed by @JKamsker, plus CI and security automation.

Heads up: -j now actually limits concurrency

If you rely on the default configuration, this release will process fewer books at once than before, and that is the fix rather than a regression.

parallel_workers (and -j) were previously ignored. The value appeared in one log line at startup and nowhere else, while the semaphore gating book processing was built from max_concurrent_encodes alone. With its default of auto, that resolved to your CPU core count. So the tool would print "processing with 2 workers" and then run one book per core.

The configured worker count is now honoured as a ceiling: max_concurrent_encodes can lower it further, but can no longer raise it. With the default parallel_workers: 2, that means two books at a time.

To restore the previous level, raise -j or parallel_workers to your core count:

audiobook-forge build --root /path -j 8
processing:
  parallel_workers: 8    # clamped to 1-16

Fixed

-j did not limit how many books were processed at once (#27)
Described above. Thanks to @JKamsker for the fix.

Chapters in later M4B parts started too early (#28)
The running offset advanced by the previous part's last chapter end rather than by the file's duration. A chapter marker need not reach the end of the media, and the concat demuxer appends whole files, so trailing audio was dropped from the offset and the error accumulated across every part. Chapter lists are now paired with the duration they came from, making the two unable to drift apart. Thanks to @JKamsker for the fix.

Multi-disc audiobooks were split into one book per disc (#26)
A folder containing CD1/ and CD2/ produced two books with disc order lost, because a candidate folder was judged only on the files directly inside it. Subfolders are now folded into their parent when the parent has no direct audio and every subfolder is a numbered part folder forming a complete 1..n set, which leaves ordinary nested Author/Book libraries untouched. Thanks to @JKamsker for the fix.

Security

Updated time, bytes and anyhow to clear three advisories affecting the dependency tree: stack exhaustion parsing RFC 2822 input (RUSTSEC-2026-0009), an integer overflow in BytesMut::reserve (RUSTSEC-2026-0007), and unsoundness in Error::downcast_mut (RUSTSEC-2026-0190). Lockfile only, no API changes.

Internal

CI now runs formatting, clippy and the test suite on every push and pull request, alongside a security workflow (CodeQL, plus cargo-deny for advisories, licences, banned crates and source registries) that also runs weekly. The repository previously had no automated checks.

The documented -j range was corrected: the help text said 1-8 while the code clamps to 1-16.

Contributors

  • @JKamsker — the worker-limit fix (#27), the M4B chapter offset fix (#28), and multi-disc directory support (#26)

Full changelog: https://github.com/juanra/audiobook-forge/blob/main/CHANGELOG.md

Don't miss a new audiobook-forge release

NewReleases is sending notifications on new releases.