Make your character talk
Turn a character image and voice recording into a talking performance.
ワークフローをダウンロードCloudで試す API ドキュメント
00:00
ワークフローの内部
ソーステンプレートの読み取り専用プレビューです。Cloud で開くと、ノードを確認して変更できます。
Loading the graph
Open full-size workflow preview- 作成者
- ComfyUI
コードからこのモデルを呼び出す
以下のリクエストでは、Playground と同じ準備済みグラフと設定を使用します。送信ごとに有料実行が開始される場合があります。結果が不明な送信を自動的に再試行しないでください。
1 API キーを取得 ↗
What you need
- Runs on
- Comfy Cloud
- キー
- COMFY_API_KEY
- ファイル
- コードによって URL からアップロードされます
有料の Cloud プランとクレジットが必要です。
# Python 3.10+: pip install comfy-sdk==0.4.0
import os
from comfy_sdk import Comfy
api_key = os.environ.get("COMFY_API_KEY", "").strip()
if not api_key: raise RuntimeError("Set COMFY_API_KEY")
os.environ.setdefault("COMFY_BASE_URL", "https://cloud.comfy.org")
client = Comfy(api_key=api_key)
workflow = client.workflows.from_json({
"269": {
"class_type": "LoadImage",
"inputs": {
"image": "UPLOADED_image_FILENAME"
},
"_meta": {
"title": "Load Image"
}
},
"276": {
"class_type": "LoadAudio",
"inputs": {
"audio": "UPLOADED_audio_FILENAME"
},
"_meta": {
"title": "Load Audio"
}
},
"341": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "video/LTX_2.3_ia2v",
"format": "auto",
"format.codec": "auto",
"video": [
"340:312",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"340:285": {
"class_type": "RandomNoise",
"inputs": {
"noise_seed": 42
},
"_meta": {
"title": "RandomNoise"
}
},
"340:286": {
"class_type": "RandomNoise",
"inputs": {
"noise_seed": 225158785956033
},
"_meta": {
"title": "RandomNoise"
}
},
"340:287": {
"class_type": "LTXVConcatAVLatent",
"inputs": {
"audio_latent": [
"340:309",
1
],
"video_latent": [
"340:296",
0
]
},
"_meta": {
"title": "Concat AV Latent"
}
},
"340:288": {
"class_type": "KSamplerSelect",
"inputs": {
"sampler_name": "euler"
},
"_meta": {
"title": "KSamplerSelect"
}
},
"340:289": {
"class_type": "ManualSigmas",
"inputs": {
"sigmas": "0.85, 0.7250, 0.4219, 0.0"
},
"_meta": {
"title": "ManualSigmas"
}
},
"340:290": {
"class_type": "CFGGuider",
"inputs": {
"cfg": 1,
"model": [
"340:293",
0
],
"negative": [
"340:292",
1
],
"positive": [
"340:292",
0
]
},
"_meta": {
"title": "CFG Guider"
}
},
"340:291": {
"class_type": "SamplerCustomAdvanced",
"inputs": {
"guider": [
"340:315",
0
],
"latent_image": [
"340:326",
0
],
"noise": [
"340:286",
0
],
"sampler": [
"340:298",
0
],
"sigmas": [
"340:308",
0
]
},
"_meta": {
"title": "SamplerCustomAdvanced"
}
},
"340:292": {
"class_type": "LTXVCropGuides",
"inputs": {
"latent": [
"340:309",
0
],
"negative": [
"340:307",
1
],
"positive": [
"340:307",
0
]
},
"_meta": {
"title": "LTXVCropGuides"
}
},
"340:293": {
"class_type": "LoraLoaderModelOnly",
"inputs": {
"lora_name": "ltx_2.3_22b_distilled_1.1_lora_dynamic_fro09_avg_rank_111_bf16.safetensors",
"model": [
"340:317",
0
],
"strength_model": 0.5
},
"_meta": {
"title": "Load LoRA"
}
},
"340:295": {
"class_type": "LTXVLatentUpsampler",
"inputs": {
"samples": [
"340:309",
0
],
"upscale_model": [
"340:313",
0
],
"vae": [
"340:317",
2
]
},
"_meta": {
"title": "LTXVLatentUpsampler"
}
},
"340:296": {
"class_type": "LTXVImgToVideoInplace",
"inputs": {
"bypass": [
"340:305",
0
],
"image": [
"340:334",
0
],
"latent": [
"340:295",
0
],
"strength": 1,
"vae": [
"340:317",
2
]
},
"_meta": {
"title": "LTXVImgToVideoInplace"
}
},
"340:297": {
"class_type": "ResizeImageMaskNode",
"inputs": {
"input": [
"269",
0
],
"resize_type": "scale dimensions",
"resize_type.crop": "center",
"resize_type.height": [
"340:324",
0
],
"resize_type.width": [
"340:330",
0
],
"scale_method": "lanczos"
},
"_meta": {
"title": "Resize Image/Mask"
}
},
"340:298": {
"class_type": "KSamplerSelect",
"inputs": {
"sampler_name": "euler"
},
"_meta": {
"title": "KSamplerSelect"
}
},
"340:299": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a/2",
"values.a": [
"340:330",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"340:301": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a/2",
"values.a": [
"340:324",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"340:302": {
"class_type": "EmptyLTXVLatentVideo",
"inputs": {
"batch_size": 1,
"height": [
"340:301",
1
],
"length": [
"340:329",
1
],
"width": [
"340:299",
1
]
},
"_meta": {
"title": "EmptyLTXVLatentVideo"
}
},
"340:303": {
"class_type": "LTXVAudioVAEDecode",
"inputs": {
"audio_vae": [
"340:335",
0
],
"samples": [
"340:311",
1
]
},
"_meta": {
"title": "LTXV Audio VAE Decode"
}
},
"340:304": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a",
"values.a": [
"340:323",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"340:305": {
"class_type": "PrimitiveBoolean",
"inputs": {
"value": False
},
"_meta": {
"title": "Switch to Text to Video?"
}
},
"340:306": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"340:318",
0
],
"text": [
"340:348",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"340:307": {
"class_type": "LTXVConditioning",
"inputs": {
"frame_rate": [
"340:304",
0
],
"negative": [
"340:314",
0
],
"positive": [
"340:306",
0
]
},
"_meta": {
"title": "LTXVConditioning"
}
},
"340:308": {
"class_type": "ManualSigmas",
"inputs": {
"sigmas": "1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0"
},
"_meta": {
"title": "ManualSigmas"
}
},
"340:309": {
"class_type": "LTXVSeparateAVLatent",
"inputs": {
"av_latent": [
"340:291",
0
]
},
"_meta": {
"title": "Separate AV Latent"
}
},
"340:310": {
"class_type": "SamplerCustomAdvanced",
"inputs": {
"guider": [
"340:290",
0
],
"latent_image": [
"340:287",
0
],
"noise": [
"340:285",
0
],
"sampler": [
"340:288",
0
],
"sigmas": [
"340:289",
0
]
},
"_meta": {
"title": "SamplerCustomAdvanced"
}
},
"340:311": {
"class_type": "LTXVSeparateAVLatent",
"inputs": {
"av_latent": [
"340:310",
0
]
},
"_meta": {
"title": "Separate AV Latent"
}
},
"340:312": {
"class_type": "CreateVideo",
"inputs": {
"audio": [
"340:303",
0
],
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"340:304",
0
],
"images": [
"340:316",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"340:313": {
"class_type": "LatentUpscaleModelLoader",
"inputs": {
"model_name": "ltx-2.3-spatial-upscaler-x2-1.1.safetensors"
},
"_meta": {
"title": "Load Latent Upscale Model"
}
},
"340:314": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"340:318",
0
],
"text": "pc game, console game, video game, cartoon, childish, ugly"
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"340:315": {
"class_type": "CFGGuider",
"inputs": {
"cfg": 1,
"model": [
"340:293",
0
],
"negative": [
"340:307",
1
],
"positive": [
"340:307",
0
]
},
"_meta": {
"title": "CFG Guider"
}
},
"340:316": {
"class_type": "VAEDecodeTiled",
"inputs": {
"overlap": 64,
"samples": [
"340:311",
0
],
"temporal_overlap": 4,
"temporal_size": 4096,
"tile_size": 768,
"vae": [
"340:317",
2
]
},
"_meta": {
"title": "VAE Decode (Tiled)"
}
},
"340:317": {
"class_type": "CheckpointLoaderSimple",
"inputs": {
"ckpt_name": "ltx-2.3-22b-dev-fp8.safetensors"
},
"_meta": {
"title": "Load Checkpoint"
}
},
"340:318": {
"class_type": "LTXAVTextEncoderLoader",
"inputs": {
"ckpt_name": "ltx-2.3-22b-dev-fp8.safetensors",
"device": "default",
"text_encoder": "gemma_3_12B_it_fp4_mixed.safetensors"
},
"_meta": {
"title": "Load LTXV Audio Text Encoder"
}
},
"340:319": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "The fuzzy cactus creature is talking to the viewer as it grips the steering wheel with one hand, the other hand gestures naturally as it speaks. The car is moving, revealing the sunlit coastal background, static camera fixed on character, smooth side-tracking shot matching the car speed\n\nscene: Sunlit coastal road trip, clear coastal background\ncharacter: Fuzzy cactus creature with big square sunglasses and a Hawaiian shirt\naction: One hand grips the steering wheel, the other gestures naturally while talking to the camera\ncamera: Fixed on character, smooth side-tracking shot matching car speed"
},
"_meta": {
"title": "Prompt"
}
},
"340:323": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 24
},
"_meta": {
"title": "Frame Rate"
}
},
"340:324": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 720
},
"_meta": {
"title": "Height"
}
},
"340:325": {
"class_type": "LTXVImgToVideoInplace",
"inputs": {
"bypass": [
"340:305",
0
],
"image": [
"340:334",
0
],
"latent": [
"340:302",
0
],
"strength": 0.7,
"vae": [
"340:317",
2
]
},
"_meta": {
"title": "LTXVImgToVideoInplace"
}
},
"340:326": {
"class_type": "LTXVConcatAVLatent",
"inputs": {
"audio_latent": [
"340:327",
0
],
"video_latent": [
"340:325",
0
]
},
"_meta": {
"title": "Concat AV Latent"
}
},
"340:327": {
"class_type": "SetLatentNoiseMask",
"inputs": {
"mask": [
"340:333",
0
],
"samples": [
"340:328",
0
]
},
"_meta": {
"title": "Set Latent Noise Mask"
}
},
"340:328": {
"class_type": "LTXVAudioVAEEncode",
"inputs": {
"audio": [
"340:332",
0
],
"audio_vae": [
"340:335",
0
]
},
"_meta": {
"title": "LTXV Audio VAE Encode"
}
},
"340:329": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a * b + 1",
"values.a": [
"340:331",
0
],
"values.b": [
"340:323",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"340:330": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 1280
},
"_meta": {
"title": "Width"
}
},
"340:331": {
"class_type": "PrimitiveFloat",
"inputs": {
"value": 9
},
"_meta": {
"title": "Duration"
}
},
"340:332": {
"class_type": "TrimAudioDuration",
"inputs": {
"audio": [
"276",
0
],
"duration": [
"340:331",
0
],
"start_index": 0
},
"_meta": {
"title": "Trim Audio Duration"
}
},
"340:333": {
"class_type": "SolidMask",
"inputs": {
"height": [
"340:324",
0
],
"value": 0,
"width": [
"340:330",
0
]
},
"_meta": {
"title": "Create Solid Mask"
}
},
"340:334": {
"class_type": "LTXVPreprocess",
"inputs": {
"image": [
"340:350",
0
],
"img_compression": 18
},
"_meta": {
"title": "LTXV Preprocess"
}
},
"340:335": {
"class_type": "LTXVAudioVAELoader",
"inputs": {
"ckpt_name": "ltx-2.3-22b-dev-fp8.safetensors"
},
"_meta": {
"title": "Load LTXV Audio VAE"
}
},
"340:345": {
"class_type": "LoraLoader",
"inputs": {
"clip": [
"340:318",
0
],
"lora_name": "gemma-3-12b-it-abliterated_lora_rank64_bf16.safetensors",
"model": [
"340:293",
0
],
"strength_clip": 1,
"strength_model": 1
},
"_meta": {
"title": "Load LoRA (Model and CLIP)"
}
},
"340:346": {
"class_type": "TextGenerateLTX2Prompt",
"inputs": {
"clip": [
"340:345",
1
],
"max_length": 2048,
"prompt": [
"340:319",
0
],
"sampling_mode": "on",
"sampling_mode.min_p": 0.05,
"sampling_mode.presence_penalty": 0,
"sampling_mode.repetition_penalty": 1.05,
"sampling_mode.seed": 0,
"sampling_mode.temperature": 0.7,
"sampling_mode.top_k": 64,
"sampling_mode.top_p": 0.95,
"thinking": False,
"use_default_template": True
},
"_meta": {
"title": "Generate LTX2 Prompt"
}
},
"340:347": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"340:348",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"340:348": {
"class_type": "ComfySwitchNode",
"inputs": {
"on_false": [
"340:319",
0
],
"on_true": [
"340:346",
0
],
"switch": [
"340:349",
0
]
},
"_meta": {
"title": "If/Else Switch"
}
},
"340:349": {
"class_type": "PrimitiveBoolean",
"inputs": {
"value": True
},
"_meta": {
"title": "Boolean (Enable Prompt Enhance)"
}
},
"340:350": {
"class_type": "ResizeImageMaskNode",
"inputs": {
"input": [
"340:297",
0
],
"resize_type": "scale longer dimension",
"resize_type.longer_size": 1536,
"scale_method": "lanczos"
},
"_meta": {
"title": "Resize Image/Mask"
}
}
})
workflow.set_input("276", "audio", client.assets.from_url("https://cdn.jsdelivr.net/gh/Comfy-Org/workflow_templates@90c71fb78b3726392d010ff62a8e79e92d7296ad/input/ltx_23_audio.mp3"))
workflow.set_input("269", "image", client.assets.from_url("https://cdn.jsdelivr.net/gh/Comfy-Org/workflow_templates@90c71fb78b3726392d010ff62a8e79e92d7296ad/input/cactus_man.png"))
# run() also passes api_key to the partner nodes in this workflow.
job = client.run(workflow, api_key=api_key)
for output in job.get_outputs("341"):
output.to_file(output.name)