ComfyUIでIrodori-TTSを使うためのカスタムノードです。
本カスタムノードは、Irodori-TTSと、そのフォーク版であるEmoji-TTSを元にしています。
テキストから音声を生成し、必要に応じて参照音声による話者指定、VoiceDesign用キャプション、CFG調整、Rescale補正、IrodoriTTS向けLoRAを組み合わせられます。
各ノード入力の詳しい説明はdocs/parameters.mdを確認してください。
ComfyUIのcustom_nodesディレクトリにこのリポジトリを配置します。
cd ComfyUI/custom_nodes
git clone https://github.com/jupo-ai/comfy_IrodoriTTS.git
ComfyUIで使用しているPython環境を有効化し、依存関係をインストールします。
cd ComfyUI
pip install -r custom_nodes/comfy_IrodoriTTS/requirements.txt
IrodoriTTSのチェックポイントをComfyUIのmodels/checkpointsに配置します。
例:
ComfyUI/models/checkpoints/irodori_tts/model.safetensors
ComfyUIを再起動します。
IrodoriTTSのモデルはComfyUI標準のcheckpoints一覧から選択します。
チェックポイント例:
チェックポイントのlatent_dimに応じて、内部で使用するcodecが自動選択されます。
latent_dim = 32: Aratako/Semantic-DACVAE-Japanese-32dimlatent_dim = 128: facebook/dacvae-watermarkedcodecとtokenizerは初回ロード時にHugging Faceから自動ダウンロードされます。手動で配置が必要なのは、基本的にIrodoriTTSのチェックポイントのみです。
自動ダウンロードされたファイルは、このカスタムノード内のdataディレクトリに保存されます。
custom_nodes/comfy_IrodoriTTS/data/tokenizerscustom_nodes/comfy_IrodoriTTS/data/codecs/<repo_id>custom_nodes/comfy_IrodoriTTS/data/image_encoderscodecの<repo_id>部分は、/を_に置き換えたディレクトリ名になります。例: facebook/dacvae-watermarkedはcustom_nodes/comfy_IrodoriTTS/data/codecs/facebook_dacvae-watermarkedに保存されます。

最小構成では、次の2ノードだけで音声を生成できます。
IrodoriTTS Model LoaderIrodoriTTS Sampler接続:
IrodoriTTS Model Loader
irodori_model_config
-> IrodoriTTS Sampler / model_config
IrodoriTTS Samplerのtextに読み上げたい文章を入力し、secondsで生成秒数、num_stepsでサンプリングステップ数、seedで乱数シードを指定します。v3モデルではseconds = 0で自動秒数推定を使用できます。

話者や雰囲気を参照音声に寄せたい場合は、IrodoriTTS Reference Audioを追加してIrodoriTTS Samplerへ接続します。
VoiceDesignモデルでは機能しません。
IrodoriTTS Reference Audio
irodori_ref_config
-> IrodoriTTS Sampler / ref_config
参照ファイルはComfyUIのinputフォルダから選択します。音声ファイルに加えて、動画ファイルも指定できます。動画を指定した場合はffmpegで音声を抽出します。
参照音声の音量差が大きい場合は、normalize_ref_audioを有効にしてください。長い参照音声はmax_ref_secondsで先頭から使用する秒数を制限できます。

VoiceDesign対応モデルでは、IrodoriTTS VoiceDesign Configを接続して声質や話し方を文章で指定できます。
IrodoriTTS VoiceDesign Config
irodori_voice_design_config
-> IrodoriTTS Sampler / voice_design_config
captionには声質、話速、感情、話し方などの説明文を入力します。キャプション条件の強度はIrodoriTTS CFG Configのcfg_scale_captionで調整します。
通常のIrodoriTTSモデルでは、このノードは接続不要です。

IrodoriTTS向けLoRAはComfyUIのmodels/lorasに配置し、IrodoriTTS LoRA Stackから選択します。
IrodoriTTS LoRA Stack
irodori_lora_stack
-> IrodoriTTS Sampler / lora_stack
複数のLoRAを使う場合は、IrodoriTTS LoRA Stackのprevに前段の出力を接続して積み重ねます。
strengthはLoRAの適用強度です。1.0が標準、0.0は実質無効です。

