Skip to content

Releases: linuxmatters/jive-vocals

Jive Vocals 0.7.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 15:55
0.7.0
a4adcb1

Highlights ✨

Renamed to Jive Vocals

The project is now Jive Vocals (formerly Jivetalking). The binary, module path, assets, CLI name, and TUI wordmark all move from jivetalking to jive-vocals. The benchmark env var is now JIVE_VOCALS_BENCH_FIXTURE. The voice emoji changed from 🕺 to 🗣️ .

Action needed: the installed binary is now jive-vocals. Reinstall with just install and update any scripts that call the old name.

Exit codes

Jive Vocals now exits 1 when any file fails to process or analyse, so CI and batch scripts can detect failures. User cancellation (q or Ctrl+C) still exits 0. See the new Exit Codes section in the docs.

Faster analysis and smoother TUI

  • Speech and noise band analysis run in parallel behind a shared semaphore.
  • The afftdn noise-band pass is skipped when the custom profile cannot be used.
  • The TUI reuses cached queue rows and pre-rendered active rows to cut redraw work.

Fixes

  • Dynamic range diagnostics restored in the report and JSON (dynamic_range_db).
  • Run-record JSON now round-trips: emitted JSON rebuilds elected profiles and normalisation data.
  • Run-record data is snapshotted before serialising, so late processing cannot corrupt it.
  • Help text wraps to the terminal width, so narrow panes no longer overflow.
  • Status boxes align with the filter chain (true peak moved to the first row).
  • Nil config, measurements, and output paths are guarded during processing.

Maintenance

  • Updated ffmpeg-statigo to v8.1.2.0.
  • Broad internal cleanup: extracted the limiter module, typed run-record DTOs, shared region/spectral/metric helpers, British English spelling, and removed dead code.
  • Dependency bumps: nixpkgs, actions/checkout v7, github/codeql-action v4.36.2.

Changes since 0.6.1

  • chore: update gif (a4adcb1)
  • chore: rebrand emoji from 🕺 to 🗣️ (98fb953)
  • refactor: remove dead code and simplify internal structures (897277c)
  • fix: wrap terminal output and guard nil processing paths (acc535b)
  • perf: reduce analysis and redraw overhead (77f6044)
  • fix(ui): align status boxes with filter chain (4026601)
  • chore: update ffmpeg-statigo to v8.1.2.0 (8ef2dfa)
  • fix(report): restore dynamic range diagnostics (19c59bd)
  • chore: drop harper dictionary (db1e05c)
  • fix: address review feedback across CLI, pools, UI, and docs (a5d65da)
  • fix(processor): include dynamic range in diagnostics JSON (3737b02)
  • refactor(processor): extract shared region measurement runner (19db458)
  • refactor(processor): remove VAD axis indirection (51734ca)
  • refactor(report): centralise metric descriptors (556d93e)
  • refactor(processor): deduplicate spectral metric handling (28e618e)
  • fix(processor): restore run-record JSON round-trip (41e61db)
  • fix(processor): snapshot run record data before serialising (37c2799)
  • refactor(processor): use typed DTOs for run record serialisation (fd31bc3)
  • refactor: remove dead analysis and normalisation code (ab85c17)
  • refactor: polish comments across processor, audio, report, and ui modules (4383d9d)
  • refactor: extract limiter derivation to separate module (700958a)
  • refactor: rename project to Jive Vocals (77a2537)
  • fix(go): don't ping point release (cb8117a)
  • chore: update ffmpeg-statigo to v8.1.1.3 (ac6dbf1)
  • fix: exit 1 when any file fails to process or analyse (29f8fd7)
  • refactor: consolidate limiter derivation and guard duration sentinel (b17f405)
  • chore(deps): bump nixpkgs from 567a49d to b5aa0fb (a13ea36)
  • chore(deps): bump the github-actions group across 1 directory with 2 updates (9593f43)
  • refactor: remove dead code and consolidate config derivation (6fb0b3d)
  • docs: reframe Levelator medium-term levelling gap as tested-and-rejected (8d7c074)
  • docs: rewrite Levelator comparison against current pipeline and primary sources (117a39f)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to ~/.local/bin (on PATH for most shells, no root required):

# Linux (amd64)
chmod +x jive-vocals-linux-amd64
mkdir -p ~/.local/bin && mv jive-vocals-linux-amd64 ~/.local/bin/jive-vocals

# macOS (Apple Silicon)
chmod +x jive-vocals-darwin-arm64
mkdir -p ~/.local/bin && mv jive-vocals-darwin-arm64 ~/.local/bin/jive-vocals

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.6.1

Choose a tag to compare

@github-actions github-actions released this 30 Jun 12:33
0.6.1

Changes since 0.6.0

  • fix(processor): count NaN as floored in voice-activated VAD (0a36ab6)
  • feat(report): add jivetalking version, executable path, and floored-fraction to run provenance (a42f59b)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.6.0

Choose a tag to compare

@github-actions github-actions released this 21 Jun 00:53
0.6.0
e360692

Highlights ✨

