-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
99 lines (91 loc) · 3.71 KB
/
Copy pathpyproject.toml
File metadata and controls
99 lines (91 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[project]
name = "musicvision"
version = "0.1.0"
description = "AI music video production pipeline: song → scenes → storyboard → video"
requires-python = ">=3.11"
license = "Apache-2.0"
license-files = ["LICENSE", "NOTICE", "THIRD-PARTY-NOTICES.md", "CLA.md"]
authors = [{ name = "Todd Green", email = "tsondo@gmail.com" }]
maintainers = [{ name = "Todd Green", email = "tsondo@gmail.com" }]
dependencies = [
# --- Core ---
"pydantic>=2.0",
"pyyaml>=6.0",
"rich>=13.0", # CLI pretty-printing & progress bars
# --- API ---
"fastapi>=0.110",
"uvicorn[standard]>=0.27",
"python-multipart>=0.0.7", # file uploads
# --- Audio ---
"librosa>=0.10", # BPM detection, audio analysis
"soundfile>=0.12", # audio I/O
# --- AI / ML (installed separately due to CUDA) ---
# torch, torchvision, torchaudio → install via pip with --index-url cu128
# flash_attn → NOT required; vendored DiT uses SDPA fallback
# FA2 lacks sm_120 (Blackwell) kernels as of Feb 2026
# transformers → for Whisper
# diffusers → for FLUX
# accelerate → for model offloading
# safetensors → for weight loading
# --- LLM ---
"anthropic>=0.40", # Claude API (cloud backend)
"openai>=1.0", # OpenAI-compatible client — used for local vLLM backend
# --- Utilities ---
"Pillow>=10.0",
"numpy>=1.26",
"torchcodec>=0.10.0",
]
[project.optional-dependencies]
ml = [
"torch>=2.7",
"torchvision>=0.22",
"torchaudio>=2.7",
"transformers>=4.40",
"diffusers>=0.30",
"accelerate>=0.30",
"safetensors>=0.4",
"sentencepiece>=0.2", # T5 tokenizer for HuMo/Wan
"ftfy>=6.0", # text cleaning for Wan-AI tokenizer
"regex>=2023.0", # Wan-AI tokenizer uses regex (not re)
"einops>=0.7", # Wan-AI VAE uses einops.rearrange
# --- Quantization (FLUX fp8/int8 on limited VRAM) ---
"optimum-quanto>=0.2", # fp8/int8 quantization for FLUX transformer
# --- HuMo weight management ---
"huggingface-hub>=0.21", # hf_hub_download / snapshot_download for weight registry
"gguf>=0.6", # GGUF dequantization for GGUFLoader (Q6_K, Q4_K_M)
# --- Demucs vocal separation ---
# Pin to tested v4.0.1 from StemForge (matches demucs.apply/demucs.audio API used here).
# demucs.pretrained.get_model auto-downloads weights (~300 MB) on first use.
"demucs @ git+https://github.com/facebookresearch/demucs.git@v4.0.1",
"julius==0.2.7", # demucs dep: efficient audio resampling (julius.resample_frac)
"lameenc==1.8.1", # demucs dep: optional mp3 encode
"openunmix==1.3.0", # demucs dep: UMX separation backend
"dora-search==0.1.12", # demucs dep: experiment runner
"submitit==1.5.4", # demucs dep
"diffq==0.2.4", # required by mdx_extra_q only (quantised MDX model)
# --- MelBandRoFormer vocal separation ---
# audio-separator must be installed separately with GPU support:
# pip install "audio-separator[gpu]"
# (not listed here because it pulls onnxruntime-gpu which conflicts on some systems)
]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"httpx>=0.27", # async test client for FastAPI
"ruff>=0.4",
]
[project.scripts]
musicvision = "musicvision.cli:main"
[tool.ruff]
target-version = "py311"
line-length = 120
[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]