Animate a scene from a reference sheet
Use one sheet of characters, props, and settings to guide a consistent animated scene.
下载工作流在 Cloud 中试用 API 文档
00:00
查看工作流内部
源模板的只读预览。在 Cloud 中打开,即可查看节点并进行修改。
Loading the graph
Open full-size workflow preview- 作者
- ComfyUI
从代码中调用该模型
以下请求使用与体验区相同的预设图和设置。每次提交都可能开始一次付费运行;如果提交结果未知,请勿自动重试。
1 获取 API 密钥 ↗
What you need
- Runs on
- Comfy Cloud
- 密钥
- COMFY_API_KEY
- 你的文件
- 由代码根据链接上传
需要付费的 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({
"68": {
"class_type": "SaveVideo",
"inputs": {
"filename_prefix": "video/ltx2.3_ic_lora",
"format": "auto",
"format.codec": "auto",
"video": [
"129:122",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"709": {
"class_type": "RepeatImageBatch",
"inputs": {
"amount": [
"717",
1
],
"image": [
"724",
0
]
},
"_meta": {
"title": "Repeat Image Batch"
}
},
"712": {
"class_type": "EmptyImage",
"inputs": {
"batch_size": 1,
"color": 0,
"height": 512,
"width": 512
},
"_meta": {
"title": "Empty Image"
}
},
"715": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 5
},
"_meta": {
"title": "Int (duration)"
}
},
"716": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 25
},
"_meta": {
"title": "Int (fps)"
}
},
"717": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a * b",
"values.a": [
"715",
0
],
"values.b": [
"716",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"721": {
"class_type": "GetImageSize",
"inputs": {
"image": [
"722",
0
]
},
"_meta": {
"title": "Get Image Size"
}
},
"722": {
"class_type": "ResizeAndPadImage",
"inputs": {
"image": [
"709",
0
],
"interpolation": "lanczos",
"padding_color": "black",
"target_height": 720,
"target_width": 1280
},
"_meta": {
"title": "Resize And Pad Image (Size)"
}
},
"724": {
"class_type": "LoadImage",
"inputs": {
"image": "UPLOADED_image_FILENAME"
},
"_meta": {
"title": "Load Image"
}
},
"129:101": {
"class_type": "LTXVEmptyLatentAudio",
"inputs": {
"audio_vae": [
"129:126",
0
],
"batch_size": 1,
"frame_rate": [
"129:114",
0
],
"frames_number": [
"129:710",
2
]
},
"_meta": {
"title": "LTXV Empty Latent Audio"
}
},
"129:103": {
"class_type": "LTXAVTextEncoderLoader",
"inputs": {
"ckpt_name": "ltx-2.3-22b-distilled-fp8.safetensors",
"device": "default",
"text_encoder": "gemma_3_12B_it_fp4_mixed.safetensors"
},
"_meta": {
"title": "Load LTXV Audio Text Encoder"
}
},
"129:105": {
"class_type": "VAEDecodeTiled",
"inputs": {
"overlap": 64,
"samples": [
"129:106",
2
],
"temporal_overlap": 64,
"temporal_size": 4096,
"tile_size": 768,
"vae": [
"129:127",
2
]
},
"_meta": {
"title": "VAE Decode (Tiled)"
}
},
"129:106": {
"class_type": "LTXVCropGuides",
"inputs": {
"latent": [
"129:121",
0
],
"negative": [
"129:115",
1
],
"positive": [
"129:115",
0
]
},
"_meta": {
"title": "LTXVCropGuides"
}
},
"129:107": {
"class_type": "LTXVAudioVAEDecode",
"inputs": {
"audio_vae": [
"129:126",
0
],
"samples": [
"129:121",
1
]
},
"_meta": {
"title": "LTXV Audio VAE Decode"
}
},
"129:108": {
"class_type": "EmptyLTXVLatentVideo",
"inputs": {
"batch_size": 1,
"height": [
"129:98",
0
],
"length": [
"129:710",
2
],
"width": [
"129:113",
0
]
},
"_meta": {
"title": "EmptyLTXVLatentVideo"
}
},
"129:109": {
"class_type": "LTXVConditioning",
"inputs": {
"frame_rate": [
"129:123",
0
],
"negative": [
"129:112",
0
],
"positive": [
"129:128",
0
]
},
"_meta": {
"title": "LTXVConditioning"
}
},
"129:112": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"129:103",
0
],
"text": "blurry, out of focus, overexposed, underexposed, low contrast, washed out colors, excessive noise, grainy texture, poor lighting, flickering, motion blur, distorted proportions, unnatural skin tones, deformed facial features, asymmetrical face, missing facial features, extra limbs, disfigured hands, wrong hand count, artifacts around text, unreadable text on shirt or hat, incorrect lettering on cap (“PNTR”), incorrect t-shirt slogan (“JUST DO IT”), missing microphone, misplaced microphone, inconsistent perspective, camera shake, incorrect depth of field, background too sharp, background clutter, distracting reflections, harsh shadows, inconsistent lighting direction, color banding, cartoonish rendering, 3D CGI look, unrealistic materials, uncanny valley effect, incorrect ethnicity, wrong gender, exaggerated expressions, smiling, laughing, exaggerated sadness, wrong gaze direction, eyes looking at camera, mismatched lip sync, silent or muted audio, distorted voice, robotic voice, echo, background noise, off-sync audio, missing sniff sounds, incorrect dialogue, added dialogue, repetitive speech, jittery movement, awkward pauses, incorrect timing, unnatural transitions, inconsistent framing, tilted camera, missing door or shelves, missing shallow depth of field, flat lighting, inconsistent tone, cinematic oversaturation, stylized filters, or AI artifacts."
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"129:113": {
"class_type": "PrimitiveInt",
"inputs": {
"value": [
"721",
0
]
},
"_meta": {
"title": "Width"
}
},
"129:114": {
"class_type": "PrimitiveInt",
"inputs": {
"value": [
"716",
0
]
},
"_meta": {
"title": "Frame Rate(int)"
}
},
"129:115": {
"class_type": "LTXVAddGuide",
"inputs": {
"frame_idx": 0,
"iclora_parameters": [
"129:196",
0
],
"image": [
"722",
0
],
"latent": [
"129:198",
0
],
"negative": [
"129:109",
1
],
"positive": [
"129:109",
0
],
"strength": 1,
"vae": [
"129:127",
2
]
},
"_meta": {
"title": "LTXVAddGuide"
}
},
"129:119": {
"class_type": "LTXVConcatAVLatent",
"inputs": {
"audio_latent": [
"129:101",
0
],
"video_latent": [
"129:115",
2
]
},
"_meta": {
"title": "Concat AV Latent"
}
},
"129:121": {
"class_type": "LTXVSeparateAVLatent",
"inputs": {
"av_latent": [
"129:704",
0
]
},
"_meta": {
"title": "Separate AV Latent"
}
},
"129:122": {
"class_type": "CreateVideo",
"inputs": {
"audio": [
"129:107",
0
],
"bit_depth": 8,
"codec": "none",
"color_space": "sRGB",
"fps": [
"129:123",
0
],
"images": [
"129:105",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"129:123": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a",
"values.a": [
"129:114",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"129:126": {
"class_type": "LTXVAudioVAELoader",
"inputs": {
"ckpt_name": "ltx-2.3-22b-distilled-fp8.safetensors"
},
"_meta": {
"title": "Load LTXV Audio VAE"
}
},
"129:127": {
"class_type": "CheckpointLoaderSimple",
"inputs": {
"ckpt_name": "ltx-2.3-22b-distilled-fp8.safetensors"
},
"_meta": {
"title": "Load Checkpoint"
}
},
"129:128": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"129:103",
0
],
"text": [
"129:211",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"129:195": {
"class_type": "LoraLoaderModelOnly",
"inputs": {
"lora_name": "ltx-2.3-22b-ic-lora-ingredients-0.9.safetensors",
"model": [
"129:127",
0
],
"strength_model": 1
},
"_meta": {
"title": "Load LoRA"
}
},
"129:196": {
"class_type": "GetICLoRAParameters",
"inputs": {
"iclora_model": [
"129:195",
0
]
},
"_meta": {
"title": "Get IC-LoRA Parameters"
}
},
"129:198": {
"class_type": "LTXVImgToVideoInplace",
"inputs": {
"bypass": [
"129:711",
0
],
"image": [
"712",
0
],
"latent": [
"129:108",
0
],
"strength": 1,
"vae": [
"129:127",
2
]
},
"_meta": {
"title": "LTXVImgToVideoInplace"
}
},
"129:208": {
"class_type": "LoraLoader",
"inputs": {
"clip": [
"129:103",
0
],
"lora_name": "gemma-3-12b-it-abliterated_lora_rank64_bf16.safetensors",
"model": [
"129:127",
0
],
"strength_clip": 1,
"strength_model": 1
},
"_meta": {
"title": "Load LoRA (Model and CLIP)"
}
},
"129:209": {
"class_type": "TextGenerateLTX2Prompt",
"inputs": {
"clip": [
"129:208",
1
],
"image": [
"712",
0
],
"max_length": 2048,
"prompt": "### Reference Sheet Description Top left: an upright German Shepherd news anchor with brown, tan and black fur, round copper glasses, a multicolored patterned button-down shirt and charcoal trousers. Top right: a black studio microphone on a desk stand. Middle right: the same patterned shirt. Bottom: a news studio with a curved teal anchor desk and a large \"NEWS\" screen.\n\n### Target Description Medium shot, locked on the German Shepherd anchor seated behind the curved teal desk from the first frame, the \"NEWS\" screen behind him. His hands are German Shepherd paws covered in thick brown fur with short black claws, exactly like the reference sheet; there is no bare skin and no human fingers. His furry paws rest on the desk. He leans toward the microphone and says to camera: \"Good evening, and welcome to tonight's top stories.\" A slow, steady push-in. Only the dog anchor is in the scene; no people.",
"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"
}
},
"129:211": {
"class_type": "ComfySwitchNode",
"inputs": {
"on_false": "### Reference Sheet Description Top left: an upright German Shepherd news anchor with brown, tan and black fur, round copper glasses, a multicolored patterned button-down shirt and charcoal trousers. Top right: a black studio microphone on a desk stand. Middle right: the same patterned shirt. Bottom: a news studio with a curved teal anchor desk and a large \"NEWS\" screen.\n\n### Target Description Medium shot, locked on the German Shepherd anchor seated behind the curved teal desk from the first frame, the \"NEWS\" screen behind him. His hands are German Shepherd paws covered in thick brown fur with short black claws, exactly like the reference sheet; there is no bare skin and no human fingers. His furry paws rest on the desk. He leans toward the microphone and says to camera: \"Good evening, and welcome to tonight's top stories.\" A slow, steady push-in. Only the dog anchor is in the scene; no people.",
"on_true": [
"129:209",
0
],
"switch": [
"129:212",
0
]
},
"_meta": {
"title": "If/Else Switch"
}
},
"129:212": {
"class_type": "PrimitiveBoolean",
"inputs": {
"value": False
},
"_meta": {
"title": "Boolean (Enable Prompt Enhance)"
}
},
"129:704": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 1,
"latent_image": [
"129:119",
0
],
"model": [
"129:195",
0
],
"negative": [
"129:115",
1
],
"positive": [
"129:115",
0
],
"sampler_name": "euler_ancestral",
"scheduler": "linear_quadratic",
"seed": 288370150520961,
"steps": 8
},
"_meta": {
"title": "KSampler"
}
},
"129:710": {
"class_type": "GetImageSize",
"inputs": {
"image": [
"722",
0
]
},
"_meta": {
"title": "Get Image Size"
}
},
"129:711": {
"class_type": "PrimitiveBoolean",
"inputs": {
"value": True
},
"_meta": {
"title": "Boolean"
}
},
"129:98": {
"class_type": "PrimitiveInt",
"inputs": {
"value": [
"721",
1
]
},
"_meta": {
"title": "height"
}
}
})
workflow.set_input("724", "image", client.assets.from_url("https://cdn.jsdelivr.net/gh/Comfy-Org/workflow_templates@90c71fb78b3726392d010ff62a8e79e92d7296ad/input/german_shepherd_news_anchor_ref.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("68"):
output.to_file(output.name)