The headline: voice-aware audio analysis, a redesigned live TUI, and structured Markdown/JSON reports. This is the largest release since the tool's first cut.

Audio quality

  • Voice-activity detection (VAD). A single Pass 1 detector finds speech and room tone together, then tunes the gate, denoise, and de-esser per file. It also recognises platform-gated (voice-activated) captures and adapts to them.
  • Measured-profile noise removal. afftdn spectral denoise replaces the old compand stage and runs with a custom per-band noise profile measured from each recording. On the 61-stem validation corpus it cleans the noisiest sources by up to 52 dB while holding speech crest and dynamics, and backs off automatically on voice-activated captures.
  • Deterministic brickwall limiter with adaptive true-peak tuning. Every file lands at -16 LUFS / -1 dBTP. Across the corpus: zero clippers.

Live feedback

  • New status boxes show the adapted filter chain and the Pass-1 measurements while a file processes.
  • The done box adds a Recording score (source-quality stars), true-peak and dynamics before to after, and input-gain advice with a thermometer bar.
  • The file queue scrolls during processing, with a scrollbar and a scroll hint.

Reports and diagnostics

  • An always-on Markdown report per file, plus a structured JSON run-record with sidecars, replacing the old plain-text .log.
  • --diagnostics emits before/after spectrogram PNGs for the whole file, the room tone, and the speech region.

Fixes

  • Re-running a file now overwrites an existing output instead of failing at the final publish after minutes of work.
  • Voice-activated recordings now show a meaningful noise floor and SNR in the TUI instead of digital-silence sentinels.

Under the hood

  • Parallel Pass-1 band measurements and seek-to-region decoding keep analysis fast. Brand names were removed from identifiers and docs, and a new docs/Pipeline.md explains the how and why of the processing chain.

