# BridgeTTS

LM Studio（ローカルLLM）と Irodori-TTS を組み合わせた、キャラクターチャット用 WebUI です。  
ブラウザで動作するため、PC・スマートフォン（iPhone含む）から利用できます。

---

## 必要なもの

| ソフトウェア | 用途 | 入手先 |
|---|---|---|
| **[uv](https://docs.astral.sh/uv/)** | Python パッケージ管理・実行 | https://docs.astral.sh/uv/getting-started/installation/ |
| **[LM Studio](https://lmstudio.ai/)** | ローカル LLM サーバー | https://lmstudio.ai/ |
| **[Irodori-TTS](https://github.com/Aratako/Irodori-TTS)** | 音声合成（TTS）サーバー | GitHub 参照 |

> LM Studio と Irodori-TTS は事前に起動しておいてください。

---

## ファイル構成

```
bridge-webui/
├── bridge_server_api.py   # サーバー本体
├── index.html             # フロントエンド UI
├── run-bridge-webui-api.bat  # 起動スクリプト (Windows)
├── pyproject.toml         # 依存パッケージ定義
└── characters/            # キャラクターデータフォルダ（自分で作成）
    ├── キャラ名.txt        # システムプロンプト（UTF-8）
    ├── キャラ名.wav        # 声のサンプル音声
    └── キャラ名.png        # アイコン画像（任意）
```

### base_system_prompt.txt（任意、サンプル添付）

`bridge_server_api.py` と同じフォルダに置くと、全キャラクター共通のシステムプロンプトとして先頭に付加されます。

---

## セットアップ

### 1. uv のインストール（初回のみ）

**Windows（PowerShell）**
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```

### 2. 依存パッケージのインストール（初回のみ）

```bat
uv sync
```

### 3. キャラクターデータの配置

`characters/` フォルダを作成し、以下のいずれかの形式でキャラクターデータを入れてください。

#### フラット形式（シンプル）
```
characters/
└── きりたん.txt (キャラクター定義、LLMに理解できれば形式は任意)
└── きりたん.wav (irodori-TTSに渡す声サンプル、ないと音声なしで動作)
└── きりたん.png (サムネイル等に使用する画像。png/jpg/webpを認識、任意)
```

#### サブフォルダ形式
```
characters/
└── きりたん/
    ├── きりたん.txt
    ├── きりたん.wav
    └── きりたん.png
```

#### zip 形式
```
characters/
└── きりたん.zip   ← 上記のどちらかの構造を zip にまとめたもの
```

> `.txt` はキャラクターのシステムプロンプト（UTF-8テキスト）、`.wav` は Irodori-TTS に渡す声サンプルです。

---

## 起動方法

`run-bridge-webui-api.bat` をダブルクリックするだけで起動します。

起動後、自動的にブラウザが開きます。開かない場合は手動で以下にアクセスしてください。

```
http://localhost:8001
```

スマートフォンからアクセスする場合は、PC の IP アドレスを使います。

```
http://<PCのIPアドレス>:8001
```

---

## 設定

サイドバーのコントロールから変更でき、設定は `bridge_settings.json` に自動保存されます。

| 設定項目 | 説明 |
|---|---|
| 音声出力 | TTS の ON/OFF |
| 文章数 | 一度に TTS へ渡す文章数（0 = 全文まとめて送る） |
| ダークモード | 画面の配色を暗くする |
| 背景画像 | キャラクター画像を背景に表示する |
| ぼかし | 背景画像にぼかしエフェクトをかける |

### LLM / TTS のエンドポイント変更

`run-bridge-webui-api.bat` を編集してください。

```bat
set LLM_API_URL=http://localhost:1234/v1   ← LM Studio のポート
set TTS_API_URL=http://localhost:7860/     ← Irodori-TTS のポート
```

LM Studio以外での動作は未確認です。利用する場合はbridge_server_api.pyを直接編集してAPI keyを設定してください。

---

## トラブルシューティング

| 症状 | 対処 |
|---|---|
| ブラウザが開かない | 手動で `http://localhost:8001` にアクセス |
| キャラクターが表示されない | `characters/` フォルダに `.txt` ファイルがあるか確認 |
| 音声が再生されない（iPhone） | 画面を一度タップしてから送信する（iOS のオーディオポリシーによる制限） |
| TTS サーバーに繋がらない | Irodori-TTS が起動しているか・ポート番号が合っているか確認 |
| LLM が応答しない | LM Studio でモデルが読み込まれているか確認 |
|音声の再生が遅い|仕様です。サーバのスペック等にも依存します。|
