LM Studio(ローカルLLM)と Irodori-TTS を組み合わせた、キャラクターチャット用 WebUI です。
- メッセージアプリ風のUIで生成AIとの対話を音声付きで楽しむことができます。
- ブラウザで動作するため、PC・スマートフォン(iPhone含む)から利用できます。
- LLMを介さず、チャットUIから直接Irodori-TTSに任意のテキストを送って発声させる事が可能です。
- UI上からキャラクターの新規作成・編集・複製が可能です。
- 生成済み音声の吹き出しにある再生ボタンで音声のリプレイ・再生成・WAVダウンロードが可能です。
- 特定の吹き出しから連続して音声リプレイする「ここからリプレイ」機能を搭載。
- ログ保存機能と読み出し機能
- テキストファイル(またはテキスト直接入力)をキャラクターの声で順次読み上げる「テキスト読み上げ」機能を搭載。TTS生成と再生を並列処理し、効率的に連続再生します。
- 環境設定から LLM / TTS のサーバ設定(ホスト・ポート・モデルなど)を変更・保存できます。LM Studio / Ollama / text-generation-webui / KoboldCpp など OpenAI 互換サーバに対応しています。
| ソフトウェア | 用途 | 入手先 |
|---|---|---|
| uv | Python パッケージ管理・実行 | https://docs.astral.sh/uv/getting-started/installation/ |
| OpenAI 互換 LLM サーバー | ローカル LLM(LM Studio / Ollama / text-generation-webui / KoboldCpp など) | 各ソフトウェアの公式サイト参照 |
| Irodori-TTS | 音声合成(TTS)サーバー | GitHub 参照 |
BridgeTTS は以下の2つのサーバーと連携して動作します。 いずれかのサーバがない場合、動作は限定的になります。 LLMサーバがない場合はIrodori-TTSと直接通信して音声生成を行うGUIとして利用可能です。 音声合成サーバーがない場合はLLMサーバとキャラクターチャットを行うGUIとして利用可能です。 どちらもない場合、起動はしますが正常動作しません。
OpenAI 互換 API を提供するサーバであれば利用できます。代表的なものは以下の通りです。
LM Studio(推奨・初心者向け)
- LM Studio を起動し、使用するモデルをロードします。
- 左メニューの 「Developer」 を選択します。
- 「Start Server」 をクリックしてローカルサーバーを起動します(APIモード)。
デフォルトのポートは 1234 です。起動後、http://localhost:1234 でアクセスできる状態になります。
Ollama
モデルをインストールして起動するだけで http://localhost:11434 に OpenAI 互換エンドポイントが立ち上がります。環境設定でプリセット「Ollama」を選択し、🔄 ボタンでロード済みモデルを選択してください。
その他(text-generation-webui / KoboldCpp など)
環境設定の「LLM サーバ設定」でプリセットを選択するか、ホスト・ポートを手動入力してください。
Irodori-TTS のセットアップが完了している状態で、リファレンス音声対応モードで起動します。
uv run python gradio_app.py --server-name 0.0.0.0 --server-port 7860この場合のポートは 7860 です。
詳しいセットアップ方法は Irodori-TTS の README を参照してください。
GitHub からクローンする場合:
git clone https://github.com/kn86elt/BridgeTTS.git
cd BridgeTTSZIP でダウンロードした場合:
GitHubのCODE→Download ZIPからZIPファイルをダウンロードし、任意のフォルダに展開します。
展開したフォルダをエクスプローラーで開いてください。
Python パッケージ管理ツール「uv」を使用します。Irodori-TTS のセットアップ時に導入済みの場合はスキップしてください。 Windowsの場合はコマンドプロンプトまたは PowerShell を開いて以下のコマンドを貼り付けるとインストールされます。
Windows(コマンドプロンプト / PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"起動スクリプト(.bat / .sh)の実行時に自動で行われるため、通常は手動での実行は不要です。
手動で行う場合は、BridgeTTS のフォルダ内でコマンドプロンプト(またはターミナル)を開き、以下を実行してください。
uv syncGitHub からクローンした場合:
git pull起動スクリプトを実行すると依存パッケージの更新(uv sync)が自動で行われます。
ZIP でダウンロードした場合:
- GitHubのCODE→Download ZIPから最新の ZIP をダウンロードして展開します。
bridge_server_api.pyとindex.htmlを新しいものに差し替えます。- 起動スクリプト(
.bat/.sh)は通常そのままで問題ありませんが、更新履歴に起動スクリプトの変更が記載されている場合は差し替えてください。
characters/ フォルダにキャラクターファイルを配置します。
パッケージには参考用としてデフォルトキャラクターのサンプルが含まれています。
また、WEBUI上からキャラクターの新規追加と既存キャラクターをテンプレートとした複製を行う事も可能です。
1キャラクターにつき 名前の一致した .txt(プロンプト)と .wav または .mp3(サンプル音声) が必要です。画像(.png など)は任意です。.txtのみの追加でキャラクターを定義する事も可能ですが、その場合音声生成非対応キャラとして認識されます。
.wav と .mp3 の両方がある場合は .wav を優先して使用します。
以下のいずれかの形式に対応しています。
サブフォルダ形式(推奨)
characters/
└── きりたん/
├── きりたん.txt ← キャラクター設定プロンプト(UTF-8)
├── きりたん.wav ← 声のサンプル音声
└── きりたん.png ← アイコン画像(任意)
フラット形式
characters/
├── きりたん.txt
├── きりたん.wav
└── きりたん.png
zip 形式(上記のどちらかの構造を zip にまとめたもの)
characters/
└── きりたん.zip
run-bridge-webui-api.bat をダブルクリックすると起動し、自動的にブラウザが開きます。
ブラウザが開かない場合は、手動で以下にアクセスしてください。
http://localhost:8001
同梱の run-bridge-webui-api.sh を使用できます(動作未検証)。
bash run-bridge-webui-api.shPC と同じネットワークに接続した状態で、PC の IP アドレスを使ってアクセスできます。
http://<PCのIPアドレス>:8001
BridgeTTS/
├── bridge_server_api.py # サーバー本体
├── index.html # フロントエンド UI
├── run-bridge-webui-api.bat # 起動スクリプト (Windows)
├── run-bridge-webui-api.sh # 起動スクリプト (Linux/macOS・動作未検証)
├── pyproject.toml # 依存パッケージ定義
├── bridge_settings.json # UI設定の保存ファイル(自動生成)
├── tts_config.json # TTS詳細設定(自動生成)
├── log/ # 会話ログ自動保存フォルダ(自動生成)
├── output/ # ログ手動保存フォルダ(自動生成)
├── characters/ # キャラクターデータフォルダ
│ └── キャラ名/
│ ├── キャラ名.txt
│ ├── キャラ名.wav
│ └── キャラ名.png
└── prompts/ # システムプロンプトファイル置き場(任意)
├── base_system_prompt.txt
└── 任意の名前.txt
- 左のサイドバーからキャラクター選択・各種設定ができます。
- 画面幅が狭い場合(スマートフォンなど)はハンバーガーメニューでサイドバーを開きます。
- キャラクターを選択すると自動で初回挨拶が生成されます。
- 空送信が可能です。何を話せばいいかわからないときに使うと、キャラクターが話を続けてくれます。空送信時はユーザーの吹き出しは表示されません。
- 直接TTS:送信バーの「直接TTS」チェックボックスをオンにすると、入力テキストを LLM に送らずそのままキャラクターのセリフとして表示・音声合成できます。
音声が生成された吹き出しの右下には以下のボタンが表示されます。
| ボタン | 機能 |
|---|---|
| ▶ | 生成済み音声を再生します。再生中はボタンがハイライトされ、外周にスピニングリングが表示されます |
| ↻ | 現在の文章数設定で音声を再生成します |
| ⋯ | サブメニューを開きます(後述) |
⋯ メニューの項目:
| 項目 | 機能 |
|---|---|
| ▶▶ ここからリプレイ | その吹き出し以降の音声を順番に連続再生します。音声未生成の吹き出しは随時 TTS 再生成しながら再生します。再生中は送信ボタンが ■ に変わり、クリックで停止できます |
| WAV でダウンロード | 生成済み音声を WAV ファイルとして保存します |
| MP3 でダウンロード | ffmpeg が利用可能な場合に表示されます |
| ファイルの場所を開く | OS のファイルマネージャーで保存先フォルダを開きます |
メッセージエリアの上端・下端をタップ/クリックすると、最初または最後のメッセージへ一気にスクロールできます。スクロール余地がある方向にのみ帯が表示されます。
自動保存機能:デフォルトで会話ログは自動保存されます。ユーザーが最初のメッセージを送った時点でログファイルを作成し、log/ フォルダに随時記録します。キャラクターを選択して挨拶だけで終了した場合はファイルは作成されません。自動保存は環境設定で有効・無効を設定できます。
ログメニュー:送信バー左の「…」ボタンからログ機能にアクセスできます。
-
ログを保存:現在のセッションのログを任意のフォルダ・ファイル名で保存します(デフォルト:
output/)。ファイル名を空白にすると自動生成されます。 -
ログを読み込む:保存済みの
.logファイルを選択して会話を再表示します。読み込んだ吹き出しには ↻(音声再生成)と ⋯(ここからリプレイ)ボタンが付きます。読み込み後にメッセージを送ると、その続きが別のログファイルに記録されます。 -
シナリオを読み込む:選択したログのユーザー発言のみを使い、現在のキャラクターで新たな会話を生成します。発言を1つずつ順番に送出し、各応答が完了するたびに次の発言を送ります。再生中は送信ボタンが ■ に変わり、クリックで停止できます。連続するアシスタント応答の間には空送信が自動挿入されます。
-
テキストを読み上げる:テキストファイル(UTF-8 / Shift-JIS / EUC-JP)またはテキスト直接入力から、現在のキャラクターの声で順次 TTS 再生します。読み上げ前のプレビュー画面で以下の設定を調整できます(設定は自動保存)。読み上げ中はメッセージ画面がクリアされ、各吹き出しに ↻・⋯・▶ ボタンが付与されます。読み上げ終了後もログ保存ダイアログから手動保存できます。
設定 説明 1吹き出しの文章数 1つの吹き出しにまとめる文の数(1〜5) 送出文字数上限 TTS API への1回あたりの最大文字数(500〜4096、デフォルト 1024)。上限を3回連続で超えた場合はシステムメッセージを出して停止 読み上げ時に括弧文字を除去する 指定した括弧文字(デフォルト ()())を除去してから TTS に送出。括弧内のテキストは保持され読み上げ対象になる
設定は bridge_settings.json に自動保存されます。
| 設定項目 | 説明 |
|---|---|
| システムプロンプト | 使用するシステムプロンプトの切り替え(後述) |
| 音声出力 | TTS の ON/OFF |
| 文章数 | 一度に TTS へ渡す文章数(0 = 全文まとめて送る) |
| ダークモード | 画面の配色を暗くする |
| 背景画像 | キャラクター画像を背景に表示する |
| ぼかし | 背景画像にぼかしエフェクトをかける |
サイドバーの「⚙ プロンプト設定」ボタンから開けます。
- ファイル一覧 —
base_system_prompt.txt(「base (default)」として先頭に表示)およびprompts/フォルダ内の.txtファイルを選択・プレビューできます。 - ユーザースロット(5枠) — その場で直接テキストを書いて保存できる編集可能なスロットです。「スロット保存」で内容を保存し、OK で有効化します。
- 「スロットとファイルを同時に適用する」 — チェックをオンにするとスロットとファイルの両方が連結されて LLM に渡されます(オフ時はスロットがファイルを置き換えます)。
- 「キャラクタープロンプトの後ろにシステムプロンプトを読み込ませる」 — チェックをオンにするとシステムプロンプトの配置順が変わります(デフォルトはシステムプロンプト → キャラクター)。
- OK を押すと設定が保存され、LLM への会話履歴がリセットされます(画面上のログはそのまま残ります)。
サイドバーのキャラクターリスト最下部にある 「+ 新規キャラクター...」 ボタンから、ブラウザ上でキャラクターを作成できます。
- キャラクター名・プロンプト・画像ファイル・音声ファイル(
.wav/.mp3)を設定して保存すると、characters/<キャラクター名>/フォルダが自動的に作成されます。 - 各キャラクターカードにカーソルを当てると表示される 「•••」 ボタンから、既存キャラクターの 編集 および 複製 が行えます。複製はモーダルが開き、名前・プロンプト・画像・音声を編集してから作成できます。新たにファイルをアップしない場合は元のファイルが自動的にコピーされます。
- 編集モーダルには 「MP3→WAV 変換」 ボタンがあります。キャラクターフォルダに
.mp3ファイルが存在し、環境設定で ffmpeg が有効な場合にクリックできます(zip 形式は対象外)。既に.wavがある場合は上書き確認が表示されます。
tts_config.json を直接編集してパラメータを調整できます。主な項目:
| キー | 説明 |
|---|---|
num_steps |
生成ステップ数。下げると速くなるが品質が落ちる(推奨: 10〜20) |
model_precision / codec_precision |
fp32 または bf16。RTX 3000 以降なら bf16 で高速化可能 |
cfg_scale_text |
テキスト追従の強さ |
cfg_scale_speaker |
話者音声への追従の強さ |
サイドバーの「⚙ 環境設定」ボタン → LLM サーバ設定 から変更できます。設定はファイルに保存され、再起動後も維持されます。
| 設定項目 | 説明 |
|---|---|
| プリセット | よく使われるサーバを選択すると各フィールドが自動入力されます |
| ホスト・ポート・パス | サーバのアドレスを個別に指定できます |
| API キー | サーバが要求するキーを入力します(ローカルサーバはダミーキーで通常可) |
| モデル | 🔄 ボタンでサーバからモデル一覧を取得・選択できます(モデル名の指定が必要なサーバ(Ollama 等)に有効) |
対応プリセット:LM Studio / Ollama / text-generation-webui / KoboldCpp / カスタム
環境変数で指定する場合: run-bridge-webui-api.bat に URL を設定し、環境設定の「環境変数 LLM_API_URL を使用」にチェックを入れると環境変数が優先されます。
set LLM_API_URL=http://localhost:1234/v1同じく環境設定の TTS サーバ設定 からホストとポートを変更できます。設定はファイルに保存されます。別 PC で動作している Irodori-TTS への接続も、IP アドレスを指定することで行えます。
環境変数で指定する場合:
set TTS_API_URL=http://localhost:7860/環境設定の「チャットログ設定」でログの自動保存を制御できます。
| 設定項目 | 説明 |
|---|---|
| チャットログを自動保存する | ON のとき、ユーザーが最初のメッセージを送った時点でログファイルを作成し log/ に随時記録します。OFF にすると書き込みを停止しますが、会話はメモリ上で保持されます。後から ON に戻すとそれまでの全会話を含むログが書き出されます。 |
環境変数 CHAR_DIR を設定することで characters/ 以外のフォルダを参照できます。
set CHAR_DIR=C:\path\to\your-characters- ローカル専用ツールです。 認証機能は実装されていないため、サーバのポート(デフォルト
8001)をインターネットに公開しないでください。同様に、接続先の LLM / TTS サーバも信頼できるネットワーク内のみで使用してください。 - 複数クライアントからの同時アクセスには対応していません。 会話履歴やキャラクター選択などのアプリ状態はサーバ側でシングルセッションとして管理されており、複数のブラウザから同時に操作すると状態が競合します。
| 症状 | 対処 |
|---|---|
| ブラウザが開かない | 手動で http://localhost:8001 にアクセス |
| キャラクターが表示されない | characters/ フォルダに .txt ファイルがあるか確認 |
| 音声が再生されない(iPhone) | 画面を一度タップしてから送信する(iOS のオーディオポリシーによる制限) |
| TTS サーバーに繋がらない | Irodori-TTS が起動しているか・ポート番号が合っているか確認 |
| LLM が応答しない | LM Studio でモデルが読み込まれているか確認 |
| プロンプト変更後にキャラの口調がおかしい | OK を押した時点で会話履歴がリセットされます。再度キャラクターに話しかけてください |
Changelog.md を参照してください。
本プロジェクトは開発に各種の生成 AI を使用しています。
LICENSE を参照してください。�
