# Voxcpm Tts

> テキストから音声を合成したい時（動画ナレーション/ショート動画の読み上げ/ボイスオーバー/声真似クローン）。多言語TTS、参照音声で声マネ可。MoneyPrinterTurbo・HyperFrames動画パイプの読み上げ工程に使う。完全ローカル・無料(Claude MAX外課金なし)。

- Skill: `bokuwalily/voxcpm-tts` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bokuwalily/voxcpm-tts`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bokuwalily/voxcpm-tts/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bokuwalily (https://skillmd.com/u/bokuwalily)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bokuwalily/voxcpm-tts

---


# VoxCPM ローカル音声合成(TTS)

> ⚠️ **実体は削除済み（2026-07-03・本人承認）**: リポジトリ・venv・CLI `tts.py` は消滅。このskillは**再構築手順書＋検証済み知見**として保持。再構築: OpenBMB/VoxCPMを再clone→`uv venv -p 3.11`＋pip install（**Python3.14はtorch不可・3.11必須**。モデル `openbmb/VoxCPM2` は `~/.cache/huggingface` に生存＝再DL不要）。`tts.py`（text→48kHz WAV・--refで声クローン）は本書仕様で再作成。以下のパス記述は当時のもの。

OpenBMB製・完全ローカル・無料。永続: `~/archive/retired-projects/oss-trial/VoxCPM/`（py3.11、MPS、モデル`openbmb/VoxCPM2`は`~/.cache/huggingface`）。

## Procedure

```bash
cd ~/archive/retired-projects/oss-trial/VoxCPM

# 基本: テキスト→WAV
.venv/bin/python tts.py "読み上げる文" -o out.wav

# 声真似(voice cloning): 参照音声+その書き起こしを渡す
.venv/bin/python tts.py "好きな文" -o out.wav --ref ref.wav --ref-text "参照音声の中身"

# 品質/表現調整
.venv/bin/python tts.py "文" -o out.wav --steps 20 --cfg 2.5
```

- 出力48kHz WAV。`--steps`増=高品質/遅、`--cfg`=表現の強さ
- 動画パイプ: ナレ原稿→`tts.py`でWAV→MoneyPrinterTurbo/HyperFramesの音声トラックに差す
- 参照音声は数秒のクリーンなWAVでOK

## Pitfalls

- **初回ロードが重い**: モデル+denoiser読込で数十秒。常駐させず必要時のみ実行（MCP化しなかった理由）
- **Python 3.14でtorch不可**: venvは3.11固定。`uv venv --python 3.11`
- **MPS(Apple Silicon)で動作**: device自動検出。CUDA無し環境前提
- **長文は分割**: 1回のgenerateは1段落〜数文が安定。長尺は文単位でループ生成→結合
- **`--ref`使うなら`--ref-text`必須**: 書き起こし無いと声マネ精度が落ちる
- 商用利用・なりすまし注意: 他人の声クローンは同意の範囲で

## Verification

```bash
cd ~/archive/retired-projects/oss-trial/VoxCPM
.venv/bin/python tts.py "これはテストです。" -o /tmp/voxcpm_check.wav
.venv/bin/python -c "import soundfile as sf;w,sr=sf.read('/tmp/voxcpm_check.wav');print(f'{len(w)/sr:.1f}s @ {sr}Hz')"
# 期待: 数秒のWAV @ 48000Hz が生成される
```
2026-06-09検証: 日本語26文字→7.4秒WAV @ 48kHz 生成成功（MPS）。

