Spokenly CLI (Command Line)
Transcribe audio and video files from your terminal with the spokenly command.
The spokenly CLI lets you transcribe audio and video files and manage your word replacements directly from your terminal. It connects to the Spokenly app running on your Mac and returns plain text, SRT, VTT, Markdown, or JSON output.
Install
Open Settings
Open Spokenly > General Settings, scroll to the bottom and click Install CLI.
Enter your password
macOS will ask for your password to create a symlink in /usr/local/bin/. This is a standard system directory for command-line tools. Spokenly does not gain any elevated privileges; the prompt is only for placing the shortcut there.
Use it in your terminal
Run spokenly transcribe <file> in any terminal. The installed executable is a small bash script that forwards your arguments to the locally running Spokenly app. All transcription happens inside the app itself.
Usage
spokenly transcribe <file...> [options]Options
| Flag | Description |
|---|---|
-f, --format <fmt> | Output format: text (default), srt, vtt, markdown, json |
-s, --speakers | Include speaker labels |
-c, --channels | Transcribe every channel of a multichannel file separately, one speaker per channel. Implies --speakers |
-n, --names <names> | Comma separated speaker names. Requires --channels or --speakers |
-V, --version | Print the Spokenly CLI version and exit |
-h, --help | Show help |
Separate channels
If your recording keeps each participant on their own channel, for example a meeting recorder that captures the local microphone on one channel and the remote call audio on another, --channels transcribes every channel on its own and merges the results in time order. Each channel becomes its own speaker, so you never need diarization to tell participants apart.
spokenly transcribe meeting.wav --channelsLeft channel: Hi Bob, I pushed the new release notes to the shared folder this morning.
Right channel: Thanks Alice, I will review them right after the standup meeting today.Two channel files are labeled Left channel and Right channel. Files with more channels are labeled Channel 1, Channel 2, and so on. Pass --names to use your own labels, given in channel order:
spokenly transcribe meeting.wav --channels --names Alice,BobAlice: Hi Bob, I pushed the new release notes to the shared folder this morning.
Bob: Thanks Alice, I will review them right after the standup meeting today.--names also works with --speakers, where the names are applied to the detected speakers in order of first appearance:
spokenly transcribe interview.mp3 --speakers --names Alice,BobIf every channel turns out to contain the same audio, which happens when a stereo file is just one source duplicated, Spokenly transcribes a single channel to avoid duplicated text and prints a note to stderr.
Examples
Transcribe a meeting recording:
spokenly transcribe meeting.mp3Transcribe with speaker labels in VTT format:
spokenly transcribe interview.mp3 --format vtt --speakersTranscribe a two channel meeting recording with named participants:
spokenly transcribe meeting.wav --channels --names Alice,BobPipe output to clipboard:
spokenly transcribe meeting.mp3 | pbcopyTranscribe multiple files:
spokenly transcribe part1.mp3 part2.mp3 --format markdownGet JSON with segment timestamps for downstream tooling:
spokenly transcribe meeting.mp3 --format json | jq '.segments[].text'Check the installed CLI version:
spokenly --versionTranscription Model
The CLI uses the model selected in the Transcribe File section of the app. If you have a local model like NVIDIA Parakeet selected, transcription runs entirely on your Mac. Otherwise, the file is sent to the Spokenly server for online transcription.
JSON Output Schema
The --format json flag returns a pretty-printed JSON object with the model used and an array of timed segments. speakerId is only populated when --speakers or --channels is passed.
{
"modelId": {
"predefined": "parakeetTDT06V2"
},
"segments": [
{
"id": "B7A7C2F3-1E0D-4B6A-9F5C-8C2E5D1A3B4F",
"text": "Hello world.",
"start": 0.0,
"end": 1.42,
"speakerId": null
}
]
}Word Replacements
Manage your Word Replacements from the terminal. The app must be running.
spokenly replacements list
spokenly replacements add <original> <replacement> [--regex] [--timing before-ai|after-ai|both]
spokenly replacements remove <original>list prints the full list as JSON, in the same format the Word Replacements editor exports and imports, so you can pipe it to jq or save the output as a backup and import it back later.
add creates a replacement. Matching is case-insensitive, and a comma separated original matches each listed variant. Pass --regex to treat the original as a regular expression, and --timing to control when the replacement runs relative to AI formatting (before-ai is the default).
remove deletes every replacement whose original text equals the given value, case-insensitively.
spokenly replacements add "air pods" "AirPods"
spokenly replacements add "cloud code, clod code" "Claude Code"
spokenly replacements remove "air pods"
spokenly replacements list | jq '.[].original'To pre-fill the add form from another app instead of scripting, use the word replacements deeplink.
Uninstall
Open Spokenly > Settings > General and click Uninstall CLI. This removes the command from /usr/local/bin.