Releases: gunn4r/earwig
Releases · gunn4r/earwig
Release list
v0.3.0
Features
- Added a
manualnamer (--namer manual) that prompts you to type each speaker's name interactively, with no LLM or inference required. Names remain available via--namer claude/--namer local. (#10) - Added
earwig update, which detects how earwig was installed (uv tool, pipx, or pip) and runs the matching upgrade; a source checkout is told togit pull. Addedearwig --version(and anearwig versionsubcommand) to print the installed version. (#12) - Added a
--device {cpu,cuda}flag to pick the compute device for transcription and diarization (defaultcpu;cudausesfloat16on an NVIDIA GPU). There is nompsoption — the faster-whisper backend has no Apple-GPU support, so Apple Silicon transcribes on CPU. (#14) - Add
earwig setup, an interactive wizard that walks you through the Hugging Face token, stores it in~/.config/earwig/envwithout echoing it, records your default namer, and verifies ffmpeg, your token, both gated model licenses, and your namer with actionable errors. earwig now reads that config file and./.envat startup, so the token file the README has always described actually works. - Add a one-line installer:
curl -fsSL https://raw.githubusercontent.com/gunn4r/earwig/main/install.sh | shinstalls earwig from git with uv or pipx, warns ifffmpegis missing, and launchesearwig setup.
Bug Fixes
- Escape untrusted text at the Markdown render boundary. Video title, channel, source URL, speaker names, and transcript body — all attacker-influenced — are now neutralized before they're written to the output file: HTML/Markdown metacharacters are escaped, control characters (including terminal/ANSI escapes) are stripped, and the
[source](...)URL is validated ashttp(s)and percent-encoded so a crafted URL can't break out of the link. LLM-inferred speaker names are likewise stripped of control characters before they reach the interactive confirm prompt. Closes the output-injection finding from the §4.6 security audit. (#18)
Removals & Breaking Changes
- Removed the
heuristicspeaker namer and theautonamer policy. Regex name-inference could not be made accurate enough to be safe (a wrong name is worse than none), so naming is now opt-in and the default isoff(speakers keep theirSPEAKER_xxlabels). A persistedEARWIG_NAMER=heuristic/autonow warns and falls back tooff. (#10)
Documentation
- Add a
CODE_OF_CONDUCT.md(Contributor Covenant 2.1, linked fromCONTRIBUTING.md) and tidy the README: drop the stale "earlier versions did X" naming note, trim internal-sounding compatibility phrasing, and document the trust model for the downloaded pyannote models. - Add a project
CLAUDE.mdguide and note beta/pre-1.0 status plus a changelog link in the README. - Document the
configandsetupmodules in CONTRIBUTING.md's architecture guide, and point the contributor dev-setup atearwig setup. - Unwrap hard-wrapped prose in
README.md,CONTRIBUTING.md, andchangelog.d/README.mdso each paragraph is a single line — no wording changed, only line breaks.
Internal / Chores
- Pin the tested dependency ranges:
whisperx>=3.8,<3.9andpyannote-audio>=4,<5, since whisperX's diarization API and default model drift across minor versions.yt-dlpis intentionally left uncapped so it keeps pace with YouTube changes. (#16) - Harden the CI workflow: declare a top-level least-privilege
permissions: contents: read(all jobs only read the repo), and passgithub.base_refto the changelog check through anenv:variable instead of interpolating it directly into therun:script. Defense-in-depth from the §4.6 security audit; no functional change. (#17) - Add
scripts/release.shto cut a release in one step (build changelog, bump version, reinstall, commit, tag), with a--dry-runpreview. - Keep the local
CLAUDE.mdagent guide private (gitignored); public contributor conventions live inCONTRIBUTING.md.
v0.2.0
Features
- Add
--namer {auto,claude,local,heuristic,off}to choose how speaker names are inferred. The new defaultheuristicnamer needs no external tools, so naming no longer requires the Claude CLI. Also adds alocalnamer (via a running Ollama server) and honors theEARWIG_NAMERenvironment variable as the default.
Removals & Breaking Changes
- Remove the
--no-namingflag. Use--namer offto keep the rawSPEAKER_xxlabels.