Batch ASR / OminiX TTS / Model Management
Speech-to-text uses ASR_API_URL when configured (the Octos/OMiniX JSON +
base64 batch-transcription contract at POST /v1/audio/transcriptions, such as
the local Whisper or Nemotron adapter); otherwise it falls back to Qwen3 ASR
through local OminiX. Preset-voice text-to-speech with emotion control and model
lifecycle management remain backed by local OminiX (Apple Silicon).
An empty ASR result is a successful no-speech rejection, not an error.
Boundary — when NOT to use this skill
- Voice cloning / custom voice profiles → use mofa-fm
(
fm_tts,fm_voice_save,fm_voice_list,fm_voice_delete). This skill is preset-voice only. - Emotion prompts in fallback mode → not supported. When ominix-api is
unreachable,
voice_synthesizefalls through to the macOS built-insaycommand, which auto-picks a system voice from the text language and ignores thepromptparameter.
Tools
| Tool | Purpose |
|---|---|
voice_transcribe |
ASR — WAV/OGG/MP3/FLAC/M4A → text |
voice_synthesize |
Preset-voice TTS with optional emotion + speed |
list_models |
List loaded + catalog models on the local ominix-api |
download_model |
Pull a catalog model to local disk |
load_model |
Load a downloaded model into GPU memory |
unload_model |
Free a loaded model from GPU memory |
Quick recipes
Transcribe a voice message
{"audio_path": "voice.ogg", "language": "Chinese"}
Synthesize plain speech
{"text": "Hello world", "language": "english", "speaker": "ryan"}
Synthesize with emotion
{"text": "我太开心了!", "speaker": "vivian", "prompt": "用兴奋激动的语气说话,充满热情和活力"}
After voice_synthesize returns a file path, deliver the audio with
send_file.
Further reading
- Emotion / style prompts (Chinese + English) →
docs/emotion-prompts.md - Server discovery, endpoints, preset speakers, full parameter cheat-sheet →
docs/api-reference.md
Anti-patterns
- Calling
voice_synthesizewith apromptwhile ominix-api is down — the fallback (say) silently drops the emotion. Uselist_modelsto confirm Qwen3-TTS is loaded before relying on emotion control. - Passing a non-preset speaker name (e.g. a cloned voice id) — this skill only handles preset voices; route the call to mofa-fm instead.
- Skipping
download_model+load_modelafter a fresh install — the catalog model is not loaded until you load it explicitly.