VoxCPM2
VoxCPM2は、OpenBMBによる2Bパラメーターの多言語テキスト音声合成モデルです。30言語、48 kHz出力、自然言語によるボイスデザイン、参照音声によるボイスクローン、制御可能なクローン、そして文字起こし支援の「Ultimate Cloning」に対応しています。TomoriBotは、servers/tts/voxcpm2/にある薄いラッパーを通じて公式のvoxcpm Pythonパッケージを使用します。
既定モデルは公式のopenbmb/VoxCPM2 BF16チェックポイントです。OpenBMBは標準ランタイムでおよそ8 GBのVRAMを報告しており、通常のモデルは16 GBのNVIDIA GPUに無理なく収まるため、既定では量子化済みチェックポイントを必要としません。
VoxCPM2のコードとモデルの重みはApache-2.0のもとで公開されており、ライセンス条件に従う商用利用も含まれます。TomoriBotはこの重みを再配布しません。インストーラーは公式のHugging Faceリポジトリからダウンロードします。
公式の上流リソース:
VoxCPM2は、言語タグを必要とせずに公式に30言語へ対応しています。
アラビア語、ビルマ語、中国語、デンマーク語、オランダ語、英語、フィンランド語、フランス語、ドイツ語、ギリシャ語、ヘブライ語、ヒンディー語、インドネシア語、イタリア語、日本語、クメール語、韓国語、ラオ語、マレー語、ノルウェー語、ポーランド語、ポルトガル語、ロシア語、スペイン語、スワヒリ語、スウェーデン語、タガログ語、タイ語、トルコ語、ベトナム語。
OpenBMBはいくつかの中国語方言についても文書化しています。TomoriBotは一般的なTTSの契約との互換性のためにlanguageフィールドを送信することがありますが、VoxCPM2は合成テキストから言語を検出するため、ラッパーは言語タグを強制しません。
1つのVoxCPM2エンドポイントで、TomoriBotが利用する音声ソースモードのすべてを扱えます。
| TomoriBotのリクエスト | VoxCPM2の挙動 |
|---|---|
textのみ | 拒否されます。参照サンプルまたはボイスデザインのプロンプトを選んでください |
text + instruct | 自然言語による説明からのボイスデザイン |
text + ref_audio | 参照音声によるボイスクローン |
text + ref_audio + instruct | 制御可能なクローン: 話者を保ちつつ発話を誘導 |
text + ref_audio + ref_text | 参照音声とその文字起こしを使ったUltimate Cloning |
text + ref_audio + ref_text + instruct | 制御可能なクローン。その場限りの指示が優先され、文字起こしは送信されません |
VoxCPM2は、合成するテキストの前に自然言語の説明を括弧で囲んで置くことで、ボイスデザインとスタイル制御を表現します。TomoriBotにはすでにこの目的のためのinstructフィールドがあるため、ラッパーがこの変換を自動的に行います。
スクリプトマークアップ形式はプレーンを使用してください。VoxCPM2は角括弧タグや絵文字による制御構文をTomoriBotに保持させる必要がなく、新しいスクリプトマークアップ形式も不要です。
ハードウェアとランタイム
Section titled “ハードウェアとランタイム”推奨される出発点:
- Python 3.10〜3.12
- 公式BF16ランタイム向けに8 GB以上のVRAMを搭載したNVIDIA GPU。12〜16 GBあれば余裕を持って動作します
- GPUアクセラレーション用の最新のNVIDIAドライバーとCUDA対応のPyTorchビルド
- CPUはフォールバックとして対応していますが、かなり低速です
公式パッケージはCPUとApple MPSのデバイス選択にも対応しています。Windows上のTomoriBotでは、標準のPythonパッケージがネイティブに動作するため、WSLは必要ありません。Windows PowerShell用インストーラーは、既定でCUDA対応のPyTorchビルド(cu124)をインストールします。
CPUのみのマシンに明示的にインストールするには、-Cpuスイッチを渡します。
.\servers\tts\voxcpm2\install-voxcpm2.ps1 -CpuネイティブWindowsのPyTorchインストールを手動で再インストールしたり、ドライバーとの整合を取り直したりする必要が生じた場合は、サイドカーの仮想環境に直接CUDA対応のPyTorchビルドをインストールしてください。
.\servers\tts\voxcpm2\.venv\Scripts\pip.exe install --force-reinstall torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124OpenBMBは、標準ランタイムでRTX 4090においておよそ0.30 RTFを報告しています。上流はストリーミング生成にも対応しており、より高速なNano-vLLMとvLLM-Omniによる配信オプションも文書化しています。TomoriBotの現行のPOST /synthesize契約は1つのWAVレスポンスを返す前提のため、このサイドカーは別途ストリーミングプロトコルを公開する代わりに、意図的に生成した発話をバッファリングします。
インストール
Section titled “インストール”このサイドカーは、現行の安定版であるvoxcpm 2.0.3パッケージに固定し、openbmb/VoxCPM2を通常のHugging Faceキャッシュにダウンロードします。
Linux / WSL Bash
Section titled “Linux / WSL Bash”TomoriBotリポジトリのルートから実行します。
bash servers/tts/voxcpm2/install-voxcpm2.shservers/tts/voxcpm2/.venv/bin/python servers/tts/voxcpm2/server.pyWindows PowerShell
Section titled “Windows PowerShell”TomoriBotリポジトリのルートから実行します。
.\servers\tts\voxcpm2\install-voxcpm2.ps1.\servers\tts\voxcpm2\.venv\Scripts\python.exe servers\tts\voxcpm2\server.py最初のセットアップでは、数ギガバイトのモデル重みをダウンロードします。モデルを事前取得せずにPython環境だけをインストールするには、VOXCPM2_PREFETCH=0を設定してください。その場合、公式ライブラリがサーバーの初回起動時にチェックポイントをダウンロードします。
Linux / WSL:
VOXCPM2_PREFETCH=0 bash servers/tts/voxcpm2/install-voxcpm2.shPowerShell:
$env:VOXCPM2_PREFETCH = "0".\servers\tts\voxcpm2\install-voxcpm2.ps1セットアップ後、bun run launch --voxcpm2でサイドカーをTomoriBotと一緒に起動できます。既定のエンドポイントはhttp://127.0.0.1:8016です。
VOXCPM2_API_KEYまたはTOMORI_TTS_API_KEYが設定されている場合は、認証を有効にしてエンドポイントを登録し、同じキーをTomoriBotにも保存してください。ランチャーは認証不要の/healthルートには引き続きアクセスしますが、合成リクエストにはAuthorization: Bearer <key>を使用します。
TomoriBotへの登録
Section titled “TomoriBotへの登録”/providersを実行し、新しいカスタムエンドポイントを追加を選んで、音声エンドポイントを次のように設定します。
- 機能: 音声
- API互換性:
tts-clone - エンドポイントURL:
http://127.0.0.1:8016 - 音声ソースモード: 自動
- スクリプトマークアップ形式: プレーン
- 指示の対応: 有効
接続を保存したら、それを選択し、モデルのドロップダウンから音声モデルを追加します。続いて/config > モデル > モデルの切り替えを開き、VoxCPM2の音声モデルを選択してください。
同一のサーバーが参照音声のクローンとボイスデザインの両方に対応しているため、音声ソースモードには自動を推奨します。両方のモードのために別々のVoxCPM2プロセスを用意する必要はありません。
ペルソナの音声クローン
Section titled “ペルソナの音声クローン”既存の話者をクローンすべきペルソナの場合:
- 背景音楽がほとんどまたはまったくない、話者1人によるクリアな参照クリップを準備します。
/configでモデル > TTSパラメーターと音声を開き、そのクリップをアップロードします。- 可能であれば、参照クリップの正確な文字起こしを追加します。VoxCPM2はこれをUltimate Cloningに使用し、参照のリズム、感情、スタイルをより忠実に再現できます。
/configでペルソナ > 音声を開き、ペルソナを選んで、保存済みのサンプルを割り当てます。
文字起こしが保存されていない場合でも、VoxCPM2は通常の参照音声クローンを行います。
ペルソナのボイスデザイン
Section titled “ペルソナのボイスデザイン”サンプルではなく文章による声の説明から作成すべきペルソナの場合:
/configでペルソナ > 音声を開き、ボイスデザインを選びます。- ペルソナを選択します。
- 「若い女性、柔らかく温かみのある声、落ち着いたペース、少し茶目っ気のある話し方」のような自然言語の説明を入力します。
TomoriBotは保存した説明をinstructとして送信します。VoxCPM2はそれを自身のネイティブなボイスデザイン制御用プレフィックスに変換します。
クローンされたペルソナがその場限りの音声指示も受け取る場合、VoxCPM2は制御可能なクローンを使用します。参照サンプルが話者の同一性を提供し、指示が感情や話速、発話などの性質を誘導します。文字起こしも保存されている場合は、上流のUltimate Cloningパスに信頼できる制御指示モードがないため、その指示が優先され、そのリクエストでは文字起こしが意図的に省かれます。
/generate voice-message
Section titled “/generate voice-message”VoxCPM2が有効な音声モデルになると、/generate voice-messageは通常のvoice-messageツール呼び出しと同じ方法でペルソナに設定済みの音声ソースを使用します。
- クローンペルソナは、保存済みの
ref_audioとオプションのref_textを送信する。 - ボイスデザインペルソナは、保存済みのプロンプトを
instructとして送信する。 - 指示の対応が有効なクローン対応エンドポイントは、話し方の指示欄を表示し、その場限りの指示を
instructで渡す。 - クローンサンプルとともに指示が存在する場合、TomoriBotは
reference_wav_pathのみを使用し、文字起こしのプロンプトフィールドは送信しない。
| 変数 | 既定値 | 用途 |
|---|---|---|
VOXCPM2_MODEL_ID | openbmb/VoxCPM2 | Hugging FaceのモデルIDまたはローカルモデルディレクトリ |
VOXCPM2_DEVICE | auto | ランタイムのデバイス: auto、cuda、cuda:N、cpu、mps |
VOXCPM2_OPTIMIZE | 1 | 公式ランタイムの最適化・コンパイル経路を有効化 |
VOXCPM2_LOAD_DENOISER | 0 | 任意の上流デノイザーを読み込む。メモリ節約のため既定は無効 |
VOXCPM2_CFG_VALUE | 2.0 | ガイダンス強度 |
VOXCPM2_INFERENCE_TIMESTEPS | 10 | フローマッチングの推論ステップ数。増やすと速度と引き換えに品質が向上し得る |
VOXCPM2_MAX_LEN | 4096 | 生成の最大長 |
VOXCPM2_NORMALIZE | 0 | 上流のテキスト正規化を有効化 |
VOXCPM2_RETRY_BADCASE | 1 | 異常な生成に対する上流の再試行動作を有効化 |
VOXCPM2_RETRY_BADCASE_MAX_TIMES | 3 | 自動再試行の最大回数 |
VOXCPM2_RETRY_BADCASE_RATIO_THRESHOLD | 6.0 | 上流の不良ケース長のしきい値 |
VOXCPM2_PREFETCH | 1 | インストーラー専用: セットアップ中にモデルをダウンロード |
VOXCPM2_PORT | 8016 | VoxCPM2サイドカーのポート。未設定時はTOMORI_TTS_PORTにフォールバック |
TOMORI_TTS_HOST | 127.0.0.1 | サイドカーのバインドアドレス |
TOMORI_TTS_PORT | 8016 | 後方互換の共有サイドカーポートのフォールバック |
VOXCPM2_MAX_REF_AUDIO_BYTES | 10485760 | デコード後の参照音声の最大サイズ |
VOXCPM2_API_KEY | 未設定 | /synthesize用の任意のベアラートークン。フォールバックとしてTOMORI_TTS_API_KEYも受け付ける |
TOMORI_TTS_API_KEY | 未設定 | /synthesize用の共有の任意ベアラートークンのフォールバック |
TOMORI_TTS_ALLOW_REMOTE_BIND | 0 | ベアラートークンなしでループバック以外のバインドを許可する場合のみ1に設定 |
TOMORI_TTS_MAX_TEXT_CHARS | 2000 | 合成テキストとして受け付ける最大長 |
参照音声は空でないWAVコンテナである必要があります。ラッパーは一時ファイルを書き込む前にデコード後のバイト数上限を強制します。/healthはローカルの準備確認のため認証不要のままですが、キーが設定されている場合は常に/synthesizeにAuthorization: Bearer <key>が必要です。リバースプロキシや明示的なリモートポリシーがない限り、既定のループバックバインドを維持してください。
代替のチェックポイントとランタイム
Section titled “代替のチェックポイントとランタイム”公式のBF16モデルはすでに想定する16 GBのコンシューマーGPUという目標に収まるため、TomoriBotは既定で量子化済みチェックポイントを使用しません。コミュニティによる量子化版も存在しますが、通常のセットアップには不要なまま、互換性と保守のレイヤーをもう1つ増やすだけになります。
高スループットのデプロイでは、OpenBMBは現在、高速化された配信オプションとしてNano-vLLM-VoxCPMとvLLM-Omniを挙げています。これらのランタイムは、この参照サイドカーを超えたストリーミングや並行配信の機能を公開できます。TomoriBotの通常のローカル音声メッセージのワークフローにはこれらは不要であり、このラッパーは上流のモデルのアップグレードを追いやすいままにするため、意図的に公式のvoxcpm APIにとどまっています。