Spum Voice¶
Spum CLI 0.2.4 adds native, local speech commands. Download the released packs once; inference then reads local files without Python or a remote inference API. This initial release exposes English recognition and three English synthesis voices.
Get the models¶
spum models catalog
spum models download whisper-base-en
spum models download kokoro-en-v1-int8
spum models verify whisper-base-en
spum models verify kokoro-en-v1-int8
The packages are hosted in the Spum Hugging Face repository. Archive checksums are compiled into the release catalog. File checksums, upstream licences and provenance are included in each archive. Model downloads are explicit; inference never silently downloads a model.
Transcribe a recording¶
spum transcribe recording.wav --model whisper-base-en --output transcript.txt
spum transcribe interview.m4a --model whisper-base-en --json --output transcript.json
spum transcribe recording.mp3 --language en --threads 4 --quiet
Common formats supported by the Mac's audio decoder, including WAV, AIFF, M4A and MP3, are converted locally to mono 16 kHz. The command reads a file; it does not activate the microphone. Inputs are limited to two hours. A transcript output path must not be the same file as the input recording.
| Option | Default | Meaning |
|---|---|---|
--model, -m |
whisper-base-en |
Released model ID or a compatible local pack directory |
--language |
en |
English is the supported language of the released pack |
--threads, -t |
4 |
CPU worker count, 1 to 64 |
--chunk-seconds |
25 |
Recognition window, 1 to 29 seconds |
--format |
text |
text, json, srt or vtt |
--json |
Flag | Alias for JSON output; conflicts with a different explicit format |
--output, -o |
stdout | Save the completed transcript; replaces existing content |
--models-dir |
~/.spum/models |
Speech model directory |
--quiet |
Flag | Suppress timing summaries; errors remain visible |
Long recordings are processed in windows, preferring a quiet boundary near the end of each window when one is present. Recognition at a boundary can still differ from a continuous utterance. Silent windows produce no transcript rather than inviting a model to invent speech.
JSON output¶
JSON includes the text, language, segment array, input duration, model-load time, inference time, total time and real-time factor. The real-time factor is inference seconds divided by audio seconds; model loading is reported separately.
Captions¶
spum transcribe recording.wav --format srt --output captions.srt
spum transcribe recording.wav --format vtt --output captions.vtt
These captions use recognition-window timing. They are not word-aligned or speaker-diarized subtitles. Inspect and refine their timing before production use.
Generate speech¶
spum speak --text "The scanner is ready." --voice af_heart --output speech.wav
spum speak --text-file announcement.txt --voice af_alloy --speed 1.1 --output announcement.wav --json
spum speak --model kokoro-en-v1-int8 --list-voices
Synthesis produces mono, 24 kHz WAV audio. The checked voices are af_heart, af_alloy and am_adam. Voice IDs are model presets, not a facility for cloning an uploaded person's voice.
| Option | Default | Meaning |
|---|---|---|
--model, -m |
kokoro-en-v1-int8 |
Released model ID or local pack directory |
--text, -p |
Text | Direct text input |
--text-file |
File | UTF-8 text input, up to 1 MiB; choose text or text-file |
--output, -o |
Required | WAV output path ending in .wav; replaces existing content |
--voice |
af_heart |
Voice ID from the selected pack |
--list-voices |
Flag | List the voice IDs; supports --json |
--speed |
1.0 |
Speed factor, 0.5 to 2.0; larger values are faster |
--threads, -t |
4 |
CPU workers, 1 to 64 |
--lexicon |
Extra file | Additional or overriding English pronunciations |
--models-dir |
~/.spum/models |
Speech model directory |
--json |
Flag | Structured output path, duration and timing fields on stdout |
--quiet |
Flag | Suppress timing summaries |
--json describes the WAV output; it does not embed its audio bytes. No sound is played automatically. Open the WAV in a player or pass it to an application of your choice.
Pronunciation and numbers¶
The English pack combines openly licensed Misaki and CMUdict pronunciation data. Spum validates dictionary coverage before synthesis. An unknown word causes a clear error instead of being silently skipped.
To add an entry, create a UTF-8 dictionary with a word, ||, and model-supported phonemes separated by spaces. For example, the package's Spum pronunciation is:
The extra dictionary is applied after the bundled dictionary, so it can override an entry. It must use the Kokoro model's phoneme alphabet; arbitrary English spellings in the phoneme column are not valid pronunciations.
Digits are read individually, and % becomes “percent.” Write a number out in words when you want a particular reading. This release does not interpret medical units, dates, abbreviations or multilingual text semantically. Review critical spoken content before use.
Use a different model directory¶
spum models download whisper-base-en --models-dir /path/to/speech-models
spum transcribe recording.wav --models-dir /path/to/speech-models --json
A model ID resolves under the selected directory. An explicit pack directory can also be passed directly to --model.
What was tested¶
The published functional-check record covers three reference recordings, including an 8 kHz input, and three synthesized phrases. The normalized recognition comparison counted three differences across 77 reference words. The synthesis checks verified finite, non-silent 24 kHz audio and recovered all words in an ASR roundtrip for those three phrases.
These are small integration checks, not a general ASR benchmark or a perceptual listening study. A synthesis-to-recognition roundtrip is not independent proof of voice quality. Noise, accents, names, unfamiliar terminology and chunk boundaries can affect results. Nothing here establishes clinical transcription accuracy.
The published CLI checks also cover M4A, MP3, stereo resampling, silence, malformed options, unknown pronunciations, checksum failure and input-file preservation. There are no audio HTTP endpoints or speech controls in the desktop app in this release.
Upstream comparisons¶
Measured Spum Voice comparisons include Maya on an H200, Kokoro on the Mac CPU and a classical eSpeak NG reference. The page includes parameters, audio, automatic-transcription checks and blind listening controls. It reports deployment differences explicitly; no faster-Maya-kernel or superior-naturalness claim is made.
The released speak command uses the native Kokoro pack. Maya speech in the Reasoning example runs in a separately configured DGX worker; it is not an additional native speak backend in this release.