Skip to content

Jivefire 0.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Jun 11:09
0.4.0

Highlights ✨

  • Spring visualiser dynamics are now the default. Spectrum bars snap instantly to new peaks then spring back using harmonica physics, with an amplitude gain for a fuller, livelier look. No flag needed.
  • Rebuilt TUI on Charm v2. The entire progress and summary display has been reworked: fixed-width metric boxes, a live file-size gauge, encoder-name readout, and time/speed/audio figures rendered with proper Unicode glyphs. Dynamic range is now shown in dB.
  • Audio resampling migrated to libswresample. Mono-to-stereo conversion now uses FFmpeg's own downmix coefficients and correctly drains the decoder at end-of-stream, eliminating subtle sample-count mismatches in the final seconds.
  • A/V sync drift corrected. A longstanding offset between audio and video timestamps has been fixed; output MP4s should now stay in lock-step from start to finish.
  • Meaningfully faster encoding. Per-frame heap allocations and goroutine churn in the hot path have been eliminated, and shared YUV conversion primitives are now centralised in an internal package, reducing redundant work per frame.
  • Stability and race-condition fixes throughout. Preview-frame rendering is now double-buffered (no more concurrent-access panics under load), the encoder worker pool cleans up correctly on initialisation failure, and a data race on asset warnings at startup has been resolved.

Changes since 0.3.3

  • fix(ui): double-buffer preview frames to eliminate concurrent access (4666c28)
  • chore: update .gif (5942348)
  • fix(ui): eliminate data race on preview frame buffer (2e08e92)
  • ui: display time, speed, and audio metrics with proper Unicode glyphs (2d4f623)
  • refactor(audio): migrate to libswresample for sample conversion (53d8e5d)
  • refactor: eliminate comment clutter and improve doc clarity (34f464e)
  • chore(deps): bump nixpkgs from 64c08a7 to a799d3e (dd266b7)
  • fix(audio,ui,cli): guard against zero sample rate and eliminate assetWarnings race (73c7922)
  • fix(encoder): defer worker pool cleanup on initialization failure (5383c94)
  • fix(audio,encoder,cli): correct A/V sync drift, surface asset warnings, and eliminate encoder allocations (01e1b3e)
  • refactor: consolidate duplicated code and eliminate redundant operations (e29dd17)
  • perf: eliminate heap allocations and goroutine spawning in per-frame hot paths (f98c428)
  • fix(audio): duplicate mono samples for stereo channel encoding (ea22ab6)
  • refactor: replace custom unsafe helpers with Go standard library utilities (97a3b2b)
  • refactor: consolidate bar rendering loops and remove unused UI state (97e5e1f)
  • refactor(ui): remove redundant timing fields and extract borderless table (407483a)
  • chore: update gif (9836cbf)
  • refactor(ui): make blockClamp generic to accept block array length (691a2b7)
  • style(ui): remove "Video Preview" and "Live Visualisation" labels (8f2b358)
  • refactor(ui): consolidate encoder, duration, and size metrics into finished pass 2 box (8756a31)
  • feat(ui): add encoder name display and refactor frame-source layout (12aba78)
  • feat(ui): add file size gauge and improve spectrum tracking (0bbf17f)
  • refactor(ui): simplify progress labels and remove audio profile rendering (f711f11)
  • feat(ui): refactor progress and summary display with fixed-width boxes and metrics (f55be8f)
  • feat(renderer): make harmonica spring peak-hold bar dynamics the default (4c503a5)
  • feat(ui): add harmonica spring gain for spectrum bar amplitude scaling (2c0f0ca)
  • refactor(ui): extract progress bar construction into newProgressBar helper (a12f196)
  • feat(ui): refactor progress UI with spectrum springs and modular rendering (ae9ef52)
  • docs(agents): document Charm v2 TUI suite and API gotchas (c162367)
  • fix(ci): exempt x/sync and go-runewidth from licence check (52097d9)
  • build(deps): upgrade charm TUI suite to v2 and fix imports (74f4e56)
  • fix(audio): drain decoder at end of stream (5a18c07)
  • fix(audio): reject unsupported channel counts (908bc21)
  • docs: update architecture to reflect yuv extraction and reader refactoring (0b7400c)
  • style(audio): silence gosec G115 false positives in reader (9749286)
  • fix(ui): display dynamic range in decibels (17aba13)
  • refactor(cli): source CLI colours from the shared theme (5950c58)
  • refactor(audio): share the buffer-fill loop between read helpers (308b972)
  • refactor(encoder): dispatch frame writes on the input pixel format (fa0de4c)
  • test(encoder): benchmark the production YUV path (6cd20a1)
  • refactor(audio): drop unused totalFrames from ProgressCallback (ef6f1a8)
  • refactor(audio): drop unused Metadata fields (290f23c)
  • refactor(audio): type sampleDecoder with named sample formats (d56bde1)
  • refactor(renderer): bundle title and episode into PodcastMeta (06c90b7)
  • refactor(ui): let the encoder report hardware mode (29a5709)
  • refactor(audio): drop single-implementor decoder indirection (f6757bb)
  • refactor(audio): name sample formats instead of magic integers (eaac74f)
  • refactor(cmd): group runPass2 encoding parameters into a struct (39b5081)
  • refactor(encoder): extract shared YUV primitives into internal/yuv (f7a8d3d)
  • refactor(encoder): read frame size from the FIFO instead of recomputing (cb92f9f)
  • refactor(encoder): pass channel count to AVChannelLayoutDefault directly (9664d1f)
  • refactor(encoder): derive AudioFIFO length from the buffer (a79bd5f)
  • refactor(cmd): remove redundant ctx no-op assignment (e2b8693)
  • refactor(cmd): drop unreachable multi-channel label branch (d6b8aff)
  • refactor(audio): remove unused NumChannels from decoder (0238485)
  • refactor(audio): drop unused SeekToSample method (62c471b)
  • refactor(encoder): source hwaccel probe dimensions from config (9766fac)
  • refactor(config): derive Framerate from FPS (5679b1b)
  • refactor(config): model overridable colours as a value type (4911f9b)
  • refactor(audio): extract shared raw-magnitude FFT binning (a6c7510)
  • refactor(cmd): pass title and episode as parameters (da323cd)
  • refactor: replace hand-rolled stdlib implementations with standard library (195a1c5)

Installation

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

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

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

Checksums

SHA256 checksums are provided below for verification.