Turn an image into a video
Bring a still image to life by describing how it moves.
Download WorkflowTry in Cloud API documentation
00:00
Inside the workflow
A read-only preview of the source template. Open it in Cloud to explore the nodes and make changes.
Loading the graph
Open full-size workflow preview- Author
- ComfyUI
Call this model from your code
The request below uses the same prepared graph and settings as the Playground. Each submission can start a paid run; do not automatically retry a submission whose outcome is unknown.
1 Get API key ↗
What you need
- Runs on
- Comfy Cloud
- Key
- COMFY_API_KEY
- Your files
- Uploaded by the code from their urls
Needs a paid Cloud plan and credits.
# 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({
"75": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "video/LTX_2.3_i2v",
"format": "auto",
"format.codec": "auto",
"video": [
"320:310",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"269": {
"class_type": "LoadImage",
"inputs": {
"image": "UPLOADED_image_FILENAME"
},
"_meta": {
"title": "Load Image"
}
},
"320:276": {
"class_type": "RandomNoise",
"inputs": {
"noise_seed": 42
},
"_meta": {
"title": "RandomNoise"
}
},
"320:277": {
"class_type": "RandomNoise",
"inputs": {
"noise_seed": 60540193790228
},
"_meta": {
"title": "RandomNoise"
}
},
"320:278": {
"class_type": "LTXVConcatAVLatent",
"inputs": {
"audio_latent": [
"320:307",
1
],
"video_latent": [
"320:288",
0
]
},
"_meta": {
"title": "Concat AV Latent"
}
},
"320:279": {
"class_type": "LTXVAudioVAELoader",
"inputs": {
"ckpt_name": "ltx-2.3-22b-dev-fp8.safetensors"
},
"_meta": {
"title": "Load LTXV Audio VAE"
}
},
"320:280": {
"class_type": "KSamplerSelect",
"inputs": {
"sampler_name": "euler"
},
"_meta": {
"title": "KSamplerSelect"
}
},
"320:281": {
"class_type": "ManualSigmas",
"inputs": {
"sigmas": "0.85, 0.7250, 0.4219, 0.0"
},
"_meta": {
"title": "ManualSigmas"
}
},
"320:282": {
"class_type": "CFGGuider",
"inputs": {
"cfg": 1,
"model": [
"320:285",
0
],
"negative": [
"320:284",
1
],
"positive": [
"320:284",
0
]
},
"_meta": {
"title": "CFG Guider"
}
},
"320:283": {
"class_type": "SamplerCustomAdvanced",
"inputs": {
"guider": [
"320:314",
0
],
"latent_image": [
"320:318",
0
],
"noise": [
"320:277",
0
],
"sampler": [
"320:291",
0
],
"sigmas": [
"320:306",
0
]
},
"_meta": {
"title": "SamplerCustomAdvanced"
}
},
"320:284": {
"class_type": "LTXVCropGuides",
"inputs": {
"latent": [
"320:307",
0
],
"negative": [
"320:304",
1
],
"positive": [
"320:304",
0
]
},
"_meta": {
"title": "LTXVCropGuides"
}
},
"320:285": {
"class_type": "LoraLoaderModelOnly",
"inputs": {
"lora_name": "ltx_2.3_22b_distilled_1.1_lora_dynamic_fro09_avg_rank_111_bf16.safetensors",
"model": [
"320:316",
0
],
"strength_model": 0.5
},
"_meta": {
"title": "Load LoRA"
}
},
"320:287": {
"class_type": "LTXVLatentUpsampler",
"inputs": {
"samples": [
"320:307",
0
],
"upscale_model": [
"320:311",
0
],
"vae": [
"320:316",
2
]
},
"_meta": {
"title": "LTXVLatentUpsampler"
}
},
"320:288": {
"class_type": "LTXVImgToVideoInplace",
"inputs": {
"bypass": [
"320:302",
0
],
"image": [
"320:289",
0
],
"latent": [
"320:287",
0
],
"strength": 1,
"vae": [
"320:316",
2
]
},
"_meta": {
"title": "LTXVImgToVideoInplace"
}
},
"320:289": {
"class_type": "LTXVPreprocess",
"inputs": {
"image": [
"320:330",
0
],
"img_compression": 18
},
"_meta": {
"title": "LTXV Preprocess"
}
},
"320:290": {
"class_type": "ResizeImageMaskNode",
"inputs": {
"input": [
"269",
0
],
"resize_type": "scale dimensions",
"resize_type.crop": "center",
"resize_type.height": [
"320:299",
0
],
"resize_type.width": [
"320:312",
0
],
"scale_method": "lanczos"
},
"_meta": {
"title": "Resize Image/Mask"
}
},
"320:291": {
"class_type": "KSamplerSelect",
"inputs": {
"sampler_name": "euler"
},
"_meta": {
"title": "KSamplerSelect"
}
},
"320:292": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a/2",
"values.a": [
"320:312",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"320:294": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a/2",
"values.a": [
"320:299",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"320:295": {
"class_type": "EmptyLTXVLatentVideo",
"inputs": {
"batch_size": 1,
"height": [
"320:294",
1
],
"length": [
"320:323",
1
],
"width": [
"320:292",
1
]
},
"_meta": {
"title": "Empty LTXV Latent Video"
}
},
"320:296": {
"class_type": "LTXVImgToVideoInplace",
"inputs": {
"bypass": [
"320:302",
0
],
"image": [
"320:289",
0
],
"latent": [
"320:295",
0
],
"strength": 0.7,
"vae": [
"320:316",
2
]
},
"_meta": {
"title": "LTXVImgToVideoInplace"
}
},
"320:297": {
"class_type": "LTXVAudioVAEDecode",
"inputs": {
"audio_vae": [
"320:279",
0
],
"samples": [
"320:309",
1
]
},
"_meta": {
"title": "LTXV Audio VAE Decode"
}
},
"320:298": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a",
"values.a": [
"320:300",
0
]
},
"_meta": {
"title": "Math Expression"
}
},
"320:299": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 720
},
"_meta": {
"title": "Height"
}
},
"320:300": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 25
},
"_meta": {
"title": "Frame Rate"
}
},
"320:301": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 5
},
"_meta": {
"title": "Duration"
}
},
"320:302": {
"class_type": "PrimitiveBoolean",
"inputs": {
"value": False
},
"_meta": {
"title": "Switch to Text to Video?"
}
},
"320:303": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"320:317",
0
],
"text": [
"320:327",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"320:304": {
"class_type": "LTXVConditioning",
"inputs": {
"frame_rate": [
"320:298",
0
],
"negative": [
"320:313",
0
],
"positive": [
"320:303",
0
]
},
"_meta": {
"title": "LTXVConditioning"
}
},
"320:305": {
"class_type": "LTXVEmptyLatentAudio",
"inputs": {
"audio_vae": [
"320:279",
0
],
"batch_size": 1,
"frame_rate": [
"320:298",
1
],
"frames_number": [
"320:323",
1
]
},
"_meta": {
"title": "Empty LTXV Latent Audio"
}
},
"320:306": {
"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"
}
},
"320:307": {
"class_type": "LTXVSeparateAVLatent",
"inputs": {
"av_latent": [
"320:283",
0
]
},
"_meta": {
"title": "Separate AV Latent"
}
},
"320:308": {
"class_type": "SamplerCustomAdvanced",
"inputs": {
"guider": [
"320:282",
0
],
"latent_image": [
"320:278",
0
],
"noise": [
"320:276",
0
],
"sampler": [
"320:280",
0
],
"sigmas": [
"320:281",
0
]
},
"_meta": {
"title": "SamplerCustomAdvanced"
}
},
"320:309": {
"class_type": "LTXVSeparateAVLatent",
"inputs": {
"av_latent": [
"320:308",
0
]
},
"_meta": {
"title": "Separate AV Latent"
}
},
"320:310": {
"class_type": "CreateVideo",
"inputs": {
"audio": [
"320:297",
0
],
"bit_depth": 8,
"codec": "none",
"color_space": "sRGB",
"fps": [
"320:298",
0
],
"images": [
"320:315",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"320:311": {
"class_type": "LatentUpscaleModelLoader",
"inputs": {
"model_name": "ltx-2.3-spatial-upscaler-x2-1.1.safetensors"
},
"_meta": {
"title": "Load Latent Upscale Model"
}
},
"320:312": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 1280
},
"_meta": {
"title": "Width"
}
},
"320:313": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"320:317",
0
],
"text": "pc game, console game, video game, cartoon, childish, ugly"
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"320:314": {
"class_type": "CFGGuider",
"inputs": {
"cfg": 1,
"model": [
"320:285",
0
],
"negative": [
"320:304",
1
],
"positive": [
"320:304",
0
]
},
"_meta": {
"title": "CFG Guider"
}
},
"320:315": {
"class_type": "VAEDecodeTiled",
"inputs": {
"overlap": 64,
"samples": [
"320:309",
0
],
"temporal_overlap": 4,
"temporal_size": 4096,
"tile_size": 768,
"vae": [
"320:316",
2
]
},
"_meta": {
"title": "VAE Decode (Tiled)"
}
},
"320:316": {
"class_type": "CheckpointLoaderSimple",
"inputs": {
"ckpt_name": "ltx-2.3-22b-dev-fp8.safetensors"
},
"_meta": {
"title": "Load Checkpoint"
}
},
"320:317": {
"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"
}
},
"320:318": {
"class_type": "LTXVConcatAVLatent",
"inputs": {
"audio_latent": [
"320:305",
0
],
"video_latent": [
"320:296",
0
]
},
"_meta": {
"title": "Concat AV Latent"
}
},
"320:319": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "Egyptian royal in blue-and-gold headdress and high collar, white dress with golden embroidery and armbands, desert, robot soldiers in formation left and right. She walks steadily forward, head held level and gaze fixed ahead—no dipping or lowering of the head. The camera performs a single, smooth push-in only: starting in a wider shot of her, the robots, and the desert, it moves steadily forward until she is in a medium or medium-close frame, then holds. She stops, posture and head still upright, and says: “The old gods are silent. I am not.” Robot soldiers shift or march in place; sand and fabric move with the wind. No pull-back; the only camera move is the continuous push-in."
},
"_meta": {
"title": "Prompt"
}
},
"320:323": {
"class_type": "ComfyMathExpression",
"inputs": {
"expression": "a * b + 1",
"values.a": [
"320:301",
0
],
"values.b": [
"320:300",
0
]
},
"_meta": {
"title": "Math Expression (length)"
}
},
"320:324": {
"class_type": "LoraLoader",
"inputs": {
"clip": [
"320:317",
0
],
"lora_name": "gemma-3-12b-it-abliterated_lora_rank64_bf16.safetensors",
"model": [
"320:285",
0
],
"strength_clip": 1,
"strength_model": 1
},
"_meta": {
"title": "Load LoRA (Model and CLIP)"
}
},
"320:325": {
"class_type": "TextGenerateLTX2Prompt",
"inputs": {
"clip": [
"320:324",
1
],
"image": [
"320:330",
0
],
"max_length": 2048,
"mtp": "auto",
"prompt": [
"320: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"
}
},
"320:326": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"320:327",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"320:327": {
"class_type": "ComfySwitchNode",
"inputs": {
"on_false": [
"320:319",
0
],
"on_true": [
"320:325",
0
],
"switch": [
"320:328",
0
]
},
"_meta": {
"title": "If/Else Switch"
}
},
"320:328": {
"class_type": "PrimitiveBoolean",
"inputs": {
"value": False
},
"_meta": {
"title": "Boolean (Enable Prompt Enhance)"
}
},
"320:330": {
"class_type": "ResizeImageMaskNode",
"inputs": {
"input": [
"320:290",
0
],
"resize_type": "scale longer dimension",
"resize_type.longer_size": 1536,
"scale_method": "area"
},
"_meta": {
"title": "Resize Image/Mask"
}
}
})
workflow.set_input("269", "image", client.assets.from_url("https://cdn.jsdelivr.net/gh/Comfy-Org/workflow_templates@90c71fb78b3726392d010ff62a8e79e92d7296ad/input/egyptian_queen.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("75"):
output.to_file(output.name)