소개
읽을 텍스트와 함께, 선택 사항으로 30가지 목소리 중 하나, 억양, 스타일, 속도, 장면, 전달 방식에 대한 짧은 메모를 보내십시오. 대화라면 텍스트 대신 대사와 화자를 보내십시오. 작업은 그 목소리로 스크립트를 읽은 WAV 파일 하나(24kHz, 16비트 모노)를 반환하며, 대화의 경우 최대 두 목소리를 씁니다. 보통 몇 초 안에 끝납니다. 구두점으로 읽는 방식을 다듬으십시오. [한숨] 같은 괄호 지시어는 안정적으로 연기되지 않으며 때때로 그대로 읽힙니다. SpicyAPI는 콘텐츠 필터를 적용하지 않으므로 모든 스크립트는 쓴 그대로 읽힙니다. 과금은 반환된 오디오의 초 단위입니다.
| 항목 | 값 |
|---|---|
| 입력 | 텍스트 |
| 출력 | 오디오 |
| 필수 필드 | text(1~5,000자) 또는 dialogue(최대 20줄) |
| 선택 필드 |
|
| 결과 | WAV 파일 1개, 24kHz, 16비트, 모노 |
| 최대 클립 길이 | 16,384 오디오 토큰 |
| 과금 단위 | 반환된 오디오 초(파일에서 측정) |
| 보관 기간 | 생성된 오디오는 14일간 보관됩니다 |
요청 파라미터
| 파라미터 | 필수 | 설명 |
|---|---|---|
text | 아니요 | 말할 단어를 작성된 그대로 정확히 입력합니다. [sighs]와 같은 대괄호 지시는 안정적으로 연기되지 않으며 그대로 소리 내어 읽힐 수 있으므로, 대신 소리 나는 대로 써 주세요. 1자 이상 · 5000자 이하 |
dialogue | 아니요 | text 대신 쓰는, 최대 두 목소리의 대본 대화입니다. 최대 20줄이며 각 줄에 speaker(speakers에 있는 이름)와 250자 이내의 text를 지정합니다. 1개 이상 · 20개 이하 |
speakers | 아니요 | dialogue의 배역입니다. 한두 명을 지정하며, 각자에 줄에서 참조하는 name과 |
voice_id | 아니요 | 30가지 사전 제작 음성 중 하나이며, 각각 고정된 캐릭터를 가집니다. 기본값은 Kore입니다. |
style | 아니요 | 전체 말투입니다. 비워 두면 보이스 고유의 말투로 읽습니다. |
pace | 아니요 | 낭독의 리듬입니다. natural, |
accent | 아니요 | 읽을 때 쓰는 영어 억양입니다. 생략하면 음성 본래의 억양을 씁니다. |
instructions | 아니요 | 읽는 방식에 대한 자유 형식 지시입니다. 속도, 분위기, 마이크와의 거리, 듣는 사람 등을 적습니다. 1000자 이하 |
scene | 아니요 | 어디서 누구에게 하는 말인지에 대한 설명입니다(예: ‘자정이 지난 조용한 호텔 방’). 연기 방식에 반영되며 읽히지 않습니다. 500자 이하 |
temperature | 아니요 | 테이크 간의 변화를 0부터 2까지로 지정합니다. 값이 클수록 연기가 덜 예측 가능해집니다. |
요금
$0.00021 / 초
반환된 오디오 초당 요금이 부과됩니다. 작업이 실행되는 동안 660초에 해당하는 금액이 보류되며, 오디오 길이가 측정되면 사용하지 않은 부분이 해제됩니다.
활용 사례
대량 내레이션
상품 설명, 강의 대본, 기사 낭독, 짧은 대사 일괄 처리 등 연기의 디테일보다 처리 속도와 비용이 중요한 용도에 적합합니다.
캐릭터 및 컴패니언 음성
채팅 캐릭터에 고유한 목소리를 부여하고 몇 초 만에 답할 수 있습니다. 짧고 구어체적인 문장과 세심한 문장 부호가 톤의 대부분을 결정합니다.
무검열 오디오 스토리
스크립트는 콘텐츠 필터 없이 처리됩니다. 저희 테스트에서 모델은 보낸 가장 대담한 독백과 내레이션 장면의 모든 단어를 읽었고, 건너뛰거나 중간에 끊지 않았습니다.
영상용 음성 트랙
여기서 대사를 생성한 다음 WAV 파일을 토킹 아바타나 립싱크 모델에 전달하면 얼굴이 이를 연기합니다. 오디오 길이가 이후 클립의 길이를 결정합니다.
프롬프트 가이드 및 실전 팁
텍스트로 스크립트 보내기
실제로 말해야 하는 그대로, 멈춤을 위한 문장 부호까지 포함해 작성하세요. 최대 5,000자까지 가능합니다.
음성 선택하기
voice_id의 기본값은 Kore입니다. 30가지 음성 각각은 고정된 캐릭터를 가지므로, 한 번 선택하면 시리즈 전체에서 동일하게 유지하세요.
소리는 소리로 표현하기
한숨, 웃음, 신음 등은 이 모델이 때때로 그대로 소리 내어 읽는 대괄호 태그 대신, ‘Mmm…’, ‘ha…’, ‘ahh…’처럼 소리 나는 대로 써 주세요.
반환되는 내용
작업당 WAV 파일 1개: 24kHz, 16비트, 모노 PCM. 파일은 SpicyAPI 스토리지에 복사되어 14일간 보관됩니다. 결과에는 단어별 타이밍이나 자막이 포함되지 않습니다.
음성 선택하기
voice_id는 30가지 사전 제작 음성 중 하나를 지정하며 기본값은 Kore입니다. 각 음성은 고정된 캐릭터를 가집니다. 예를 들어 Kore는 단호함, Charon은 정보 전달형, Puck은 경쾌함, Enceladus는 숨소리 섞인, Achernar는 부드러움, Algenib은 허스키함, Sulafat은 따뜻함, Gacrux는 성숙함을 나타냅니다. 음성은 스크립트의 언어가 바뀌어도 변하지 않습니다.
읽는 방식 조절하기
text와 voice_id 외에 다음 설정으로 낭독을 다듬을 수 있습니다.
style,accent,pace로 말투, 영어 억양, 리듬을 정합니다. 생략하면 음성 고유의 것을 씁니다.instructions에는 읽는 방식을 자유롭게 적고,scene에는 어디서 누구에게 하는 말인지 적습니다. 둘 다 읽히지 않습니다.temperature(0~2)로 테이크 간 낭독이 얼마나 달라지는지 정합니다.
낭독의 많은 부분은 여전히 문장 부호가 좌우합니다. 쉼표와 말줄임표는 속도를 늦추고, 짧은 문장은 대화하듯 들리게 합니다.
[sighs]와 같은 대괄호 지시는 안정적으로 연기되지 않습니다 — 테스트에서 모델이 대괄호 안의 단어를 그대로 소리 내어 읽는 경우가 있었습니다. 대신 소리 나는 대로 써 주세요(‘Mmm…’, ‘ahh…’). 연기되는 지시가 중요하다면 Gemini 3.8 Flash TTS를 사용하세요.
이 모델에서는 한 목소리에 보낸 연출 지시가 클립 앞부분에서 읽힐 수 있습니다. 그래서 한 목소리 요청에 style·accent·pace·instructions·scene이 들어 있으면, SpicyAPI는 말하지 않는 두 번째 화자를 더해 모델의 2인 형식으로 보내며, 이렇게 하면 지시가 오디오에 들어가지 않습니다. 과금은 달라지지 않으며 반환된 초만큼만 냅니다.
한 클립에 두 목소리
대화라면 text 대신 dialogue를 보내고, 배역은 speakers에 넣습니다. 한두 명을 지정하며 각자에 name, voice_id, 그리고 선택으로 accent, style, pace, profile(말하는 사람에 대한 짧은 설명이며 읽히지 않습니다)을 설정합니다. dialogue의 각 줄은 {speaker, text}이며 speaker에는 그 이름 중 하나를 씁니다. 줄은 순서대로 연기되며 줄당 250자, 최대 20줄입니다. 화자가 비워 둔 설정에는 최상위 accent, style, pace가 쓰입니다. 대화 전체는 WAV 파일 하나로 돌아오며, 다른 요청과 마찬가지로 초 단위로 과금됩니다.
길이와 타이밍
text는 최대 5,000자까지 지원합니다. 테스트에서 270자 분량의 문단은 22–26초의 오디오로 반환되었으며, 작업의 중앙값 생성 시간은 약 7초였습니다. 모델은 클립당 16,384 오디오 토큰에서 멈춥니다.
과금
반환된 오디오 초당 요금이 부과되며, 파일에서 측정됩니다. 작업이 실행되는 동안 잔액에 660초에 해당하는 금액이 보류되며, 작업이 정산되면 사용하지 않은 부분이 해제됩니다. 실패한 요청에는 요금이 부과되지 않습니다.
콘텐츠
SpicyAPI는 콘텐츠 필터를 추가하지 않습니다. 저희 테스트에서는 가장 대담한 것들을 포함해 모든 스크립트가 한 단어도 빠짐없이 읽혔고, 건너뛴 부분이나 중간에 끝난 클립은 없었습니다.
SpicyAPI는 콘텐츠 필터를 전혀 추가하지 않습니다: NSFW 스크립트도 작성된 그대로 읽힙니다. 전송하는 스크립트와 그 결과로 생성된 오디오의 사용 방식(실제 인물의 발언인 것처럼 사용하지 않는 것 포함)에 대한 책임은 사용자에게 있습니다.
API 빠른 시작
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "google/gemini-3.8-flash-lite-tts/text-to-speech",
"input": {
"text": "Welcome back. Your files finished rendering a minute ago and are ready to download.",
"voice_id": "Kore"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
인증, 전체 스키마, 폴링과 오류 처리는 API 레퍼런스에서 확인하세요.







