Files
tts_site/docs/ENGINES.md

42 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 한국어 TTS 엔진 분석 및 통합 계획
6개 리포를 심층 분석하여 한국어 TTS를 스튜디오에 다중 엔진으로 통합하기 위한 기록.
목표: 무제한·무료 자가호스팅, 가능하면 GPU(Blackwell sm_120, torch cu128) 사용.
## 분석 결과 (feasibility matrix)
| # | 리포 | 아키텍처 | 한국어 | 사전학습 모델 | 라이선스 | 런타임 | GPU(Blackwell) | 판정 |
|---|------|----------|--------|----------------|----------|--------|----------------|------|
| 1 | FunAudioLLM/CosyVoice (=QwenAudio/CosyVoice) | LLM+flow+HiFiGAN | 예(zero-shot) | CosyVoice2-0.5B, ~1–2GB, HF/ModelScope, 비게이트 | Apache-2.0 (무제한/상업 OK) | PyTorch (torch 2.3.1 pin) | cu128로 올리면 가능 | 통합(주의) |
| 2 | TensorSpeech/TensorFlowTTS | Tacotron2/FS2 + MB-MelGAN | 예(KSS) | tts-*-kss-ko, HF, 비게이트 | 코드 Apache-2.0 / **가중치 CC BY-NC-SA(비상업)** | TensorFlow2 | ❌ CPU만 | 옵션(주의) |
| 3 | hccho2/Tacotron2-Wavenet-Korean-TTS | Tacotron2+WaveNet | 예 | ❌ 없음(직접 학습) | MIT | TF1 | ❌ | 제외 |
| 4 | ttop32/coqui_tts_korea | GlowTTS + MB-MelGAN | 예(KSS) | GlowTTS+MBMelGAN ckpt, Google Drive, 비게이트 | **MPL-2.0(무제한/상업 OK)** | PyTorch (coqui-tts idiap fork) | ✅ 동작 확인 | **1순위 통합** |
| 5 | esoyeon/KoreanTTS | Tacotron/Tacotron2 | 예 | ❌ 없음(직접 학습) | MIT | TF1 | ❌ | 제외 |
| 6 | AzamRabiee/Emotional-TTS | Tacotron(emotional) | 의도상 예 | ❌ 없음, 코드도 없음 | **없음(권리 유보)** | TF1 | ❌ | 제외 |
핵심 결론
- 실제로 최신 스택에서 돌릴 수 있는 "무료·무제한·한국어" 엔진: **Coqui GlowTTS-KSS(4번)**, 그리고 **CosyVoice2(1번, Apache)**.
- 3·5·6번은 사전학습 가중치가 없고 TF1 전용이라 최신 Python3.11/CUDA12.8/Blackwell에서 실행 불가 → 제외.
- 2번은 비상업 라이선스 + CPU 전용 + 레거시 TF 사이드카 필요 → 개인 테스트용으로만 옵션.
## 통합 아키텍처
기존 스튜디오는 단일 MeloTTS 인프로세스였음. 문제: Coqui/CosyVoice는 각자 다른 torch/librosa/numpy 핀을 요구 → 한 venv에 섞으면 충돌(예: MeloTTS는 librosa==0.9.1, Coqui는 최신 요구).
해결: **단일 컨테이너 + 엔진별 격리 venv + 서브프로세스 호출**.
- 메인 FastAPI(기본 venv, MeloTTS 인프로세스)가 `/api/engines`, `/api/tts?engine=...` 제공.
- Coqui 등은 `/opt/<engine>-venv` 전용 venv의 합성 스크립트를 subprocess로 실행해 WAV 반환.
- 배포 포트는 그대로 8788 유지.
엔진 레지스트리 인터페이스: `list_models()`, `synth(text, model, speed, pitch) -> wav bytes`.
프론트엔드: 엔진 선택 → 모델(목소리) 선택 → 속도/피치.
## 진행 단계 (단계마다 Gitea 커밋/푸시)
- A. 백엔드를 엔진 레지스트리로 리팩터링(MeloTTS 유지, 동작 불변) + 프론트 엔진 선택 UI. ✅ 커밋
- B. Coqui GlowTTS-KSS 엔진 추가(전용 venv + Google Drive 체크포인트 베이킹 + subprocess). 테스트 후 커밋.
- C. CosyVoice2 한국어 엔진 추가(Apache, torch cu128 재빌드). 가능 시 커밋.
- D. (옵션) TensorFlowTTS KSS CPU 엔진. 비상업 라이선스 명시.
무료·무제한 보장: 통합 대상은 Apache-2.0(CosyVoice) / MPL-2.0(Coqui)만 GPU 기본 경로로 사용. 비상업(CC BY-NC-SA)인 TF-TTS는 개인용 옵션으로만, UI에 라이선스 표기.