IrodoriTTSのチェックポイントと実行設定をまとめたirodori_model_configを出力します。
主な入力:
model: 使用するチェックポイントmodel_device: TTSモデルを実行するデバイスmodel_precision: TTSモデルの計算精度codec_device: codecを実行するデバイスcodec_precision: codecの計算精度enable_watermark: codec側のウォーターマーク処理compile_model: torch.compileの使用compile_dynamic: torch.compileのdynamicモードruntime_cache_policy: 生成後のモデル保持方針通常はmodel_device = cuda、model_precision = bf16またはfp32、codec_device = cpuまたはcudaから環境に合わせて選びます。runtime_cache_policy = offload_after_useでは生成後にモデルをCPUへ退避し、次回生成時に再びGPUへ戻します。
[!WARNING] 旧版における
huggingfaceからモデルをDLするノードは削除されました。

テキストから音声を生成します。出力はComfyUI標準のAUDIOです。
主な入力:
model_config: IrodoriTTS Model Loaderの出力text: 読み上げるテキストseed: 生成シードseconds: 生成する音声長
0 で自動推定がONになります。0 が指定されていると30にフォールバックされますnum_steps: サンプリングステップ数batch_size: 同一条件で生成する候補数decode_mode: codecデコード方式trim_tail: 末尾の無音や平坦化部分の切り詰め任意入力:
lora_stack: LoRA設定ref_config: 参照音声設定voice_design_config: VoiceDesign用キャプション設定cfg_config: CFG詳細設定duration_config: v3自動秒数推定の詳細設定rescale_config: Rescale・speaker K/V補正設定schedule_config: RFサンプリングの時刻スケジュール設定trim_tail_config: 末尾切り詰め判定の詳細設定
参照音声設定を作成します。
主な入力:
audio: ComfyUIのinputフォルダ内の音声または動画normalize_ref_audio: 参照音声を-16dB基準で正規化max_ref_seconds: 参照として使う最大秒数動画を使う場合は、imageio-ffmpegまたはシステムのffmpegが必要です。

VoiceDesignモデル向けのキャプション設定を作成します。
主な入力:
caption: 声質・話し方・感情などの説明文max_caption_len: キャプションtoken長の上限
CFGの詳細設定を作成します。
主な入力:
cfg_guidance_mode: independent、joint、alternatingcfg_scale_text: テキスト条件の強度cfg_scale_speaker: 話者条件の強度cfg_scale_caption: VoiceDesignキャプション条件の強度cfg_scale_character: Character Voice画像条件の強度cfg_scale_override: 全CFG条件の共通強度cfg_min_t: CFGを適用する拡散時刻の下限cfg_max_t: CFGを適用する拡散時刻の上限cfg_guidance_mode = jointでは有効なCFG条件の強度が同一である必要があります。cfg_scale_override = 0のままjointを選んだ場合は、cfg_scale_textを共通強度として使用します。
まずは未接続の標準値で試し、必要に応じて調整してください。

v3モデルの自動秒数推定に関する詳細設定を作成します。
主な入力:
duration_scale: 自動推定された秒数の倍率min_seconds: 自動推定で許可する最短秒数max_seconds: 自動推定で許可する最長秒数Samplerのsecondsが0のときに自動推定が有効になります。未接続時はduration_scale = 1.0、min_seconds = 0.5、max_seconds = 30.0を使用します。

潜在の振れ幅や話者条件を補正する詳細設定を作成します。
主な入力:
truncation_factor: 潜在の振れ幅を抑える係数rescale_k: Rescale補正の強さrescale_sigma: Rescale補正のsigmaspeaker_kv_scale: 話者条件K/Vの強調speaker_kv_min_t: speaker K/V補正を適用し始める拡散時刻speaker_kv_max_layers: speaker K/V補正を適用する最大レイヤー数各値は0以下で無効になります。

RFサンプリングの時刻スケジュール設定を作成します。
主な入力:
schedule_mode: linear、swaysway_coeff: sway時のスケジュール係数未接続時はlinearで生成します。通常はlinearで試し、生成の安定性や質感を比較したい場合にswayを使用します。

末尾切り詰め判定の詳細設定を作成します。
主な入力:
tail_window_size: 末尾判定に使う潜在窓サイズtail_std_threshold: 標準偏差しきい値tail_mean_threshold: 平均値しきい値Samplerのtrim_tailが有効なときに使用されます。未接続時はtail_window_size = 20、tail_std_threshold = 0.05、tail_mean_threshold = 0.1を使用します。

