Communityコーディング&開発github.com

jamiepine/voicebox

オープンソースの音声合成スタジオ

voicebox とは?

Voicebox は、カスタムテキスト音声合成(TTS)エンジンを簡単に統合できるオープンソースの音声合成スタジオです。このスキルは、依存関係の調査からバックエンドの実装、フロントエンドUIとの連携、PyInstaller による凍結ビルド、そして最終的な動作確認まで、エンドツーエンドのワークフローを提供します。主な対象プラットフォームはVoiceboxアプリケーション自体であり、`backend/backends/` へのTTSBackendプロトコルの実装や、`app/src/` 以下のTypeScript/Reactフロントエンドファイルの修正が必要です。また、`tts-engines.mdx` という包括的なガイドが用意されており、6つのフェーズに分かれた手順と、v0.2.3 リリースでの教訓を元にした、凍結ビルドで発生しがちな問題の回避策がまとめられています。ユーザーは、このスキルに従ってエンジンを追加し、最終的なビルドをローカルでテストするだけで、Voiceboxの機能を拡張できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add jamiepine/voicebox

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

TTSエンジンを追加する

目標

Voicebox に新しいテキスト音声合成エンジンをエンドツーエンドで統合します。依存関係調査、バックエンドプロトコルの実装、フロントエンドUIとの連携、PyInstaller によるバンドル、および凍結ビルドの検証を行います。ユーザーは最終的なビルドをローカルでテストするだけで済みます。

リファレンスドキュメント

完全なフェーズ別ガイドは docs/content/docs/developer/tts-engines.mdx にあります。開始前にこのファイルをすべて読んでください。 内容は以下の通りです。

  • フェーズ0:依存関係調査(コード作成前に必須)
  • フェーズ1:バックエンドの実装(TTSBackend プロトコル)
  • フェーズ2:ルートとサービスの統合(通常は変更不要)
  • フェーズ3:フロントエンドの統合(5ファイル)
  • フェーズ4:依存関係(requirements.txt、justfile、CI、Docker)
  • フェーズ5:PyInstaller によるバンドル(build_binary.py + server.py)
  • フェーズ6:よくあるアップストリームの回避策
  • 実装チェックリスト(フェーズ間のゲート)

ワークフロー

1. ガイドを読む

# TTSエンジンのドキュメント全文を読む
cat docs/content/docs/developer/tts-engines.mdx

すべてのフェーズ、特にフェーズ0とフェーズ5を理解してください。v0.2.3 リリースはフェーズ0をスキップしたため、3つのパッチリリースが必要になりました。

2. 依存関係調査(フェーズ0)

モデルライブラリを一時ディレクトリにクローンし、監査します。これをスキップしないでください。

mkdir /tmp/engine-research && cd /tmp/engine-research
git clone <model-library-url>

ガイドのフェーズ0.2 に記載されている grep 検索を、クローン元のソースとその推移的依存関係に対して実行します。以下の項目をカバーする依存関係監査レポートを作成します。

  1. PyPI パッケージと非 PyPI パッケージ
  2. 必要な PyInstaller ディレクティブ(--collect-all、--copy-metadata、--hidden-import)
  3. バンドルが必要なランタイムデータファイル
  4. 凍結ビルドで環境変数のオーバーライドが必要なネイティブライブラリのパス
  5. 必要なモンキーパッチ(torch.load、float64、MPS、HF トークン)
  6. サンプルレート
  7. モデルのダウンロード方法(from_pretrained と snapshot_download + from_local)

使い捨ての仮想環境で、CPU上でのモデル読み込みと生成をテストしてから次に進みます。

3. 実装(フェーズ1~4)

ガイドのフェーズに従って順番に実装します。変更する主なファイルは以下の通りです。

バックエンド(フェーズ1):

  • backend/backends/<engine>_backend.py を作成
  • backend/backends/__init__.py に登録(ModelConfig + TTS_ENGINES + ファクトリ)
  • backend/models.py の正規表現を更新

フロントエンド(フェーズ3):

  • app/src/lib/api/types.ts — エンジンの共用体型
  • app/src/lib/constants/languages.ts — ENGINE_LANGUAGES
  • app/src/components/Generation/EngineModelSelector.tsx — ENGINE_OPTIONS、ENGINE_DESCRIPTIONS
  • app/src/lib/hooks/useGenerationForm.ts — Zod スキーマ、モデル名マッピング
  • app/src/components/ServerSettings/ModelManagement.tsx — MODEL_DESCRIPTIONS

依存関係(フェーズ4):

  • backend/requirements.txt
  • justfile(setup-python、setup-python-release ターゲット)
  • .github/workflows/release.yml
  • Dockerfile(該当する場合)

4. PyInstaller によるバンドル(フェーズ5)

backend/build_binary.py にエンジンを登録します。

  • --hidden-import:バックエンドモジュールとモデルパッケージ用
  • --collect-all:inspect.getsource を使用するパッケージ、データファイルを出荷するパッケージ、またはネイティブライブラリ用
  • --copy-metadata:importlib.metadata を使用するパッケージ用

エンジンにネイティブデータパスがある場合は、backend/server.py の if getattr(sys, 'frozen', False): ブロック内に os.environ.setdefault() を追加します。

5. 開発モードで確認

just dev

完全なチェーン(モデルダウンロード → 読み込み → 生成 → 音声クローン)をテストします。

6. チェックリストを使用する

tts-engines.mdx の末尾にある実装チェックリストをすべて実施します。ビルドをユーザーに引き渡す前に、すべての項目を確認する必要があります。

主な教訓(v0.2.3 から)

これらは最も一般的な障害モードです。フェーズ0の調査でこれらすべてを捕捉できます。

パターン凍結ビルドでの症状修正方法
@typechecked / inspect.getsource()「ソースコードを取得できません」--collect-all <package>
パッケージが学習済みモデルファイルを同梱.pth.tar、.yaml で FileNotFoundError--collect-all <package>
システムパスがハードコードされたCライブラリ/usr/share/... で FileNotFoundError--collect-all + server.py の環境変数
importlib.metadata.version()「パッケージのメタデータが見つかりません」--copy-metadata <package>
map_location なしの torch.loadCPUビルドでCUDAデバイスが利用不可torch.load をモンキーパッチ
float64データに対する torch.from_numpyデータ型不一致 RuntimeError.float() にキャスト
HFダウンロード呼び出しでの token=TrueHFトークンが保存されていない場合に認証失敗snapshot_download(token=None) + from_local() を使用

注意事項

  • ルートとサービスのレイヤーにはエンジンごとのディスパッチポイントはありません。main.py への変更は不要です。
  • backends/__init__.py のモデル設定レジストリがすべてのディスパッチを自動的に処理します。
  • backend/base.py の get_torch_device() と model_load_progress() を使用してください。デバイス検出や進行状況追跡を再実装しないでください。
  • 必ずクリーンなHuggingFaceキャッシュ(開発で事前にダウンロードしたモデルがない状態)でテストしてください。
  • プッシュやリリースは作成しないでください。ビルドをユーザーに引き渡し、ローカルでテストしてもらってください。

関連スキル