-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
172 lines (158 loc) · 5.76 KB
/
Copy pathpyproject.toml
File metadata and controls
172 lines (158 loc) · 5.76 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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
[project]
name = "eluate"
version = "0.0.3"
description = "Remove background music from videos - for accessibility and personal use"
readme = "README.md"
requires-python = ">=3.10"
# PEP 639 license declaration: SPDX expression + license-files glob.
# The bundled eluate/_vendor/mss_training/LICENSE is shipped via
# package-data (see [tool.setuptools.package-data]) and does not need
# to be listed here.
license = "MIT"
license-files = ["LICENSE"]
authors = [
{name = "anaxoniclabs"}
]
keywords = [
"video",
"audio",
"music-removal",
"documentary",
"ai",
"bandit",
"accessibility",
"audio-processing",
"source-separation",
]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: End Users/Desktop",
# License is declared via PEP 639 SPDX expression above — the
# corresponding classifier is deprecated and intentionally omitted.
"Operating System :: MacOS",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Multimedia :: Sound/Audio :: Analysis",
"Topic :: Multimedia :: Video",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
]
dependencies = [
# Core CLI & UI
"rich>=13.0.0",
# Audio processing
"torch>=2.1.0",
"torchaudio>=2.1.0",
"numpy>=1.24.0",
"scipy>=1.11.0",
"librosa>=0.10.0",
"soundfile>=0.12.0",
"pyyaml>=6.0",
# Bandit v2 model components
"einops>=0.7.0",
"rotary-embedding-torch>=0.5.0",
"transformers>=4.35.0",
"huggingface-hub>=0.23.0",
# Vendor dependencies (MSS-Training inference)
"omegaconf>=2.2.0",
"ml-collections>=1.0.0",
"tqdm>=4.60.0",
"beartype>=0.14.0",
"spafe>=0.3.0", # Filterbank utils pulled in by the vendor framework's import graph
]
[project.urls]
Homepage = "https://github.com/anaxoniclabs/ELUATE"
Repository = "https://github.com/anaxoniclabs/ELUATE"
Issues = "https://github.com/anaxoniclabs/ELUATE/issues"
Documentation = "https://github.com/anaxoniclabs/ELUATE/blob/main/docs/api.md"
Changelog = "https://github.com/anaxoniclabs/ELUATE/blob/main/CHANGELOG.md"
[project.optional-dependencies]
dev = [
"pytest>=7.0.0",
"pytest-cov>=4.0.0",
"ruff>=0.4.0",
"mypy>=1.0.0",
]
# CPU-only extras for users on older Macs or systems without CUDA/MPS.
# Installing this extra pins torch wheels without bundled CUDA. Use
# ``pip install 'eluate[cpu]'`` for a ~1 GB smaller install footprint.
cpu = [
"torch>=2.1.0",
"torchaudio>=2.1.0",
]
train = [
# Only needed if training models (not for CLI usage)
"wandb>=0.15.0",
"auraloss>=0.4.0",
"pytorch-lightning>=2.0.0",
"accelerate>=0.25.0",
"loralib>=0.1.0",
]
[project.scripts]
eluate = "eluate.cli:main"
[build-system]
# PEP 639 license expression + license-files require setuptools 77+.
requires = ["setuptools>=77.0"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["."]
include = ["eluate*"]
# Explicit: never package the top-level vendored submodule into the wheel —
# it's a separate install concern and shouldn't ride inside the distribution.
# The runtime ships the slim eluate/_vendor/ subset instead.
exclude = ["vendor*", "tests*", "docs*", "scripts*"]
# Ship the upstream LICENSE and attribution NOTICE next to the bundled
# bandit_v2 code. Required by MIT redistribution terms.
# Ship the bundled model config YAML so a `pip install eluate` can find
# it via importlib.resources without a separate install step.
[tool.setuptools.package-data]
"eluate._vendor.mss_training" = ["LICENSE", "NOTICE"]
"eluate.configs" = ["*.yaml"]
[tool.bandit]
# B301 (pickle) / B614 (torch.load): we use torch.load(weights_only=False)
# with SHA-256 gating — see the explicit note at the torch.load call
# site in eluate/core/separator.py.
# B404 / B603 (subprocess): all subprocess calls are list-argv, no shell=True.
# B607 (partial executable path): ffmpeg and vm_stat are resolved via PATH
# on purpose — we want the user's installed binary, not a hard-coded path.
# B110 (try/except/pass): telemetry and device-detection fall back silently
# on any failure by design (must never break a run).
# B310 (urlopen): URLs are pinned constants in eluate/utils/paths.py and
# every downloaded file is SHA-256-verified via eluate/utils/download.py.
skips = ["B101", "B110", "B301", "B310", "B404", "B603", "B607", "B614"]
exclude_dirs = ["eluate/_vendor"]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
[tool.ruff]
line-length = 100
target-version = "py310"
# eluate/_vendor/ is a frozen third-party copy shipped as-is.
extend-exclude = ["eluate/_vendor"]
[tool.ruff.lint]
select = ["E", "F", "W", "I"]
ignore = ["E501"] # line-length enforced by formatter, not linter
[tool.ruff.lint.per-file-ignores]
# warnings.filterwarnings() must precede imports to suppress spurious logs
"eluate/cli.py" = ["E402"]
[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true
warn_unused_ignores = true
warn_return_any = false
check_untyped_defs = true
# vendor/ contains third-party code we don't control;
# eluate/_vendor/ is a frozen subset of the same shipped in the wheel.
exclude = ["vendor/", "eluate/_vendor/"]
# ``exclude`` only stops mypy from picking these as roots — it still
# follows first-party imports *into* the vendored package, flooding the
# report with ~20 third-party errors that bury the real ones in our code.
# ``follow_imports = skip`` makes mypy treat the vendored module as opaque
# so only first-party type errors surface.
[[tool.mypy.overrides]]
module = "eluate._vendor.*"
follow_imports = "skip"
ignore_errors = true