IrodoriTTS向けLoRAを選択し、Samplerへ渡すためのスタックを作成します。
主な入力:
prev: 前段のLoRA Stacklora: 追加するLoRAstrength: 適用強度
IrodoriTTSで使いやすい絵文字を選ぶためのUIノードです。ワークフロー上の生成処理には出力を接続しません。
キャラクター画像を条件に音声を生成します。IrodoriTTS Model Loaderの出力を接続し、Character Voice対応チェックポイントを選択して使用します。
主な入力:
model_config: IrodoriTTS Model Loaderの出力character_image: 声質や話し方の条件に使うキャラクター画像。未接続の場合は画像条件なしで生成します。text: 読み上げるテキストseed: 生成シードseconds: 生成する音声長num_steps: サンプリングステップ数既存のIrodoriTTS CFG Config、IrodoriTTS Rescale Config、IrodoriTTS Trim Tail Configを任意で接続できます。キャラクター画像条件の強度はIrodoriTTS CFG Configのcfg_scale_characterで調整します。参照音声やVoiceDesignキャプションは使用しません。
num_steps = 40、secondsは生成したい音声より少し長めに設定します。seedを変更します。trim_tailを有効にします。codec_device = cpuやdecode_mode = sequentialを試してください。IrodoriTTS CFG Configのcfg_scale_speakerを少し上げます。チェックポイントをComfyUI/models/checkpoints配下に配置し、ComfyUIを再起動してください。
requirements.txtに含まれるimageio-ffmpegをインストールするか、システムにffmpegをインストールしてください。
以下を順に試してください。
batch_sizeを1にするdecode_modeをsequentialにするcodec_deviceをcpuにするsecondsを短くするnum_stepsを下げるIrodoriTTS CFG Configを接続し、cfg_scale_textを少し上げてください。上げすぎると音質や自然さが崩れる場合があります。
このカスタムノードのライセンスはリポジトリ内のLICENSEを確認してください。
Irodori-TTS本体、Emoji-TTS、および各モデルのライセンスは、それぞれの配布元を確認してください。
13 commits
Python
97.7%
JavaScript
2.3%
ComfyUIでIrodori-TTSを使うためのカスタムノードです。
本カスタムノードは、Irodori-TTSと、そのフォーク版であるEmoji-TTSを元にしています。
テキストから音声を生成し、必要に応じて参照音声による話者指定、VoiceDesign用キャプション、CFG調整、Rescale補正、IrodoriTTS向けLoRAを組み合わせられます。
各ノード入力の詳しい説明はdocs/parameters.mdを確認してください。
ComfyUIのcustom_nodesディレクトリにこのリポジトリを配置します。
cd ComfyUI/custom_nodes
git clone https://github.com/jupo-ai/comfy_IrodoriTTS.git
ComfyUIで使用しているPython環境を有効化し、依存関係をインストールします。
cd ComfyUI
pip install -r custom_nodes/comfy_IrodoriTTS/requirements.txt
IrodoriTTSのチェックポイントをComfyUIのmodels/checkpointsに配置します。
例:
ComfyUI/models/checkpoints/irodori_tts/model.safetensors
ComfyUIを再起動します。
IrodoriTTSのモデルはComfyUI標準のcheckpoints一覧から選択します。
チェックポイント例:
チェックポイントのlatent_dimに応じて、内部で使用するcodecが自動選択されます。
latent_dim = 32: Aratako/Semantic-DACVAE-Japanese-32dimlatent_dim = 128: facebook/dacvae-watermarkedcodecとtokenizerは初回ロード時にHugging Faceから自動ダウンロードされます。手動で配置が必要なのは、基本的にIrodoriTTSのチェックポイントのみです。
自動ダウンロードされたファイルは、このカスタムノード内のdataディレクトリに保存されます。
custom_nodes/comfy_IrodoriTTS/data/tokenizerscustom_nodes/comfy_IrodoriTTS/data/codecs/<repo_id>custom_nodes/comfy_IrodoriTTS/data/image_encoderscodecの<repo_id>部分は、/を_に置き換えたディレクトリ名になります。例: facebook/dacvae-watermarkedはcustom_nodes/comfy_IrodoriTTS/data/codecs/facebook_dacvae-watermarkedに保存されます。

