Skip to main content
Glama

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つのことを行います:

  1. Python 3.11、torch 2.8.0 を使用した .venv を MPS/CPU 向けに作成

  2. 上流リポジトリを vendor/FireRedTTS3 にクローンし、コミット 00570ad に固定

  3. Apple Silicon 用のパッチを適用 — 詳細は下記参照

  4. 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 ではまったく動作しません:

場所

変更前

変更後

llm/fireredtts3_base.py:49

attn_implementation: flash_attention_2

sdpa

redae/redae.py:37,122

同左、×2

sdpa

base.py:143instruct.py:142redae.py:470

@torch.autocast(device_type='cuda')

動的デバイス指定

base.py:267instruct.py:319

self.device = torch.device('cuda')

FIRERED_DEVICE から取得

utils/utils.py:8,9

torch.cuda.manual_seed 無条件実行

if cuda.is_available()

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

メソッド

エンドポイント

機能

GET

/health

ステータス、デバイス、メモリ内のモデル

GET

/voices

音声名の一覧(フィルター: genderlanguage; full=1 でメタデータ付き)

GET

/languages

24言語 + 21方言

POST

/clone_voice

参照音声 + 書き起こし → 音声

DELETE

/voices/{name}

音声を削除(元の録音ファイルは変更されません)

POST

/tts

テキスト → レスポンス内の音声バイト

POST

/synthesize

テキスト → DATA_DIR 内のファイル、JSON でパスを返却

POST

/voice_design

音声の説明 → 音声(instruct)

POST

/edit

録音の編集: semantic | acoustic(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.mp3

MCP

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_statuslist_firered_voicesadd_firered_voicedelete_firered_voicesynthesize_firered_speechdesign_firered_voiceedit_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:30250 грн2026 р. は モデルがそのまま読み上げます。

2つの選択肢:

  1. テキストを最初から単語で書く;

  2. LLM-TN を有効にする — .envFIRERED_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 と矛盾しており、 クローンした音声の商用利用には注意が必要です。 家庭での使用に関しては問題ありません。

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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

View all MCP Connectors

Latest Blog Posts

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