The UmbraAudio side of the cross-machine contract: this node registers with the UmbraTrans controller, polls for jobs, claims them under a lease, and writes artifacts back over NFS. * `umbraaudio/cluster/` - configuration, PostgreSQL access, node registration and heartbeat, the job queue, artifact storage and NFS mount management. * `scripts/cluster_worker.py` - the CLI: `worker`, `check-cluster`, `register-node`. * `scripts/backup_system.sh` / `scripts/verify_backup.sh` - whole-system backup and integrity verification. * `.env` - the `UMBRA_CLUSTER__*` settings. `UMBRA_CLUSTER__PG_PASSWORD` is deliberately empty; the password comes from the environment, not from a committed file. `k3s-agent.yaml` is NOT committed: it contains a K3s server join token. It is now gitignored, and the token should be rotated if that file has ever left this machine. ruff clean on the whole package.
102 lines
1.9 KiB
TOML
102 lines
1.9 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "umbraaudio"
|
|
version = "0.1.0"
|
|
description = "Quality-first multi-pass audiobook generation from manuscripts"
|
|
readme = "README.md"
|
|
license = "MIT"
|
|
requires-python = ">=3.11"
|
|
authors = [{ name = "UmbraAudio" }]
|
|
keywords = ["audiobook", "tts", "text-to-speech", "narration"]
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Multimedia :: Sound/Audio :: Speech",
|
|
]
|
|
|
|
dependencies = [
|
|
# CLI
|
|
"click>=8.1",
|
|
"rich>=13.0",
|
|
|
|
# Database
|
|
"aiosqlite>=0.19",
|
|
"asyncpg>=0.29",
|
|
|
|
# Parsers
|
|
"ebooklib>=0.18",
|
|
"beautifulsoup4>=4.12",
|
|
"PyMuPDF>=1.23",
|
|
"python-docx>=1.0",
|
|
|
|
# NLP / Analysis
|
|
"booknlp>=1.0",
|
|
|
|
# LLM clients
|
|
"openai>=1.10",
|
|
"httpx>=0.25",
|
|
|
|
# TTS engines
|
|
"qwen-tts>=0.1",
|
|
"edge-tts>=6.1",
|
|
"torch>=2.6",
|
|
"torchaudio>=2.6",
|
|
|
|
# Audio processing
|
|
"librosa>=0.10",
|
|
"soundfile>=0.12",
|
|
"pydub>=0.25",
|
|
|
|
# Quality metrics
|
|
"speechmos>=0.0.1",
|
|
"openai-whisper>=20231117",
|
|
"speechbrain>=0.5",
|
|
|
|
# Web review UI
|
|
"fastapi>=0.104",
|
|
"uvicorn[standard]>=0.24",
|
|
"jinja2>=3.1",
|
|
"python-multipart>=0.0.6",
|
|
|
|
# Utilities
|
|
"numpy>=1.24",
|
|
"pydantic>=2.5",
|
|
"pydantic-settings>=2.1",
|
|
"psutil>=5.9",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=7.4",
|
|
"pytest-asyncio>=0.21",
|
|
"pytest-cov>=4.1",
|
|
"ruff>=0.1",
|
|
"mypy>=1.7",
|
|
]
|
|
|
|
[project.scripts]
|
|
umbraaudio = "umbraaudio.cli:main"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["umbraaudio"]
|
|
|
|
[tool.ruff]
|
|
target-version = "py311"
|
|
line-length = 100
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "N", "W", "UP", "B", "A", "SIM", "TCH"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.11"
|
|
strict = true
|
|
plugins = ["pydantic.mypy"]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
asyncio_mode = "auto"
|