Docs/Starling

Starling.

Starling (starling) is the premium tier alongside the lightweight Feather model: instant voice cloning from a few seconds of reference audio, voice design from a text description, inline expression tags, and 48+ languages including every major Indic language — and it still runs on CPU, so the price stays sane.

One model, both transports. starling serves one-shot POST /v1/synthesize and realtime wss://…/v1/stream under the same id and the same per-character price — exactly like Feather. Pass "model":"starling-tts-1" to either.

Quick start

bash
curl https://api.celestlabs.ai/v1/synthesize \
  -H "Authorization: Bearer $CELESTLABS_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "model": "starling-tts-1",
    "text": "[laughter] You really got me there! Okay... where were we?",
    "voice": "auto",
    "language": "en"
  }' --output speech.wav

Parameters

FieldTypeNotes
modelstring"starling-tts-1".
textstringWhat to speak. Expression tags accepted inline; tag characters are not billed.
voicestringA built-in preset id (meera, arjun, …) or "auto" to let the model pick.
voice_idstringA persisted custom voice (clone or design). Overrides voice.
ref_audiostringBase64-encoded WAV (3–10 s) to clone inline for this request, without persisting.
ref_textstringOptional transcript of ref_audio — faster, more stable cloning.
instructstringVoice-design attributes, e.g. "female, young adult, indian accent, warm".
languagestringOne of the curated languages, or omit for auto-detect.
stepsintDenoising steps (2–32). 8 is realtime-fast; raise toward 32 for best-quality offline. Default 8.
speedfloatSpeaking rate; 1.0 is natural.

Voice precedence: voice_id → inline ref_audioinstructvoice/auto. Cloning from a clean reference is the most stable; voice-design is handy but occasionally drifts.

Custom voices & cloning

Persist a voice once, then reuse it by voice_id across requests. Voices are scoped to your workspace.

bash
# enroll a clone
curl https://api.celestlabs.ai/v1/voices \
  -H "Authorization: Bearer $CELESTLABS_API_KEY" -H "content-type: application/json" \
  -d '{ "name": "Founder voice", "type": "clone",
        "ref_audio": "<base64 of a 3-10s WAV>", "ref_text": "optional transcript" }'
# -> { "id": "voice_ab12...", "type": "clone", ... }

# design a voice from a description
curl https://api.celestlabs.ai/v1/voices \
  -H "Authorization: Bearer $CELESTLABS_API_KEY" -H "content-type: application/json" \
  -d '{ "name": "Narrator", "type": "design",
        "instruct": "male, middle-aged, calm, documentary narrator" }'
CallDoes
GET /v1/voicesReturns { voices: [built-in ids], custom: [your voices] }.
POST /v1/synthesize with voice_idSpeaks with the persisted voice.
DELETE /v1/voices/{id}Removes a custom voice.

Expression tags

Starling renders 13 non-verbal expression cues. Write them lowercase in square brackets, inline in the text. They fire best-effort (the model renders them probabilistically) — keep one or two at natural spots for reliable results.

text
[laughter]  [sigh]  [confirmation-en]
[question-en] [question-ah] [question-oh] [question-ei] [question-yi]
[surprise-ah] [surprise-oh] [surprise-wa] [surprise-yo]
[dissatisfaction-hnn]

Punctuation is prosody too: is a pause, a cut, ?/! shape intonation, ALL-CAPS adds emphasis.

Languages

Starling exposes 48+ languages — every major Indic language plus the most-used global ones. Omit language to auto-detect; cross-lingual cloning works (an English reference voice can speak Hindi). Indic: Hindi, Bengali, Telugu, Marathi, Tamil, Urdu, Gujarati, Kannada, Malayalam, Odia, Punjabi, Assamese, Maithili, Sanskrit, Nepali, Sindhi, Konkani, Dogri, Bodo, Santali, Kashmiri, Manipuri. Global: English, Chinese, Spanish, Arabic, French, Portuguese, Russian, German, Japanese, Korean, Italian, Turkish, Vietnamese, Indonesian, Thai, Dutch, Polish, Ukrainian, Persian, Filipino, Swahili, Romanian, Greek, Czech, Hungarian, Hebrew, Swedish, Danish, Finnish, Malay.

Pricing

Billed per character, same basis as Feather: $0.012 / 1K characters ($9 / 1M). One price covers one-shot and realtime. See pricing.

Realtime

Stream Starling over the same WebSocket as Feather — just set the model in the first frame:

javascript
ws.send(JSON.stringify({
  token: CELESTLABS_API_KEY,
  model: "starling-tts-1",
  text: "Streaming with my cloned voice.",
  voice_id: "voice_ab12...",
  language: "en"
}));
// then receive binary WAV frames, then a final { done:true, ... }

See WebSocket streaming for the full protocol.