Changes since 0.5.1

  • fix(processor): overwrite existing output instead of failing at publish (e360692)
  • fix(ui): guard separation DB against unmeasured noise floor in voice-activated mode (2287a15)
  • fix(processor,ui): show meaningful noise floor for voice-activated input (cb6be1a)
  • feat(ui): add scrollbar and scroll hint on viewport overflow (9b72de1)
  • fix(ui): make viewport scrollable during file processing (6fdb8df)
  • refactor: address peer-review findings across README and UI layers (b8904a9)
  • refactor(processor): rename calculateSpeechGateThresholdLegacy to calculateSpeechGateThresholdNoProfile (66301bb)
  • refactor: address peer-review findings across seven sub-directories (d2ae790)
  • docs: add sign-posts to Normalisation-Tuning.md from AGENTS.md and README.md (c14a703)
  • docs: extract normalisation tuning rationale to dedicated doc (fc4fbc8)
  • refactor: unify naming and idiomatic Go patterns across audio, CLI, and UI (8427744)
  • ci: pin CGO_ENABLED=1 on builder workflow jobs (627b42d)
  • refactor: improve resource safety, test coverage, and UI purity (dfbcfe2)
  • refactor: remove duplication and dead scaffolding across packages (a8f0ec6)
  • perf: seek to region for spectrograms and cache UI render styles (7d9db27)
  • perf(processor): seek to region before band measurement decodes (2850909)
  • refactor(docs): improve comment accuracy and consistency (98e3a97)
  • refactor: consolidate doc comments and extract spectrogram bounds helper (25102c5)
  • refactor(processor): extend NoiseProfile to the full spectral set (0b9f116)
  • refactor(ui): simplify rgb8 to use RGBAModel.Convert (9963897)
  • refactor(processor): replace math.Max/Min with built-in min/max functions (fbd926f)
  • refactor(cmd): use sync.WaitGroup.Go for cleaner goroutine spawning (44ec734)
  • refactor(processor): remove NoiseFloor field from ProcessingResult (552f2cf)
  • fix(ui): guard live Analysis box noise floor against unmeasured state (94e4432)
  • fix(processor): remove wrong-axis fallback from InputRoomToneFloorDB (4399138)
  • refactor(ui): reconcile noise-floor readouts with input-output before/after pair (eca3b1b)
  • fix(processor): guard levelling-compressor floor against unmeasured astats (fe48aff)
  • fix(processor): add adaptive floor to levelling-compressor threshold (02db698)
  • chore(deps): bump nixpkgs from a799d3e to 567a49d (e9e2392)
  • deps(deps): bump charm.land/lipgloss/v2 in the gomod group (5943961)
  • fix(report): render afftdn noise type in adaptation diagnostics (2f7f4ed)
  • refactor(processor): remove --room-tone-scan-duration flag (830f547)
  • refactor(processor): parallelize post-loop band measurements with bounded goroutines (6f9497a)
  • feat(processor): give afftdn a measured custom noise profile (e11af31)
  • feat(processor): adapt afftdn, disable on voice-activated and seed nf from measured floor (c3ad15e)
  • fix(processor): unify VAD noise seed onto momentary-LUFS axis (524532a)
  • refactor(processor): remove dead SpeechGateAggression diagnostic and sync gate filter comments (4a51543)
  • feat(processor): implement voice-activity-driven speech gate redesign (b793db5)
  • feat(testdata): add process-corpus recipe for binary version A/B analysis (c9e3744)
  • test(processor): verify noise-floor estimation tie-break determinism (56cb179)
  • fix(processor): add deterministic tie-break to candidate sort and sync Voice activated definition (04af1ef)
  • docs(processor): sync docs for unified VAD, speech scoring, and VoiceActivated semantics (1906465)
  • feat(processor): switch VoiceActivated flag from below-split to floored fraction (4760f4c)
  • fix(processor): sanitise non-finite floats in JSON sidecars (11937bc)
  • feat(processor): score speech candidates by SNR and duration saturation (be99232)
  • refactor(processor): retire room-tone candidates concept from schema (0bb5cb1)
  • refactor(processor): remove old voice-activity detector after Phase 1 unified VAD (273c608)
  • fix(processor): widen speech centroid bound from 4500 to 6000 Hz (a3dede6)
  • feat(processor,report): implement unified voice-activity detector in Pass 1 (74a1ca7)
  • fix(processor): decouple speech search from room-tone end (3c78d26)
  • fix(processor): restore speech-gate clamp precedence for crossed bounds (efc333c)
  • refactor: consolidate filter/report/ui code for maintainability (1dc2639)
  • perf(processor,ui,cli): optimise measurement-side reads and TUI render caching (d77e65e)
  • refactor: replace hand-rolled clamps with min/max builtins (4eb6375)
  • refactor(ui): wrap limiter diagnostics in test struct literals (88eec80)
  • refactor(report): extract stageGetter factory to eliminate closure duplication (7c63194)
  • refactor(processor): extract recordWrapper generic for duplicate accessor scaffolding (eca1fe2)
  • refactor(normalise): extract diagnostic structs and helper functions (ea4ee70)
  • refactor(cmd): extract shared artefact-emission spine into emitReportArtefacts (a4f1dce)
  • refactor(processor): bundle speech-gate parameters into context structs (e6d6b26)
  • refactor(cmd): bundle pool plumbing and extract report emission (dac5725)
  • refactor: extract renderFilledBar shared by GainBar and separationBar (62a247d)
  • refactor: extract formatByRule from the twice-copied metricFormat switch (69dd3c4)
  • refactor: collapsed Rumble/Bandlimit into one BiquadFilterConfig + keyword param (6672c14)
  • refactor: inline primaryColor/mutedColor/textColor aliases to canonical constants (0888c35)
  • refactor: drop dead shadowed options param from StyledHelpPrinter (48a345a)
  • refactor: remove dead-code symbols from comprehensive audit (4336a2a)
  • docs: clarify podcast loudness standard and remove stale benchmark reference (aec8922)
  • refactor(cmd): remove deprecated --silence-scan-duration alias (3de3a49)
  • docs(readme): move room-tone scan limiting section to docs/Usage.md (8970865)
  • docs(readme): move reference content to docs/Usage.md and signpost from README (cd689ef)
  • docs(readme): remove stale examples and consolidate development guidance (f3742b1)
  • refactor(docs): consolidate prose (7d729e8)
  • feat(docs): add Pipeline.md — comprehensive how/why guide to audio processing (db9cc6b)
  • docs(refactor): consolidate filter references and retire heritage documentation (e35ad30)
  • refactor: remove brand names from identifiers and documentation (aa0d244)
  • test(processor): remove stale reflection tests and obsolete logging probe (ba69dcc)
  • test(audio): add hermetic unit tests for reader package (1b0e2f0)
  • refactor(cmd): extract analysis report emission into separate function (f9aa602)
  • refactor: standardise spellings to British English (85619cc)
  • refactor(cmd): extract spectrogram render pattern into shared helper (0341993)
  • refactor: migrate test seams to dependency injection structs (93fa22a)
  • fix(docs): correct drifted filter documentation and remove stale process metadata (4987da6)
  • feat(processor): add deterministic brickwall limiter with adaptive loudnorm TP tuning (d7e3560)
  • fix(processor,report): prevent deadlock, handle errors on close, escape markdown pipes (1f7f537)
  • chore: update docs (2931391)
  • chore: update .gif (1dbd4c8)
  • feat(ui): add gain advice with thermometer bar to analysis mode (1c583cc)
  • feat(ui): add source-quality Recording score in done box (e0ef88d)
  • feat(ui): show true peak and dynamics before→after in done box (6f1f7b3)
  • refactor(ui): tighten analysis box padding and relabel gentle mode (b02b766)
  • feat(ui): add status boxes showing adapted config and Pass-1 measurements (19f785e)
  • feat(spectrograms,test): emit before/after spectrogram PNGs with --diagnostics; gate integration tests (a83a3bb)
  • feat(report): emit canonical run-record as structured markdown (2870790)
  • chore(build): update clean target to remove run-record artifacts (214bbe7)
  • docs: rewrite spectral metrics reference to objective definitions (cf68224)
  • feat(processor): em...
Read more

Jivetalking 0.5.1

Choose a tag to compare

@github-actions github-actions released this 11 Jun 09:31
0.5.1

Highlights ✨

Validated against the quality reference across the full corpus: equal or better loudness and dynamics, with a faster pipeline.

