DrewThomasson/ebook2audiobook
43.4
Weak · 4 October 2026
19.9k
lines of production code
Python
primary language
1
measurement over time
What this system is
This system is an older codebase focused on text-to-speech capabilities, specifically utilizing the Piper TTS engine and supporting chapter-to-audio conversion workflows. Recent activity has centered on stabilizing the infrastructure by improving ROCm GPU detection, refining memory management, and fixing voice initialization bugs. The removal of legacy E2A-SML and Universal TTS Finetune components indicates a consolidation toward a more streamlined, reliable TTS service with better runtime configuration and progress feedback.
Narrated so far: 2026-09-26 – 2026-10-02; history before 2026-09-26 not narrated yet.
How it got here
Week 39 of 2026 (21 Sep – 27 Sep) — not summarised yet
- Removed dependency manifests for E2A-SML and Universal TTS Finetune components — The \requirements.txt\ files for the E2A-SML and Universal\_TTS\_Finetune components have been deleted, removing their pinned Python dependencies (including tokenizers, spacy, gradio, torch, faster\_whisper, and coqui-tts) from the repository. This change indicates these components are no longer managed via these local requirement files, likely due to a shift in how dependencies are handled or the removal of these specific component definitions. ((dependencies))
- Removal of the E2A-SML standalone component — The E2A-SML component, a standalone tool for analyzing English books to extract dialogue and speaker information for audiobook generation, has been removed. This change deletes the entire \components/E2A-SML\ directory, including its Dockerfile, Python source code (BookNLP integration, NER, coreference resolution), and documentation. Users can no longer use this separate utility to generate SML files for the main E2A application. (components)
- Updated progress message for chapter-to-audio conversion — The progress indicator displayed during the conversion of chapters to audio now shows 'Preparing the conversion...' instead of 'Preparing Chapters and sentences...'. (lib)
- Improved ROCm GPU detection and robust CPU baseline probing — The device installer now automatically detects and applies the HSA\_OVERRIDE\_GFX\_VERSION environment variable for AMD ROCm GPUs by executing a dedicated detection script before initializing the runtime, ensuring correct GPU identification. Additionally, CPU baseline probing for x86-64 features has been made more robust by running the check in a separate subprocess to avoid interpreter conflicts, with graceful fallbacks on failure. Package installation commands have also been updated to use the --reinstall-package flag for more precise dependency handling. (lib/classes)
- Automatic ROCm GPU configuration and improved Python installation reliability — The launchers now automatically detect ROCm GPU requirements and inject the necessary HSA\_OVERRIDE\_GFX\_VERSION environment variable, ensuring GPU access works out-of-the-box without manual configuration. On Windows, the Python installation process has been hardened to bypass unreliable PATH lookups by resolving the Python Install Manager and interpreter via absolute paths, preventing installation failures. On macOS/Linux, the script now uses uv to manage Python versions and automatically adds the user to required GPU groups if permissions are missing, while also fixing a bug where Calibre installation failed due to PATH issues. ((repo-wide))
- Improved TTS model loading progress feedback and memory management — The TTS engine loading process now provides more granular progress updates in the user interface, breaking down model initialization into distinct steps such as downloading voices, loading checkpoints, moving models to the target device, and verifying weights. To ensure these progress bars render correctly without interfering with other UI elements, the implementation temporarily manages Gradio's tqdm context specifically around the model construction phase. Additionally, memory handling during failed model loads has been refined to explicitly clear references and free VRAM/CPU memory immediately, preventing resource leaks that could occur when exceptions were previously propagated with full tracebacks. (lib/classes)
- Application version bumped to 26.9.27 — The Hugging Face Docker image now defaults to application version 26.9.27, updated from 26.9.26. This change affects the version identifier embedded in the container build. (dockerfiles)
- Progress tracking and voice selection behavior updates — The global progress bar in the Gradio interface now tracks tqdm progress by default (lib/gradio.py), while core functions retrieve the progress bar dynamically to support both GUI and headless modes (lib/core.py). Additionally, the voice selection UI now intelligently updates the selected voice for current blocks and the voice map when the available voice list changes, ensuring consistency between the user's selection and the underlying session data (lib/gradio.py). (lib)
- Version bump to 26.9.27 and HF token decryption moved to runtime — The application version has been updated to 26.9.27 across the Dockerfile, VERSION.txt, and compose files. Additionally, the logic to decrypt the Hugging Face token using Fernet has been moved from the module-level import scope in app.py to the runtime argument parsing block, ensuring the decryption occurs when the application starts rather than at import time. ((repo-wide))
This week
- Fix Piper TTS voice initialization and resource cleanup — Resolves an issue where the Piper text-to-speech engine failed to initialize or release resources correctly when switching voices. The change ensures that the processing directory is created only when necessary and validates that the zero-shot engine is available before attempting to use it, preventing errors during voice switching. (lib/classes)
- Fix Piper TTS voice initialization logic — Corrects the Piper text-to-speech engine's voice initialization by moving the creation of the processing directory to occur only when zero-shot synthesis is actually required, and refactors the conditional logic that determines whether to use zero-shot mode to be more concise and accurate. (lib/classes)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 43.
Lenses
- Code Health 67
- Architecture 100
- Maturity 52
- Readiness 25
- Security 59
Changes since last survey
- 300 commits — 295 feature/other, 5 fixes
By area
- (root) — 87 commits
- lib/gradio.py — 54 commits
- lib/core.py — 44 commits
- (repo) — 28 commits
- lib/header.css — 16 commits
- lib/conf.py — 13 commits
- lib/classes — 11 commits
- components/E2A-SML — 8 commits
- components/Universal_TTS_Finetune — 8 commits
- components/detect_gpu.py — 7 commits
- lib/init.py — 5 commits
- Notebooks/colab_ebook2audiobook.ipynb — 4 commits
- ebook2audiobook.egg-info/PKG-INFO — 3 commits
- lib/header.js — 3 commits
- components/sitecustomize.py — 2 commits
- tools/readme_i18n — 2 commits
- .github/workflows — 1 commit
- components/rocmfix.py — 1 commit
- dockerfiles/HuggingfaceDockerfile — 1 commit
- ebook2audiobook.egg-info/requires.txt — 1 commit
Notable commits
- fix: Fix Piper inline voice initialization and release v26.10.1
- fix: Fix UFT Docker startup dependency versions
- fix: Fix UFT one-epoch training across supported recipes
- fix: Fix UFT theme and CSS setup with Gradio 6
- fix: Revert "Fix Piper inline voice initialization and release v26.10.1"
- change: ..
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- change: ...
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
DrewThomasson/ebook2audiobook was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 4 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit d3ff5bc9272bab0f392fb847d186648c7fab998b — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b94e107d0cec.