The command-line surface that scripted callers can depend on. Changes here follow semver: additive options are a minor bump; a change to existing behaviour or to an exit-code meaning is a major bump.
quill transcribe <file> [--output <path>] [--model <variant>]<file>: path to a local media file WhisperKit can decode.--output <path>/-o: write the transcript to a file instead of stdout.--model <variant>/-m: WhisperKit model variant (defaultopenai_whisper-base).
- stdout: the markdown transcript, and nothing else, when
--outputis not given. Safe to redirect:quill transcribe clip.m4a > clip.md. - stderr: human-readable progress and error messages. Never part of the transcript.
- With
--output <path>, the transcript is written to that path and stdout is left empty.
# <title derived from the file name>
<segment 1 text>
<segment 2 text>
…When no speech is detected, the body is _No speech was transcribed._.
| Code | Meaning |
|---|---|
| 0 | Success. A transcript was produced. |
| 64 | Usage error. Bad or missing arguments (EX_USAGE). |
| 1 | Runtime failure. Model load, file access, or transcription failed. The reason is printed to stderr as Error: <message>. |
A caller should treat any non-zero exit as "no usable transcript" and read stderr for the reason.
A caller can rely on everything above across any release that does not carry a
major bump. In practice that means: shell out to
quill transcribe <file> --output <path>, treat exit 0 as "a transcript exists
at that path", and read stderr for the reason on anything else.
What is deliberately NOT part of the contract: the exact wording of progress lines on stderr, the segmentation the model chooses (which paragraph breaks fall where), and the on-disk layout of the model cache.