Speak and transcribe through the user's local VoiceStudio — free, offline, no API key. Text-to-speech (including the user's cloned voices) and speech-to-text via the OpenAI-compatible API at localhost:3900.
72
87%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
The user runs VoiceStudio, a fully-local voice app exposing an OpenAI-compatible audio API at http://localhost:3900/v1. Use it whenever the user asks to generate speech, narrate text, clone a voice, or transcribe audio — it costs nothing, works offline, and their audio never leaves the machine.
Check the backend is up:
curl -sf http://localhost:3900/healthIf it fails, tell the user to launch VoiceStudio (or bun run desktop-prod from a source checkout) — don't fall back to a cloud API without asking; local-first is why they installed it.
curl -s http://localhost:3900/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "tts-1", "voice": "alloy", "input": "TEXT HERE", "response_format": "wav"}' \
--output speech.wavmodel: tts-1 or tts-1-hd — both map to the user's active TTS engine.voice: OpenAI names (alloy, echo, nova, …) work, but the real power is the user's own cloned voice-profile IDs — discover them first (below) and prefer a named clone when the user says "my voice" / "the narrator voice" / a profile by name.response_format: wav, mp3, flac, opus, or pcm.curl -s http://localhost:3900/v1/audio/voicesLists every cloned/designed voice profile (id + name) and the installed engines. Use a profile's id as the voice value in /speech.
curl -s http://localhost:3900/v1/audio/transcriptions \
-F file=@clip.wav -F model=whisper-1 -F response_format=jsonmodel: whisper-1 maps to the active ASR engine (WhisperX by default; the user picks in Model Catalogue → Engines).response_format: json, text, verbose_json (per-segment timestamps), srt, or vtt — use srt/vtt directly when the user wants subtitles.from openai import OpenAI
client = OpenAI(base_url="http://localhost:3900/v1", api_key="none") # any string; nothing checks it
audio = client.audio.speech.create(model="tts-1", voice="alloy", input="Hello!", response_format="wav")
text = client.audio.transcriptions.create(model="whisper-1", file=open("clip.wav", "rb")).text98c9e68
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.