Kitten TTS
요약
Kitten TTS는 오픈 소스 텍스트-음성 변환(TTS) 라이브러리입니다. 주력 모델인 KittenTTS 2는 인컨텍스트 보이스 클로닝과 표현 제어가 가능하며, CPU에서도 실시간 구동이 특징입니다. 또한 경량 레거시 모델도 제공하여 다양한 환경에서 활용할 수 있습니다.
핵심 포인트
- 5~30초 오디오만으로 화자 목소리 복제(Voice cloning)가 가능합니다.
- CPU 기반의 실시간 TTS 구동 및 경량 모델을 지원합니다.
- 영어, 한국어 등 20개 언어를 포함한 다국어 기능을 제공합니다.
- API를 통해 무료로 사용해 볼 수 있으며 상업적 지원도 받습니다.
Kitten TTS
<p align="center"> <img width="607" alt="Kitten TTS" src="https://raw.githubusercontent.com/KittenML/KittenTTS/main/assets/banner.png" /> </p> <p align="center"> <a href="https://huggingface.co/spaces/KittenML/KittenTTS-Demo"><img src="https://img.shields.io/badge/Demo-Hugging%20Face%20Spaces-orange" alt="Hugging Face Demo"></a> <a href="https://discord.com/invite/VJ86W4SURW"><img src="https://img.shields.io/badge/Discord-Join%20Community-5865F2?logo=discord&logoColor=white" alt="Discord"></a> <a href="https://kittenml.com"><img src="https://img.shields.io/badge/Website-kittenml.com-blue" alt="Website"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-green.svg" alt="License"></a> </p>새로운 기능: Kitten TTS API를 https://platform.kittenml.com에서 무료로 이용할 수 있습니다.
Kitten TTS는 오픈 소스 텍스트-음성 변환(text-to-speech) 라이브러리입니다. 이의 주력 모델인 KittenTTS 2는 다음과 같은 특징을 가진 1.7B 파라미터 1비트 음성 언어 모델입니다: 인컨텍스트 보이스 클로닝 및 표현 제어가 가능합니다. 즉, 누구의 목소리든 5초만 제공하면 해당 목소리로 사용자의 텍스트를 읽어줍니다. 심지어 CPU에서도 실시간으로 구동됩니다!
이 라이브러리는 또한 원래의 경량 레거시 모델(lightweight legacy models)도 함께 제공하며, 이 모델들은 15M~80M 파라미터를 가지며 GPU 없이 CPU에서 구동됩니다. 두 계열 모두 동일한 KittenTTS(...) 생성자를 통해 로드할 수 있습니다.
상업적 지원이 가능합니다. 통합 지원, 사용자 지정 음성(custom voices), 또는 엔터프라이즈 라이선싱에 대한 문의는 여기로 연락 주십시오.
목차
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
기능 (Features)
- 음성 복제 (Voice cloning) -- 5~30초 분량의 오디오만으로도 어떤 화자든 클론할 수 있으며, 파인튜닝(fine-tuning)이 필요 없습니다.
- 47개 내장 음성 -- KittenTTS 0.8에서 가져온 8개와 비영어권 9개를 포함합니다.
- 다국어 지원 (Multilingual) -- 영어, 아랍어, 중국어, 프랑스어, 독일어, 힌디어, 이탈리아어, 포르투갈어, 러시아어, 스페인어, 일본어, 한국어, 터키어, 네덜란드어, 스웨덴어, 덴마크어, 핀란드어, 스와힐리어, 그리스어, 히브리어를 포함한 20개 언어를 지원합니다.
- 표현 제어 (Expression control) --
[emotion]태그, 인라인<event>태그, 그리고(((emphasis)))간격을 사용합니다. - 디코딩 프리셋 (Decoding presets) -- 요청별로 안정성과 표현력을 조절할 수 있습니다.
- 장문 텍스트 처리 (Long-form text) -- 문장 단위 청킹(Sentence-aware chunking)과 끊김 없는 연결을 제공합니다.
- 텍스트 전처리 (Text preprocessing) -- 숫자, 통화, 날짜, 단위 및 약어 등이 자동으로 확장됩니다.
- 24 kHz 출력 -- 표준 샘플 레이트로 고품질 오디오를 제공합니다.
- GPU 없이 실행 가능
- CPU용 최적화된 C++ 추론 (Optimized C++ inference for CPU) -- llama.cpp의 포크 버전입니다.
사용 가능한 모델 (Available Models)
KittenTTS 2 -- 음성 언어 모델 (speech language model):
| 모델 | 파라미터 (Parameters) | 크기 (Size) | 음성 (Voices) | 다운로드 (Download) |
|---|---|---|---|---|
| kitten-tts-2 | 1.7B | 506 MiB | 47 + 복제 | KittenML/kitten-tts-2 |
경량 ONNX (Lightweight ONNX) -- CPU에서 실행되며, GPU가 필요하지 않습니다:
| 모델 | 파라미터 (Parameters) | 크기 (Size) | 다운로드 (Download) |
|---|---|---|---|
| kitten-tts-mini | 80M | 80 MB | KittenML/kitten-tts-mini-0.8 |
| ... |
Kitten TTS를 KittenML Platform에서 브라우저로 직접 사용해 보세요.
빠른 시작 (Quick Start)
사전 준비 사항 (Prerequisites)
- Python 3.9 이상
- 여유 메모리 약 8 GB의 CUDA GPU 또는 RAM 약 6 GB의 CPU
- 모델용 디스크 공간 약 1 GB, 또는 더 작은 가중치(weights) 사용 시 506 MiB
설치 (Installation)
pip install kittenml
이것으로 설치가 완료됩니다. KittenTTS 2는 기본 모델이며, 음성 복제(voice cloning) 기능이 포함되어 있고 Hugging Face 로그인도 필요 없습니다. 모델이 사용하는 모든 가중치(weight)는 자체 저장소에 배포됩니다. 또한 작은 ONNX runtime을 가져오므로 경량 모델도 동일한 설치에서 작동합니다.
기본 사용법 (Basic usage)
from kittenml import KittenTTS
import soundfile as sf
...
m.available_voices는 음성 및 표현에 설명된 47개의 내장 음성을 나열합니다. Bella, Jasper, Luna, Bruno, Rosie, Hugo, Kiki, Leo는 KittenTTS 0.8과 동일한 화자이므로 ONNX 모델을 기반으로 작성된 코드는 계속 작동합니다.
가중치(weight)는 두 가지 크기로 제공됩니다. 기본값은 947 MiB의 무손실(lossless) 방식이며, `weights=
참조(reference)는 모델에 두 개의 독립적인 경로를 통해 피드됩니다. 하나는 모델의 투영 헤드(projection head)를 거치는 화자 임베딩(speaker embedding)이고, 다른 하나는 프롬프트 내 코덱 토큰(codec tokens)으로서 클립 자체입니다. 따라서 한 경로가 약하더라도 정체성(identity)이 유지됩니다.
내장된 목소리에서 측정했을 때, 생성된 클립은 자신과 비교하여 0.49-0.72의 화자 유사도(speaker similarity)를 보이고 다른 37개와는 0.01-0.18을 기록합니다. 또한, 한 번도 듣지 못한 녹음본을 복제할 경우 해당 녹음본과 0.81을 기록합니다.
표현 제어(Expression controls)
베타. 감정 제어는 전달을 지시하는 것이지 보장하는 것은 아니며, 그 효과는 목소리와 문장에 따라 다릅니다.
audio = m.generate(
"[joyful] We actually won the grant <laugh> I can (((hardly))) believe it!",
voice="Kiki",
...
선도적인 [emotion] 태그, 인라인 <event> 태그, 그리고 (((emphasis))) 범위는 말해지는 것이 아니라 마크업(markup)으로 모델에 전달되어 자동으로 표현 조건화(expression conditioning)를 활성화합니다. 10가지 감정과 10가지 음성 이벤트가 인식되며, 전체 목록과 포함되지 않은 내용은 voices and expression를 참조하세요.
CPU에서 실행하기
KittenTTS 2는 별도의 설정 없이(out of the box) CPU에서 실행됩니다. device가 자동으로 감지되지만, 가장 빠른 방법은 저희의 llama.cpp 포크인 kitten-tts-2-cpp를 사용하는 것입니다. 이 도구는 모델 저장소의 cpp/ 디렉터리에 있는 GGUF 가중치(weights)를 읽습니다.
vLLM으로 실행하기
Linux 환경에서 NVIDIA CUDA GPU와 함께 vLLM을 사용하여 추론할 경우, 선택적 백엔드(optional backend)를 설치해야 합니다:
pip install "kittenml[vllm]"
`backend=
긴 입력은 문장 경계에서 분할되어 청크 단위로 합성된 후, 공백 제거(silence trimming)와 짧은 엣지 페이드(short edge fades)를 통해 결합되어 이음매가 들리지 않게 합니다. 이는 자동적입니다: 모델은 짧은 입력에는 신뢰성이 높지만, 전체 스크립트를 한 번에 요청하면 잘리거나 반복되는 경향을 보입니다.
전체 내용이 준비되기 전에 재생하려면 스트리밍(stream) 기능을 사용하세요:
for chunk in m.generate_stream(long_text, voice="Luna"):
play(chunk) # 각 청크는 m.sample_rate의 numpy 배열입니다
generate와 동일한 인수를 사용하므로, reference=를 사용해도 클론된 목소리가 스트리밍됩니다.
스트리밍은 토큰 단위가 아닌 청크 단위입니다: 청크는 완전히 생성되고 보코딩(vocoded)된 후에 반환되므로, 첫 번째 청크도 자체적인 생성 시간을 소모합니다. A100에서 936자 분량의 구절이 17초 후 첫 21초의 오디오를 반환했고, 총 42초의 벽시계 시간 동안 54초의 오디오를 완성했습니다. 따라서 재생은 생성보다 앞서지만, 실제 초기 지연 시간이 존재합니다.
알아두면 좋은 두 가지 결과가 있습니다:
- 짧은 텍스트는 스트리밍되지 않습니다. 하나의 청크에 들어가는 입력(대략 380자 미만이며, 짧은 후행 조각들은 이웃과 병합됨)은 정확히 하나의 청크를 반환하므로,
generate_stream은generate처럼 작동합니다. - 청크는 원시 형태로 반환됩니다.
generate는 이음매(seams)를 후처리합니다. 즉, 각 세그먼트의 엣지 공백을 제거하고, 짧은 페이드를 추가하며, 일관된 간격을 두는데, 스트리밍 호출자는 다음 청크를 기다리지 않고 이를 수행할 수 없습니다. 따라서 스트리밍된 청크들을 직접 연결하면 동일한 텍스트에 대해generate보다 약간 거친 이음매가 생깁니다.
문서화 (Documentation)
| API 레퍼런스 | generate, 스트리밍, 그리고 고급 제어 변수(advanced knobs)의 모든 인수 |
| ... |
시스템 요구 사항 (System Requirements)
KittenTTS 2
- 운영 체제: Linux, Windows 또는 Mac
- Python: 3.9 이상
종속성 충돌을 방지하기 위해 가상 환경(conda, venv 등) 사용을 권장합니다.
상업적 지원 (Commercial Support)
저희는 Kitten TTS를 제품에 통합하는 팀을 위해 상업적 지원을 제공합니다. 여기에는 통합 지원, 맞춤형 음성 개발, 그리고 엔터프라이즈 라이선싱이 포함됩니다.
문의하기 또는 [email protected]으로 이메일을 보내 귀하의 요구사항에 대해 논의하십시오.
커뮤니티 및 지원
- Discord: 커뮤니티 참여하기
- 웹사이트: kittenml.com
- 맞춤형 지원: 요청 양식
- 이메일: [email protected]
- 문제 제기: GitHub Issues
라이선스
본 프로젝트는 Apache License 2.0에 따라 라이선스가 부여됩니다. 이는 이 저장소의 코드를 포괄합니다.
모델은 별도로 라이선스가 부여되며, 그 조건이 다를 수 있습니다. 각 모델 저장소는 자체적인 라이선스를 가지고 있으므로, 의존하기 전에 사용하려는 모델의 라이선스를 확인하십시오. 코드의 라이선스가 가중치(weights)까지 확장된다고 가정하지 마십시오.
KittenTTS 2는 Stellon Labs Community License에 따라 출시되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Python (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기