쿡북 / 기사를 팟캐스트로
어떤 기사든
팟캐스트로

스크린샷. 로컬에서 실행 중인 템플릿입니다.
- 모델
- sonic-3.6
- 언어
- 영어, 스페인어, 프랑스어, 독일어 외 4개
- 라이선스
- Apache-2.0
- 기술 스택
- Next.js 16React 19AI SDKMozilla Readabilityshadcn/ui
- Cartesia 제품
- Sonic 3.6
하는 일
시작하기 전에 짧은, 보통, 긴 에피소드 중 하나와 영어, 스페인어, 프랑스어, 독일어, 포르투갈어, 일본어, 힌디어, 한국어 중 언어 하나를 고릅니다. LLM은 그 언어로 대본을 쓰고, Sonic도 같은 언어로 읽습니다. 진행자 이름은 바꾸기 전까지 Sam과 Alex입니다. 완성된 에피소드는 플레이어에서 WAV 파일로 내려받을 수 있습니다.
직접 실행하기
설치
Node 22.22 이상에서 아래 명령어를 실행하세요. pnpm도 쓸 수 있습니다. 아래 표를 보고
.env.local을 채우세요. 키가 없어도 페이지는 열리며 설정해야 할 변수를 알려 줍니다.환경 변수 - CARTESIA_API_KEY
play.cartesia.ai/keys- LLM_MODEL
provider/model형식. 예를 들어openai/gpt-5.4-mini- OPENAI_API_KEY
LLM_MODEL이 openai/로 시작할 때- ANTHROPIC_API_KEY
LLM_MODEL이 anthropic/으로 시작할 때- AI_GATEWAY_API_KEY
- 그 밖의 제공업체용. Vercel에서는 필요 없음
- CARTESIA_VOICE_HOST_A
- 선택 사항. 첫 번째 진행자의 음성 id, 두 번째 진행자는
CARTESIA_VOICE_HOST_B - APP_PASSWORD
- 로컬에서는 선택 사항. Vercel에서는 필수이며, none으로 설정하면 앱이 공개됨
- TRUST_PROXY
- 선택 사항. 직접 운영하는 리버스 프록시 뒤에서는 1
에피소드 만들기
개발 서버가 출력한 로컬 URL을 열고 기사 링크를 붙여넣습니다. JavaScript로 본문을 불러오는 페이지라면 Paste text로 바꿉니다. 첫 에피소드를 빨리 들어 보려면 짧은 길이를 고릅니다. 그다음 Make podcast를 누릅니다.
코딩 에이전트로 만들기
어디서 시작하고 무엇을 먼저 읽어야 하는지 코딩 에이전트에게 알려 주는 프롬프트입니다.
Build an article to podcast generator with Cartesia. Start from https:/ and follow its AGENTS.md for the commands, files and rules. The AI SDK writes the two-host script with generateText and Output.object. Speech goes through @cartesia/cartesia-js: one client.tts.generate call per line with model_id sonic-3.6 and raw pcm_s16le at 24 kHz, then the server joins the lines into one WAV. Do not use the AI SDK speech API for Sonic. If I don't have a Cartesia API key yet, follow https:/ to get one.
작동 방식
이렇게 만든 이유
대사마다 Sonic 호출 한 번
진행자마다 다른 목소리가 필요해서 대사 한 줄마다 요청을 따로 보냅니다. 가공하지 않은 오디오는 대사마다 정확한 길이도 알려 주므로 대본 강조가 어긋나지 않습니다. 앱은 화자가 바뀔 때 350ms, 그 밖에는 180ms의 무음을 넣습니다. 대신 말투가 한 대사에서 다음 대사로 이어지지 않습니다.
대본은 어떤 LLM으로도 쓸 수 있다
대본은 AI SDK로 만들기 때문에 어떤 LLM 공급자든 쓸 수 있습니다. 음성은 Cartesia의 JavaScript SDK인 @cartesia/cartesia-js를 거치며, 요청마다 API 버전을 고정해 보냅니다.
가져온 페이지는 신뢰하지 않습니다
lib/safe-fetch.ts의 가져오기 코드는 사설 주소와 내부 주소를 거부하고 80번과 443번 포트만 허용합니다. 리디렉션 횟수, 페이지 크기(2MB), 시간도 제한합니다. 프롬프트는 기사를 이야기할 자료로 표시하고, 그 안의 지시는 절대 따르지 말라고 LLM에 알립니다.
원하는 대로 바꾸기
다른 음성 사용
play.cartesia.ai/voices에서 목소리 두 개를 고릅니다. 첫 번째 진행자의 음성 ID는 CARTESIA_VOICE_HOST_A에 넣습니다. 두 번째 진행자의 ID는 CARTESIA_VOICE_HOST_B에 넣습니다. 기본 목소리는 영어이므로 고른 언어에 맞는 목소리로 바꾸세요.
프로그램 바꾸기
프로그램 이름, 태그라인, 진행자 역할, 에피소드 구성은 lib/config.ts의 기본값입니다. LLM이 받는 지시는 lib/prompt.ts에 있습니다.
다른 LLM 제공업체 사용
LLM_MODEL에 공급자의 AI Gateway ID를 넣습니다. 예를 들면 google/gemini-2.5-flash입니다. 그 옆에 AI_GATEWAY_API_KEY를 추가합니다. 공급자를 직접 호출하려면 그 공급자의 AI SDK 패키지를 설치합니다. 그다음 lib/llm.ts에 그 접두사를 처리하는 분기를 추가합니다.
자주 묻는 질문
Cartesia API 키가 브라우저에 노출되나요?
아니요. 브라우저는 대본을 앱 자체의 서버로 보내고, 서버가 Sonic을 호출합니다. 키는 서버 밖으로 나가지 않습니다.
에피소드 하나를 만드는 데 얼마나 걸리나요?
쓰는 LLM과 고른 길이에 따라 다릅니다. 짧은 에피소드는 LLM 호출 한 번이면 됩니다. 기본값인 보통과 긴 에피소드는 LLM을 여러 번 연달아 호출하고, Sonic은 네 줄씩 동시에 읽습니다.
에피소드 하나의 비용은 얼마인가요?
Sonic은 대본 한 글자당 약 1크레딧입니다. 앱은 30,000자가 넘는 대본을 거부하므로 에피소드 하나는 최대 약 30,000크레딧에 LLM 토큰 비용이 더해집니다.
인터넷에 공개해도 되나요?
에피소드마다 내 LLM 토큰과 Cartesia 크레딧이 들기 때문에 먼저 APP_PASSWORD로 비밀번호를 설정하세요. 내 기사나 각색 허락을 받은 기사만 변환하고, 공개하는 오디오에는 AI로 생성했다고 표시하세요.
Python으로도 할 수 있나요?
네. Sonic 호출은 Cartesia의 Python 패키지에서도 똑같이 동작합니다. 음성을 파일로 생성하기 레시피에서 시작해 대본의 줄마다 반복하세요.
이 템플릿의 단계별 가이드가 있나요?
네. 레시피에서 코드를 단계별로 살펴보고, README에서 설정, 환경 변수, 배포를 다루며, TTS bytes API 레퍼런스에서 Cartesia 쪽 동작을 설명합니다.
쿡북 더 보기
오늘 시작하세요
전문가와 상담하세요.
팀원과 연결해 Cartesia가 세계적 수준의 음성 경험을 만드는 데 어떻게 도움이 되는지 알아보세요.
개발을 시작하세요.
API로 모델을 사용하고 몇 분 만에 음성 에이전트를 프로덕션에 배포하세요.
