CtrlK
BlogDocsLog inGet started
Tessl Logo

omnivoice

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

Quality

87%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

VoiceStudio — local TTS & STT

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.

Before the first call

Check the backend is up:

curl -sf http://localhost:3900/health

If 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.

Text-to-speech

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.wav
  • model: 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.
  • Long texts are fine — the engine chunks at sentence boundaries internally.

Discover the user's voices

curl -s http://localhost:3900/v1/audio/voices

Lists every cloned/designed voice profile (id + name) and the installed engines. Use a profile's id as the voice value in /speech.

Speech-to-text

curl -s http://localhost:3900/v1/audio/transcriptions \
  -F file=@clip.wav -F model=whisper-1 -F response_format=json
  • model: 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.

Python (openai SDK)

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")).text

Notes

  • No API key, no rate limits, no billing — it's the user's own hardware. First synthesis after a cold start may take longer (model loading); subsequent calls are fast.
  • Anything beyond speech/transcription (video dubbing, batch jobs, voice design, audiobooks) lives in the full REST API — the interactive reference is embedded in the app at Settings → OpenAPI Reference, or ask the user to open it.
  • If a call errors with an engine/model message, the actionable detail is usually in the response body — surface it to the user verbatim; VoiceStudio's errors are written to be user-fixable (e.g. which Settings toggle to flip).
Repository
debpalash/OmniVoice-Studio
Last updated
First committed

Is this your skill?

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.