Jivedrop 0.4.0
Highlights ✨
- Encoding progress UI completely redesigned: media-player-style stats row, spring-animated progress bar, spinner with settling animation, and 60 FPS rendering - courtesy of the Charm v2 library upgrade.
- Ctrl+C during encoding now cancels the FFmpeg pipeline cleanly, preventing a CGO use-after-free crash; files completed before the interrupt are preserved.
- Duration is now rounded to the nearest second rather than truncated, so episode lengths shown in podcast clients are accurate.
- Hugo frontmatter date key is now accepted in lowercase, fixing silent metadata failures on episodes written with lowercase YAML keys.
- Episode number is validated at the CLI boundary in both Hugo and Standalone modes, catching bad values before encoding begins rather than midway through.
- Non-TTY output (piped or CI environments) now correctly reports the encode stage rather than misleadingly reporting completion.
- Progress bar and percentage stay on a single line, fixing a layout wrapping regression on narrow terminals.
Changes since 0.3.4
- chore: update .gif (360cda4)
- style(ui): replace Hz text with Unicode CJK square ligature ㎐ (cdff2ba)
- fix(encoder): accept lowercase date key in Hugo frontmatter (4784bfb)
- style(ui): replace kHz text with Unicode CJK square ligature ㎑ (58c2fce)
- fix(encoder): round duration to nearest second instead of truncating (6a39614)
- refactor: remove self-evident comments across cmd and internal packages (2883e28)
- refactor(encoder): replace nil sentinel with explicit partial return flag (57021fa)
- refactor(cli): eliminate code smells in mode detection and god function (6a8e7a4)
- refactor(encoder): clarify FFmpeg buffer-source feed flag divergence (afbe463)
- refactor(encoder): simplify duration formatting with direct integer arithmetic (20acf17)
- refactor: eliminate code duplication across encoder and workflows (9fbe422)
- refactor(ui): remove dead code from ProgressUpdate handler (79783b4)
- build(deps): bump nixpkgs from
64c08a7to331800d(fdeeb5f) - chore: update.gif (cc4619b)
- fix(ui): keep progress bar and percentage on one line (d211e07)
- fix(ui): keep encoded file when Ctrl+C lands after encode completes (fd73572)
- docs: update Charm v2 bling demo GIF and trim summary spacing (0d0977d)
- fix(encoder): cancel encode on Ctrl+C to prevent cgo use-after-free (94547c1)
- style(ui): redesign encode progress layout with media-player stats row (6b67113)
- fix(just): restore test file references (7143da8)
- fix(cli): report encode stage, not completion, in non-TTY output (d4125ee)
- docs: add Charm v2 animation bling demo GIF (74202a9)
- fix(ui): use frozen realtime stat in completion view (106fe13)
- perf(ui): increase animation framerate to 60 FPS and freeze realtime stat (e16470e)
- feat(ui): add Charm v2 animation bling - spring bar, spinner, settling (adef580)
- docs: note Charm v2 charm.land import paths in AGENTS.md (8280497)
- fix(ci): exempt x/sync and go-runewidth from licence check (e437af3)
- chore(deps): upgrade Charm libraries to v2 (7f0bace)
- docs: import AGENTS.md via @ directive in CLAUDE.md (2358384)
- docs: reconcile README and AGENTS.md with current code (35f53cd)
- style: fix gofumpt alignment in standalone_test (80483b3)
- refactor(id3): drop unused TagInfo.Description field (a6e436e)
- refactor(cli): remove unused SubtitleStyle and HeaderStyle (ef63fa2)
- refactor(cmd): drop unused PostEncode outputPath parameter (7d9e963)
- refactor(cmd): drop unused CLIOptions.AudioFile (f960afd)
- refactor(cli): promote warning style to named variable (d55f798)
- refactor(cmd): hoist audio-file check into run (9df0625)
- refactor(encoder): extract shared encoder drain loop (6b5e016)
- refactor(cmd): construct workflows with parsed CLI options (ef0e4c1)
- refactor(encoder): drop unused FileStats.DurationSecs (cba7e4e)
- test: use strings stdlib helpers in tests (5905a41)
- refactor(id3): simplify cover-art scaling switch (01033df)
- refactor(ui): remove unused Complete accessor (9edc934)
- refactor(cli): remove unused PrintCover (3e85540)
- refactor(id3): drop dead logFn parameter from ScaleCoverArt (d32a51b)
- refactor(cmd): extract printPodcastStats helper (e1ecd72)
- feat(encoder): validate episode number at the boundary (a83bcc9)
- refactor(cmd): thread CLI fields into encode pipeline helpers (c42f71f)
- refactor(encoder): extract shared filter-graph drain loop (f290038)
- refactor(encoder): use strings.CutPrefix for path prefix handling (de76115)
- chore(tailor): refit and alter (3200144)
Installation
Download the appropriate binary for your platform below, make it executable, and move it to your PATH:
# Linux (amd64)
chmod +x jivedrop-linux-amd64
sudo mv jivedrop-linux-amd64 /usr/local/bin/jivedrop
# macOS (Apple Silicon)
chmod +x jivedrop-darwin-arm64
sudo mv jivedrop-darwin-arm64 /usr/local/bin/jivedropChecksums
SHA256 checksums are provided below for verification.