B.D. Murphy 6c3f385b73 Untrack the 55 voice-lab renders; the .pt matrix stays
.gitignore alone does not untrack anything already committed, so the previous
commit stopped future tracking but left all 55 WAVs in the index and in history.
This removes them from the tree so a fresh clone no longer carries 25 MB of
audio.

The files themselves are untouched: moved to tmp_out/author_lab_wav/ and
tmp_out/author_lab_wav_cliff/, which is git-ignored, so the samples are still
listenable on this machine. They are regenerable at any time from the tracked
scripts:

  backup/author_voice_lab/scripts/voice_lab.py     # the 45-sample sweep
  backup/author_voice_lab/scripts/verify_cliff.py  # the 10 cliff samples

Nothing load-bearing was removed. Still tracked:
  backup/author_voice_matrix/**/*.pt        author_v1.pt + author_v2.pt (62 KB)
  backup/author_voice_matrix/manifest.json   SHA-256 + provenance per file
  backup/author_voice_matrix/RESTORE.md
  backup/author_voice_lab/FINDINGS.md, *.json, scripts/

The .pt files stay tracked on purpose: they are 62 KB, they are the actual
voice identity, and the matrix is the thing that must survive. The WAVs are
derived from it.

Caveat worth stating: the 25 MB still exists in git history from the earlier
commit, so the repository object store does not shrink until that commit is
garbage-collected. A future push carries them over the wire once; after that
no new clone pays for them. Rewriting published history to purge them was
deliberately not attempted.
2026-10-17 01:04:50 -07:00

UmbraAudio

Quality-first multi-pass audiobook generation from English manuscripts.

Features

  • 5-pass pipeline: Analysis → Voice Design → Mapping → Test → Generate
  • Multi-engine TTS: Chatterbox (primary), Qwen3-TTS (secondary)
  • LLM-enhanced: BookNLP for NLP, LLM for profiling/emotion/pronunciation
  • Web review: FastAPI + HTMX at checkpoints for human approval

Quick Start

python -m umbraaudio.cli init <manuscript.epub> --name 'My Book'
python -m umbraaudio.cli analyze
python -m umbraaudio.cli voices
python -m umbraaudio.cli review

Requirements

  • Python 3.11+
  • NVIDIA GPU with CUDA support (RTX 3060 or better recommended)
  • ffmpeg

Development

pip install -e ".[dev]"
ruff check umbraaudio/
pytest tests/ -v

Commit cadence: commit at least once every Sunday. Never leave a week (let alone a month) of work uncommitted — a single accidental git checkout on 2026-09-20 wiped out a month of changes to umbraaudio/web/routes.py. See AGENTS.md → Commit Cadence.

scripts/commit_check.sh enforces the nudge: it exits non-zero once the tree has been dirty longer than a week. The LaunchAgent com.umbraaudio.commitcheck runs it every Sunday at 18:00 and posts a macOS notification when there is uncommitted work.

scripts/commit_check.sh            # warn if dirty > 7 days
scripts/commit_check.sh --days 3   # tighter threshold
scripts/commit_check.sh --any      # warn on any uncommitted change

Rebuilding from source

The repo tracks source only; large runtime data is reconstructed as needed.

  1. Models: weights are not committed (see .gitignore). Download them:

    bash scripts/download_models.sh   # ~9 GB, targets ./models
    
  2. Qwen3-TTS is a git submodule pinned to upstream commit 022e286:

    git submodule update --init --recursive
    

    The tts_server/web-demo backend includes a local UI customization to qwen_tts/cli/demo.py. It is preserved as a patch — reapply it after checking out the submodule:

    cd Qwen3-TTS && git apply ../scripts/qwen3_tts_demo_umbra_patch.patch
    
  3. Environment: copy/keep .env (contains secrets) and set UMBRA_TTS__* model paths under models/.

Book projects (e.g. DealHunterShip_...) are committed separately under their own project directories and are not part of this program repository.

Description
Quality-first multi-pass audiobook generation pipeline (5-pass: Analysis -> Voice Design -> Mapping -> Test -> Generate). FastAPI+HTMX review UI, Edge-TTS/Qwen3-TTS multi-engine voice, SQLite state.
Readme Apache-2.0 37 MiB
Languages
Python 84.8%
HTML 11.4%
Shell 3%
PLpgSQL 0.7%