성인 오디오북 한 장이나 캐릭터 음성 메시지에는 연기되는 큐나 더 넓은 언어 지원이 필요하면 Gemini 3.8 Flash TTS를, 담백하고 완성된 내레이션과 짧은 메시지, 대량 대사는 Flash-Lite TTS를 고르세요. 둘 다 명시적인 성인 어휘를 문장 그대로 읽어 줍니다. Flash는 [whispers] 같은 대괄호 큐를 거의 항상 연기해 내고(대개 그렇습니다. 먼저 들어 보세요), 130개 언어를 지원합니다. Lite는 101개입니다. Lite는 대괄호 큐를 안정적으로 연기하지 못하고 가끔 그대로 읽어 버리므로 담백한 대본이 필요합니다. Flash는 반환된 오디오 1초당 $0.00032, Lite는 $0.00021 입니다. 차이는 오디오 10분당 $0.066, 1,000분이면 $6.60입니다. 2026년 9월 자체 테스트 기준입니다.

예시에 나온 가상의 성인 커플을 그린 일러스트. 오디오 결과물이 아닙니다.
어떤 작업에 어떤 모델인가
| Flash TTS | Flash-Lite TTS | |
|---|---|---|
| 오디오 10분 | $0.192 | $0.126 |
대괄호 큐([whispers], [sighs]) | 대부분 연기됨. 가끔 태그 단어가 그대로 읽힘 | 안정적으로 연기되지 않음. 태그 단어가 읽힐 수 있으므로 소리는 글로 쓰기 |
| 언어 | 130 | 101(태국어, 스웨덴어, 핀란드어, 스와힐리어, 소말리어 미지원) |
| 한 요청에 두 화자 | 가능(speakers + dialogue) | 가능, 구조 동일 |
| 음성 / 출력 | 프리셋 음성 30종, 24 kHz 16비트 모노 WAV | 동일 |
| 이런 용도에 | 연기되는 오디오북 장면, 숨소리 같은 음성 효과, 대화 중심 장면, 더 넓은 언어 지원 | 담백한 완성 내레이션과 메시지, 초안, 음성 시범 청취, 대량 대사 |
웃음이나 한숨, 속삭임이 정확한 자리에 들어와야 한다면 Flash TTS를, 담백한 발화에는 Flash-Lite TTS를 쓰세요. 담백한 대사는 먼저 Lite에서 시범 청취해 두고 마음에 드는 take를 보관하면 됩니다. Flash에서 다시 만들 필요는 없습니다. 장면에 연기되는 큐가 필요하거나 Lite가 지원하지 않는 언어가 필요할 때 Flash로 옮기세요. 둘 다 같은 필드를 받으므로 전환은 모델 이름만 바꾸면 됩니다.
캐릭터 음성 메시지 만들기
먼저 Playground에서 시험해 보세요. Flash TTS 또는 Flash-Lite TTS를 열고 Playground 탭의 Form 보기를 사용해 다음 순서로 진행합니다.
- Text에는 듣는 사람에게 들려야 할 말만 넣습니다(최대 5,000자). Flash에서는 Cues 바로가기로
[whispers],[sighs],[laughs],[gasps],[pause]를 넣습니다. Lite는 이런 태그가 그대로 읽힌다는 경고를 표시합니다. - Voice를 고릅니다(기본값은
Kore). 원하면 Style과 Pace도 고릅니다. - Delivery instructions(최대 1,000자)와 Scene(최대 500자)에 읽는 방식에 대한 메모를 적습니다. 둘 다 읽어주지 않습니다.
- 길이 예측값을 확인하고 Run model을 누른 뒤 Output에서 WAV를 재생하거나 내려받습니다.
이어서 동일한 요청을 코드로 실행합니다(pip install spicyapi, SPICY_API_KEY 설정 완료). 작업을 만들고 기다린 뒤 WAV 링크를 출력합니다. Lite의 경우 모델을 google/gemini-3.8-flash-lite-tts/text-to-speech로 바꾸고, 대괄호 대신 소리를 글로 쓰세요.
import uuid
from spicyapi import SpicyClient, output_assets
client = SpicyClient() # reads SPICY_API_KEY from the environment
task = client.create_task(
model="google/gemini-3.8-flash-tts/text-to-speech",
input_data={
"text": "You made it. I was starting to think you had changed your mind. Stay a little longer; I like having you here.",
"voice_id": "Kore",
"instructions": "Quiet, warm and intimate. Speak to one adult listener, with a natural pause after the first sentence.",
"pace": "natural",
},
idempotency_key=str(uuid.uuid4()), # new key per new request; reuse only to retry the same one
)
final = client.wait_for_terminal(task["taskId"])
if final["state"] != "succeeded":
raise RuntimeError(f"Task {task['taskId']} ended as {final['state']}")
print(output_assets(final)[0]["url"]) # 24 kHz 16-bit mono WAV; copy it to your own storage대기, 재시도, 오류 처리는 Python SDK 레퍼런스와 작업 문서에 있습니다.
Character: 라벨, take 번호, 장면 설명은 text에서 빼세요. 모델은 그 내용을 대본으로 읽습니다. instructions는 분위기와 마이크와의 거리 같은 내용으로 한두 문장에 머무르게 하세요. 나이나 성별을 거기 적는 대신 다른 음성을 고르세요. 억양은 accent 필드로 설정합니다.
Flash에서는 지시하려는 대사 바로 앞에 인라인 큐를 넣습니다. [whispers] You made it.처럼 씁니다. 모델 페이지에는 [sighs], [laughing], [gasping]도 나와 있고, 예제는 [softly], [teasing]를 씁니다. 쉼은 태그가 아니라 문장부호(쉼표, 말줄임표, 마침표)에서 나옵니다. Google 직접 API 문서에 있는 꺾쇠괄호 태그가 아니라 대괄호를 쓰세요. 태그가 연기되지 않고 그대로 읽히면 다시 생성하거나 그 대사를 instructions로 옮기세요.
Lite에서는 소리를 글로 적으세요. Mmm... you made it.나 Ha... of course you did.처럼 씁니다. 대괄호는 아예 쓰지 말고, 분위기는 instructions, 문장부호, 짧은 문장으로 전달하세요.
또는 Agent에게 맡기세요. 어시스턴트에 CLI나 MCP 서버를 넘기면 됩니다. 둘 다 가격을 보여 주고 유료 호출 전에 확인을 요청하며, Skill은 그 위에 지시 사항을 덧붙입니다.
- CLI:
spicyapi(npx @spicyapi/cli는 설치 없이도 동작).input.json에는 위의input객체를 담습니다.
``bash spicyapi tasks create --model google/gemini-3.8-flash-tts/text-to-speech \ --input-file input.json --wait ``
- MCP 서버: MCP 서버를 추가한 뒤 "이 대사를 Gemini 3.8 Flash TTS로 따뜻하게 읽어 줘"라고 요청하세요.
spicyapi_task_create를 호출하고(가격 확인을 위해 그 지점에서 멈춥니다) 이어서spicyapi_task_wait를 호출합니다. - Skill:
npx skills add spicyapi-ai/spicy-skill는 Agent Skill을 설치합니다. 어시스턴트에게 현재 스키마를 읽는 법을 가르치지만 그 자체로 작업을 실행할 수는 없으니 CLI나 MCP와 함께 쓰세요.
음성 고르기
음성 ID는 대소문자를 구분하며 Kore(단단한)가 기본값입니다. 더 따뜻하거나 부드러운 선택지는 Sulafat(따뜻함), Achernar(부드러움), Enceladus(숨소리가 들림)입니다. Charon(차분함)은 내레이션에 잘 맞고, Gacrux는 성숙하며, Algenib은 거칠고, Puck은 쾌활합니다. 같은 두 대사를 세 음성으로 Lite에서 시범 청취한 뒤, 그 음성을 책 전체에 고정하세요. 음성은 언어가 바뀌어도 성격이 유지됩니다. 이 프리셋만이 사용 가능한 음성입니다. 클로닝도, 업로드한 참조 음성도 없습니다.

