Kyutai TTS 통합
Kyutai의 TTS 모델을 로컬에서 실행해 고품질 음성 합성을 사용합니다. 이 가이드는 Libre WebUI에 포함된 OpenAI 호환 서버를 이용하는 Pocket TTS(CPU)와 TTS 1.6B(GPU)를 모두 다룹니다.
개요
Kyutai는 두 가지 TTS 모델을 제공합니다.
| 모델 | 매개변수 | 장치 | 적합한 용도 |
|---|---|---|---|
| Pocket TTS | 100M | CPU 전용 | 노트북, 저사양 환경 |
| TTS 1.6B | 1.6B | GPU/MPS/CPU | 서버, 고품질 합성 |
둘 다 CALM(Continuous Audio Language Models) 프레임워크를 사용하며 오디오 샘플을 통한 음성 복제를 지원합니다.
Pocket TTS (CPU)
CPU에서 실시간으로 실행되는 경량 TTS입니다. GPU가 필요하지 않습니다.
요구 사항
| 구성 요소 | 최소 |
|---|---|
| Python | 3.10 - 3.14 |
| PyTorch | 2.5+ |
| RAM | 4GB |
| 디스크 | 500MB |
빠른 시작
cd examples/kyutai-tts-server
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Start server
python server.py
서버는 http://localhost:8200에서 실행됩니다.
테스트
curl http://localhost:8200/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kyutai-tts", "input": "Hello, welcome to Libre WebUI!", "voice": "alba"}' \
--output speech.wav
음성
| 음성 | 설명 |
|---|---|
| Alba | 여성, 명확하고 자연스러움 |
| Marius | 남성, 따뜻한 음색 |
| Javert | 남성, 권위 있는 느낌 |
| Jean | 남성, 부드러움 |
| Fantine | 여성, 잔잔함 |
| Cosette | 여성, 젊은 느낌 |
| Eponine | 여성, 표현력이 풍부함 |
| Azelma | 여성, 밝은 느낌 |
성능
- MacBook Air M4에서 실시간보다 약 6배 빠름
- 첫 오디오 청크 지연 시간 약 200ms
- CPU 코어 2개만 사용
TTS 1.6B (GPU)
GPU 가속을 사용하는 고품질 TTS입니다. 장치를 자동 선택합니다: CUDA > MPS > CPU.
요구 사항
| 구성 요소 | 최소 | 권장 |
|---|---|---|
| Python | 3.10+ | 3.12 |
| GPU VRAM | 6GB | 8GB+ |
| RAM | 8GB | 16GB+ |
| 디스크 | 4GB | 8GB |
플랫폼 지원
| 플랫폼 | 백엔드 | 참고 |
|---|---|---|
| NVIDIA GPU | CUDA | 최고 성능, bfloat16 지원 |
| Apple Silicon | MPS | float16 사용 |
| CPU | PyTorch | 느림, float32 |
빠른 시작
cd examples/kyutai-tts-1.6b-server
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install PyTorch with CUDA (for NVIDIA GPUs)
pip install torch --index-url https://download.pytorch.org/whl/cu121
# Install dependencies
pip install -r requirements.txt
# Start server (auto-detects GPU)
python server.py
서버는 http://localhost:8201에서 실행됩니다.
장치 선택
# Auto-detect (CUDA > MPS > CPU)
python server.py
# Force specific device
python server.py --device cuda
python server.py --device mps
python server.py --device cpu
테스트
curl http://localhost:8201/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "kyutai-tts-1.6b", "input": "Hello from the GPU!", "voice": "alba"}' \
--output speech.wav
음성
Alba MacKenna (CC BY 4.0):
| 음성 | 스타일 |
|---|---|
alba / alba-casual | 일상 대화 |
alba-merchant | 상인 캐릭터 |
alba-announcer | 아나운서 스타일 |
Expresso (CC BY-NC 4.0 - 비상업용):
| 음성 | 감정 |
|---|---|
expresso-happy | 행복 |
expresso-sad | 슬픔 |
expresso-angry | 분노 |
VCTK (CC BY 4.0):
vctk-p225,vctk-p226,vctk-p227,vctk-p228
음성 복제
두 서버 모두 오디오 파일에서 음성을 복제할 수 있습니다.
Pocket TTS
# From local file
curl http://localhost:8200/v1/audio/voice-clone \
-F "input=Hello from a cloned voice" \
-F "reference_audio=@my_voice.wav" \
--output cloned.wav
# From HuggingFace URL
curl http://localhost:8200/v1/audio/voice-clone-url \
-H "Content-Type: application/json" \
-d '{
"input": "Hello world!",
"voice_url": "hf://kyutai/tts-voices/alba-mackenna/casual.wav"
}' \
--output speech.wav
TTS 1.6B
Hugging Face 음성 경로를 voice 매개변수로 전달합니다.
curl http://localhost:8201/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "kyutai-tts-1.6b",
"input": "Custom voice synthesis",
"voice": "hf://kyutai/tts-voices/vctk/p230.wav"
}' \
--output speech.wav
API 참고
음성 생성
엔드포인트: POST /v1/audio/speech
{
"model": "kyutai-tts",
"input": "Text to convert to speech",
"voice": "alba",
"response_format": "wav",
"stream": false
}
| 매개변수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
model | string | varies | kyutai-tts 또는 kyutai-tts-1.6b |
input | string | required | 합성할 텍스트(최대 10,000자) |
voice | string | alba | 음성 이름 또는 Hugging Face 경로 |
response_format | string | wav | 오디오 형식(wav만 지원) |
stream | boolean | false | 스트리밍 활성화(Pocket TTS만) |
cfg_coef | float | 2.0 | Classifier-free guidance(1.6B만) |
응답: 오디오 파일(audio/wav)
OpenAI 음성 별칭
OpenAI TTS 클라이언트와의 호환성을 위한 매핑:
| OpenAI 음성 | Pocket TTS | TTS 1.6B |
|---|---|---|
alloy | alba | alba |
echo | marius | vctk-p225 |
fable | cosette | expresso-happy |
onyx | javert | vctk-p226 |
nova | fantine | alba-announcer |
shimmer | eponine | alba-merchant |
음성 목록
엔드포인트: GET /v1/voices
상태 확인
엔드포인트: GET /health
플러그인 설정
Pocket TTS
설정 > 플러그인 > Kyutai TTS에서 활성화
플러그인 파일: plugins/kyutai-tts.json
{
"id": "kyutai-tts",
"name": "Kyutai TTS",
"type": "tts",
"endpoint": "http://localhost:8200/v1/audio/speech",
"capabilities": {
"tts": {
"config": {
"voices": [
"Alba",
"Marius",
"Javert",
"Jean",
"Fantine",
"Cosette",
"Eponine",
"Azelma"
],
"default_voice": "Alba",
"supports_streaming": true,
"no_auth_required": true
}
}
}
}
TTS 1.6B
설정 > 플러그인 > Kyutai TTS 1.6B에서 활성화
플러그인 파일: plugins/kyutai-tts-1.6b.json
{
"id": "kyutai-tts-1.6b",
"name": "Kyutai TTS 1.6B",
"type": "tts",
"endpoint": "http://localhost:8201/v1/audio/speech",
"capabilities": {
"tts": {
"config": {
"voices": [
"Alba",
"Alba-Casual",
"Alba-Merchant",
"Alba-Announcer",
"Expresso-Happy",
"Expresso-Sad",
"Expresso-Angry",
"VCTK-P225",
"VCTK-P226"
],
"default_voice": "Alba",
"supports_streaming": true,
"no_auth_required": true
}
}
}
}
네트워크 접근
다른 컴퓨터에서 접근하려면:
# Start server on all interfaces
python server.py --host 0.0.0.0
# Access from another machine
curl http://192.168.1.100:8200/v1/audio/speech ...
플러그인 엔드포인트를 맞게 업데이트합니다.
{
"endpoint": "http://192.168.1.100:8200/v1/audio/speech"
}
문제 해결
모델 다운로드 실패
첫 실행 시 Hugging Face에서 모델을 다운로드합니다.
# Set token for gated models
export HF_TOKEN=hf_...
CUDA 메모리 부족
VRAM이 제한된 환경에서 TTS 1.6B를 사용하려면:
- 다른 GPU 애플리케이션을 닫습니다.
- 메모리 사용량을 줄이려면
cfg_coef=1.5를 시도합니다. - 대신 CPU 기반 Pocket TTS를 사용합니다.
오디오 품질 문제
- 기계적인 소리: 다른 음성을 시도하세요.
- 오디오가 잘림: 텍스트가 너무 길 수 있으며 서버가 자동으로 청크를 나눕니다.
- 잘못된 발음: 모델은 영어와 프랑스어에 최적화되어 있습니다.
MPS (Apple Silicon) 문제
RuntimeError: MPS backend error
1.6B 모델은 MPS에서 float16을 사용합니다. 문제가 계속되면 CPU를 강제합니다.
python server.py --device cpu
Qwen3-TTS와 비교
| 기능 | Kyutai Pocket | Kyutai 1.6B | Qwen3-TTS |
|---|---|---|---|
| 매개변수 | 100M | 1.6B | 0.6B-1.7B |
| GPU 필요 | 아니요 | 선택 사항 | 예 |
| 언어 | 영어 | EN/FR | 10개 언어 |
| 음성 복제 | 예 | 예 | 예 |
| 음성 디자인 | 아니요 | 아니요 | 예 |
| 포트 | 8200 | 8201 | 8100 |
간단한 설정이 필요한 영어 중심 용도에는 Kyutai를 선택하세요. 다국어 지원과 음성 디자인 기능에는 Qwen3-TTS를 선택하세요.
리소스
- Kyutai TTS - 공식 프로젝트 페이지
- Pocket TTS GitHub - CPU 모델
- Delayed Streams Modeling - 1.6B 모델
- 음성 컬렉션 - 사용 가능한 음성
- 모델 카드 - 기술 세부 정보