Changelog
Release history for the trx CLI.
0.9.2 2026-08-25
Local transcription on Windows
Added
- Non-interactive Windows setup with
trx init --yes, suitable for IT-managed installs and CI. - A real Windows gate powered by cuse that installs the npm package, generates spoken audio with Windows SAPI, runs a local Whisper transcription, verifies
trx doctor, and retains JSON, audio, SRT, text, and screenshot evidence.
Fixed
- Complete Whisper runtime installation into
%USERPROFILE%\.trx\bin, including the DLLs required bywhisper-cli.exe. - Immediate executable resolution for Whisper, ffmpeg, ffprobe, and yt-dlp without restarting PowerShell.
- Portable dependency fallback when
wingetor Microsoft App Installer is unavailable. Downloads are pinned and verified with SHA-256 before installation.
Upgrade
bun add --global @crafter/trx@latest --force
trx init --yes --backend local --model small --language es
trx doctor --output json 0.9.0 2026-08-19
ElevenLabs Scribe, with speaker diarization
Added
--backend elevenlabs— transcription through ElevenLabs Scribe, the first trx backend that reports who is speaking. Modelsscribe_v2(default) andscribe_v1. The upload limit is 5 GB rather than the 25 MB and 100 MB of the other cloud backends, so this one never chunks.--diarizeand--speakers <n>— separate speakers. Every SRT cue is prefixed with its speaker ([speaker_0]) and the.txtbecomes a conversation, one paragraph per turn.--speakerstakes 1 to 32, the range the API accepts, and implies--diarize. Both are rejected onlocal,openaiandvercelinstead of being ignored: no other backend returns labels, and dropping the flag quietly would return an undiarized transcript that looks like the request succeeded.- Keychain fallback for the API key —
ELEVENLABS_API_KEYis read from the environment first, and on macOS from theelevenlabslogin Keychain entry when the variable is unset, so a key already stored there does not have to be exported into every shell.trx doctorresolves it through the same path a real run uses, so it cannot report a key missing that trx would have used. - ISO 639-3 language codes on this backend — Scribe accepts
esandspaalike and normalizes both tospa. The other backends still take ISO 639-1 only, which is the set whisper.cpp accepts.
Notes
Scribe timestamps every word, so cues are grouped rather than emitted one word each: a pause of 0.6s or more starts a new cue, a cue is capped at 84 characters, and a change of speaker always cuts. Those first two thresholds are subtitle conventions picked to read well, not measurements. The speaker rule is not subject to them, because a cue holding two voices misattributes the line.
Verified end to end on a 26 minute two-speaker Spanish interview: 488 cues, no cue mixing speakers, monotonic timestamps, transcript covering 25:56 of a 25:59 recording.
Upgrade
bun add -g @crafter/trx@latest --force
trx init --backend elevenlabs
trx interview.m4a -b elevenlabs --speakers 2 0.7.0 2026-08-07
trx serves its own agent skill
Added
trx skills(#26) — the agent manual now ships with the CLI and is served from it.trx skills listshows what is bundled,trx skills get trxprints the markdown to stdout for pasting into context,--fullappends the reference files, andtrx skills pathgives the directory. No install step, no second copy to keep in sync.--output jsonworks on every subcommand, andTRX_SKILLS_DIRoverrides where trx looks.
Fixed
- The bundled skill now ships to npm (#25) —
skillswas missing frompackage.jsonfiles, so the directory never entered the tarball. Nothing consumed it from an install, which is how it sat at 0.5.0 while the CLI shipped 0.6.1 without anyone noticing. - The shorthand router no longer swallows new subcommands — it matched against a hardcoded list that had to be updated by hand for every command added.
trx skillsfell through it and tried to transcribe the skills directory. The list is now derived from the registered commands.
Upgrade
bun add -g @crafter/trx@latest --force
trx --version # -> 0.7.0
trx skills list
trx skills get trx --full 0.6.1 2026-08-07
--output-dir creates the directory
Fixed
--output-dirnow creates the directory when it does not exist (#23) — pointing--output-dirat a new path used to die on the first ffmpeg step withffmpeg audio cleaning failed (exit 254), a message that named ffmpeg while the real cause was the missing directory. Chunking already created its own output directory, but that step runs after the pipeline writes the cleaned WAV, so it was never reached. The pipeline now creates the directory up front, covering both the download and the clean paths.
Upgrade
bun add -g @crafter/trx@latest --force
trx --version # -> 0.6.1
trx talk.mp3 --output-dir ./new-folder 0.6.0 2026-07-23
Auto-chunking for big files + model discovery
Added
- Automatic chunking on cloud backends — files over the provider limit (OpenAI 25 MB, gateway 100 MB) now split with ffmpeg, transcribe chunk by chunk with progress, and stitch back into one continuous transcript and SRT. Timestamps stay monotonic across chunk boundaries. A 2-hour podcast now works on cloud backends out of the box.
--no-chunkkeeps the old hard error. trx models— list available transcription models per backend. Local and OpenAI lists are static; the vercel backend queries the gateway live, so agents can discover what is actually available instead of guessing model slugs.
Upgrade
bun add -g @crafter/trx@latest --force
trx --version # -> 0.6.0
trx models
trx long-podcast.mp3 -b vercel 0.5.1 2026-07-23
Fix gateway protocol headers
Fixed
--backend vercelreturned 400 “Unsupported gateway protocol version” — the gateway requires three protocol headers (ai-gateway-protocol-version,ai-transcription-model-specification-version,ai-gateway-auth-method) that the REST docs do not mention. Captured from a real@ai-sdk/gatewayrequest and now sent by trx. Verified end to end againstopenai/whisper-1andxai/grok-stt.
Changed
- Slimmer npm tarball (from 0.5.0 cleanup): tests, fixtures, and tsconfig no longer ship. 26 -> 18 files.
Upgrade
bun add -g @crafter/trx@latest --force
trx --version # -> 0.5.1
trx recording.mp4 -b vercel 0.5.0 2026-07-22
Vercel AI Gateway backend
Added
- Vercel AI Gateway backend —
trx transcribe -b vercelcalls the AI Gateway transcription endpoint. OneAI_GATEWAY_API_KEYcovers every transcription model on the gateway, addressed ascreator/model-name(defaultopenai/whisper-1). Namedvercelto avoid confusion with Cloudflare’s AI Gateway. trx init --backend vercel— interactive gateway model prompt, validatesAI_GATEWAY_API_KEY, skips whisper-cli install.trx doctorgateway checks — reportsAI_GATEWAY_API_KEYpresence and active gateway model when the backend isvercel.
Upgrade
bun add -g @crafter/trx@latest --force
trx --version # -> 0.5.0
export AI_GATEWAY_API_KEY="..."
trx init --backend vercel 0.4.4 2026-07-10
Fix hardcoded version + brew lock follow-up
Fixed
- hardcoded version in
bin/trx.ts—--versionalways returned0.4.1even after0.4.3publish because version string was hardcoded. Now reads frompackage.jsondynamically viaimport pkg with { type: "json" }. Root cause ofbun add -g @crafter/trx@lateststill showing 0.4.1. - brew lock race (from 0.4.3, reforged) —
trx initsequential installs + lock retry verification. Included again for completeness.
Upgrade
# clear bun minimumReleaseAge cache if set
# ~/.bunfig.toml -> minimumReleaseAge = 0 (or remove)
bun pm cache rm
bun add -g @crafter/trx@latest --force
trx --version # -> 0.4.4
trx doctor --output json 0.4.3 2026-07-10
Fix brew lock contention in trx init
Fixed
- brew lock race —
trx initon macOS ranbrew installforffmpeg,yt-dlp,whisper-cppin parallel viaPromise.all, causinglockf: 200: already lockedand falseMissing dependencies: yt-dlp, ffmpegeven though bottles were installed. Sequential install now:whisper-cli->ffmpeg->yt-dlp. - Retry + verify —
installViaBrewnow verifieswhich <bin>after a lock failure, cleans*.incompletecache files, retries install, and treats existing binary as success. No more false negative when bottle installs but brew reports lock error. - Cleanup
.incompletemarkers — removes~/Library/Caches/Homebrew/downloads/*.incompletebefore retry to prevent stuck state.
Changed
spawnutility now supportstimeoutoption (for future 5m cap on brew installs) and explicit kill on timeout.
Upgrade
bun add -g @crafter/trx@latest
# if you hit the lock before:
brew cleanup --prune=all
rm -f ~/Library/Caches/Homebrew/downloads/*.incomplete
trx init
trx doctor --output json 0.4.2 2026-07-10
Fix skill docs, accents & full flag coverage
Fixed
- Broken Spanish accents in skill docs —
cmo/estnow correctlycómo/está/más/sí/él/qué/cuándo/número/también/informaciónin bothSKILL.mdandreferences/whisper-fixes.md - Missing opening marks docs —
¿/¡were rendered as empty strings (""), now correct UTF-8 - Install instructions — now includes both
bunandnpmoptions andtrx doctorstep fornpm install trx && trx initflow
Added
- Full flags table — documents
-w/--words,--output,--fields srt,metadata,files,--jsonpayload format, config location~/.trx/config.json,--output-dirwith real examples - Example JSON response — agents now see expected schema without needing
trx schema - Troubleshooting — OpenAI backend
OPENAI_API_KEYrequirement,npm vs bunengines note,yt-dlpupgrade path, GPU/no-GPU guidance, large file tips - Agent payload example —
trx transcribe --json '{"input":"...","language":"es"}' --output jsonpreferred pattern
0.4.0 2026-04-06
OpenAI API backend + large-v3-turbo
Added
- OpenAI API transcription backend —
trx transcribe -b openaiuses the OpenAI API instead of local Whisper. Supportsgpt-4o-transcribe,gpt-4o-mini-transcribe, andwhisper-1. large-v3-turbomodel — near-large accuracy at ~3x speed for local transcription.--backendflag ontrx transcribeandtrx initto choose betweenlocalandopenai.- Backend selection in
trx init— interactive prompt or--backend openaiflag. trx doctorshows backend status — API key detection, active model, backend type.- OS-specific open command — uses
openon macOS,xdg-openon Linux,starton Windows. - Quoted paths with spaces — file paths containing spaces are now quoted in the terminal output for ctrl+click support.
Fixed
- SRT timestamps for
gpt-4o-transcribemodels now use real audio duration viaffprobeinstead of placeholder values.
0.3.2 2026-04-03
Cross-platform support
Added
- Cross-platform
trx init— Linux support viaapt-get+ source compilation for whisper-cli, Windows support viawinget+ pre-built binaries. - Platform detection shown during init:
trx init (linux).
Fixed
- Config defaults merge —
readConfig()now merges saved config with defaults, preventing crashes whenwhisperFlagsis missing. - FFmpeg path collision — when input is a
.wavin the current directory, output no longer collides with input path.
0.3.0 2026-03-31
Word timestamps + language auto-detect
Added
- Word-level timestamps via
--wordsflag — generates SRT with per-word timing. - Auto-detect language by default —
-lflag now only forces a specific language override.
Fixed
- Vercel deploy issues resolved (bun.lock conflicts, peer dependency warnings).
0.2.0 2026-03-30
Progress bar + agent skill
Added
- Live progress bar during Whisper transcription with percentage indicator.
- Word count summary shown after transcription completes.
openhint — suggests command to open the output file.- Agent skill auto-install —
trx initoffers to install the Claude Code skill. - OG images generated via Sharp for social sharing.
- 21 e2e tests covering the full CLI surface.
- Monorepo structure with separate website package at
trx.crafter.run.
Fixed
- Spinner hang after transcription — properly guards callbacks and exits.
0.1.0 2026-03-30
Initial release
Added
trx transcribe— transcribe any URL or local file via local Whisper.trx init— one-command setup: installs whisper-cli, yt-dlp, ffmpeg, downloads model.trx doctor— health check for all dependencies and configuration.trx schema— runtime introspection for agent self-service.- Agent-first JSON output —
--output jsonfor piping to other tools. --dry-run— validate input and preview execution plan without running.--fields— select specific output fields to save tokens.- Input validation — rejects path traversals, control characters, URL-encoded paths.
- 99 language support via Whisper’s built-in language detection.
- 5 model sizes — tiny, base, small, medium, large.