<< All versions

Skill v1.2.0

currentLLM-judged scan90/100
octos-org/octos/voice
──Details
PublishedOctober 22, 2026 at 12:52 PM
Content Hashsha256:4a6cf2c96803fa1d...
Git SHA413b4b68b82f
──Files
Files (1 file, 3.2 KB)
SKILL.md3.2 KBactive
SKILL.md · 78 lines · 3.2 KB

name: voice description: Batch ASR (via dedicated ASR_API_URL or OminiX fallback), preset-voice TTS with emotion/speed control, and model management via Qwen3 models on Apple Silicon. For voice cloning and custom voice profiles, use mofa-fm. Triggers: voice, transcribe audio, text to speech, speak this, read aloud, model management, download model, 语音识别, 语音合成, 模型管理. version: 1.2.0 author: octos always: true


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_synthesize falls through to the macOS built-in say command, which auto-picks a system voice from the text language and ignores the prompt parameter.

Tools

ToolPurpose
voice_transcribeASR — WAV/OGG/MP3/FLAC/M4A → text
voice_synthesizePreset-voice TTS with optional emotion + speed
list_modelsList loaded + catalog models on the local ominix-api
download_modelPull a catalog model to local disk
load_modelLoad a downloaded model into GPU memory
unload_modelFree a loaded model from GPU memory

Quick recipes

Transcribe a voice message

json
{"audio_path": "voice.ogg", "language": "Chinese"}

Synthesize plain speech

json
{"text": "Hello world", "language": "english", "speaker": "ryan"}

Synthesize with emotion

json
{"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_synthesize with a prompt while ominix-api is down — the

fallback (say) silently drops the emotion. Use list_models to 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_model after a fresh install — the

catalog model is not loaded until you load it explicitly.

All versions