Skip to content

Releases: Booyaka101/grooveclean

grooveclean 1.2.1

Choose a tag to compare

@Booyaka101 Booyaka101 released this 12 Sep 01:51
6ba4413

A hardening pass over the two review commands. No change to the detector, the repair, the file formats, or any output a 1.2.0 run produced, so a 1.2.0 script still runs and gives the same audio.

The fix

A report is a plain JSON file sitting next to the audio, and a user can edit it. audit and revert were trusting every number in it.

A report naming a channel the file does not have, a position that is not a whole number, or a record missing a field raised a raw traceback. Worse, a span past the end of the file or a reversed span was silently accepted: revert printed put back 1 of 1 repairs having changed nothing at all. A wrong answer rather than an error, in the one feature whose whole point is checking the tool's work.

Each case now names the click number and what is wrong with it:

Error: side.report.json: not a report for side.wav (click 1 is on channel 5 of a 2-channel file)

Also

Reviewing a run that found no clicks now says so, rather than reporting that no repairs matched the selection.

clean ends by showing the audit command for what it just wrote, so the way to check a run is visible from the run itself.

Install

pip install grooveclean

Or take grooveclean-win64.exe below and run it without installing Python. It is 155 MB because it carries a CPU build of PyTorch.

grooveclean 1.2.0

Choose a tag to compare

@Booyaka101 Booyaka101 released this 11 Sep 01:26
dab9be5

Two commands for checking a run instead of trusting it.

grooveclean audit side.clean.wav cuts the repairs out into two short files, before and after, the same length sample for sample. Twenty repairs off a twenty-five minute side come out as about thirty seconds of audio, so playing one against the other in an editor is an A/B on the work rather than a hunt through the whole transfer. It prints a table naming the click behind every excerpt.

grooveclean revert side.clean.wav -o fixed.wav --clicks 511,512 puts chosen repairs back. What goes back comes out of the difference file, so a reverted span is the input again to the sample rather than a second guess. You get a fresh cleaned file, difference file and report, and out + removed == in still holds on the new pair.

Both select with any mix of --clicks 3,17,204 or 12-18, --between 1:32-1:40, --wider-than MS and --confidence-below P. audit also takes --top, --sort and --context-ms. Neither re-runs the detector or needs the source file.

Nothing about clean, batch, the detector or the file formats changed, so a 1.1.0 script still runs and produces the same audio. A report written by 1.0.0 works with both new commands.

There is no 1.1.0 on PyPI. It was built and tested but never published, and everything in it is here.

Install

pip install grooveclean

Or take grooveclean-win64.exe below and run it without installing Python. It is 155 MB because it carries a CPU build of PyTorch.

grooveclean 1.0.1

Choose a tag to compare

@Booyaka101 Booyaka101 released this 10 Sep 07:40

Documentation only. The code is unchanged from 1.0.0, so if you already have it installed
there is nothing here you need.

The before and after demo used the same 1917 Sousa excerpt the golden test is pinned to.
That side is dense continuous crackle, and grooveclean removes impulses while deliberately
leaving broadband hiss, so before and after measured 2.4 dB apart in 4-16 kHz and sounded
identical. Picking demo material by click count turns out to select exactly the material
where the result is least audible.

The demo is now ten seconds of a 1925 Banner side, the Hollywood Dance Orchestra's
Do You Care, from a disc the archive lists as worn. It was held out of training and
scoring. Measured on the files in docs/demo/:

  • 95 ticks stand more than 20 dB above the music, and none survive
  • peak drops from -0.7 to -11.9 dBFS
  • the music below 1 kHz moves 0.11 dB, and overall level moves 0.5 dB

So you hear the ticks go rather than the file get quieter.

docs/make_demo.py normalises the loudest of the three files to -1 dBFS and puts that one
gain on all three, so before == after + removed still holds.

Downloads: grooveclean-win64.exe needs no Python. pip install grooveclean gets the wheel.

grooveclean 1.0.0

Choose a tag to compare

@Booyaka101 Booyaka101 released this 10 Sep 06:08

grooveclean removes clicks and crackle from vinyl and 78rpm transfers. A small trained CNN finds
the damage, least-squares AR interpolation fills each gap from the audio either side, and nothing
else is touched. No hiss reduction, no spectral subtraction, no EQ.

Every run writes three files: the cleaned side, a difference file holding exactly what came out,
and a JSON report of every click it found. The difference file adds back sample for sample, so
you can listen to what was removed and hear immediately whether any music went with it.

Install with pip on Python 3.11 or newer:

pip install grooveclean
grooveclean clean side-a.flac -o cleaned/side-a.flac
grooveclean batch sides -o cleaned --format flac

Or download grooveclean-win64.exe below. One file, no Python needed, runs on the CPU.

The shipped detector scores F1 0.989 on held-out material at 0.6 false positives per minute of
click-free music. A 25 minute 96 kHz stereo side takes 46s on an RTX 4090 or 2m55s on an
i9-14900K, and both find the same clicks. There is a demo you can listen to and the full
accuracy method in the README.

Attached are the Windows exe, the wheel and the sdist.