最小構成では、次の2ノードだけで音声を生成できます。
IrodoriTTS Model LoaderIrodoriTTS Sampler接続:
IrodoriTTS Model Loader
irodori_model_config
-> IrodoriTTS Sampler / model_config
IrodoriTTS Samplerのtextに読み上げたい文章を入力し、secondsで生成秒数、num_stepsでサンプリングステップ数、seedで乱数シードを指定します。v3モデルではseconds = 0で自動秒数推定を使用できます。

話者や雰囲気を参照音声に寄せたい場合は、IrodoriTTS Reference Audioを追加してIrodoriTTS Samplerへ接続します。
VoiceDesignモデルでは機能しません。
IrodoriTTS Reference Audio
irodori_ref_config
-> IrodoriTTS Sampler / ref_config
参照ファイルはComfyUIのinputフォルダから選択します。音声ファイルに加えて、動画ファイルも指定できます。動画を指定した場合はffmpegで音声を抽出します。
参照音声の音量差が大きい場合は、normalize_ref_audioを有効にしてください。長い参照音声はmax_ref_secondsで先頭から使用する秒数を制限できます。

VoiceDesign対応モデルでは、IrodoriTTS VoiceDesign Configを接続して声質や話し方を文章で指定できます。
IrodoriTTS VoiceDesign Config
irodori_voice_design_config
-> IrodoriTTS Sampler / voice_design_config
captionには声質、話速、感情、話し方などの説明文を入力します。キャプション条件の強度はIrodoriTTS CFG Configのcfg_scale_captionで調整します。
通常のIrodoriTTSモデルでは、このノードは接続不要です。

IrodoriTTS向けLoRAはComfyUIのmodels/lorasに配置し、IrodoriTTS LoRA Stackから選択します。
IrodoriTTS LoRA Stack
irodori_lora_stack
-> IrodoriTTS Sampler / lora_stack
複数のLoRAを使う場合は、IrodoriTTS LoRA Stackのprevに前段の出力を接続して積み重ねます。
strengthはLoRAの適用強度です。1.0が標準、0.0は実質無効です。

IrodoriTTSのチェックポイントと実行設定をまとめたirodori_model_configを出力します。
主な入力:
model: 使用するチェックポイントmodel_device: TTSモデルを実行するデバイスmodel_precision: TTSモデルの計算精度codec_device: codecを実行するデバイスcodec_precision: codecの計算精度enable_watermark: codec側のウォーターマーク処理compile_model: torch.compileの使用compile_dynamic: torch.compileのdynamicモードruntime_cache_policy: 生成後のモデル保持方針通常はmodel_device = cuda、model_precision = bf16またはfp32、codec_device = cpuまたはcudaから環境に合わせて選びます。runtime_cache_policy = offload_after_useでは生成後にモデルをCPUへ退避し、次回生成時に再びGPUへ戻します。
[!WARNING] 旧版における
huggingfaceからモデルをDLするノードは削除されました。

テキストから音声を生成します。出力はComfyUI標準のAUDIOです。
主な入力:
model_config: IrodoriTTS Model Loaderの出力text: 読み上げるテキストseed: 生成シードseconds: 生成する音声長
0 で自動推定がONになります。0 が指定されていると30にフォールバックされますnum_steps: サンプリングステップ数batch_size: 同一条件で生成する候補数decode_mode: codecデコード方式trim_tail: 末尾の無音や平坦化部分の切り詰め任意入力:
lora_stack: LoRA設定ref_config: 参照音声設定voice_design_config: VoiceDesign用キャプション設定cfg_config: CFG詳細設定duration_config: v3自動秒数推定の詳細設定rescale_config: Rescale・speaker K/V補正設定schedule_config: RFサンプリングの時刻スケジュール設定trim_tail_config: 末尾切り詰め判定の詳細設定
参照音声設定を作成します。
主な入力:
audio: ComfyUIのinputフォルダ内の音声または動画normalize_ref_audio: 参照音声を-16dB基準で正規化max_ref_seconds: 参照として使う最大秒数動画を使う場合は、imageio-ffmpegまたはシステムのffmpegが必要です。

