firered-tts
FireRedTTS3 — 多言語TTS(24言語、ウクライナ語対応)
FireRedTTS3 を利用したローカル音声合成サービス
HTTP-API と MCP サーバーを備えています。ukrainian-tts(StyleTTS2、:8000)や
HolosTTS(:8010)の隣に並ぶ3番目のサービスで、こちらは :8020 で動作します。
モデルは 2026年8月13日 にリリースされ、ライセンスは Apache 2.0、重みは公開されています。
他のサービスとの違い
ukrainian-tts | HolosTTS | firered-tts | |
言語 | ウクライナ語 | ウクライナ語 | 24言語 + 21方言 |
プリセット音声 | あり | 27 | なし |
クローン作成 | なし | あり(スタイルベクトル) | あり(zero-shot) |
参照音声の書き起こしが必要 | — | いいえ | はい |
説明からの音声デザイン | なし | なし | あり(instruct) |
録音の編集 | なし | なし | あり(instruct) |
メモリ使用量 | ~1 GB | ~4 GB | ~7.7 GB(重みは ~13 GB) |
アクセント(ウクライナ語) | 辞書 + ByT5 | 辞書 + ByT5 | なし |
始める前に理解しておくべき3つのこと:
1. プリセット音声はありません。 ライブラリは空です。つまり、すぐに合成することはできません。
まず任意の音声録音から音声を登録します(add_firered_voice)。
その後、その名前で参照して合成します。モデルは合成中に zero-shot で音声をクローンします。
2. 参照音声の書き起こしが必要です。 モデルには音声だけでは不十分で、 その音声に含まれるテキストも必要です。書き起こしがない場合は Whisper で自動認識しますが、 自分で用意したテキストの方が常に正確です。
3. アクセント記号はありません。 辞書も ByT5 フォールバックも、手動の Му+дрого のような
記法もありません。アクセントはモデルが文脈から自動で決定します。そのため、
за́мок(城)と замо́к(錠前)のような同形異義語は混同されることがあります。
これは多言語モデルの原理的な制約です。アクセントが重要な場合は、
HolosTTS の方がまだ良い選択肢です。
Related MCP server: STT2TTS MCP
インストール
cd /Users/admin/Projects/firered-tts
./setup.sh # venv + залежності + апстрім + патч + вагиsetup.sh は4つのことを行います:
Python 3.11、torch 2.8.0 を使用した
.venvを MPS/CPU 向けに作成上流リポジトリを
vendor/FireRedTTS3にクローンし、コミット00570adに固定Apple Silicon 用のパッチを適用 — 詳細は下記参照
pretrained_models/に base+redae の重み(~11.4 GB)をダウンロード
重みは別途ダウンロードされます(時間がかかるため、detached での取得を推奨):
nohup ./download-weights.sh base > data/download.log 2>&1 &
./download-weights.sh instruct # +7.9 ГБ, для дизайну голосу й редагуванняパッチの目的
上流は NVIDIA 専用に書かれており、Mac ではまったく動作しません:
場所 | 変更前 | 変更後 |
|
|
|
| 同左、×2 |
|
|
| 動的デバイス指定 |
|
|
|
|
|
|
flash_attn は CUDA 専用で、Metal ではそもそもビルドできません。sdpa は
NVIDIA を含むすべての環境で動作するため、パッチは何も壊しません。
base.py:317 の変更は移植性のためではなく、
パフォーマンスのためです(「速度」セクションを参照)。
src/patch_upstream.py は冪等で、パターンが一致しない場合は失敗します。
上流が変更された場合、CUDA エラーではなく、パッチ適用エラーとして
最初の合成時にすぐ気づくことができます。
起動
./run.sh # http://localhost:8020通常は個別に起動する必要はありません — MCP サーバーがバックエンドを自動起動します。
バックエンドは 1800 秒間アイドル状態が続くと自動停止します(IDLE_SHUTDOWN_SECONDS)。
これによりメモリが解放されます。
run.sh はポートロックを使用します(data/.start-<port>.lock):
バックエンドがすでに稼働している場合、2回目の起動はコード 0 で即座に終了します。
これは意図的な設計です — 複数のクライアントが同時に autostart を呼び出しても、
バックエンドのコピーが複数起動することはありません。
/health は起動中(約 ~90 秒)は応答しません。
HTTP API
メソッド | エンドポイント | 機能 |
|
| ステータス、デバイス、メモリ内のモデル |
|
| 音声名の一覧(フィルター: |
|
| 24言語 + 21方言 |
|
| 参照音声 + 書き起こし → 音声 |
|
| 音声を削除(元の録音ファイルは変更されません) |
|
| テキスト → レスポンス内の音声バイト |
|
| テキスト → |
|
| 音声の説明 → 音声(instruct) |
|
| 録音の編集: |
# 1) завести голос
curl -X POST localhost:8020/clone_voice -H 'Content-Type: application/json' -d '{
"audio": "prompts/зразок.wav", "name": "Богдан",
"prompt_text": "Це зразок мого голосу для клонування.",
"language": "Ukrainian", "gender": "male"}'
# 2) озвучити
curl -X POST localhost:8020/tts -H 'Content-Type: application/json' -d '{
"text": "Сьогодні чудова погода, ходімо гуляти в парк.",
"voice": "Богдан", "format": "mp3"}' -o out.mp3
# Або one-shot — без реєстрації голосу: передай reference_audio замість voice,
# транскрипт зробить Whisper (перший виклик +~30с, далі кешується)
curl -X POST localhost:8020/tts -H 'Content-Type: application/json' -d '{
"text": "Сьогодні чудова погода.", "reference_audio": "prompts/зразок.mp3",
"format": "mp3"}' -o out.mp3MCP
mcp_server/README.md を参照してください。概要:
claude mcp add firered-tts -- /Users/admin/Projects/firered-tts/.venv/bin/python \
/Users/admin/Projects/firered-tts/mcp_server/server.pyツール: firered_backend_status、list_firered_voices、
add_firered_voice、delete_firered_voice、synthesize_firered_speech、
design_firered_voice、edit_firered_speech。
メモリと速度
Mac mini M4、16 GB。ディスク上では base(7.9)+ redae(3.5)= 11.4 GB ですが、
メモリには ~7.7 GB しか読み込まれません:LLM バックボーンは fp16 で読み込まれ
(8.4 ではなく 4.2 — 下記の最適化2を参照)、残りは fp32 のままです。
重みだけが全体像ではありません。合成後の実プロセスで測定した結果:
phys_footprint: 13 ГБ
phys_footprint_peak: 14 ГБ7.7 と 13 の差は、MPS アロケータのキャッシュ、KV キャッシュ、生成時のアクティベーションです。
16 GB では 1つの プロセスでもギリギリであり、ps/RSS はここでは誤解を招きます
(10分の1 GB 単位しか表示しません:MPS バッファは unified memory にあり、RSS には含まれません)。
ps ではなく footprint で測定してください。
コードに組み込まれた設計上の判断:
メモリ内には 常に1つの モデルのみ —
baseまたはinstruct。 切り替え = 完全な再読み込み(数分かかり、ログに明確に記録されます);合成はグローバルロックで直列化 — 16 GB で2つの並列リクエストは 高速化ではなく OOM を引き起こします;
run.shはポートロックを取得 — そうしないと、複数のクライアントが同時に autostart を 呼び出した場合、それぞれがバックエンドのコピーを起動してしまいます (実際の事例:16 GB で7プロセス);アイドル 1800 秒での自動停止 — 隣のサービスより意図的に長め: 再起動には ~40 秒のシェーダーコンパイルがかかるため、プロセスを 生かしておく方が有利です;
Whisper による自動書き起こし — CPU 上で
int8、認識後すぐにアンロードされます。
速度と4つの最適化
上流を M4 で素朴に起動すると 実時間の ×189 でした — 3 秒のウクライナ語が
9.5 分かかりました。3つの修正で ×4.0、つまり 48 倍高速化。
4つ目で ×2.7 まで向上しました。何が問題だったのか
(tools/profile_steps.py と計測コードで測定):
1. AR ループステップでの autocast — 最大の問題。 上流は
@torch.autocast デコレータを _backbone_one_step に適用しており、
autocast 領域が自己回帰の 各ステップで 開閉されます。torch の
重みキャストキャッシュは領域内でのみ有効なため、1.7B パラメータの fp32 が
毎ステップ half に変換されていました。バックボーンステップ: 19000 ミリ秒 → 2710 ミリ秒。
現在は autocast はデフォルトで無効化され、キャストはバックボーンの境界で明示的に行われます。
2. バックボーンを fp32 のままにしない。 重みは float32 で保存されており (3.0B パラメータ = 11.4 GB)、16 GB ではスワップを意味します。 LLM バックボーンのみ half に変換(8.4 ではなく 4.2 GB)、 redae と flow デコーダーは fp32 のまま — 上流はそこでは意図的に フル精度で動作しており、half は MPS-matmul を壊します。ステップ: 2710 → 1387 ミリ秒。
3. Metal シェーダーのコンパイル。 「遅さ」の最大の部分は
一度きりの問題でした:Metal は最初の実行時にカーネルをコンパイルします。
バックボーンステップの個別測定: 9873, 2104, 120, 93, 96, 97… ミリ秒。
そのため、サービスは起動時にウォームアップを行い(FIRERED_WARMUP=1)、
長いアイドルタイムアウトを設定しています — 再起動には ~40 秒のコンパイルがかかります。
4. 参照音声エンコードのキャッシュ。 generate() は 各文に対して 呼び出され、
各呼び出しで参照録音が redae エンコーダーを再実行していました — 毎回 5.58 秒、
テキストの長さに関係なく。キャッシュキーはテンソル ID ではなく音声の内容であるため、
音声をすり替えてもキャッシュは欺けません。6.6 分の音声(14 チャンク)の実行では:
30 ヒット vs 2 ミス ≈ 150 秒、つまり時間の ~11% です。
1 分の音声は ~2.7 分で計算されます(Mac mini M4 / 16 GB、ウォームアップ済みモデル、 参照キャッシュが温かい状態; 3.0 秒のウクライナ語での 5 回の交互ラウンドの最良値、 中央値は ×2.9)。 リアルタイムではありませんが、もはや「一晩実行」ではなく実用的なツールです。
ウォームアップ済み生成のプロファイル: flow デコーダー 57%、バックボーン 18%、redae 11%。
n_timesteps — 最もコストのかかる部分である flow デコーダーでの ODE ステップ数。
このパラメータは /tts、MCP、FIRERED_N_TIMESTEPS で利用可能ですが、
デフォルトは 上流と同じ 10:上流はこれを文書化も推奨もしていません。
4 未満では品質が著しく粗くなります。同じ測定によると: 10 → ×2.7、6 → ×1.9、
4 → ×1.3、2 → ×1.0。特定のタスクでのみ、耳で確認しながら下げてください。
テキスト正規化
組み込みの TN(wetext)は中国語と英語のみ対応しているため、
ウクライナ語では役に立たず、インストールしていません。19:30、250 грн、2026 р. は
モデルがそのまま読み上げます。
2つの選択肢:
テキストを最初から単語で書く;
LLM-TN を有効にする —
.envでFIRERED_TN_API_URL/_API_KEY/_MODELを設定。 OpenAI 互換のエンドポイントなら何でも使用可能(ローカルの llama.cpp / vLLM / Ollama を含む)— その場合、すべてオフラインのままです。
ライセンス
コードと重みは Apache 2.0 です。上流の README には、zero-shot クローンは 「solely for academic research purposes」と明記されています — これは Apache 2.0 と矛盾しており、 クローンした音声の商用利用には注意が必要です。 家庭での使用に関しては問題ありません。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA Model Context Protocol server for FlowSpeech text-to-speech. It lets MCP-compatible clients generate human-like audio with context-aware emotion control, pause control, multi-speaker dialogue, and 30+ available voices.322MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first speech-to-text and text-to-speech MCP server. Hot-swappable engines via config.yaml — no code changes, no API keys required.2MIT
- AlicenseNot gradedqualityCmaintenanceA text-to-speech MCP server with 48 voices across 9 languages, supporting emotion spans, SFX tags, and multi-speaker dialogue. Deployable via a single npx command with built-in guardrails and swappable backends.MIT
- AlicenseNot gradedqualityCmaintenanceHeadless text-to-speech and speech-to-text server with REST and MCP API, supporting Kokoro TTS and Whisper STT.MIT
Related MCP Connectors
Hosted pay-per-use TTS: 54 neural voices, 9 languages incl. Brazilian Portuguese. $10 free credits.
MCP server exposing the AceDataCloud Fish Audio API (text-to-speech with voice conditioning)
MCP server for Kling AI video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/taral14/firered-tts'
If you have feedback or need assistance with the MCP directory API, please join our Discord server