Skip to content

Supported languages

The thirty languages Rhythm transcribes, the narrower set Symphony understands, and how the language field behaves.

Rhythm's thirty languages

Rhythm transcribes thirty languages, plus twenty-two Chinese dialects.

ChineseIndonesianJapaneseCzech
EnglishItalianTurkishFilipino
CantoneseKoreanHindiPersian
ArabicRussianMalayGreek
GermanThaiDutchHungarian
FrenchVietnameseSwedishMacedonian
SpanishDanishRomanian
PortugueseFinnishPolish

Symphony's eighteen languages

Symphony understands speech in a narrower set. Its model card counts nineteen and names eighteen: English, Chinese, Cantonese, Korean, Japanese, German, Russian, Italian, French, Spanish, Portuguese, Dutch, Malay, Indonesian, Turkish, Vietnamese, Arabic, and Urdu.

Seventeen of those eighteen also appear in Rhythm's thirty. Urdu is the one exception, listed by Symphony and not by Rhythm.

ModelSpeech coverageUse
RhythmThirty languages plus twenty-two Chinese dialectsTranscription
SymphonyEighteen named languages, seventeen shared with RhythmConversation, speech to speech

Rhythm reaches further, adding Thai, Hindi, Filipino, Persian, and nine European languages Symphony does not name, among them Polish, Swedish, Greek, and Czech. Symphony can answer in the languages it does understand. Use Rhythm when your audio is in a language Symphony does not name, and Symphony when you need a reply. Models covers the rest of that choice.

Languages with no Sprag voice

Sprag generates speech in ten languages, all of them inside Rhythm's thirty, so a voice product can understand a user in Thai, Hindi, or Polish and have no voice to answer them in. If your product both listens and replies, check what Sprag can speak before committing to a language list.

Setting the language

language takes an ISO-639-1 code, not a language name: en, not English. Omit it and the model works from the audio alone, which is usually fine for a clear recording of a single language.

curl https://api.sprag.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $SPRAG_API_KEY" \
  -F [email protected] \
  -F model=rhythm \
  -F language=en

An unrecognized code returns 400, and the error body lists every code the transcriber accepts. That list is wider than the thirty languages above, so check that table rather than treating an accepted code as covered.

Set language explicitly when the clip is short, noisy, or contains proper nouns that read as another language, since those are the cases where an unguided model is most likely to misread the language. Set it as well when you are comparing transcripts across a batch, because it removes a source of run-to-run variation.

Do not read the response for what the transcriber decided. A verbose_json response carries language only when you sent one, and the value is your own hint echoed back.