일러스트. 오디오 결과물이 아닙니다.
한 요청에 두 성인
text 안의 화자 라벨로 두 개의 음성이 생기지는 않습니다. text 대신 dialogue를 쓰고, 각 줄에 speakers에 있는 화자 이름을 부여하세요.
{
"speakers": [
{"name": "Mara", "voice_id": "Kore", "style": "vocal_smile"},
{"name": "Eli", "voice_id": "Charon", "pace": "natural"}
],
"dialogue": [
{"speaker": "Mara", "text": "You can stay, if you want to."},
{"speaker": "Eli", "text": "I was hoping you would ask."}
],
"scene": "Two fictional adults speaking quietly after a dinner date."
}한계: 화자 2명, 20줄, 줄당 250자. 배우마다 파일이 나오는 게 아니라 섞인 WAV 하나를 받습니다. 음성을 따로 편집하려면 각 화자의 대사를 단일 음성 작업으로 나누어 생성하세요. 각 화자는 자체 style, pace, accent와 profile(읽히지 않음)을 가질 수 있습니다.
한 장을 여러 요청으로 나누기
요청 하나는 최대 5,000자를 받습니다. 실제로 270자짜리 문단은 대략 20~26초로 돌아오므로, 5,000자 가득 채운 요청은 6~8분 정도가 대략의 추정치일 뿐 길이 제한이 아닙니다. 이 구간의 비용은 Flash에서 $0.1152~$0.1536, Lite에서 $0.0756~$0.1008(약 $0.12~$0.15, $0.08~$0.10)입니다. 따라서 20분짜리 한 장은 요청 세 개나 네 개입니다. Flash에서 $0.384, Lite에서 $0.252입니다.
- 장면 전환이나 긴 멈춤에서 나누세요. 문장 중간을 자르지 마세요. 장면 안에서 이어 붙인 지점이 바로 음색이 가장 잘 들리는 자리입니다.
- 모든 조각에 똑같은 음성,
instructions, 설정을 쓰세요. 그렇지 않으면 한 명의 낭독자가 두 사람처럼 들리기 시작합니다. - 여유 있게 예산을 잡으세요. 반환된 초 단위로 과금되며,
pace를 느리게 설정할수록 더 많은 초가 반환됩니다. - WAV는 14일간 보관됩니다. 타임스탬프도 자막도 없습니다. 필요하면 편집기에서 대본 타이밍을 맞춰 두세요.
- 임시 예약은 감안하세요. 실행 중인 작업은 660초 분의 예산을 예약하고, 완료되면 사용하지 않은 부분을 해제합니다.
- MP3, 음악 트랙, 음높이나 속도 슬라이더, 실시간 통화는 없습니다. WAV를 로컬에서 변환하고, 편집기에서 환경음을 넣고, 실시간 음성에는 실시간 연동을 쓰세요.
결과를 바꾸는 설정
pace는 natural, rapid_fire, the_drift(느리고 여유로운), staccato를 제공합니다. natural로 시작하세요. 대사가 서두르는 느낌이면 문장부호를 먼저 고치세요. style은 whisper, empathetic, vocal_smile, newscaster, promo_hype, deadpan을 제공하며, 친밀한 장면에서는 whisper나 vocal_smile을 시도해 보세요. accent는 영어 억양 8종(중립, 미국식 3종, 영국식 2종, 트랜스애틀랜틱, 호주식)을 제공합니다. temperature는 0에서 2까지이며 take마다의 편차를 조절합니다. 첫 take에서는 비워 두세요.
뭔가 잘못 들릴 때
| 들리는 것 | 바꿀 것 |
|---|---|
| Lite가 대괄호 큐를 그대로 읽음 | 대괄호를 없애고 소리를 글로 쓰거나, 그 줄을 Flash로 옮기기 |
| Flash가 큐를 연기하지 않고 큐의 단어를 읽음 | 다시 생성하고, 반복되면 큐 표현을 바꾸거나 instructions 사용 |
| 대사가 안내 방송처럼 들림 | promo_hype 또는 newscaster를 빼고, 짧은 대화형 지시를 시도 |
| 지원하지 않는 언어거나 Lite에서 읽히기 힘듦 | Flash 사용(130개 언어) |
| 지시 메모가 도입부에서 읽힘 | text에 없는지 확인하고, 있다면 작업 ID를 지원팀에 보고 |
듣기 예제로 공개된 Flash 속삭임 고백 샘플을 준비했습니다. Google의 모델 문서는 직접 API만 다룹니다.
정리하면, 담백한 내레이션과 초안, 대량 대사는 Lite에서, 연기되는 큐나 Lite에 없는 언어는 Flash에서 처리합니다. 어느 쪽이든 한 장 전체를 확정하기 전에 원하는 음성으로 짧은 구절 하나를 먼저 실행해 보고, 그 뒤 그 음성과 지시 방향을 모든 조각에 재사용하세요.
다른 오디오 옵션으로는 무검열 텍스트 음성 변환 API 비교 글(영어판만 있음)과 NSFW 오디오용 Gemini 2.5 Pro TTS가 있습니다.