Audio quality

  • Speech detection now catches conversational speakers (gate lowered to 10s) — every presenter elects a speech profile, so filters adapt off speech-only measurements.
  • De-esser rebuilt on sibilant-vs-body band excess; it arms on genuine sibilance instead of a discredited centroid model.
  • Noise reduction swaps compand for afftdn — cleaner under-speech noise with less floor pumping.
  • Room-tone election picks a representative region by proximity rather than chasing the quietest sample.
  • Ceiling margin and crest handling now derive from the validation corpus.

Speed

  • Faster anlmdn path and tightened adeclick cut Pass 2/4 runtime at metric-parity quality.

Reporting accuracy

  • Reports show actual peak reduction (not zero dB), flag loudnorm dynamic-mode fallback, and use corrected noise-floor labelling.

Internals

  • Removed dead adaptive "theatre" across the gate, LA-2A, de-esser, and HP/LP — adaptation that never exercised its range is gone.
  • ffmpeg-statigo updated to v8.1.1.2; dependency bumps.

Changes since 0.5.0

  • fix(processor): derive ceiling margin from validation corpus (9e72033)
  • refactor(processor,audio): clarify callback semantics, frame aliasing, and cgo cleanup (ec38f20)
  • chore(deps): bump nixpkgs from 331800d to a799d3e (6e7bce7)
  • deps(deps): bump github.com/mattn/go-runewidth in the gomod group (a0e4a46)
  • refactor(processor): delete theatre from DS201 gate adaptive surface (e7736a2)
  • fix(logging): detect and report loudnorm dynamic fallback in mode headline (e372376)
  • fix(logging): report actual peak reduction instead of zero dB (e44fa59)
  • refactor(processor): simplify LA-2A to single threshold adaptation (c4729f6)
  • fix(processor): replace de-esser centroid model with band-excess engagement (31019cb)
  • refactor(processor): remove adaptive DS201 highpass and LP formatter theatre (46ec72c)
  • fix(logging,filters): correct noise-floor label and gain-normalisation format, extract afftdn helper (6585473)
  • fix(processor): replace fixed crest cap with population-relative outlier gate (583e23e)
  • refactor(processor): remove dead fallback in room-tone candidate election (54b1f17)
  • fix(processor): elect representative room tone by proximity instead of amplitude monotonic (6174cfa)
  • fix(processor): lower speech detection gate to 10s for conversational speakers (098ef6c)
  • refactor(processor): replace compand with afftdn in noise-reduction block (3fcc67f)
  • refactor(processor): make DS201 lowpass unconditional 20.5 kHz band-limit and tighten adeclick threshold to 1.7 (65f07d1)
  • chore: update ffmpeg-statigo to v8.1.1.2 (d62d42c)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.5.0

Choose a tag to compare

@github-actions github-actions released this 08 Jun 11:11
0.5.0

Highlights ✨

  • Terminal UI rebuilt on the Charm v2 suite: gradient VU meter with CIELAB colour interpolation, animated spring-eased peak marker, per-pass progress bar with gradient fill, and a timeline layout that persists throughout processing.
  • Completion summary redesigned with indigo done boxes, processing time, and objective quality scoring so you can see at a glance how well each file processed.
  • Multiple files now process in parallel automatically - concurrency is derived from the number of input files, no flag needed.
  • Analysis mode runs in parallel too, writes full results to log files, and now matches the processing view's layout and styling.
  • Loudnorm measurement switched from log capture to stats-file readback, making the normalisation pass more reliable across FFmpeg builds and edge cases.
  • Pass 1 hot loop deduplicated its metadata fetches, cutting analysis-phase overhead noticeably on longer recordings.
  • Go toolchain updated to 1.26, processor internals simplified, and three correctness issues identified in code review resolved.

