videovoice / pyproject.toml
github-actions[bot]
deploy: switch to chatterbox requirements @ d66b11b
fe88632
[project]
name = "videovoice"
version = "1.0.0"
description = "AI-powered short video translation with zero-shot voice cloning"
readme = "README.md"
license = "MIT"
requires-python = ">=3.10,<3.13"
dependencies = [
"openai>=2.30.0",
"requests>=2.33.0",
"python-dotenv>=1.2.2",
"pydub>=0.25.1",
"ffmpeg-python>=0.2.0",
"mlx-whisper>=0.4.3",
"tqdm>=4.67.3",
"fastapi>=0.135.2",
"uvicorn[standard]>=0.42.0",
"python-multipart>=0.0.22",
"yt-dlp>=2026.3.17",
"sse-starlette>=3.3.4",
"soundfile>=0.13.1",
"deep-translator>=1.11.4",
"demucs>=4.0.1",
"boto3>=1.42.82",
"torch==2.6.0",
"torchaudio==2.6.0",
"slowapi>=0.1.9",
"faster-whisper>=1.2.1",
"spaces>=0.48.3",
"openai-whisper>=20240930",
"gradio>=6.12.0",
"accelerate>=1.12.0",
"transformers>=4.57.3",
]
[project.optional-dependencies]
# HF Spaces install from requirements-{cbox,omni}.txt and ignore these.
# Locally: `uv sync --extra chatterbox` installs the PyPI chatterbox-tts
# (we skip-worktree the vendored ./chatterbox/ folder so it doesn't shadow
# the PyPI package). `--extra omnivoice` is heavier and optional.
chatterbox = ["chatterbox-tts>=0.1.7"]
omnivoice = ["omnivoice>=0.1.4"]
[tool.uv]
# Declare chatterbox and omnivoice extras as mutually exclusive so uv
# doesn't try to resolve them into one lockfile view.
conflicts = [
[{ extra = "chatterbox" }, { extra = "omnivoice" }],
]
override-dependencies = [
# onnxruntime 1.24.x metadata claims py3.10 support but no 3.10 wheels
# ship on PyPI — force resolution to the last version that has 3.10 wheels.
"onnxruntime<1.24",
# chatterbox-tts==0.1.7 pins gradio==6.8.0, but app.py needs >=6.12.0
# for gradio.Server. Override so the extras can coexist in a lockfile;
# gradio is only loaded by app.py (HF), so the local chatterbox install
# never exercises gradio code.
"gradio>=6.12.0",
]