firered-tts
FireRedTTS3 — 多言語TTS(24言語、ウクライナ語を含む)
FireRedTTS3 によるローカル音声合成サービス。 HTTP-API と MCP サーバーを備え、ポート :8020 で動作する。
モデルは 2026年8月13日 リリース、ライセンスは Apache 2.0、重みは公開されている。
開始前に知っておくべきこと
プリセット音声は存在しない。 空のライブラリ = 合成する手段がない。まず
任意の音声録音から音声を登録し(add_firered_voice)、その後
名前で使用する。モデルは合成時に zero-shot でクローンする。
リファレンスの書き起こしテキストが必要。 モデルには音声だけでは不十分で、 その中で話されているテキストも必要。渡さなければ Whisper で認識するが、 自分で用意したテキストの方が常に正確。
アクセント記号はない。 辞書も ByT5 フォールバックも手動の Му+дрого もない。
アクセントはモデルが文脈から自動で判断し、同形異義語(за́мок/замо́к)では
混同する。これは多言語モデルの根本的な制約である。
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 用に構築し、アップストリームを固定コミット 00570ad で
vendor/FireRedTTS3 にクローンし、Apple Silicon 用にパッチを当て(下記参照)、
base+redae の重み(約11.4 GB)を pretrained_models/ にダウンロードする。
重みは別途(時間がかかるため、detached で実行するのが望ましい):
nohup ./download-weights.sh base > data/download.log 2>&1 &
./download-weights.sh instruct # +7.9 ГБ, для дизайну голосу й редагуванняパッチの目的
アップストリームは NVIDIA 専用に書かれており、Mac ではまったく起動しない:
flash_attn は Metal ではそもそもビルドできず、デバイスは cuda として
ハードコードされ、autocast は CUDA に固定されている。パッチは
flash_attention_2 を sdpa に置き換え(NVIDIA を含むどこでも動作)、
デバイスを動的にし、速度に関するセクションの最適化を追加する。完全なリストは
src/patch_upstream.py のヘッダーにある。
パッチは冪等であり、置換が失敗した場合はクラッシュする — アップストリームが 変更された場合、最初の合成で CUDA エラーが出るのではなく、すぐに気づく。
起動
./run.sh # http://localhost:8020個別に起動する必要はない — MCP サーバーがバックエンドを自動的に起動する。 バックエンドはアイドル後に停止し、メモリを解放する。
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。
メモリ内では少ない — LLM バックボーンは half で動作(8.4 GB の代わりに 4.2 GB)— だが、
16 GB ではそれでもぎりぎり。コードに組み込まれた結果:
メモリ内にはちょうど1つのモデルが存在する —
baseまたはinstruct; 切り替え = 完全な再ロード(数分、ログに明示される);合成はグローバルロックで直列化される — 16 GB での2つの並列リクエストは 高速化ではなく OOM を引き起こす;
アイドル 1800 秒で自動停止 — 意図的に長い:再起動には約40秒の シェーダーコンパイルが必要なため、プロセスを生かしておく方が有利;
自動書き起こし用の Whisper — CPU 上の
int8、認識後すぐにアンロードされる。
速度と4つの最適化
M4 での素朴なアップストリーム起動は 実時間の ×186 だった — ウクライナ語3秒が
9分かかった。4つの修正後、×3.0 になり、約60倍高速化された。何が問題だったのか
(すべて tools/profile_steps.py で測定):
1. AR ループステップでの Autocast — 最大の問題。 アップストリームは
@torch.autocast デコレータを _backbone_one_step に付けており、つまり
リージョンが自己回帰の各ステップで開閉される。torch の重み再キャストキャッシュは
リージョン内でのみ有効なため、1.7B パラメータの fp32 が毎ステップ half に
変換されていた。バックボーンステップ:19000 → 2710 ミリ秒。現在は autocast を
無効にし、キャストはバックボーンの境界で明示的に行われる。
2. バックボーンを fp32 に。 重みは float32(3.0B パラメータ)で保存されており、 16 GB ではスワップを意味する。LLM バックボーンのみ half に変換(8.4 GB の代わりに 4.2 GB)、redae と flow デコーダは fp32 のまま — half はそこでの MPS-matmul を 壊すため。ステップ:2710 → 1387 ミリ秒。
3. リファレンスが文ごとに再エンコードされていた。 generate() はテキストの
各文に対して呼び出され、各呼び出しで同じリファレンス録音に対して redae エンコーダを
実行していた:毎回5.6秒、テキストの長さに関係なく。現在は音声コンテンツを
キーとするキャッシュを使用。6.6分の音声で、30回のヒットに対して2回のミス、
実行時間の約11%。
4. Metal シェーダーのコンパイル。 「遅さ」の最大の部分は一度きりであることが
判明:Metal は最初の実行時にカーネルをコンパイルする。バックボーンステップの
個別測定:9873, 2104, 120, 93, 96, 97… ミリ秒。そのためサービスは起動時に
ウォームアップを行い(FIRERED_WARMUP=1)、長いアイドルタイムアウトを持つ。
Mac mini M4 / 16 GB、ウクライナ語3.0秒、ウォームアップ済みモデルで測定:
n_timesteps | 時間 | ×実時間 | 品質 |
10(デフォルト) | 12秒 | ×4.0 | 基準 |
6 | 10秒 | ×3.0 | 差はかろうじて聞こえる |
4 | 7秒 | ×2.3 | 明らかに粗い |
2 | 6秒 | ×1.9 | 目立つアーティファクト |
ウォームアップ済み生成のプロファイル:flow デコーダ 57%、バックボーン 18%、
redae 11% — 最も効果的なレバーはまさに n_timesteps。リアルタイムではないが、
「一晩実行する」ものではなく、すでに実用的なツールである。
テキスト正規化
組み込みの TN(wetext)は中国語と英語のみ対応しているため、
ウクライナ語には役に立たず、インストールしていない。19:30、250 грн、2026 р. は
モデルがそのまま読み上げる。2つの選択肢:テキストを最初から単語で書くか、
LLM-TN を有効にする — .env の FIRERED_TN_API_URL / _API_KEY / _MODEL。
ローカル(llama.cpp / vLLM / Ollama)を含む任意の OpenAI 互換エンドポイントが
使用可能 — その場合、すべてオフラインのまま。
ライセンス
コードと重みは Apache 2.0。アップストリームの README には、zero-shot クローニングは「solely for academic research purposes」と明記されており、 これは Apache 2.0 と矛盾し、クローンされた音声の商用利用には注意が必要。 家庭での使用には問題ない。
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted text-to-speech MCP server: 66 voices in 9 languages, long-form narration, podcasts.
71AI voice generation: text-to-speech and voice cloning from any MCP client.
MCP server for Text-to-Speech
- AudexumOAuthcom.audexum
Text to speech and transcription for any AI model: MP3 voiceovers, audio and YouTube to text.
Related MCP Servers
- AlicenseAqualityDmaintenanceA 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.317 npmMIT
- AlicenseNot gradedqualityDmaintenanceLocal-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 gradedqualityBmaintenanceA 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 gradedqualityDmaintenanceMCP server for Vietnamese text-to-speech with voice cloning, 10 built-in voices, text normalization, and long-form queuing, running 100% locally.Apache 2.0