Wires the commit-cadence policy to an actual reminder instead of a script nobody runs. - scripts/commit_check_notify.py: runs scripts/commit_check.sh (piped to bash -s so the script is never opened on the external volume), logs to logs/commit_check.log and posts a macOS notification via osascript when the tree is dirty. Defaults to --any (week's work) ; --age-only restores the >threshold behaviour; --no-notify for testing. - scripts/commit_check.sh: new --any mode (warn on any uncommitted change, ignoring age) for the weekly job. - LaunchAgent fires Sunday 18:00; launcher ~/.umbraaudio/umbra_commit_check.sh mirrors umbraweb_login.sh (cd project, export PATH, exec .venv/bin/python). The venv python is the only interpreter approved for the external volume, so a shell never reads a project file. - Verified under launchd: detects dirty tree, notification sent, exit 1; clean tree exits 0. Probe artifacts removed.
74 lines
2.4 KiB
Markdown
74 lines
2.4 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
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
|
|
bash scripts/download_models.sh # ~9 GB, targets ./models
|
|
```
|
|
|
|
2. **Qwen3-TTS** is a git submodule pinned to upstream commit `022e286`:
|
|
```bash
|
|
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:
|
|
```bash
|
|
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.
|