VoiceDesignモデル向けのキャプション設定を作成します。
主な入力:
caption: 声質・話し方・感情などの説明文max_caption_len: キャプションtoken長の上限
CFGの詳細設定を作成します。
主な入力:
cfg_guidance_mode: independent、joint、alternatingcfg_scale_text: テキスト条件の強度cfg_scale_speaker: 話者条件の強度cfg_scale_caption: VoiceDesignキャプション条件の強度cfg_scale_character: Character Voice画像条件の強度cfg_scale_override: 全CFG条件の共通強度cfg_min_t: CFGを適用する拡散時刻の下限cfg_max_t: CFGを適用する拡散時刻の上限cfg_guidance_mode = jointでは有効なCFG条件の強度が同一である必要があります。cfg_scale_override = 0のままjointを選んだ場合は、cfg_scale_textを共通強度として使用します。
まずは未接続の標準値で試し、必要に応じて調整してください。

v3モデルの自動秒数推定に関する詳細設定を作成します。
主な入力:
duration_scale: 自動推定された秒数の倍率min_seconds: 自動推定で許可する最短秒数max_seconds: 自動推定で許可する最長秒数Samplerのsecondsが0のときに自動推定が有効になります。未接続時はduration_scale = 1.0、min_seconds = 0.5、max_seconds = 30.0を使用します。

潜在の振れ幅や話者条件を補正する詳細設定を作成します。
主な入力:
truncation_factor: 潜在の振れ幅を抑える係数rescale_k: Rescale補正の強さrescale_sigma: Rescale補正のsigmaspeaker_kv_scale: 話者条件K/Vの強調speaker_kv_min_t: speaker K/V補正を適用し始める拡散時刻speaker_kv_max_layers: speaker K/V補正を適用する最大レイヤー数各値は0以下で無効になります。

RFサンプリングの時刻スケジュール設定を作成します。
主な入力:
schedule_mode: linear、swaysway_coeff: sway時のスケジュール係数未接続時はlinearで生成します。通常はlinearで試し、生成の安定性や質感を比較したい場合にswayを使用します。

末尾切り詰め判定の詳細設定を作成します。
主な入力:
tail_window_size: 末尾判定に使う潜在窓サイズtail_std_threshold: 標準偏差しきい値tail_mean_threshold: 平均値しきい値Samplerのtrim_tailが有効なときに使用されます。未接続時はtail_window_size = 20、tail_std_threshold = 0.05、tail_mean_threshold = 0.1を使用します。

IrodoriTTS向けLoRAを選択し、Samplerへ渡すためのスタックを作成します。
主な入力:
prev: 前段のLoRA Stacklora: 追加するLoRAstrength: 適用強度
IrodoriTTSで使いやすい絵文字を選ぶためのUIノードです。ワークフロー上の生成処理には出力を接続しません。
キャラクター画像を条件に音声を生成します。IrodoriTTS Model Loaderの出力を接続し、Character Voice対応チェックポイントを選択して使用します。
主な入力:
model_config: IrodoriTTS Model Loaderの出力character_image: 声質や話し方の条件に使うキャラクター画像。未接続の場合は画像条件なしで生成します。text: 読み上げるテキストseed: 生成シードseconds: 生成する音声長num_steps: サンプリングステップ数既存のIrodoriTTS CFG Config、IrodoriTTS Rescale Config、IrodoriTTS Trim Tail Configを任意で接続できます。キャラクター画像条件の強度はIrodoriTTS CFG Configのcfg_scale_characterで調整します。参照音声やVoiceDesignキャプションは使用しません。
num_steps = 40、secondsは生成したい音声より少し長めに設定します。seedを変更します。trim_tailを有効にします。codec_device = cpuやdecode_mode = sequentialを試してください。IrodoriTTS CFG Configのcfg_scale_speakerを少し上げます。チェックポイントをComfyUI/models/checkpoints配下に配置し、ComfyUIを再起動してください。
requirements.txtに含まれるimageio-ffmpegをインストールするか、システムにffmpegをインストールしてください。
以下を順に試してください。
batch_sizeを1にするdecode_modeをsequentialにするcodec_deviceをcpuにするsecondsを短くするnum_stepsを下げるIrodoriTTS CFG Configを接続し、cfg_scale_textを少し上げてください。上げすぎると音質や自然さが崩れる場合があります。
このカスタムノードのライセンスはリポジトリ内のLICENSEを確認してください。
Irodori-TTS本体、Emoji-TTS、および各モデルのライセンスは、それぞれの配布元を確認してください。
13 commits
Python
97.7%
JavaScript
2.3%