grooveclean 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.
Files changed (45) hide show
  1. grooveclean-1.0.0/.gitignore +14 -0
  2. grooveclean-1.0.0/CHANGELOG.md +23 -0
  3. grooveclean-1.0.0/CREDITS.md +951 -0
  4. grooveclean-1.0.0/LICENSE +21 -0
  5. grooveclean-1.0.0/PKG-INFO +349 -0
  6. grooveclean-1.0.0/README.md +296 -0
  7. grooveclean-1.0.0/docs/README.md +20 -0
  8. grooveclean-1.0.0/docs/before-after.png +0 -0
  9. grooveclean-1.0.0/docs/make_demo.py +92 -0
  10. grooveclean-1.0.0/docs/make_figure.py +241 -0
  11. grooveclean-1.0.0/docs/make_screens.py +121 -0
  12. grooveclean-1.0.0/docs/shot-batch.png +0 -0
  13. grooveclean-1.0.0/docs/shot-clean.png +0 -0
  14. grooveclean-1.0.0/packaging/build_exe.py +74 -0
  15. grooveclean-1.0.0/packaging/entry.py +9 -0
  16. grooveclean-1.0.0/packaging/grooveclean.spec +29 -0
  17. grooveclean-1.0.0/pyproject.toml +85 -0
  18. grooveclean-1.0.0/src/grooveclean/__init__.py +5 -0
  19. grooveclean-1.0.0/src/grooveclean/cli.py +448 -0
  20. grooveclean-1.0.0/src/grooveclean/detect.py +329 -0
  21. grooveclean-1.0.0/src/grooveclean/io.py +260 -0
  22. grooveclean-1.0.0/src/grooveclean/repair.py +231 -0
  23. grooveclean-1.0.0/src/grooveclean/report.py +59 -0
  24. grooveclean-1.0.0/src/grooveclean/weights/detector.json +17 -0
  25. grooveclean-1.0.0/src/grooveclean/weights/detector.pt +0 -0
  26. grooveclean-1.0.0/tests/conftest.py +134 -0
  27. grooveclean-1.0.0/tests/data/ASSETS.json +45 -0
  28. grooveclean-1.0.0/tests/data/clean_excerpt.flac +0 -0
  29. grooveclean-1.0.0/tests/data/excerpt78.flac +0 -0
  30. grooveclean-1.0.0/tests/test_clean_guard.py +47 -0
  31. grooveclean-1.0.0/tests/test_cli.py +363 -0
  32. grooveclean-1.0.0/tests/test_detector.py +96 -0
  33. grooveclean-1.0.0/tests/test_edges.py +184 -0
  34. grooveclean-1.0.0/tests/test_golden.py +49 -0
  35. grooveclean-1.0.0/tests/test_lsar.py +192 -0
  36. grooveclean-1.0.0/tests/test_reconstruction.py +121 -0
  37. grooveclean-1.0.0/train/_ia.py +286 -0
  38. grooveclean-1.0.0/train/fetch_test_assets.py +169 -0
  39. grooveclean-1.0.0/train/harvest_clean.py +140 -0
  40. grooveclean-1.0.0/train/harvest_noise.py +268 -0
  41. grooveclean-1.0.0/train/make_credits.py +82 -0
  42. grooveclean-1.0.0/train/metrics.py +116 -0
  43. grooveclean-1.0.0/train/mix.py +364 -0
  44. grooveclean-1.0.0/train/pick_clean_excerpt.py +152 -0
  45. grooveclean-1.0.0/train/train.py +247 -0
@@ -0,0 +1,14 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ build/
5
+ dist/
6
+ .pytest_cache/
7
+ .ruff_cache/
8
+ .venv/
9
+ venv/
10
+ corpus/
11
+ runs/
12
+ *.wav
13
+ *.log
14
+ !tests/data/*.wav
@@ -0,0 +1,23 @@
1
+ # Changelog
2
+
3
+ ## 1.0.0 - 2026-09-10
4
+
5
+ First release.
6
+
7
+ - `grooveclean clean IN.wav -o OUT.wav` writes the cleaned audio, the exact difference file
8
+ and a JSON report of every click.
9
+ - `grooveclean batch DIR -o OUTDIR` runs the same over a folder and keeps going past a file
10
+ it cannot read.
11
+ - `--dry-run` on both commands writes the report only, for surveying a stack of transfers.
12
+ - `--skip-existing` on `batch` picks up where an interrupted run stopped.
13
+ - `--format` on `batch` chooses the output container. WAV, FLAC, AIFF, W64, CAF or RF64.
14
+ - On `clean` the container follows the `-o` extension. A name it cannot map to a format
15
+ is refused rather than quietly written as a WAV.
16
+ - Detection by a dilated 1-D CNN trained on real clicks harvested from 78rpm transfers,
17
+ mixed into click-free netlabels music.
18
+ - Repair by least-squares autoregressive interpolation of order 64, batched so a whole side
19
+ costs one solve per span width, with cubic fallback at the file edges.
20
+ - WAV, FLAC, AIFF, W64, CAF and RF64 input at 8 to 32 bit and 44.1 to 192 kHz, mono or
21
+ stereo. Lossy input is refused with an explanation rather than processed.
22
+ - Streams in overlapping blocks, so file length is not bounded by memory.
23
+ - CUDA when it is there, CPU when it is not, `--device` to force either.