Skip to content

Releases: vbasky/cathar

cathar v0.8.0

Choose a tag to compare

@github-actions github-actions released this 21 Sep 08:19

The first Phase 2 restoration and workflow feature release.

Added

  • Psychoacoustic denoising — Bark-scale masking-aware spectral denoising
    through the psycho-denoise command and library API.
  • Measured deconvolution — regularised spectral inversion using a measured
    impulse response through deconvolve.
  • Co-sparse dequantization — iterative lattice/co-sparse recovery through
    dequantize --method cosparse.
  • Pitch smoothing — pYIN-style confidence and continuity smoothing for
    pitch tracks.
  • Spectral rebalance — match a recording's long-term spectrum to a clean
    reference with rebalance.
  • Stereo modulation effects — stereo-aware chorus, flanger, and
    phaser processing with independent channel modulation.
  • Declarative processing chains — JSON presets through chain, including
    batch execution with batch --preset.

cathar v0.7.7

Choose a tag to compare

@github-actions github-actions released this 21 Sep 01:31

VHS noise print no longer eats sibilance, the chain no longer gates pauses,
and a weak 50 Hz line is not mistaken for 60
(#27).

Fixed

  • vhs noise print (#27) —
    learn_noise_print_quietest took one contiguous 4 s stretch. On dialogue
    that stretch sits well above the true pauses and the print carries
    sibilance, so subtraction takes down 8–16 kHz. The chain now stitches
    eight non-overlapping 0.75 s windows spread evenly by level over the
    quietest 20 % of the file, with 10 ms crossfades
    (learn_noise_print_quiet_windows). Digital-silent tiles are skipped so
    a dropout is not learned as the floor.
  • vhs alpha (#27) —
    default over-subtraction is 2.0 (VhsOptions.alpha, cathar vhs --alpha).
    Alpha 3 with coherent subtraction gated pauses to near-silence.
  • detect_mains_hz (#27) —
    50 vs 60 is taken from the mean spectrum of the whole recording, not the
    quietest 1 s. A weak 50 Hz PAL line was losing to a 60 Hz bump in one
    pause; harmonic placement still uses the quietest stretch.

cathar v0.7.6

Choose a tag to compare

@github-actions github-actions released this 20 Sep 17:04

VHS multiband de-ess no longer takes down everything above 4 kHz
(#26).

Fixed

  • vhs de-ess (#26) — the
    chain called deess_multiband with threshold_db = -24, the single-band
    HF/broadband-ratio default. In multiband mode that value is "dB above each
    band's running average", so every frame was over and the region above 4 kHz
    was taken down (~30 dB). Default is now 6 dB (VhsOptions.deess_threshold,
    cathar vhs --deess-threshold). Negative multiband thresholds are floored
    at 0 dB so the same mix-up cannot crush the highs.

cathar v0.7.5

Choose a tag to compare

@github-actions github-actions released this 20 Sep 00:52

High-frequency enhance methods inspired by DSRE / HRAudioWizard
(#20).

Added

  • enhance --method harmonic|dsre (#20)
    — two inspectable high-frequency restorers on top of the shipped SBR /
    log-magnitude pair. harmonic extends detected overtone series into the
    empty band (HRAudioWizard HFP family, phase-locked, no Griffin-Lim).
    dsre waveshapes the existing highs and high-passes the new content above
    the original ceiling (DSRE / DSEE-like). Both fill a rolled-off top at the
    same sample rate; replicate / interpolate still require a rate increase.
    Library: EnhanceMethod::{Harmonic, Dsre}.

cathar v0.7.4

Choose a tag to compare

@github-actions github-actions released this 20 Sep 00:54

Tape / VHS restoration chain and measured de-hum / de-plosive fixes
(#25).

Added

  • Tape / VHS restoration chain (#25)
    — cathar vhs runs a gated cascade: DC block, rumble high-pass, stereo
    azimuth + bass-mono, declip (only if flat-top runs are present), dropout
    inpaint, declick, decrackle, adaptive dehum, event-gated deplosive, coherent
    spectral subtraction from the quietest 4 s, multiband de-ess. Library:
    vhs_restore, VhsOptions. Inspired by the measured
    auto_pure_linear stages in
    AI Hybrid VHS Audio Restorer.
  • detect_mains_hz — pick 50 vs 60 from the recording's quiet spectrum.
  • learn_noise_print_quietest — noise print from the quietest N seconds.
  • remove_dc — mean subtraction (DC blocking).

Changed

  • dehum --adaptive — each harmonic is cancelled at the frequency it
    actually sits (tape lines land 1–8 Hz off the exact series); 50 vs 60 is
    taken from the recording when the other series is clearly stronger;
    harmonics that do not stand out are skipped, so no-hum files pass through
    unchanged. --freq 0 auto-detects. Envelope bandwidth widens with harmonic
    number; a 6 dB cap over the running envelope keeps a voiced partial parked
    on a mains line from being taken with it.
  • deplosive — default is now event-gated (--method events): a blast
    under 150 Hz that stands over the low band's running level and leads the
    mid band is taken down, and nothing else is touched. Undamaged material is
    bit-identical. --method transients keeps the legacy whole-file STFT path,
    which was measured harmful on controls.

cathar v0.7.3

Choose a tag to compare

@github-actions github-actions released this 01 Sep 10:20
v0.7.3
8998e9e

Added

  • stats restoration triage (#22)
    — noise-floor dBFS (quietest 15 % of frames), SNR, and clip-run counts
    (flat-topped peaks at |x| ≥ 0.99). Failing checks print one suggested
    command (declip, denoise, or normalize --true-peak -1). Library:
    Stats::{noise_floor_dbfs, snr_db, clipped_samples, clipped_runs, suggestions},
    Suggestion. No mix-quality score.

cathar v0.7.2

Choose a tag to compare

@github-actions github-actions released this 04 Aug 23:40

Stereo toolkit and phase-aware alignment / diagnostics
(#19).

Added

  • stereo command / mid-side toolkit — exact M/S encode–decode, --width
    (scale Side), --mono-below (mono-maker via elliptical crossover), --upmix
    (Haas mono→stereo), --haas-ms, and --ms / --from-ms. Library:
    ms_encode, ms_decode, stereo_width, mono_below, upmix_mono,
    haas_delay, phase_correlation.
  • GCC-PHAT alignment — align / azimuth accept
    --method correlation|gcc-phat for lag estimation on level-mismatched or
    mildly reverberant pairs. Library: LagMethod, estimate_lag_with_method,
    align_with_method, azimuth_correct_with_method.
  • stats phase correlation — stereo files report zero-lag L/R correlation
    in [-1, +1] (mono compatibility / out-of-phase check).

cathar v0.7.1

Choose a tag to compare

@github-actions github-actions released this 02 Aug 06:11

De-click / de-clip method selection and survey-family reconstruction algorithms
(#17).

Added

  • declick --method ar|cubic — reconstruction is selectable. Default is
    autoregressive Janssen interpolation (same family as inpaint); cubic keeps
    the legacy Hermite fill. Library: DeclickMethod, declick_with_method.
  • declip --method spade|cubic|social|omp|nmf|neural — A-SPADE remains
    the default (survey-preferred sparse Gabor reconstruction). Additional pure-
    Rust methods from the Rajmic et al. / Adler / Bilen lineage:
    • social — Persistent Empirical Wiener (PEW) social sparsity on a
      time-frequency neighbourhood + consistency projection
    • omp — constrained matching pursuit on a per-frame DFT dictionary
    • nmf — low-rank NMF of the STFT magnitude, phase retained
    • neural — deep-unfolded soft-threshold ISTA (LISTA-style, weight-free;
      not a supervised DeclipNet — those need trained checkpoints)
    • cubic — fast shoulder-Hermite fill for light clips / previews
      Library: DeclipMethod, declip_with_method (module declip).

Changed

  • declick default reconstruction — now AR (Janssen) instead of cubic-
    Hermite; detection is unchanged (sliding-window local RMS).
  • README — algorithm table corrected: declip documents A-SPADE (was stale
    cubic text), declick documents AR + method flags.
  • Book — chapter 6 (clicks/clipping) updated for AR de-click and method flags;
    cites the Rajmic et al. de-clipping survey for A-SPADE.
  • Book — brought chapters in line with v0.6.1–v0.7.0: fixed stale vinyl
    workflow text; expanded toolbox table; added adaptive de-hum, WPE de-reverb,
    enhance --method, optional ml-denoise, and broadcast/CD de-emphasis;
    updated industry comparison, glossary, and book/README.md contents.

cathar v0.7.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 01:09

Restoration-depth & transform release: time-stretch/pitch, and a broad
0.7.x sweep of research-backed DSP — pitch detection, separation, inpainting,
adaptive de-hum, pre-emphasis decode, alignment, wow/flutter, WPE de-reverb, and
sinusoidal modeling. All deterministic, pure Rust.

Added

  • sms command — sinusoidal-modeling tonal purify (peak tracking + additive
    resynthesis). Library: analyze_sms, synthesize_sms, SinusoidalModel.
  • dereverb --wpe — Weighted Prediction Error dereverberation (per-bin
    weighted linear prediction in the STFT domain). Library: wpe.
  • dewow command — correct wow & flutter (pitch drift) by tracking a
    dominant tone's instantaneous frequency and time-warping to flatten it.
    Library: dewow.
  • azimuth command — correct stereo azimuth skew (align R to L by
    sub-sample cross-correlation). Library: azimuth_correct.
  • align command — time-align a recording to a reference track (multi-mic).
    Library: align, estimate_lag.
  • dehum --adaptive — track a drifting mains fundamental + per-harmonic
    amplitude via an I/Q heterodyne canceller. Library: dehum_adaptive.
  • deemphasis command — analog playback de-emphasis (FM 50/75 µs, CD/IEC
    50/15 µs). Library: deemphasis, Emphasis.
  • Constant-Q transform — log-frequency analysis primitive. Library: cqt,
    CqtSpec.
  • hpss command — harmonic/percussive separation (Fitzgerald median
    filtering); writes both layers, exact reconstruction. Library: hpss.
  • inpaint command — reconstruct dropouts/mutes by autoregressive
    (Janssen) gap interpolation; explicit --start-ms/--len-ms or auto zero/NaN
    detection. Library: inpaint_gap, inpaint_auto.
  • decrackle command — suppress dense vinyl surface crackle via a
    Laplacian detector over a running noise floor + cubic-Hermite repair.
    Library: decrackle.
  • YIN pitch detection — detect_pitch, fundamental_hz; stats now
    reports an f0 line.
  • tempo / pitch / speed commands — time-scale and pitch-scale audio.
    tempo --factor changes duration with pitch preserved; pitch --semitones
    shifts pitch with duration preserved; speed --factor resamples (both change,
    like tape). Two engines via --mode wsola|pv. Library: time_stretch,
    pitch_shift, StretchMode — WSOLA overlap-add (default, no FFT) and a
    phase-vocoder with instantaneous-frequency phase propagation. Closes the 0.7
    SoX-parity gap for speed/tempo/pitch.

cathar v0.6.1

Choose a tag to compare

@github-actions github-actions released this 06 Jul 13:30

Added

  • riaa command — RIAA playback (de-emphasis) for digitized vinyl, with
    optional --elliptical <Hz> to sum lows to mono on stereo captures. Library:
    riaa_deemphasis, elliptical_mono, vinyl_restore.
  • dequantize command — reduce quantization grain from low-bit-depth
    sources via inspectable neighbour-prediction on the quantisation lattice.
    Library: dequantize. Foundation for deeper co-sparse methods (see ROADMAP).
  • enhance --method replicate|interpolate — bandwidth extension now selects
    SBR band replication (default) or log-magnitude spectral extrapolation.
    Library: EnhanceMethod, bandwidth_extend_with_method.
  • Contributor algorithm specs — docs/algorithm-specs.md documents
    conventions and planned restoration-depth implementations.
  • ROADMAP — marks 0.6.x digitization items shipped; adds research &
    project inspiration index and 0.7.x restoration track.
  • Book — new chapters on vinyl digitization (RIAA)
    and dequantization; toolbox table and glossary
    updated.