ComfyUI-DialogueTTS
Speaker-tagged dialogue TTS nodes for ComfyUI, currently powered by IrodoriTTS-v2.
Nodes (7)
ComfyUI-DialogueTTS
Speaker-tagged dialogue JSON を、キャラクターごとの音声で一括TTS化する ComfyUI カスタムノードです。
English Summary
ComfyUI-DialogueTTS is a ComfyUI custom node package for turning speaker-tagged dialogue JSON into multi-character TTS audio. It currently provides an IrodoriTTS-v2 backend, including a dialogue node that assigns separate reference voices to speakers A and B, generates each utterance in order, and combines the result into one audio track.
現在の中心バックエンドは IrodoriTTS-v2 で、中心ノードは IrodoriTTS-v2 Dialogue TTS です。
dialogue_segments_json を受け取り、話者A/Bごとに参照音声を切り替えながら発話順にTTS生成し、
最後に1本の会話音声として結合します。
dialogue_segments_json
-> speaker A: ref_audio_config_a
-> speaker B: ref_audio_config_b
-> IrodoriTTS-v2 Dialogue TTS
-> combined_audio
このリポジトリは当初、元プロジェクト ComfyUI_IrodoriTTS_Wrapper が IrodoriTTS-v2 に未対応だった時期に作成した非公式 v2 fork でした。 現在は元プロジェクトも v2 に対応しています。
本リポジトリでは、通常のIrodoriTTS-v2 wrapper機能に加えて、LLM同士の会話や手書き台本を2キャラクター音声に変換する
Dialogue TTS ワークフローを主目的として提供します。
将来的には、同じ dialogue_segments_json を入力契約として、他のTTSバックエンドにも拡張できる構成を目指しています。
What It Does
dialogue_segments_json形式の会話台本を読み込むspeaker == Aとspeaker == Bに別々の参照音声を割り当てる- 各発話を順番にIrodoriTTS-v2で生成する
- 発話間に無音を挿入する
- 発話の端に短いフェードを入れてクリックノイズを抑える
- すべての発話を1本の
AUDIOに結合する - 各発話の開始/終了秒数を
dialogue_timing_jsonとして出力する
想定する使い方:
ComfyUI-LLM-Session / LLM Dialogue Cycle
-> transcript_text
ComfyUI-ScriptFlow / MultiOutputScript
-> dialogue_segments_json
IrodoriTTS-v2 Dialogue TTS
-> combined_audio
Sample Workflow
LLM同士の会話生成から2キャラクターTTSまでをつなぐサンプルワークフローを同梱しています。
- Workflow: examples/ModelChatSample.json
- Screenshot: examples/ModelChatSample.png