Changes since 0.4.1

  • refactor(cli): unify help title with shared gradient wordmark (258cfb5)
  • chore(tailor): refit and alter (9ddef44)
  • refactor(cli): derive worker count from file count instead of flag (d00c9ab)
  • chore: update .gif (9f7bb53)
  • fix(ui): animate VU meter in Passes 3-4 with per-frame instantaneous levels (0883589)
  • feat(ui): collapse peak-marker to single line with superscript dB and arrow glyphs (d1c1dc5)
  • feat(ui): enhance done box with processing time row and improved formatting (1daa101)
  • refactor(processor): cleanse redundant comments in reader, encoder, frame_processor, and ui (def4a4d)
  • refactor: assorted fixes, clean-ups, improvements and performance tuning (#112) (0e38d08)
  • docs: correct ProcessAudio doc and remove stale encoder TODOs (0527a2a)
  • perf(analyzer): deduplicate ebur128/astats metadata fetches in Pass 1 hot loop (c039a9a)
  • refactor: simplify processor internals, remove dead code and redundant types (f8c216a)
  • refactor: modernise to Go 1.21+ stdlib generics and slices package (bc5db01)
  • fix: resolve three robustness issues identified by cubic review (7f2ed30)
  • feat(ui): redesign completion summary with indigo done boxes and objective quality scoring (ae00f41)
  • feat(analysis): write analysis reports to log files, show concise confirmations (8fd46a6)
  • feat(ui): align analysis mode with processing view layout and styling (71a4bf3)
  • feat(ui): animate peak marker with harmonica spring (531a86b)
  • refactor(ui): consolidate palette and recolour header and progress bar (7f102df)
  • feat(ui): restructure layout, add peak marker glyphs, and persist completion summary (f7c7951)
  • feat(ui): redesign time and peak display with timeline and elbow connector (75af67f)
  • feat(tui): extend audio level meter floor to -70 dB with sky-blue border and orange peak (295905c)
  • feat(ui): add smooth colour gradient to VU meter with CIELAB interpolation (1a5488a)
  • feat(ui): polish Pass progress bar with gradient fill and spring easing (10260cc)
  • feat(ui): adopt Charm v2 components for TUI primitives (3a587f3)
  • refactor(deps): migrate to Charm v2 suite (bubbletea v2.0.7, lipgloss v2.0.3) (45e2b65)
  • fix(cli): join analysis pool before reading results on user quit (b46b3e2)
  • feat(cli): add parallel analysis via bounded worker pool (3880202)
  • test(pool): guard channel waits with timeouts and join p.Run() lifecycle (13a1975)
  • fix(cli): ensure worker pool completes shutdown before main exits (846bb7e)
  • docs: document worker pool feature and --jobs flag (a4eebba)
  • feat(processor): add parallel multi-file processing via bounded worker pool (e089b29)
  • refactor(justfile): reorganise test recipes and remove deprecated bench targets (1d7b84b)
  • docs(processor): correct Pass 3 loudnorm mechanism and output filename documentation (a76fc58)
  • ci(workflows): pass GITHUB_TOKEN to library downloads in test and build jobs (126604e)
  • refactor(comments): cleanse codebase and correct stale constant documentation (33bddcb)
  • ci(fix): pass GITHUB_TOKEN to library downloads to prevent API limit exceedance (4997ad8)
  • docs(processor): clarify loudnorm output format and rate handling in Pass 4 (dec8358)
  • refactor(processor): replace log-capture loudnorm with stats-file readback (e39a1dd)
  • chore(deps): bump Go to 1.26.3 and update dependencies (a4f2c91)
  • chore(deps): bump nixpkgs from 64c08a7 to 331800d (772d144)
  • fix(test): copy instead of alias file slice (769dda7)
  • refactor(ui): route progress messages by FileIndex instead of CurrentIndex (a18b159)
  • refactor(processor): serialize AVFilterGraphFree calls with mutex for loudnorm concurrency safety (f925c2f)
  • test(processor): add ebur128 metadata mode concurrency probe (9095f18)
  • refactor(processor): remove global DebugLog and thread logger through call chains (21578a6)
  • chore(deps): bump the github-actions group across 1 directory with 2 updates (aa63375)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.4.1

Choose a tag to compare

@github-actions github-actions released this 31 May 00:36
0.4.1

⚡ Pass 4 is roughly 4.5× faster

loudnorm in linear mode processes internally at 192 kHz and emits at that rate, so the declicker and the trailing analysis filters were quietly doing 4× the work on every file. Pass 4 now resamples back to the source rate before declicking, cutting its runtime by about 4.5× across the board.

The effect is most dramatic on long, quiet recordings: a 49-minute file that previously crawled through Pass 4 (and appeared stuck) now completes in well under two minutes. That apparent "stall" was also a misleading progress bar, which now advances smoothly.

Changes since 0.4.0

  • docs: clarify not-clamped filter chain heading (256b523)
  • fix(processor): insert aresample between loudnorm and adeclick in Pass 4 (2177847)
  • build(deps): bump golang.org/x/sys to v0.44.0 to fix GO-2026-5024 (42a1e0f)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.4.0

Choose a tag to compare

@github-actions github-actions released this 29 May 20:18
0.4.0

Stability, clarity, and clean foundations 🧹

This release fixes real batch-processing bugs and sharpens the language Jivetalking uses to describe what it measures. The -16 LUFS target and audio quality are unchanged.

The most important fix: adaptive per-file tuning is now properly isolated, so processing a batch of recordings no longer lets one file's settings bleed into the next. Loudnorm capture got hardened too, no double-close, no leaking state between files. Output filenames now carry the correctly rounded LUFS value.

The "silence" detection concept has been renamed room tone throughout the tool, reports, and docs. That's what it actually measures: the quiet ambient sound between speech that profiles your noise floor. Reports now prioritise the elected room-tone candidate and fall back gracefully when scoring thresholds aren't met, rather than promoting rejected candidates.

Under the hood, a significant refactor split the filter configuration into base and effective layers and threaded it cleanly through the pipeline. No change to processing behaviour, but the groundwork is laid for cleaner adaptive processing ahead.

Changes since 0.3.2

  • chore(deps): bump nixpkgs from d233902 to 64c08a7 (512bb58)
  • refactor(docs): align silence terminology to room tone throughout (37a3bca)
  • refactor: rename silence domain language to room tone (ccf32bd)
  • fix(processor): round LUFS value in output filenames (1911f4f)
  • chore(deps): bump nixpkgs from da5ad66 to d233902 (1ae4c71)
  • chore(deps): bump nixpkgs from 549bd84 to da5ad66 (06f4ef0)
  • refactor(processor): remove unused analysis metadata field (9db49c9)
  • chore(deps): bump nixpkgs from 62dc67a to 549bd84 (e04063e)
  • chore(deps): bump github/codeql-action (fd94f52)
  • refactor(processor): use progress update events for callbacks (886f683)
  • ci: add Dependabot Nix updates (b634d7b)
  • refactor(processor): centralise loudnorm limiter planning (7f804f8)
  • refactor(processor): replace flat filter config fields with structs (66dfc58)
  • fix(processor): preserve input and output measurement JSON fields (37d41d6)
  • refactor(processor): nest spectral metrics under shared model (56fe639)
  • fix(processor): isolate loudnorm capture to graph finalisation (0f76324)
  • fix(processor): harden temp output publishing and debug log setup (716bed2)
  • fix(processor): accept 0.0 dBFS LA-2A peaks (0ba4a1c)
  • refactor(processor): split adaptive and reporting helpers (2d910fa)
  • docs(processor): update LA-2A FFmpeg example values (ca97f6c)
  • docs(processor): align docs with filter config split (b0b1ee4)
  • refactor(processor): remove filter config compatibility layer (d2e5fac)
  • refactor(processor): thread effective config through pipeline (3ced3a8)
  • refactor(processor): split adaptive config and diagnostics (9970666)
  • refactor(processor): split base and effective filter config (ee60d77)
  • fix(processor): mark loudnorm encoder closed before close attempt (4807af6)
  • fix(processor): avoid double closing loudnorm encoder (863af94)
  • fix(processor): scope loudnorm capture cleanup (a635fab)
  • test(processor): cover adaptive config state isolation (667f61d)
  • fix(processor): serialise loudnorm log capture lifecycle (4b9f2e9)
  • fix(processor): return effective adaptive config per file (098ddc8)
  • fix(processor): isolate adaptive config state per file (b910bcb)
  • refactor(processor): clean up audio processing and reporting internals (#79) (9ee01a4)
  • docs: update analysis-only function references (91c3c8e)
  • refactor(logging): split analysis display sections (4f6235f)
  • refactor: consolidate report candidate display helpers (c19f5fb)
  • refactor(processor): simplify filter frame handling (be73a77)
  • refactor(processor): remove unused silence region duration parameter (f9f1f25)
  • refactor: remove unused audio analysis helpers (ebad99d)
  • refactor(processor): remove adeclick from pass 2 registry (6321b7b)
  • refactor(processor): remove obsolete pass 2 Volumax surface (cb901bd)
  • fix(processor): avoid electing rejected silence candidates (be651e4)
  • feat(logging): prioritise elected candidates in reports (5b99f07)
  • fix(processor): fall back when candidate scores miss thresholds (4bc991d)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.3.2

Choose a tag to compare

@github-actions github-actions released this 02 May 19:08
0.3.2
271fac4

Faster, with no asterisks 🚀

This release is 1.68× quicker end-to-end. A 30-minute recording that used to take 2min 30secs now wraps in 1min 30secs (on my workstation), lifting real-time throughput from 12× to 20× on the same source audio. A four-host show saves roughly four minutes of preprocessing per episode.

Two filters got retuned. The anlmdn denoiser now has a much smaller research radius, and adeclick has a less sensitive threshold, halved overlap, and spline interpolation.

Audio quality is unchanged. Same -16 LUFS target, same true peak within run-to-run noise, same hum cleanup verified by spectrogram. Speech metrics stayed in the same interpretation bands. Faster does not mean rougher 💎

Changes since 0.3.1

  • chore(tailor): update fit and alter (271fac4)
  • docs(benchmarks): consolidate anlmdn/adeclick investigations into engineering record (7e83625)
  • feat(processor): adopt source-rate anlmdn defaults from matrix spike (af87ba5)
  • fix(bench): address PR review portability and stale --logs feedback (2c0c8c8)
  • feat(processor): tune adeclick defaults for lower Pass 4 cost (848d9cc)
  • feat(processor): adopt 32k pre-anlmdn production default (2b16185)
  • chore(bench): add baseline capture task for fullbench profiling (a4b79da)
  • test(processor): add fullbench filter-ablation benchmark suite (8858a3c)
  • fix(cli): hide benchmark paths in non-tty analysis output (1cd348f)
  • docs(readme): update log reporting and benchmark documentation (0929ba4)
  • feat(cli): add analysis-only timing report output (3feda13)
  • feat(cli): always generate processing reports with warning output (79409bb)
  • feat(processor): add reportable timing metadata for processing and analysis (b202945)
  • test(processor): add benchmark scaffolding and profiling tasks (c77ce29)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.3.1

Choose a tag to compare

@github-actions github-actions released this 26 Apr 13:31
0.3.1
e6569ce

Changes since 0.3.0

  • fix(test): remove additional SA5011 staticcheck warnings in analyzer_test (e6569ce)
  • fix(test): remove redundant nil checks in analyzer tests (3d78f99)
  • fix(test): remove redundant nil checks in processor tests (a0c2c4c)
  • chore: update integration test jusfile (ff81d50)
  • chore: enable modernize linter and fix golangci-lint path patterns (b414e5f)
  • docs(readme): document --silence-scan-duration flag (86054a8)
  • feat(processor): add --silence-scan-duration flag to limit silence-sample scan (09f674a)
  • test(processor): add tests for FLAC output fix (a41e2d0)
  • fix(processor): always emit valid FLAC output regardless of input extension (2a6e43e)
  • chore(deps): bump github.com/alecthomas/kong from 1.14.0 to 1.15.0 (#66) (f604003)
  • chore(deps): bump github/codeql-action from 4.35.1 to 4.35.2 (#70) (488f3fb)
  • chore(deps): bump robherley/go-test-action from 0 to 1 (#69) (77a503d)
  • chore(deps): bump dependabot/fetch-metadata from 2 to 3 (#68) (1096004)
  • chore(deps): bump softprops/action-gh-release from 2 to 3 (#67) (559a45b)
  • chore(deps): bump github/codeql-action from 4.34.1 to 4.35.1 (#65) (797bb81)
  • chore(deps): bump actions/download-artifact from 7 to 8 (5033d53)
  • chore(deps): bump github/codeql-action from 4.32.6 to 4.34.1 (#63) (81830e7)
  • ci(workflow): resolve submodule dependencies in CI jobs (53d0701)
  • ci(workflow): adopt unified tailor sentinel gate pattern and consolidate release mechanism (ec1360c)
  • refactor(processor): eliminate redundant interval accumulator reset call (42d5eda)
  • refactor(processor): extract region pair construction into reusable function (c706579)
  • refactor(processor): consolidate spectral averaging with finalizeSpectral and writeSpectralTo methods (2628498)
  • docs(processor): clarify MeasureOutputRegions comment for consistency (55abb9c)
  • refactor(processor): consolidate test-only helpers and inline wrapper function (42e0b40)
  • refactor(processor): remove unused silence detection from analyzer_metrics (93db416)
  • refactor(main): replace string comparison with sentinel error for cancellation (aa788dc)
  • refactor(processor): eliminate variable shadowing and dead code in analyzer (5d016e1)
  • refactor(processor): unexport unused public functions in analyzer (1b519ab)
  • refactor(processor): eliminate hidden mutation in buildLoudnormFilterSpec (619f7e8)
  • refactor(processor): consolidate safety margin and limiter ceiling constants (ab63926)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.

Jivetalking 0.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Mar 18:02
0.3.0
010048f

Changes since 0.2.2

  • docs(processor): document Pass 3 and 4 loudness normalisation ordering (010048f)
  • style(processor): align NormalisationResult struct fields with gofumpt (733af3d)
  • docs(processor): document Pass 3 filter prefix in diagnostics and architecture (c199011)
  • refactor(processor): reorder computation and simplify loudnorm signatures (7d6a7c6)
  • refactor(processor): extract calculatePreGain and buildPreLimiterPrefix (51f228f)
  • test(processor): clarify ClampedTargetPropagation test scope (821ec12)
  • fix(processor): pass post-gain input to LUFS16 target calculation (b4abdd1)
  • fix(pregain): correct worked example and strengthen limiter test assertions (06152e3)
  • docs: document pre-gain compensation for clamped ceilings (95f1f62)
  • docs(logging): add pre-gain diagnostics to peak limiter report (ade9512)
  • test(processor): verify pre-gain deficit arithmetic and ceiling re-derivation (e77ee6c)
  • feat(processor): implement pre-gain compensation before alimiter (b1b2741)
  • refactor(processor): extract limiter constants and add pregain diagnostics (0b75807)
  • fix(processor): update stale severity comment to match 6.0 dB scaling (4cf4f26)
  • perf(processor): increase la2aHighCrestMaxDeficit from 4.0 to 6.0 dB (3da5c81)
  • perf(processor): reduce la2aHighCrestMaxDeficit from 8.0 to 4.0 dB (e48b3d3)
  • docs: correct LA-2A parameter ranges and remove invalid example values (e5bacc1)
  • feat(docs): document high-crest override diagnostics and LUFS formatting fixes (07f04f9)
  • feat(processor): add high-crest override diagnostics and fix LUFS truncation (0ece388)
  • feat(processor): wire high-crest override system into LA-2A sub-tuners (d6d1005)
  • feat(processor): add LA-2A high-crest override detection and parameter calculation (6230ace)
  • refactor(processor): add LA-2A high-crest override infrastructure (bb6ef2c)
  • refactor(processor): modernise Go code to use builtin functions and range-over-int (4746c7f)
  • docs: update AGENTS.md (fda3c0d)
  • refactor: resolve golangci-lint violations across codebase (206dc5a)
  • ci(release): quote shell variables in GitHub Actions workflow (c6343a3)
  • refactor(logging): use zero values instead of math.NaN() for uninitialized variables (d61c5ae)
  • build: add linter configuration and tooling (c89b211)
  • docs: clarify LUFS terminology and fix normalise parameter comments (c2bfb7c)
  • docs: update Levelator gap analysis with more correct "podcast-ready" (6a50038)
  • fix(ui): show only input filename during active processing (b2971c8)
  • docs: update LUFS target references from -18 to -16 (511a9f9)
  • feat(processor,ui,logging): add LUFS value to output filename (648ff45)
  • refactor(processor,logging): replace hardcoded LUFS target with NormTargetLUFS constant (3efeb8d)
  • feat(processor): migrate LUFS target from -18 to -16 (004d8dd)
  • fix(processor,logging): fix compand state leakage and improve noise floor tracking (057c206)
  • fix(logging): improve silence detection section display in analysis output (7ac9937)
  • fix(logging): display derived noise floor value instead of -Inf in analysis output (06fcb50)
  • docs(comparison): clarify NoiseRemove compand and document silence detection capabilities (0daad35)
  • docs(processor): update documentation for voice-activated detection and NR compander (9269d0e)
  • feat(processor): add adaptive speech RMS minimum threshold (0cc44d3)
  • feat(logging): add voice-activated recording indicator and compander annotation (a70f485)
  • feat(processor): disable compand for uncalibrated recordings (d0d996a)
  • feat(processor): widen speech interruption tolerance for voice-activated recordings (11731d3)
  • feat(processor): detect voice-activated recordings from digital silence fraction (33a7983)
  • docs(logging): add rejection summary for silence candidates (6d51b60)
  • refactor(logging): hide rejected silence candidates in analysis output (657d232)
  • feat(processor): reject digital silence in room tone candidate selection (947fdfd)
  • fix(processor): prevent panic in silence region test by using fatalf (cff086b)
  • docs: clarify silence placement flexibility in recording workflow (9cecb95)
  • refactor(logging): restructure silence candidate display with elected-first ordering (ebdfe17)
  • feat(processor): refine silence candidates before scoring to reject boundary transients (4b38b1e)
  • fix(processor): remove time-based constraints from room tone candidate discovery (8322c62)
  • fix(cli): handle user cancellation in analysis mode and nil measurements (47660a4)
  • fix(processor): handle planar audio formats in RMS and peak analysis (dbab9e3)
  • fix(processor): resolve five robustness and quality issues from PR #49 review (890f47b)
  • fix(audio): rename Seek to SeekTo to resolve interface conflict (b99cd12)
  • refactor(processor): extract frame processing into dedicated module (7f71743)
  • refactor(processor): extract output region measurement into analyzer_output.go (691c617)
  • refactor(processor): extract candidate detection and scoring to separate file (14b1afc)
  • refactor(processor): extract metrics types and functions to analyzer_metrics.go (2f1a841)
  • refactor(processor): embed SpectralMetrics in candidate types (f8ddcf8)
  • refactor(processor): add json tags to SilenceCandidateMetrics (51d2677)
  • refactor(processor): consolidate measureOutput region functions into generic implementation (0aa0da0)
  • refactor(processor): consolidate spectral accumulator in output speech region measurement (5a9f055)
  • refactor(processor): consolidate spectral accumulator variables in silence region measurement (8d11317)
  • refactor(processor): consolidate final frame loop migration in measureOutputSpeechRegionFromReader (dff8c25)
  • refactor(processor): migrate measureOutputSilenceRegionFromReader to runFilterGraph (e0e340d)
  • refactor(processor): migrate AnalyzeAudio to use runFilterGraph (a0335fd)
  • refactor(processor): migrate processWithFilters to runFilterGraph (7b5c7e1)
  • refactor(processor): migrate applyLoudnormAndMeasure to runFilterGraph (104d013)
  • refactor(processor): migrate measureWithLoudnorm to use runFilterGraph (9076a50)
  • feat(processor): add runFilterGraph function for frame processing abstraction (9d14b9d)
  • refactor(processor): remove speculative generality and introduce PassNumber type safety (342f438)
  • chore: update integration test justfile (15b8999)
  • chore(tailor): fit project with community health files (cbb82d9)
  • fix(processor): handle ParseFloat errors in loudnorm measurement parsing (0be23ab)
  • refactor(stdlib): modernise to Go 1.21+ features (849b6c9)
  • chore(build): upgrade go from 1.24.0 to 1.26.1 (6c7b934)
  • chore(deps): bump actions/upload-artifact from 6 to 7 (5667b37)
  • chore(deps): bump github.com/alecthomas/kong from 1.13.0 to 1.14.0 (cce45ef)
  • docs: add some links to references (4bd173f)

Installation

Download the appropriate binary for your platform below, make it executable, and move it to your PATH:

# Linux (amd64)
chmod +x jivetalking-linux-amd64
sudo mv jivetalking-linux-amd64 /usr/local/bin/jivetalking

# macOS (Apple Silicon)
chmod +x jivetalking-darwin-arm64
sudo mv jivetalking-darwin-arm64 /usr/local/bin/jivetalking

Checksums

SHA256 checksums are provided below for verification.