yt-dbl 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- yt_dbl-1.0.0/.coveragerc +14 -0
- yt_dbl-1.0.0/.env.example +4 -0
- yt_dbl-1.0.0/.github/workflows/ci.yml +68 -0
- yt_dbl-1.0.0/.github/workflows/release.yml +43 -0
- yt_dbl-1.0.0/.gitignore +14 -0
- yt_dbl-1.0.0/.pre-commit-config.yaml +50 -0
- yt_dbl-1.0.0/CHANGELOG.md +474 -0
- yt_dbl-1.0.0/PKG-INFO +364 -0
- yt_dbl-1.0.0/README.md +331 -0
- yt_dbl-1.0.0/justfile +87 -0
- yt_dbl-1.0.0/mypy.ini +52 -0
- yt_dbl-1.0.0/pyproject.toml +76 -0
- yt_dbl-1.0.0/pytest.ini +16 -0
- yt_dbl-1.0.0/ruff.toml +91 -0
- yt_dbl-1.0.0/src/yt_dbl/__init__.py +4 -0
- yt_dbl-1.0.0/src/yt_dbl/cli.py +281 -0
- yt_dbl-1.0.0/src/yt_dbl/config.py +169 -0
- yt_dbl-1.0.0/src/yt_dbl/models/__init__.py +12 -0
- yt_dbl-1.0.0/src/yt_dbl/models/manager.py +152 -0
- yt_dbl-1.0.0/src/yt_dbl/models/registry.py +128 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/__init__.py +23 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/assemble.py +321 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/base.py +114 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/download.py +167 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/runner.py +197 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/separate.py +161 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/synthesize.py +383 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/transcribe.py +458 -0
- yt_dbl-1.0.0/src/yt_dbl/pipeline/translate.py +266 -0
- yt_dbl-1.0.0/src/yt_dbl/py.typed +0 -0
- yt_dbl-1.0.0/src/yt_dbl/schemas.py +179 -0
- yt_dbl-1.0.0/src/yt_dbl/utils/__init__.py +0 -0
- yt_dbl-1.0.0/src/yt_dbl/utils/audio.py +105 -0
- yt_dbl-1.0.0/src/yt_dbl/utils/audio_processing.py +227 -0
- yt_dbl-1.0.0/src/yt_dbl/utils/languages.py +81 -0
- yt_dbl-1.0.0/src/yt_dbl/utils/logging.py +248 -0
- yt_dbl-1.0.0/src/yt_dbl/utils/memory.py +45 -0
- yt_dbl-1.0.0/tests/__init__.py +1 -0
- yt_dbl-1.0.0/tests/conftest.py +309 -0
- yt_dbl-1.0.0/tests/e2e/__init__.py +5 -0
- yt_dbl-1.0.0/tests/e2e/conftest.py +17 -0
- yt_dbl-1.0.0/tests/e2e/test_e2e_download.py +143 -0
- yt_dbl-1.0.0/tests/e2e/test_e2e_pipeline.py +102 -0
- yt_dbl-1.0.0/tests/e2e/test_e2e_separate.py +137 -0
- yt_dbl-1.0.0/tests/e2e/test_e2e_transcribe.py +126 -0
- yt_dbl-1.0.0/tests/integration/__init__.py +1 -0
- yt_dbl-1.0.0/tests/integration/test_cli.py +240 -0
- yt_dbl-1.0.0/tests/integration/test_download.py +203 -0
- yt_dbl-1.0.0/tests/integration/test_runner.py +353 -0
- yt_dbl-1.0.0/tests/unit/__init__.py +1 -0
- yt_dbl-1.0.0/tests/unit/test_assemble.py +632 -0
- yt_dbl-1.0.0/tests/unit/test_audio.py +162 -0
- yt_dbl-1.0.0/tests/unit/test_audio_processing.py +241 -0
- yt_dbl-1.0.0/tests/unit/test_config.py +160 -0
- yt_dbl-1.0.0/tests/unit/test_logging.py +206 -0
- yt_dbl-1.0.0/tests/unit/test_memory.py +55 -0
- yt_dbl-1.0.0/tests/unit/test_model_manager.py +119 -0
- yt_dbl-1.0.0/tests/unit/test_model_registry.py +127 -0
- yt_dbl-1.0.0/tests/unit/test_schemas.py +229 -0
- yt_dbl-1.0.0/tests/unit/test_separate.py +236 -0
- yt_dbl-1.0.0/tests/unit/test_synthesize.py +391 -0
- yt_dbl-1.0.0/tests/unit/test_transcribe.py +605 -0
- yt_dbl-1.0.0/tests/unit/test_translate.py +373 -0
- yt_dbl-1.0.0/uv.lock +2586 -0
yt_dbl-1.0.0/.coveragerc
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [master]
|
|
8
|
+
workflow_call:
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
UV_TORCH_BACKEND: cpu
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
quality:
|
|
19
|
+
name: Lint & Type Check
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- uses: astral-sh/setup-uv@v5
|
|
25
|
+
with:
|
|
26
|
+
enable-cache: true
|
|
27
|
+
cache-dependency-glob: uv.lock
|
|
28
|
+
|
|
29
|
+
- name: Install dependencies
|
|
30
|
+
run: uv sync --python 3.12 --frozen
|
|
31
|
+
|
|
32
|
+
- name: Ruff lint
|
|
33
|
+
run: uv run ruff check src/ tests/
|
|
34
|
+
|
|
35
|
+
- name: Ruff format
|
|
36
|
+
run: uv run ruff format --check src/ tests/
|
|
37
|
+
|
|
38
|
+
- name: Mypy
|
|
39
|
+
run: uv run mypy src/ tests/
|
|
40
|
+
|
|
41
|
+
test:
|
|
42
|
+
name: Test
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
|
|
47
|
+
- uses: astral-sh/setup-uv@v5
|
|
48
|
+
with:
|
|
49
|
+
enable-cache: true
|
|
50
|
+
cache-dependency-glob: uv.lock
|
|
51
|
+
|
|
52
|
+
- name: Install dependencies
|
|
53
|
+
run: uv sync --python 3.12 --frozen
|
|
54
|
+
|
|
55
|
+
- name: Run unit & integration tests
|
|
56
|
+
run: >-
|
|
57
|
+
uv run pytest tests/unit/ tests/integration/
|
|
58
|
+
-n auto
|
|
59
|
+
--cov --cov-report=xml --cov-report=term-missing
|
|
60
|
+
-p no:randomly
|
|
61
|
+
|
|
62
|
+
- name: Upload coverage
|
|
63
|
+
if: ${{ !cancelled() }}
|
|
64
|
+
uses: actions/upload-artifact@v4
|
|
65
|
+
with:
|
|
66
|
+
name: coverage-report
|
|
67
|
+
path: coverage.xml
|
|
68
|
+
retention-days: 7
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master]
|
|
6
|
+
|
|
7
|
+
concurrency:
|
|
8
|
+
group: release
|
|
9
|
+
cancel-in-progress: false
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
ci:
|
|
13
|
+
name: CI
|
|
14
|
+
uses: ./.github/workflows/ci.yml
|
|
15
|
+
|
|
16
|
+
release:
|
|
17
|
+
name: Semantic Release
|
|
18
|
+
needs: ci
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
permissions:
|
|
21
|
+
id-token: write
|
|
22
|
+
contents: write
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
with:
|
|
26
|
+
fetch-depth: 0
|
|
27
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
28
|
+
|
|
29
|
+
- uses: actions/setup-python@v5
|
|
30
|
+
with:
|
|
31
|
+
python-version: "3.12"
|
|
32
|
+
|
|
33
|
+
- uses: astral-sh/setup-uv@v5
|
|
34
|
+
|
|
35
|
+
- name: Semantic Release
|
|
36
|
+
id: release
|
|
37
|
+
uses: python-semantic-release/python-semantic-release@v9.21.0
|
|
38
|
+
with:
|
|
39
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
40
|
+
|
|
41
|
+
- name: Publish to PyPI
|
|
42
|
+
if: steps.release.outputs.released == 'true'
|
|
43
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
yt_dbl-1.0.0/.gitignore
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.15.0
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff
|
|
6
|
+
args: [--fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
10
|
+
rev: v1.19.1
|
|
11
|
+
hooks:
|
|
12
|
+
- id: mypy
|
|
13
|
+
additional_dependencies:
|
|
14
|
+
- pydantic>=2.12.5
|
|
15
|
+
- pydantic-settings>=2.12
|
|
16
|
+
- typer>=0.21.1
|
|
17
|
+
- rich>=14.3.2
|
|
18
|
+
- anthropic>=0.78
|
|
19
|
+
- numpy>=2.3
|
|
20
|
+
- soundfile>=0.13
|
|
21
|
+
args: [--config-file=mypy.ini]
|
|
22
|
+
pass_filenames: false
|
|
23
|
+
|
|
24
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
25
|
+
rev: v6.0.0
|
|
26
|
+
hooks:
|
|
27
|
+
- id: trailing-whitespace
|
|
28
|
+
- id: end-of-file-fixer
|
|
29
|
+
- id: check-yaml
|
|
30
|
+
- id: check-json
|
|
31
|
+
- id: check-merge-conflict
|
|
32
|
+
- id: debug-statements
|
|
33
|
+
|
|
34
|
+
- repo: https://github.com/compilerla/conventional-pre-commit
|
|
35
|
+
rev: v4.3.0
|
|
36
|
+
hooks:
|
|
37
|
+
- id: conventional-pre-commit
|
|
38
|
+
stages: [commit-msg]
|
|
39
|
+
args:
|
|
40
|
+
- feat
|
|
41
|
+
- fix
|
|
42
|
+
- refactor
|
|
43
|
+
- style
|
|
44
|
+
- build
|
|
45
|
+
- ci
|
|
46
|
+
- docs
|
|
47
|
+
- test
|
|
48
|
+
- perf
|
|
49
|
+
- chore
|
|
50
|
+
- revert
|
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## v1.0.0 (2026-02-06)
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
- Add missing __init__.py to models package
|
|
9
|
+
([`e4c4b5b`](https://github.com/brolnickij/yt-dbl/commit/e4c4b5be5ab1a9b7ebeef2a205aa1facfd0d5c37))
|
|
10
|
+
|
|
11
|
+
- Add sidechain ducking and limiter to reduce robotic artifacts in mixed audio
|
|
12
|
+
([`ac60ce0`](https://github.com/brolnickij/yt-dbl/commit/ac60ce081a49693dd56514c2ae2a4e86b0a50f2d))
|
|
13
|
+
|
|
14
|
+
- Allow lazy torch import in model manager lint config
|
|
15
|
+
([`110a3ca`](https://github.com/brolnickij/yt-dbl/commit/110a3ca23573a55e72decb68d69a4ebb54921c13))
|
|
16
|
+
|
|
17
|
+
- Correct TTS sample rate from 12kHz to 24kHz (critical audio fix)
|
|
18
|
+
([`693e5db`](https://github.com/brolnickij/yt-dbl/commit/693e5dbdbf4643b12a657f5013ffd84524a0f409))
|
|
19
|
+
|
|
20
|
+
The Qwen3-TTS model outputs audio at 24000 Hz (model.sample_rate), but we were writing WAV files at
|
|
21
|
+
12000 Hz. This caused all synthesized audio to play at half speed with pitched-down 'morphed'
|
|
22
|
+
voices.
|
|
23
|
+
|
|
24
|
+
Also: - Revert TTS params to model defaults (temp=0.9, top_k=50, top_p=1.0) - Remove dead speed
|
|
25
|
+
pre-calculation logic (model.generate speed param is documented as 'not directly supported yet') -
|
|
26
|
+
Update tests to match corrected sample rate and defaults
|
|
27
|
+
|
|
28
|
+
- Improve TTS quality with proper Qwen3-TTS parameters
|
|
29
|
+
([`73a9cbb`](https://github.com/brolnickij/yt-dbl/commit/73a9cbb21631b55479bff407102003bc9f2b299e))
|
|
30
|
+
|
|
31
|
+
- Set temperature to 0.6 (model default) instead of 0.9 - Add top_k=20, top_p=0.8,
|
|
32
|
+
repetition_penalty=1.05 params - Use native 'speed' param in model.generate() to pre-fit
|
|
33
|
+
translated text into original segment duration, reducing reliance on quality-degrading post-hoc
|
|
34
|
+
ffmpeg atempo - Add _estimate_speaking_rate() and _estimate_tts_speed() methods for intelligent
|
|
35
|
+
speed pre-calculation - Add unit tests for new config defaults and speed estimation
|
|
36
|
+
|
|
37
|
+
- Resolve relative paths in _rename_outputs, add E2E tests
|
|
38
|
+
([`7edc5f8`](https://github.com/brolnickij/yt-dbl/commit/7edc5f87f2d8bc20620be0a094889371ec165818))
|
|
39
|
+
|
|
40
|
+
- Fix _rename_outputs to resolve relative paths against step_dir (audio-separator returns filenames,
|
|
41
|
+
not absolute paths) - Add test_e2e_separate.py: 4 E2E tests for real BS-RoFormer separation - Add
|
|
42
|
+
unit test for relative path handling in _rename_outputs - Update E2E pipeline tests: require
|
|
43
|
+
audio_separator_available fixture - CI: restrict test job to tests/unit/, remove e2e job -
|
|
44
|
+
Justfile: run E2E with -n0 to prevent concurrent model downloads
|
|
45
|
+
|
|
46
|
+
All checks pass: lint ✓ format ✓ mypy ✓ 115 unit/integration ✓ 10 E2E ✓
|
|
47
|
+
|
|
48
|
+
- Strip ANSI codes in CLI help test for narrow CI terminals
|
|
49
|
+
([`b4ac57b`](https://github.com/brolnickij/yt-dbl/commit/b4ac57b3f0055ddd58f015f290d00289e8185d16))
|
|
50
|
+
|
|
51
|
+
- Update environment variable names for clarity and consistency
|
|
52
|
+
([`fdfa808`](https://github.com/brolnickij/yt-dbl/commit/fdfa8081583bad2b796522fee69ba18e2173b509))
|
|
53
|
+
|
|
54
|
+
- **release**: Use python -m build in semantic-release Docker container
|
|
55
|
+
([`0ad5354`](https://github.com/brolnickij/yt-dbl/commit/0ad5354a3112c02ec4ff0b8b72a8f3cdd87c388b))
|
|
56
|
+
|
|
57
|
+
### Build System
|
|
58
|
+
|
|
59
|
+
- Add conventional commits enforcement via pre-commit
|
|
60
|
+
([`fbcd057`](https://github.com/brolnickij/yt-dbl/commit/fbcd057c245395cec621c8a20618a866d441364c))
|
|
61
|
+
|
|
62
|
+
- Add justfile for development tasks
|
|
63
|
+
([`3a056f8`](https://github.com/brolnickij/yt-dbl/commit/3a056f8543b0b2817a8c17e3229cf4d8632ff8fc))
|
|
64
|
+
|
|
65
|
+
- Bump all dependencies to latest versions
|
|
66
|
+
([`733472a`](https://github.com/brolnickij/yt-dbl/commit/733472a11f95630c8422399e524312e6d4fac8f6))
|
|
67
|
+
|
|
68
|
+
- Bump all dependency minimum versions to latest
|
|
69
|
+
([`ce66a82`](https://github.com/brolnickij/yt-dbl/commit/ce66a82257164c2e50226b2507f85b8ff9f54cdd))
|
|
70
|
+
|
|
71
|
+
- anthropic: >=0.52 -> >=0.78 - rich: >=14.0 -> >=14.3.2 - pydantic: >=2.12 -> >=2.12.5 - yt-dlp:
|
|
72
|
+
>=2026.0 -> >=2026.2 - audio-separator: >=0.41 -> >=0.41.1 - mlx-audio: >=0.3 -> >=0.3.1 - typer:
|
|
73
|
+
>=0.21 -> >=0.21.1 - mypy: >=1.19 -> >=1.19.1 - pytest: >=9.0 -> >=9.0.2 - pytest-randomly: >=4.0
|
|
74
|
+
-> >=4.0.1 - pre-commit: >=4.5 -> >=4.5.1 - pre-commit hooks additional_dependencies synced
|
|
75
|
+
|
|
76
|
+
- Update lockfile with new dependencies
|
|
77
|
+
([`53a9ca8`](https://github.com/brolnickij/yt-dbl/commit/53a9ca82409c706193ea10a83be494fa37d9a614))
|
|
78
|
+
|
|
79
|
+
### Chores
|
|
80
|
+
|
|
81
|
+
- Add TC002 to test per-file-ignores in ruff config
|
|
82
|
+
([`ecef19b`](https://github.com/brolnickij/yt-dbl/commit/ecef19b52c0594b1ef17332354e848f061f0366a))
|
|
83
|
+
|
|
84
|
+
- Enhance pyproject.toml
|
|
85
|
+
([`aedd66f`](https://github.com/brolnickij/yt-dbl/commit/aedd66f56a823be10e41da1362feb5b11025905e))
|
|
86
|
+
|
|
87
|
+
- Remove unused network marker and dead _HAS_MLX variable
|
|
88
|
+
([`c7e00c2`](https://github.com/brolnickij/yt-dbl/commit/c7e00c26cb41340bb9927f463d3747ddef3f093d))
|
|
89
|
+
|
|
90
|
+
- Stable version
|
|
91
|
+
([`0518d3e`](https://github.com/brolnickij/yt-dbl/commit/0518d3eee2339fdb710eac6e11b464c86f939075))
|
|
92
|
+
|
|
93
|
+
- Update .gitignore with coverage and mypy cache
|
|
94
|
+
([`7325c43`](https://github.com/brolnickij/yt-dbl/commit/7325c4309f88a2891f0de64cd78af52ed981454f))
|
|
95
|
+
|
|
96
|
+
### Code Style
|
|
97
|
+
|
|
98
|
+
- Use parameterless raise for typer.Exit
|
|
99
|
+
([`51e8ca7`](https://github.com/brolnickij/yt-dbl/commit/51e8ca73b33a796943ab1909a3eefae5684a776d))
|
|
100
|
+
|
|
101
|
+
### Continuous Integration
|
|
102
|
+
|
|
103
|
+
- Add GitHub Actions workflow for lint, typecheck, and tests
|
|
104
|
+
([`cf3f0d3`](https://github.com/brolnickij/yt-dbl/commit/cf3f0d348292236fac3ab117ac74a8b0a0139f5a))
|
|
105
|
+
|
|
106
|
+
- Add platform marker for mlx-audio, set UV_TORCH_BACKEND=cpu in CI
|
|
107
|
+
([`ed01b02`](https://github.com/brolnickij/yt-dbl/commit/ed01b022b1fe33d9456b292ef7d513bfb13a973e))
|
|
108
|
+
|
|
109
|
+
- Drop Python version matrix in favor of single 3.12
|
|
110
|
+
([`b9b7063`](https://github.com/brolnickij/yt-dbl/commit/b9b7063174e635ece70f1fe7282c3914f336cf7e))
|
|
111
|
+
|
|
112
|
+
- Force E2E tests to run sequentially (xdist_group)
|
|
113
|
+
([`bdd201f`](https://github.com/brolnickij/yt-dbl/commit/bdd201fcf4a55cb3cc0f9641d387168ac9e61ffc))
|
|
114
|
+
|
|
115
|
+
GPU-heavy models (VibeVoice-ASR 9B, BS-RoFormer) kill the machine when loaded in parallel. All E2E
|
|
116
|
+
tests now share a single xdist group via conftest hook + --dist loadgroup in pytest.ini.
|
|
117
|
+
|
|
118
|
+
- Include integration tests
|
|
119
|
+
([`fb72eee`](https://github.com/brolnickij/yt-dbl/commit/fb72eee65eb39ec9d6b8baf26779b2f5964c1f16))
|
|
120
|
+
|
|
121
|
+
### Documentation
|
|
122
|
+
|
|
123
|
+
- Bump
|
|
124
|
+
([`0812074`](https://github.com/brolnickij/yt-dbl/commit/081207411751992b400907a09b86713b0f081e27))
|
|
125
|
+
|
|
126
|
+
- Bump
|
|
127
|
+
([`10c1d62`](https://github.com/brolnickij/yt-dbl/commit/10c1d62a8edf9e28c55e1eda90a342292492b344))
|
|
128
|
+
|
|
129
|
+
- Bump readme.md
|
|
130
|
+
([`1ad90a2`](https://github.com/brolnickij/yt-dbl/commit/1ad90a2429ce33193eccc4904b67a3252c51792c))
|
|
131
|
+
|
|
132
|
+
- Bump readme.md
|
|
133
|
+
([`e2679d7`](https://github.com/brolnickij/yt-dbl/commit/e2679d775790e6f9d79ae37dd93203e9ed4f4b13))
|
|
134
|
+
|
|
135
|
+
- Bump readme.md
|
|
136
|
+
([`e8cf40e`](https://github.com/brolnickij/yt-dbl/commit/e8cf40e9bf3919e850f25c92e114359dfb2424ff))
|
|
137
|
+
|
|
138
|
+
- Cleanup
|
|
139
|
+
([`baf712e`](https://github.com/brolnickij/yt-dbl/commit/baf712ebe2da3c851ed7dd05ce38792da0bb5a40))
|
|
140
|
+
|
|
141
|
+
- Cleanup
|
|
142
|
+
([`a87505a`](https://github.com/brolnickij/yt-dbl/commit/a87505a6a3fb8d042633173da9fab3b17b055242))
|
|
143
|
+
|
|
144
|
+
- Fix repository URL
|
|
145
|
+
([`392b214`](https://github.com/brolnickij/yt-dbl/commit/392b214db46bce01fb433732e8d3c6d7235a41dd))
|
|
146
|
+
|
|
147
|
+
- Improve formatting and clarity in README.md
|
|
148
|
+
([`0cd95a7`](https://github.com/brolnickij/yt-dbl/commit/0cd95a7e3d709dacabd695678d96ea835edbfb8c))
|
|
149
|
+
|
|
150
|
+
- Update README
|
|
151
|
+
([`eb2e9ab`](https://github.com/brolnickij/yt-dbl/commit/eb2e9ab142c3cc7ce2459a91d1b3d3988c1a90d0))
|
|
152
|
+
|
|
153
|
+
- Update requirements & install
|
|
154
|
+
([`9d1d826`](https://github.com/brolnickij/yt-dbl/commit/9d1d8261d74f2ec57fcc4ddaa26f58a7c5f1117e))
|
|
155
|
+
|
|
156
|
+
- **separate**: Document ModelManager exclusion for separator models
|
|
157
|
+
([`c15487f`](https://github.com/brolnickij/yt-dbl/commit/c15487fd9edc0cd1f1a8517813af57031e114de1))
|
|
158
|
+
|
|
159
|
+
### Features
|
|
160
|
+
|
|
161
|
+
- Add LRU model manager
|
|
162
|
+
([`b577721`](https://github.com/brolnickij/yt-dbl/commit/b577721e9a83d7696f3b909206dfde90cf57ea2f))
|
|
163
|
+
|
|
164
|
+
- Add Rich progress bars to transcribe and synthesize steps
|
|
165
|
+
([`ebb2d43`](https://github.com/brolnickij/yt-dbl/commit/ebb2d43bdc456c7def2a857ea02a969f56950f60))
|
|
166
|
+
|
|
167
|
+
- ASR: animated spinner with status during long model.generate() call - Alignment: progress bar
|
|
168
|
+
showing segment N/M - TTS synthesis: progress bar per segment - Postprocessing: progress bar for
|
|
169
|
+
speed/loudnorm
|
|
170
|
+
|
|
171
|
+
- Add stress marks to Russian translations for better TTS pronunciation
|
|
172
|
+
([`c6b9683`](https://github.com/brolnickij/yt-dbl/commit/c6b9683d3b7f1f97e0ec107f85d66d816bc0e240))
|
|
173
|
+
|
|
174
|
+
- Add U+0301 combining acute accent instruction to Claude translation prompt for Russian (ru) and
|
|
175
|
+
Ukrainian (uk) target languages - Stress marks affect Qwen3-TTS tokenization, improving word
|
|
176
|
+
stress and pronunciation naturalness - Disable ruff RUF001/RUF003 (ambiguous Unicode) — Cyrillic
|
|
177
|
+
text is intentional - Zero extra dependencies or API calls (reuses existing Claude translation
|
|
178
|
+
call)
|
|
179
|
+
|
|
180
|
+
- Confidence-weighted voice reference selection for better cloning
|
|
181
|
+
([`27f9738`](https://github.com/brolnickij/yt-dbl/commit/27f97389331f1343cc27233121230761d953d2ec))
|
|
182
|
+
|
|
183
|
+
- De-ess sibilants in TTS postprocessing chain
|
|
184
|
+
([`334bb09`](https://github.com/brolnickij/yt-dbl/commit/334bb0959ad3ce1394e0e4f31422ddd627cedd2c))
|
|
185
|
+
|
|
186
|
+
- Enhance TTS guidelines for better pronunciation and clarity
|
|
187
|
+
([`6688b45`](https://github.com/brolnickij/yt-dbl/commit/6688b4520eb27b0e211f8ede72d40b4d2d090c35))
|
|
188
|
+
|
|
189
|
+
- Equal-power crossfade for constant energy at segment boundaries
|
|
190
|
+
([`03ed67a`](https://github.com/brolnickij/yt-dbl/commit/03ed67a3825a262b67e2221b4892886a1ea04361))
|
|
191
|
+
|
|
192
|
+
- Highpass + denoise filter on voice reference for cleaner cloning
|
|
193
|
+
([`393815f`](https://github.com/brolnickij/yt-dbl/commit/393815fee7e43d1cef0eb9b080eba92b51b0d642))
|
|
194
|
+
|
|
195
|
+
- Implement real vocal separation with BS-RoFormer
|
|
196
|
+
([`8c394f0`](https://github.com/brolnickij/yt-dbl/commit/8c394f0ee7bb85f4bbb0842f8d031d1ca49b205e))
|
|
197
|
+
|
|
198
|
+
- Replace stub SeparateStep with audio-separator integration - Use BS-RoFormer (SDR 12.97) as
|
|
199
|
+
default model - CoreML acceleration for Apple Silicon (M4 Pro) - Configurable model, segment_size,
|
|
200
|
+
overlap via Settings - Idempotency: skip if outputs already exist - Memory cleanup: gc.collect() +
|
|
201
|
+
GPU cache clear after separation - 17 new unit tests for validation, rename, config, error paths -
|
|
202
|
+
Updated pipeline integration tests with mock separation - Added prefill_separate helper to
|
|
203
|
+
conftest
|
|
204
|
+
|
|
205
|
+
- Implement real yt-dlp download step with audio extraction
|
|
206
|
+
([`2609176`](https://github.com/brolnickij/yt-dbl/commit/260917670e2fba86b3c72ef793b5ea2be0de9585))
|
|
207
|
+
|
|
208
|
+
- Implement single-pass translation via Claude Opus 4.6 (iter 4)
|
|
209
|
+
([`b78ed00`](https://github.com/brolnickij/yt-dbl/commit/b78ed004c20d7a85b32ff1276d29a3441fb13485))
|
|
210
|
+
|
|
211
|
+
- Add anthropic>=0.52 runtime dependency - TranslateStep: single API call with all segments, JSON
|
|
212
|
+
output - System prompt for dubbing-aware translation (concise for TTS timing) - Idempotent: caches
|
|
213
|
+
translations.json, regenerates subtitles.srt - Parse Claude response with markdown fence handling
|
|
214
|
+
- Config: claude_model='claude-opus-4-6', removed translation_batch_size - 22 unit tests
|
|
215
|
+
(validation, parsing, SRT, persistence, mocked API) - Integration tests updated with
|
|
216
|
+
_pipeline_patches helper - 168 tests, 91.92% coverage, all quality checks pass
|
|
217
|
+
|
|
218
|
+
- Implement transcription with VibeVoice-ASR + ForcedAligner (iter 3)
|
|
219
|
+
([`decd55c`](https://github.com/brolnickij/yt-dbl/commit/decd55c08ffec0c327d68dd5123e8329842f1275))
|
|
220
|
+
|
|
221
|
+
Two-model pipeline running on Apple Silicon MLX Metal: 1. VibeVoice-ASR (9B) — ASR + diarization +
|
|
222
|
+
segment timestamps 2. Qwen3-ForcedAligner (0.6B) — word-level forced alignment
|
|
223
|
+
|
|
224
|
+
Key changes: - Add mlx-audio>=0.3 dependency (requires prerelease transformers) - Add transcription
|
|
225
|
+
config: asr_model, aligner_model, max_tokens, temperature - Rewrite TranscribeStep from stub to
|
|
226
|
+
full implementation: - _run_asr(): loads VibeVoice, runs generate(), normalises key variants -
|
|
227
|
+
_run_alignment(): per-segment forced alignment with error fallback - _detect_language(): Unicode
|
|
228
|
+
heuristics (ja before zh for kana) - _extract_speakers(): duration aggregation + best reference
|
|
229
|
+
segment - Idempotent with JSON cache, gc.collect() between models - 146 tests (25 new for
|
|
230
|
+
transcription), 90.93% coverage - All quality checks pass: ruff lint, ruff format, mypy strict
|
|
231
|
+
|
|
232
|
+
- Implement TTS synthesis with Qwen3-TTS voice cloning (iter 5)
|
|
233
|
+
([`c4330e5`](https://github.com/brolnickij/yt-dbl/commit/c4330e528fa25489abc6277e574f0fc319d5760a))
|
|
234
|
+
|
|
235
|
+
- Implement SynthesizeStep: voice reference extraction, TTS generation, speed adjustment (ffmpeg
|
|
236
|
+
atempo), loudness normalization (-16 LUFS) - Model: mlx-community/Qwen3-TTS-12Hz-1.7B-Base-bf16
|
|
237
|
+
via mlx-audio - Voice cloning via ref_audio + ref_text params - Add tts_model, tts_temperature,
|
|
238
|
+
tts_sample_rate to Settings - Add synth_path, synth_speed_factor to Segment schema - Add
|
|
239
|
+
soundfile>=0.13 dependency for WAV writing - Add 20 unit tests for synthesize step (all passing) -
|
|
240
|
+
Update integration tests with TTS mocks - Add prefill_synthesize helper to conftest - 188 tests,
|
|
241
|
+
91.14% coverage
|
|
242
|
+
|
|
243
|
+
- Init
|
|
244
|
+
([`68eb169`](https://github.com/brolnickij/yt-dbl/commit/68eb169be5ab510a00d1db0913f20085d89219d1))
|
|
245
|
+
|
|
246
|
+
- Init assemble module
|
|
247
|
+
([`e88b499`](https://github.com/brolnickij/yt-dbl/commit/e88b499c4e4ec148cae228958b431f762ecbc01e))
|
|
248
|
+
|
|
249
|
+
- Init publish configs
|
|
250
|
+
([`dee5cbf`](https://github.com/brolnickij/yt-dbl/commit/dee5cbfa0de6c3b4b94787b439c4cb0b6eca6b70))
|
|
251
|
+
|
|
252
|
+
- Initial public release
|
|
253
|
+
([`d112074`](https://github.com/brolnickij/yt-dbl/commit/d112074bd781c73c438380dd352ab7010a6f0761))
|
|
254
|
+
|
|
255
|
+
BREAKING CHANGE: first stable release of yt-dbl
|
|
256
|
+
|
|
257
|
+
- Make separation batch_size configurable via env
|
|
258
|
+
([`396ca6c`](https://github.com/brolnickij/yt-dbl/commit/396ca6c31f9570455d8028e3c73054fda08f5a6d))
|
|
259
|
+
|
|
260
|
+
Add YT_DBL_SEPARATION_BATCH_SIZE (default=1, max=16). On M4 Pro with unified memory, higher values
|
|
261
|
+
(2-4) can speed up separation.
|
|
262
|
+
|
|
263
|
+
- Optimize translation prompt for TTS-friendly output
|
|
264
|
+
([`fe50b79`](https://github.com/brolnickij/yt-dbl/commit/fe50b798137a5ed75140115c284c18a5768f76b5))
|
|
265
|
+
|
|
266
|
+
- Add rules: numbers→words, expand abbreviations, spoken style, no special chars - Fix rule
|
|
267
|
+
numbering bug (duplicate '7.' when stress rule injected) - Add stress-marked example in JSON
|
|
268
|
+
output for ru/uk languages - Rephrase prompt intro to emphasize TTS optimization context
|
|
269
|
+
|
|
270
|
+
- Sinc resampling via scipy to eliminate aliasing artifacts
|
|
271
|
+
([`9b9886f`](https://github.com/brolnickij/yt-dbl/commit/9b9886f52e437ae3be36a120525c040d501b628e))
|
|
272
|
+
|
|
273
|
+
- Suppress HuggingFace/transformers noise during model loading
|
|
274
|
+
([`34671fa`](https://github.com/brolnickij/yt-dbl/commit/34671fa191aac3cca65a32e9ee249b68cb98a34d))
|
|
275
|
+
|
|
276
|
+
- Add suppress_library_noise() context manager to logging utils - Silence HF Hub download progress
|
|
277
|
+
bars (HF_HUB_DISABLE_PROGRESS_BARS) - Suppress 'model of type' and tokenizer regex warnings - Mute
|
|
278
|
+
noisy loggers: huggingface_hub, transformers, tqdm, etc. - Wrap all 3 model loads: ASR, aligner,
|
|
279
|
+
TTS
|
|
280
|
+
|
|
281
|
+
- Update TTS mock functions for improved testing and remove mlx dependency
|
|
282
|
+
([`b929fa8`](https://github.com/brolnickij/yt-dbl/commit/b929fa891b841fcfdeb0f4b51518a0bda315d360))
|
|
283
|
+
|
|
284
|
+
- Use ffmpeg-full with rubberband for higher quality audio
|
|
285
|
+
([`feac9a9`](https://github.com/brolnickij/yt-dbl/commit/feac9a9662864158848af40592d2c62835477fb6))
|
|
286
|
+
|
|
287
|
+
- Auto-detect ffmpeg-full (brew keg-only) with fallback to system ffmpeg - Rubberband
|
|
288
|
+
pitch-preserving time-stretch instead of atempo - Two-pass loudnorm (measure → apply with
|
|
289
|
+
linear=true) - Voice references at 24kHz (Qwen3-TTS native rate, was 16kHz) - AAC output at
|
|
290
|
+
320kbps (was default ~128kbps) - Add ffmpeg_path config setting for custom ffmpeg location - Tests
|
|
291
|
+
for _detect_ffmpeg, _detect_ffprobe, has_rubberband
|
|
292
|
+
|
|
293
|
+
- **cli**: Implement real models list and download commands
|
|
294
|
+
([`b336cbf`](https://github.com/brolnickij/yt-dbl/commit/b336cbfed7f4edf94ea47e30bf2b5445d857f412))
|
|
295
|
+
|
|
296
|
+
- **config**: Auto-detect max_loaded_models based on system RAM
|
|
297
|
+
([`38ec78f`](https://github.com/brolnickij/yt-dbl/commit/38ec78f2122e55e6466bce203a8627bf08052570))
|
|
298
|
+
|
|
299
|
+
- **logging**: Add memory measurement and enhanced model load/unload logging
|
|
300
|
+
([`7db825b`](https://github.com/brolnickij/yt-dbl/commit/7db825bc41c07af2b166d6f29ad527abe8aa6686))
|
|
301
|
+
|
|
302
|
+
- **manager**: Add memory tracking and MLX/torch cache cleanup
|
|
303
|
+
([`9d3f746`](https://github.com/brolnickij/yt-dbl/commit/9d3f746db319a15cf763530b5627ee35ad3d1f96))
|
|
304
|
+
|
|
305
|
+
- **models**: Export public API from models package
|
|
306
|
+
([`5893660`](https://github.com/brolnickij/yt-dbl/commit/5893660e5df255ee25629aa6336cf1435b9a6539))
|
|
307
|
+
|
|
308
|
+
- **pipeline**: Accept ModelManager in PipelineStep base class
|
|
309
|
+
([`740dd96`](https://github.com/brolnickij/yt-dbl/commit/740dd96b33bce7ad07a66ed4343a30886099cb47))
|
|
310
|
+
|
|
311
|
+
- **registry**: Add ML model registry with download status checks
|
|
312
|
+
([`2a3e8f1`](https://github.com/brolnickij/yt-dbl/commit/2a3e8f1d1332967c34d8db5c0e077f52b24f3217))
|
|
313
|
+
|
|
314
|
+
- **runner**: Wire ModelManager and memory status into pipeline runner
|
|
315
|
+
([`34795ac`](https://github.com/brolnickij/yt-dbl/commit/34795ac7ad5b600a2fbc66f185ccdbb94f24339e))
|
|
316
|
+
|
|
317
|
+
- **schemas**: Add source_language field to PipelineState
|
|
318
|
+
([`e00b27a`](https://github.com/brolnickij/yt-dbl/commit/e00b27ab871f677c7f683e5cb96327efbc8bf838))
|
|
319
|
+
|
|
320
|
+
- **synthesize**: Integrate ModelManager for TTS model lifecycle
|
|
321
|
+
([`0cca551`](https://github.com/brolnickij/yt-dbl/commit/0cca551451173f82c81d6766b33250a3fca304d7))
|
|
322
|
+
|
|
323
|
+
- **transcribe**: Integrate ModelManager and expand language detection
|
|
324
|
+
([`2029b71`](https://github.com/brolnickij/yt-dbl/commit/2029b7109e5048ed791b5171bd4be48860e718bd))
|
|
325
|
+
|
|
326
|
+
- **translate**: Pass source language to Claude translation prompt
|
|
327
|
+
([`93376bb`](https://github.com/brolnickij/yt-dbl/commit/93376bb40dc8824629e1c9be7fd3def22edef82d))
|
|
328
|
+
|
|
329
|
+
### Performance Improvements
|
|
330
|
+
|
|
331
|
+
- Cache has_rubberband, unload ASR before aligner, precompute lookups, compact JSON, cleanup
|
|
332
|
+
intermediates
|
|
333
|
+
([`8422144`](https://github.com/brolnickij/yt-dbl/commit/842214483d4ab75c25e9a73718c0e3dc6d1e36c2))
|
|
334
|
+
|
|
335
|
+
- Enhance RAM-based auto-detection for `max_loaded_models` and `separation_batch_size`
|
|
336
|
+
([`94f479a`](https://github.com/brolnickij/yt-dbl/commit/94f479af98612efed509ddfeced8bd96bfb44ab1))
|
|
337
|
+
|
|
338
|
+
- Enhance segment postprocessing with parallel execution
|
|
339
|
+
([`9d1e296`](https://github.com/brolnickij/yt-dbl/commit/9d1e2962a6568dba7b9f6dc088f5410d5e3a4f0c))
|
|
340
|
+
|
|
341
|
+
- **synthesize**: Merge ffmpeg postprocessing into minimal-pass pipeline
|
|
342
|
+
([`6db80ef`](https://github.com/brolnickij/yt-dbl/commit/6db80ef75ec61140923d3462c96cf85b2dc51521))
|
|
343
|
+
|
|
344
|
+
- **synthesize**: Use np.asarray instead of tolist for mlx-to-numpy conversion
|
|
345
|
+
([`c6d2bc4`](https://github.com/brolnickij/yt-dbl/commit/c6d2bc469bef586ada386add7d4fb0af6b0ae3f8))
|
|
346
|
+
|
|
347
|
+
- **transcribe**: Load audio once and slice per segment for alignment
|
|
348
|
+
([`9586e6d`](https://github.com/brolnickij/yt-dbl/commit/9586e6d9f0ef146d3e99c3b24c75fc08e9078022))
|
|
349
|
+
|
|
350
|
+
### Refactoring
|
|
351
|
+
|
|
352
|
+
- Add __all__ exports to public modules
|
|
353
|
+
([`aff728c`](https://github.com/brolnickij/yt-dbl/commit/aff728c6b5fdbd740821e61d859853e960fbce27))
|
|
354
|
+
|
|
355
|
+
- Add PEP 561 py.typed marker
|
|
356
|
+
([`ac757cc`](https://github.com/brolnickij/yt-dbl/commit/ac757cc30cf24aac805221a74470172543cbed99))
|
|
357
|
+
|
|
358
|
+
- Complete pipeline error hierarchy with TranscriptionError and AssemblyError wrapping
|
|
359
|
+
([`4160359`](https://github.com/brolnickij/yt-dbl/commit/416035944b8d3a260a60de31839ed62ac7710fe8))
|
|
360
|
+
|
|
361
|
+
- Deduplicate atempo chain in speed_up_audio
|
|
362
|
+
([`4750e44`](https://github.com/brolnickij/yt-dbl/commit/4750e442d55153410cba53411991320693dffa65))
|
|
363
|
+
|
|
364
|
+
- Deduplicate resolve_vocals and GPU cleanup into shared utilities
|
|
365
|
+
([`ce1be33`](https://github.com/brolnickij/yt-dbl/commit/ce1be3399e521f104c2e4e7e9fc267cbe6bc9d32))
|
|
366
|
+
|
|
367
|
+
- Extract audio processing utilities from SynthesizeStep into utils/audio_processing
|
|
368
|
+
([`37ae8d1`](https://github.com/brolnickij/yt-dbl/commit/37ae8d113798009249f95fa780259bab3136c5bb))
|
|
369
|
+
|
|
370
|
+
- Extract constants, fix inconsistencies, deduplicate loudnorm targets
|
|
371
|
+
([`16c815d`](https://github.com/brolnickij/yt-dbl/commit/16c815dc4a0ccd08a3f7bd7c14e5179457342e84))
|
|
372
|
+
|
|
373
|
+
- Extract language maps, lazy imports, early validation, remove dead code
|
|
374
|
+
([`a193791`](https://github.com/brolnickij/yt-dbl/commit/a19379117a5b62f09fa5d122979006e86045f621))
|
|
375
|
+
|
|
376
|
+
- Extract tool configs into standalone files
|
|
377
|
+
([`cd98bf8`](https://github.com/brolnickij/yt-dbl/commit/cd98bf818a2d910335bfa9119cf95bb1cc9dac8d))
|
|
378
|
+
|
|
379
|
+
- Fix type safety in assemble, promote private registry API to public
|
|
380
|
+
([`e9c7c68`](https://github.com/brolnickij/yt-dbl/commit/e9c7c68a208b3057fc388e92da41f81374569553))
|
|
381
|
+
|
|
382
|
+
- Inject ffmpeg path via set_ffmpeg_path instead of importing settings singleton
|
|
383
|
+
([`eba5647`](https://github.com/brolnickij/yt-dbl/commit/eba564712f7193d6a076f29af473cdecc2f2d3bb))
|
|
384
|
+
|
|
385
|
+
- Introduce unified pipeline exception hierarchy
|
|
386
|
+
([`4392987`](https://github.com/brolnickij/yt-dbl/commit/4392987b6ad6045a3cb4183cb527c7fbce1f4c09))
|
|
387
|
+
|
|
388
|
+
- Remove commented-out code
|
|
389
|
+
([`489eeb2`](https://github.com/brolnickij/yt-dbl/commit/489eeb2c946148c0e8a39ec8380ca4b19f73ff95))
|
|
390
|
+
|
|
391
|
+
- Remove dead code (replace_audio, normalize_loudness, deess, TranscriptionError)
|
|
392
|
+
([`e8dbc81`](https://github.com/brolnickij/yt-dbl/commit/e8dbc81ac70eb3e240ac8fce3d8c2dd908cf2e90))
|
|
393
|
+
|
|
394
|
+
- Remove settings singleton from config module
|
|
395
|
+
([`6631adf`](https://github.com/brolnickij/yt-dbl/commit/6631adf66ec9f311b156fb59c817dbb10063bd09))
|
|
396
|
+
|
|
397
|
+
- Remove unused model_manager singleton
|
|
398
|
+
([`3ef4512`](https://github.com/brolnickij/yt-dbl/commit/3ef45129bae837832e5fc6beab4b488bed6f7e85))
|
|
399
|
+
|
|
400
|
+
### Testing
|
|
401
|
+
|
|
402
|
+
- Add @pytest.mark.parametrize to data-driven tests
|
|
403
|
+
([`b22efba`](https://github.com/brolnickij/yt-dbl/commit/b22efba1e4502e0873b40f2d69b68b098d1f9051))
|
|
404
|
+
|
|
405
|
+
- Add Arabic, Hindi, Thai language detection coverage
|
|
406
|
+
([`0307488`](https://github.com/brolnickij/yt-dbl/commit/0307488bad117df8df8f738f16a053058f110b59))
|
|
407
|
+
|
|
408
|
+
- Add Claude API error path tests for translate step
|
|
409
|
+
([`67a4b38`](https://github.com/brolnickij/yt-dbl/commit/67a4b3898deae6a682bbaff891bfc0db931e8c48))
|
|
410
|
+
|
|
411
|
+
- Add config auto-detection and RAM tier threshold tests
|
|
412
|
+
([`a1a8f70`](https://github.com/brolnickij/yt-dbl/commit/a1a8f70c13683ba7b25ccaae9fecfbdc0a5442bd))
|
|
413
|
+
|
|
414
|
+
- Add coverage for utils/memory.py GPU cleanup
|
|
415
|
+
([`6485a01`](https://github.com/brolnickij/yt-dbl/commit/6485a01169565a7822b2e9dea1094254ef160898))
|
|
416
|
+
|
|
417
|
+
- Add E2E tests for transcription step (VibeVoice-ASR + ForcedAligner)
|
|
418
|
+
([`ee7e449`](https://github.com/brolnickij/yt-dbl/commit/ee7e4495d8a4b85a8fcd5251e496e207807fe165))
|
|
419
|
+
|
|
420
|
+
Real ASR + alignment on 'Me at the zoo' behind --run-slow: - test_transcribe_produces_segments:
|
|
421
|
+
validates segments, words, speakers - test_idempotent_rerun_uses_cache: verifies segments.json
|
|
422
|
+
cache - Update pipeline E2E docstring: transcribe is now real, not stub
|
|
423
|
+
|
|
424
|
+
- Add early API key validation tests for PipelineRunner
|
|
425
|
+
([`8a9a267`](https://github.com/brolnickij/yt-dbl/commit/8a9a2671b29736c3a49fce0ca989d428b7d851bd))
|
|
426
|
+
|
|
427
|
+
- Add postprocess_segment deess fallback coverage
|
|
428
|
+
([`74a6cbb`](https://github.com/brolnickij/yt-dbl/commit/74a6cbbef3017f0f4f03a6305e4f5ab58bf4a838))
|
|
429
|
+
|
|
430
|
+
- Add SynthesisError test for empty TTS result
|
|
431
|
+
([`d589af4`](https://github.com/brolnickij/yt-dbl/commit/d589af4b6941495a77238d034623820594996f28))
|
|
432
|
+
|
|
433
|
+
- Add tests for logging utilities and suppress_library_noise
|
|
434
|
+
([`bc46a73`](https://github.com/brolnickij/yt-dbl/commit/bc46a730b5ee83e3c29eea7388b0ced55e79a2f7))
|
|
435
|
+
|
|
436
|
+
- Add tests for model registry, manager, memory tracking, and config
|
|
437
|
+
([`a4a114b`](https://github.com/brolnickij/yt-dbl/commit/a4a114bb25110c6dbd8092a0b33a94779ede49fa))
|
|
438
|
+
|
|
439
|
+
- Add TTS_LANG_MAP validation tests
|
|
440
|
+
([`e7356ff`](https://github.com/brolnickij/yt-dbl/commit/e7356ff2b7f0ece2912ae793794a7a609f8bbc62))
|
|
441
|
+
|
|
442
|
+
- Isolate Settings from .env and YT_DBL_ env vars in tests
|
|
443
|
+
([`c9e52f0`](https://github.com/brolnickij/yt-dbl/commit/c9e52f0de8f5fe26296a137a917c36aaed7c7e4b))
|
|
444
|
+
|
|
445
|
+
- Make ffmpeg arg assertions order-agnostic
|
|
446
|
+
([`d749e50`](https://github.com/brolnickij/yt-dbl/commit/d749e50d8f59432402949521f0d8ec125dd279a2))
|
|
447
|
+
|
|
448
|
+
- Mock model download check in CLI tests and add API key to settings
|
|
449
|
+
([`4610444`](https://github.com/brolnickij/yt-dbl/commit/4610444a087451ab237b5bc37a02989f9c358b32))
|
|
450
|
+
|
|
451
|
+
- Mock settings in TestStatusCommand
|
|
452
|
+
([`fc88bde`](https://github.com/brolnickij/yt-dbl/commit/fc88bdef107e3fd6689016a87100fcc137c390bb))
|
|
453
|
+
|
|
454
|
+
- Parametrize language detection and format size tests
|
|
455
|
+
([`3879d38`](https://github.com/brolnickij/yt-dbl/commit/3879d38bd0dd0cf835284cc92d6b04d1d80d1a0d))
|
|
456
|
+
|
|
457
|
+
- Remove unused mock in TestStatusCommand
|
|
458
|
+
([`e1dea19`](https://github.com/brolnickij/yt-dbl/commit/e1dea192dce84c5607ba46a189e81d5a4d813150))
|
|
459
|
+
|
|
460
|
+
- Reorganize into unit/integration/e2e pyramid
|
|
461
|
+
([`44626c3`](https://github.com/brolnickij/yt-dbl/commit/44626c3af3a98bb0564a20779cc7fe159601b3a7))
|
|
462
|
+
|
|
463
|
+
- Update version assertion to match semantic versioning format
|
|
464
|
+
([`eb2e816`](https://github.com/brolnickij/yt-dbl/commit/eb2e816058d7d87c27305bd436773952a7542f5d))
|
|
465
|
+
|
|
466
|
+
- Update version assertion to use search for regex matching
|
|
467
|
+
([`4c5d30b`](https://github.com/brolnickij/yt-dbl/commit/4c5d30bc6944b013099012b37d62a623eed18970))
|
|
468
|
+
|
|
469
|
+
- **integration**: Update runner mocks for source_language and TTS
|
|
470
|
+
([`1985699`](https://github.com/brolnickij/yt-dbl/commit/1985699b0ee6f57f7dabf8c17b5a3f3bca691d57))
|
|
471
|
+
|
|
472
|
+
### Breaking Changes
|
|
473
|
+
|
|
474
|
+
- First stable release of yt-dbl
|