このサンプルは、次の流れを確認するためのものです。
LLM Dialogue Cycle (Simple)
-> transcript_text
-> MultiOutputScript
-> dialogue_segments_json
-> IrodoriTTS-v2 Dialogue TTS
-> SaveAudioMP3
主に使用している関連ノード:
ComfyUI-LLM-Session:LLM Dialogue Cycle (Simple)ComfyUI-ScriptFlow:MultiOutputScriptComfyUI-DialogueTTS:IrodoriTTS-v2 Model Loader,Reference Audio,Dialogue TTS- 通知、テキスト保存、音声保存系の補助ノード
使い方:
- ComfyUIで examples/ModelChatSample.json を読み込みます。
LLM Dialogue Cycle (Simple)のmodelA/modelBとプロンプトを環境に合わせて設定します。IrodoriTTS-v2 Model Loaderで IrodoriTTS-v2 の checkpoint を選択します。- 2つの
IrodoriTTS-v2 Reference Audioに、キャラクターA/B用の参照音声を設定します。 - 保存先やファイル名を必要に応じて調整します。
- キューを実行すると、会話ログ、
dialogue_segments_json、結合済み会話音声が生成されます。
MultiOutputScript では、LLMの出力から 「...」 の中だけをTTS台本として抽出する想定です。
地の文や心情描写をLLMに出させつつ、読み上げはセリフだけにしたい場合に便利です。
IrodoriTTS-v2 Dialogue TTS
Input
主な入力:
irodori_model:IrodoriTTS-v2 Model Loaderの出力dialogue_segments_json: 会話台本JSONspeaker_a_key: defaultAspeaker_b_key: defaultBref_audio_config_a: 話者A用の参照音声ref_audio_config_b: 話者B用の参照音声seedseed_modeincrement_per_utterancefixedrandomize
num_stepscfg_guidance_modecfg_scale_textcfg_scale_speakercontext_kv_cachesilence_msfade_msmax_utterancesskip_empty_textunknown_speaker_policyerrorskipuse_ause_b
cfg_configrescale_config
Output
combined_audio: 結合済み会話音声dialogue_timing_json: 各発話の開始/終了秒数log_text: 処理ログ
dialogue_timing_json の例:
{
"schema": "kantan.dialogue_timing.v1",
"sample_rate": 24000,
"silence_ms": 300,
"fade_ms": 10,
"utterances": [
{
"index": 1,
"speaker": "A",
"start_sec": 0.0,
"end_sec": 2.14,
"text": "こんにちは。"
}
]
}
Progress Log
発話ごとの生成進捗はコンソールに表示されます。
[IrodoriTTS-v2 Dialogue TTS] processing utterance 1/6 index=1 speaker=A seed=100
[runtime] ...
[IrodoriTTS-v2 Dialogue TTS] completed utterance 1/6 index=1 speaker=A seed=100 samples=123456
Seed Behavior
control before generate は ComfyUI が seed ウィジェットに表示する標準UIです。
これは「実行ごとの元seed」を制御します。
seed_mode は、その元seedを会話内の各発話にどう配るかを制御します。
おすすめ:
control before generate: fixed
seed_mode: increment_per_utterance
この場合:
seed = 100
utterance 1 -> 100
utterance 2 -> 101
utterance 3 -> 102
毎回違う音声にしたい場合は、ComfyUI側の control before generate を randomize 系にして、
seed_mode = increment_per_utterance にすると、会話全体の再生成単位で自然にseedが変わります。
Silence And Fade
silence_ms は発話間に挿入する無音の長さです。
fade_ms は各発話の先頭と末尾に入れる短いフェードです。
発話結合時のクリックノイズが気になる場合に有効です。
おすすめ:
silence_ms: 300
fade_ms: 10
まだプツプツ音が気になる場合は、fade_ms を 15 から 20 程度に上げてください。
語頭が丸く感じる場合は、5 程度に下げると自然になることがあります。
dialogue_segments_json Format
IrodoriTTS-v2 Dialogue TTS は、次の形式のJSON文字列を受け取ります。
{
"schema": "kantan.dialogue.v1",
"utterances": [
{
"index": 1,
"speaker": "A",
"text": "こんにちは。"
},
{
"index": 2,
"speaker": "B",
"text": "こんにちは、調子はどう?"
}
]
}
必須フィールド:
utterances: 発話オブジェクトの配列utterances[].speaker: 話者キーutterances[].text: 読み上げるテキスト
任意フィールド:
schemasourceutterances[].indexutterances[].timestamp
speaker_a_key / speaker_b_key と一致した発話に、それぞれ
ref_audio_config_a / ref_audio_config_b が使われます。
Preparing Dialogue JSON With ScriptFlow
ComfyUI-ScriptFlow の MultiOutputScript を使うと、
LLM Dialogue Cycle の transcript_text から dialogue_segments_json を作れます。
たとえば、LLMの出力が次のように地の文を含む場合:
[2026-05-16T12:00:01] A: 彼女は少し考えた。「こんにちは。」
[2026-05-16T12:00:02] B: 彼は笑った。「やあ。」「調子はどう?」
「...」 の中だけを抽出すれば、TTSには次の内容だけが渡ります。
{
"utterances": [
{
"speaker": "A",
"text": "こんにちは。"
},
{
"speaker": "B",
"text": "やあ。\n調子はどう?"
}
]
}
この整形コードは ComfyUI-ScriptFlow 側のREADMEにサンプルとして記載しています。
Installation
-
ComfyUI/custom_nodes/にこのリポジトリを配置します。cd ComfyUI/custom_nodes git clone https://github.com/kantan-kanto/ComfyUI-DialogueTTSリポジトリ名の移行中は、旧URL
ComfyUI_IrodoriTTS-v2_Wrapperを使用している場合があります。 その場合は、以降のパス名を実際のフォルダ名に読み替えてください。 -
ComfyUI の仮想環境を有効化した上で依存関係をインストールします。
pip install -r ComfyUI-DialogueTTS/requirements.txt -
checkpoints フォルダに IrodoriTTS-v2モデル を手動で配置します。
配置例:
ComfyUI/models/checkpoints/Irodori-TTS-500M-v2.safetensors -
ComfyUI を再起動します。
codec / tokenizer
codec weights と tokenizer は初回ロード時に自動取得されます。
- codec:
Aratako/Semantic-DACVAE-Japanese-32dimのweights.pth、約410MB - tokenizer:
llm-jp/llm-jp-3-150m、約6MB
codec を手動配置したい場合は、次のいずれかに置くと自動取得を避けられます。
ComfyUI/models/checkpoints/Semantic-DACVAE-Japanese-32dim-weights.pth
ComfyUI/models/vae/Semantic-DACVAE-Japanese-32dim-weights.pth
Other Nodes
このリポジトリには、Dialogue TTSを支える通常のIrodoriTTS-v2ノードも含まれています。
ComfyUI上では DialogueTTS/IrodoriTTS-v2 カテゴリに表示されます。
IrodoriTTS-v2 Model Loader
IrodoriTTS-v2 のモデルと codec を読み込みます。
出力:
irodori_model
IrodoriTTS-v2 Reference Audio
参照音声を選択し、TTSノードに渡す ref_audio_config を作成します。
出力:
ref_audio_config
IrodoriTTS-v2 Sampler
1つのテキストを音声化する標準のTTSノードです。 IrodoriTTS-v2 Dialogue TTS使用時には使用しません。
出力:
AUDIO
IrodoriTTS-v2 Advanced CFG
CFG関連の追加設定を作成します。
出力:
cfg_config
IrodoriTTS-v2 Rescale Config
rescale / speaker K/V scale 関連の追加設定を作成します。
出力:
rescale_config
IrodoriTTS-v2 Emoji Selector
IrodoriTTS-v2で使用できる絵文字一覧を表示します。 ボタンクリックでクリップボードに絵文字をコピーします。
Notes
IrodoriTTS-v2 Dialogue TTSは2話者固定の会話TTSノードです。- 3人以上の話者には現在対応していません。
dialogue_segments_jsonの解析はこのノード内で行いますが、LLMの生ログ解析は行いません。- LLM出力の整形や台本化は
ComfyUI-ScriptFlowなどのテキスト処理ノードで行うことを推奨します。 - モデル本体の自動ダウンロードは行いません。
License And Acknowledgements
This repository is based on
ComfyUI_IrodoriTTS_Wrapper.
The original copyright notice and MIT License are preserved in LICENSE.
Original project:
- Repository: https://github.com/jupo-ai/ComfyUI_IrodoriTTS_Wrapper
- Copyright (c) 2026 jupo-ai
- License: MIT License
Irodori-TTS:
- Repository: https://github.com/Aratako/Irodori-TTS
This repository:
- Repository: https://github.com/kantan-kanto/ComfyUI-DialogueTTS
- Modifications Copyright (c) 2026 kantan-kanto
- License: MIT License