AIrt MAchIne
Upload any image to generate a unique, looping AI video. The workflow uses an LLM to create five prompts, produces images and video clips, and stitches them into a final seamless loop.
简介
The AIrt MAchIne workflow in ComfyUI is designed to transform a static image into a dynamic, looping AI-generated video. This process begins with the user uploading an image, which serves as the foundation for the video. The workflow utilizes a language model to generate five unique prompts based on the initial image, ensuring that each video iteration is distinct and creative. These prompts guide the generation of images and short video clips, which are then seamlessly stitched together to form a continuous loop.
This is achieved through a series of nodes, including the ImageResizeKJv2 for resizing images, and the VHS_VideoCombine for merging clips into a cohesive video.
Technically, the workflow leverages models like Wan2.2 and Z-Image-Turbo, which are known for their efficient image and video generation capabilities. Custom nodes such as comfyui-kjnodes and comfyui-videohelpersuite are employed to enhance the workflow's functionality, allowing for sophisticated video editing and prompt generation. The integration of these components makes the workflow particularly useful for artists and content creators looking to produce unique, AI-driven video content from static images.
Additionally, users have the option to bypass certain nodes, such as the 'Save frames' and 'Save videos' groups, if they only wish to output the final combined video, offering flexibility in the workflow's application.
你需要提供
- 正在读取工作流
在 ComfyUI 中运行。 此工作流无法在本页面运行。你可以在 Comfy Cloud 中打开(已预先加载所需内容),或下载后在自己的 ComfyUI 中使用。
在 Cloud 中试用查看工作流内部
节点图的只读预览。在 Comfy Cloud 中打开或下载后即可编辑节点。
Loading the graph
Open full-size workflow preview需要自定义节点
- 正在读取工作流
通过代码使用此工作流
尽可能根据工作流图和输入自动生成代码,否则显示已保存的示例。运行代码可能产生费用,请先核对凭据和端点。
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({
"5": {
"class_type": "ImageResizeKJv2",
"inputs": {
"crop_position": "center",
"device": "cpu",
"divisible_by": 1,
"height": [
"163",
0
],
"image": [
"99:77",
0
],
"keep_proportion": "crop",
"pad_color": "0, 0, 0",
"upscale_method": "lanczos",
"width": [
"162",
0
]
},
"_meta": {
"title": "Resize Image v2"
}
},
"9": {
"class_type": "ImageResizeKJv2",
"inputs": {
"crop_position": "center",
"device": "cpu",
"divisible_by": 1,
"height": [
"163",
0
],
"image": [
"103:241",
0
],
"keep_proportion": "crop",
"pad_color": "0, 0, 0",
"upscale_method": "lanczos",
"width": [
"162",
0
]
},
"_meta": {
"title": "Resize Image v2"
}
},
"10": {
"class_type": "SaveVideo",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Clips/MJM_AIrtMAchIne_Vid1",
"format": "auto",
"format.codec": "auto",
"video": [
"204",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"14": {
"class_type": "ImageResizeKJv2",
"inputs": {
"crop_position": "center",
"device": "cpu",
"divisible_by": 1,
"height": [
"163",
0
],
"image": [
"107:252",
0
],
"keep_proportion": "crop",
"pad_color": "0, 0, 0",
"upscale_method": "lanczos",
"width": [
"162",
0
]
},
"_meta": {
"title": "Resize Image v2"
}
},
"16": {
"class_type": "SaveVideo",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Clips/MJM_AIrtMAchIne_Vid2",
"format": "auto",
"format.codec": "auto",
"video": [
"220",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"20": {
"class_type": "ImageResizeKJv2",
"inputs": {
"crop_position": "center",
"device": "cpu",
"divisible_by": 1,
"height": [
"163",
0
],
"image": [
"111:267",
0
],
"keep_proportion": "crop",
"pad_color": "0, 0, 0",
"upscale_method": "lanczos",
"width": [
"162",
0
]
},
"_meta": {
"title": "Resize Image v2"
}
},
"22": {
"class_type": "SaveVideo",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Clips/MJM_AIrtMAchIne_Vid3",
"format": "auto",
"format.codec": "auto",
"video": [
"222",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"25": {
"class_type": "ImageResizeKJv2",
"inputs": {
"crop_position": "center",
"device": "cpu",
"divisible_by": 1,
"height": [
"163",
0
],
"image": [
"115:277",
0
],
"keep_proportion": "crop",
"pad_color": "0, 0, 0",
"upscale_method": "lanczos",
"width": [
"162",
0
]
},
"_meta": {
"title": "Resize Image v2"
}
},
"27": {
"class_type": "SaveVideo",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Clips/MJM_AIrtMAchIne_Vid4",
"format": "auto",
"format.codec": "auto",
"video": [
"226",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"33": {
"class_type": "SaveVideo",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Clips/MJM_AIrtMAchIne_Vid5",
"format": "auto",
"format.codec": "auto",
"video": [
"227",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"94": {
"class_type": "LoadImage",
"inputs": {
"image": "AIrt_MAchIne_init.png"
},
"_meta": {
"title": "Load Image"
}
},
"100": {
"class_type": "PreviewImage",
"inputs": {
"images": [
"99:73",
0
]
},
"_meta": {
"title": "Preview Image"
}
},
"104": {
"class_type": "PreviewImage",
"inputs": {
"images": [
"103:240",
0
]
},
"_meta": {
"title": "Preview Image"
}
},
"108": {
"class_type": "PreviewImage",
"inputs": {
"images": [
"107:255",
0
]
},
"_meta": {
"title": "Preview Image"
}
},
"112": {
"class_type": "PreviewImage",
"inputs": {
"images": [
"111:264",
0
]
},
"_meta": {
"title": "Preview Image"
}
},
"116": {
"class_type": "PreviewImage",
"inputs": {
"images": [
"115:276",
0
]
},
"_meta": {
"title": "Preview Image"
}
},
"126": {
"class_type": "BatchImagesNode",
"inputs": {
"images.image0": [
"217:203",
0
],
"images.image1": [
"219:284",
0
],
"images.image2": [
"221:294",
0
],
"images.image3": [
"225:304",
0
],
"images.image4": [
"228:314",
0
]
},
"_meta": {
"title": "Batch Images"
}
},
"131": {
"class_type": "VHS_VideoCombine",
"inputs": {
"crf": 14,
"filename_prefix": "MJM/AIrt MAchIne/Final/MJM_AIrtMAchIne",
"format": "video/h264-mp4",
"frame_rate": [
"230",
0
],
"images": [
"126",
0
],
"loop_count": 0,
"pingpong": False,
"pix_fmt": "yuv420p",
"save_metadata": True,
"save_output": True,
"trim_to_audio": False
},
"_meta": {
"title": "Video Combine 🎥🅥🅗🅢"
}
},
"152": {
"class_type": "ImpactStringSelector",
"inputs": {
"multiline": False,
"select": 0,
"strings": [
"323",
0
]
},
"_meta": {
"title": "String Selector"
}
},
"153": {
"class_type": "ImpactStringSelector",
"inputs": {
"multiline": False,
"select": 1,
"strings": [
"323",
0
]
},
"_meta": {
"title": "String Selector"
}
},
"154": {
"class_type": "ImpactStringSelector",
"inputs": {
"multiline": False,
"select": 2,
"strings": [
"323",
0
]
},
"_meta": {
"title": "String Selector"
}
},
"155": {
"class_type": "ImpactStringSelector",
"inputs": {
"multiline": False,
"select": 3,
"strings": [
"323",
0
]
},
"_meta": {
"title": "String Selector"
}
},
"156": {
"class_type": "ImpactStringSelector",
"inputs": {
"multiline": False,
"select": 4,
"strings": [
"323",
0
]
},
"_meta": {
"title": "String Selector"
}
},
"161": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Frames/MJM_AIrtMAchIne_Im1",
"images": [
"5",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"162": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 720
},
"_meta": {
"title": "Width"
}
},
"163": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 720
},
"_meta": {
"title": "Height"
}
},
"164": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Frames/MJM_AIrtMAchIne_Im2",
"images": [
"9",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"165": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Frames/MJM_AIrtMAchIne_Im3",
"images": [
"14",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"166": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Frames/MJM_AIrtMAchIne_Im4",
"images": [
"20",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"167": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "MJM/AIrt MAchIne/Frames/MJM_AIrtMAchIne_Im5",
"images": [
"25",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"168": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"323",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"169": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"152",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"171": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"153",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"172": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"154",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"173": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"155",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"174": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"156",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"175": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"217:324",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"177": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"219:325",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"178": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"221:326",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"179": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"225:327",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"180": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"228:328",
0
]
},
"_meta": {
"title": "Preview as Text"
}
},
"186": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "z_image_turbo_bf16.safetensors",
"weight_dtype": "default"
},
"_meta": {
"title": "Load Diffusion Model - Z-Image Turbo"
}
},
"187": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "qwen_3_4b.safetensors",
"device": "default",
"type": "lumina2"
},
"_meta": {
"title": "Load CLIP - Z-Image Turbo"
}
},
"188": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "ae.safetensors"
},
"_meta": {
"title": "Load VAE - Z-Image Turbo"
}
},
"194": {
"class_type": "UpscaleModelLoader",
"inputs": {
"model_name": "4x-UltraSharp.safetensors"
},
"_meta": {
"title": "Load Upscale Model - For Z-Image Turbo"
}
},
"195": {
"class_type": "CLIPLoader",
"inputs": {
"clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors",
"device": "default",
"type": "wan"
},
"_meta": {
"title": "Load CLIP - Wan 2.2"
}
},
"198": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors",
"weight_dtype": "default"
},
"_meta": {
"title": "Load Diffusion Model - Wan 2.2"
}
},
"199": {
"class_type": "UNETLoader",
"inputs": {
"unet_name": "wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors",
"weight_dtype": "default"
},
"_meta": {
"title": "Load Diffusion Model - Wan 2.2"
}
},
"201": {
"class_type": "VAELoader",
"inputs": {
"vae_name": "wan_2.1_vae.safetensors"
},
"_meta": {
"title": "Load VAE - Wan 2.2"
}
},
"204": {
"class_type": "CreateVideo",
"inputs": {
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"230",
0
],
"images": [
"217:203",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"220": {
"class_type": "CreateVideo",
"inputs": {
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"230",
0
],
"images": [
"219:284",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"222": {
"class_type": "CreateVideo",
"inputs": {
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"230",
0
],
"images": [
"221:294",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"226": {
"class_type": "CreateVideo",
"inputs": {
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"230",
0
],
"images": [
"225:304",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"227": {
"class_type": "CreateVideo",
"inputs": {
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"230",
0
],
"images": [
"228:314",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"230": {
"class_type": "PrimitiveFloat",
"inputs": {
"value": 24
},
"_meta": {
"title": "FPS"
}
},
"231": {
"class_type": "LoraLoaderModelOnly",
"inputs": {
"lora_name": "wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step_1022.safetensors",
"model": [
"198",
0
],
"strength_model": 1.0000000000000002
},
"_meta": {
"title": "Load LoRA"
}
},
"232": {
"class_type": "LoraLoaderModelOnly",
"inputs": {
"lora_name": "wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step_1022.safetensors",
"model": [
"199",
0
],
"strength_model": 1.0000000000000002
},
"_meta": {
"title": "Load LoRA"
}
},
"323": {
"class_type": "AILab_QwenVL",
"inputs": {
"attention_mode": "auto",
"custom_prompt": "write 5 prompts based on this image, I will use these in a text 2 image model. The prompts should be different, be creative. Only use the image as inspiration.\n\nI want only the prompts and nothing else. Each prompt on its own line.\n\nNo empty lines in-between the prompts:\nPrompt 1\nPrompt 2\nPrompt 3\nPrompt 4\nPrompt 5",
"image": [
"94",
0
],
"keep_model_loaded": True,
"max_tokens": 1024,
"model_name": "Qwen3-VL-8B-Instruct",
"preset_prompt": "🖼️ Detailed Description",
"quantization": "None (FP16)",
"seed": 2922644121
},
"_meta": {
"title": "QwenVL"
}
},
"103:236": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 1,
"latent_image": [
"103:237",
0
],
"model": [
"103:238",
0
],
"negative": [
"103:246",
0
],
"positive": [
"103:244",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 459413941250020,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"103:237": {
"class_type": "EmptySD3LatentImage",
"inputs": {
"batch_size": 1,
"height": [
"163",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"103:238": {
"class_type": "ModelSamplingAuraFlow",
"inputs": {
"model": [
"186",
0
],
"sampling": "flow",
"shift": 3
},
"_meta": {
"title": "ModelSamplingAuraFlow"
}
},
"103:240": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"103:236",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"103:241": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"103:242",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"103:242": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 0.2,
"latent_image": [
"103:243",
0
],
"model": [
"103:238",
0
],
"negative": [
"103:246",
0
],
"positive": [
"103:244",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 974,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"103:243": {
"class_type": "VAEEncode",
"inputs": {
"pixels": [
"103:98",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Encode"
}
},
"103:244": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"187",
0
],
"text": [
"153",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"103:246": {
"class_type": "ConditioningZeroOut",
"inputs": {
"conditioning": [
"103:244",
0
]
},
"_meta": {
"title": "Conditioning Zero Out"
}
},
"103:98": {
"class_type": "ImageUpscaleWithModelBatched",
"inputs": {
"downscale_method": "bicubic",
"downscale_ratio": 0.5,
"images": [
"103:240",
0
],
"per_batch": 1,
"precision": "bfloat16",
"upscale_model": [
"194",
0
]
},
"_meta": {
"title": "Image Upscale With Model Batched"
}
},
"107:247": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 1,
"latent_image": [
"107:248",
0
],
"model": [
"107:249",
0
],
"negative": [
"107:258",
0
],
"positive": [
"107:256",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 417454711451413,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"107:248": {
"class_type": "EmptySD3LatentImage",
"inputs": {
"batch_size": 1,
"height": [
"163",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"107:249": {
"class_type": "ModelSamplingAuraFlow",
"inputs": {
"model": [
"186",
0
],
"sampling": "flow",
"shift": 3
},
"_meta": {
"title": "ModelSamplingAuraFlow"
}
},
"107:251": {
"class_type": "ImageUpscaleWithModelBatched",
"inputs": {
"downscale_method": "bicubic",
"downscale_ratio": 0.5,
"images": [
"107:255",
0
],
"per_batch": 1,
"precision": "bfloat16",
"upscale_model": [
"194",
0
]
},
"_meta": {
"title": "Image Upscale With Model Batched"
}
},
"107:252": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"107:253",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"107:253": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 0.2,
"latent_image": [
"107:254",
0
],
"model": [
"107:249",
0
],
"negative": [
"107:258",
0
],
"positive": [
"107:256",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 974,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"107:254": {
"class_type": "VAEEncode",
"inputs": {
"pixels": [
"107:251",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Encode"
}
},
"107:255": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"107:247",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"107:256": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"187",
0
],
"text": [
"154",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"107:258": {
"class_type": "ConditioningZeroOut",
"inputs": {
"conditioning": [
"107:256",
0
]
},
"_meta": {
"title": "Conditioning Zero Out"
}
},
"111:259": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 1,
"latent_image": [
"111:260",
0
],
"model": [
"111:261",
0
],
"negative": [
"111:270",
0
],
"positive": [
"111:269",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 392438948527137,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"111:260": {
"class_type": "EmptySD3LatentImage",
"inputs": {
"batch_size": 1,
"height": [
"163",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"111:261": {
"class_type": "ModelSamplingAuraFlow",
"inputs": {
"model": [
"186",
0
],
"sampling": "flow",
"shift": 3
},
"_meta": {
"title": "ModelSamplingAuraFlow"
}
},
"111:264": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"111:259",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"111:265": {
"class_type": "VAEEncode",
"inputs": {
"pixels": [
"111:268",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Encode"
}
},
"111:266": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 0.2,
"latent_image": [
"111:265",
0
],
"model": [
"111:261",
0
],
"negative": [
"111:270",
0
],
"positive": [
"111:269",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 974,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"111:267": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"111:266",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"111:268": {
"class_type": "ImageUpscaleWithModelBatched",
"inputs": {
"downscale_method": "bicubic",
"downscale_ratio": 0.5,
"images": [
"111:264",
0
],
"per_batch": 1,
"precision": "bfloat16",
"upscale_model": [
"194",
0
]
},
"_meta": {
"title": "Image Upscale With Model Batched"
}
},
"111:269": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"187",
0
],
"text": [
"155",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"111:270": {
"class_type": "ConditioningZeroOut",
"inputs": {
"conditioning": [
"111:269",
0
]
},
"_meta": {
"title": "Conditioning Zero Out"
}
},
"115:271": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 1,
"latent_image": [
"115:272",
0
],
"model": [
"115:273",
0
],
"negative": [
"115:282",
0
],
"positive": [
"115:281",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 123941752424153,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"115:272": {
"class_type": "EmptySD3LatentImage",
"inputs": {
"batch_size": 1,
"height": [
"163",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"115:273": {
"class_type": "ModelSamplingAuraFlow",
"inputs": {
"model": [
"186",
0
],
"sampling": "flow",
"shift": 3
},
"_meta": {
"title": "ModelSamplingAuraFlow"
}
},
"115:276": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"115:271",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"115:277": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"115:278",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"115:278": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 0.2,
"latent_image": [
"115:279",
0
],
"model": [
"115:273",
0
],
"negative": [
"115:282",
0
],
"positive": [
"115:281",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 974,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"115:279": {
"class_type": "VAEEncode",
"inputs": {
"pixels": [
"115:280",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Encode"
}
},
"115:280": {
"class_type": "ImageUpscaleWithModelBatched",
"inputs": {
"downscale_method": "bicubic",
"downscale_ratio": 0.5,
"images": [
"115:276",
0
],
"per_batch": 1,
"precision": "bfloat16",
"upscale_model": [
"194",
0
]
},
"_meta": {
"title": "Image Upscale With Model Batched"
}
},
"115:281": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"187",
0
],
"text": [
"156",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"115:282": {
"class_type": "ConditioningZeroOut",
"inputs": {
"conditioning": [
"115:281",
0
]
},
"_meta": {
"title": "Conditioning Zero Out"
}
},
"217:196": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"231",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"217:197": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"232",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"217:200": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
},
"_meta": {
"title": "CLIP Text Encode (Negative Prompt)"
}
},
"217:202": {
"class_type": "WanFirstLastFrameToVideo",
"inputs": {
"batch_size": 1,
"end_image": [
"9",
0
],
"height": [
"163",
0
],
"length": 81,
"negative": [
"217:200",
0
],
"positive": [
"217:206",
0
],
"start_image": [
"5",
0
],
"vae": [
"201",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "WanFirstLastFrameToVideo"
}
},
"217:203": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"217:212",
0
],
"vae": [
"201",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"217:206": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": [
"217:324",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
},
"217:211": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "enable",
"cfg": 1,
"end_at_step": 2,
"latent_image": [
"217:202",
2
],
"model": [
"217:196",
0
],
"negative": [
"217:202",
1
],
"noise_seed": 1036176414007226,
"positive": [
"217:202",
0
],
"return_with_leftover_noise": "enable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 0,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"217:212": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "disable",
"cfg": 1,
"end_at_step": 10000,
"latent_image": [
"217:211",
0
],
"model": [
"217:197",
0
],
"negative": [
"217:202",
1
],
"noise_seed": 0,
"positive": [
"217:202",
0
],
"return_with_leftover_noise": "disable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 2,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"217:215": {
"class_type": "ImageBatchMulti",
"inputs": {
"image_1": [
"5",
0
],
"image_2": [
"9",
0
],
"inputcount": 2
},
"_meta": {
"title": "Image Batch Multi"
}
},
"217:324": {
"class_type": "AILab_QwenVL",
"inputs": {
"attention_mode": "auto",
"custom_prompt": "Write a wild prompt for a video model that will take first and last frame. Maximize motion and go crazy. Give me the prompt and nothing else.",
"image": [
"217:215",
0
],
"keep_model_loaded": False,
"max_tokens": 1024,
"model_name": "Qwen3-VL-8B-Instruct",
"preset_prompt": "🖼️ Detailed Description",
"quantization": "None (FP16)",
"seed": 826063256
},
"_meta": {
"title": "QwenVL"
}
},
"219:283": {
"class_type": "WanFirstLastFrameToVideo",
"inputs": {
"batch_size": 1,
"end_image": [
"14",
0
],
"height": [
"163",
0
],
"length": 81,
"negative": [
"219:287",
0
],
"positive": [
"219:286",
0
],
"start_image": [
"9",
0
],
"vae": [
"201",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "WanFirstLastFrameToVideo"
}
},
"219:284": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"219:290",
0
],
"vae": [
"201",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"219:285": {
"class_type": "ImageBatchMulti",
"inputs": {
"image_1": [
"9",
0
],
"image_2": [
"14",
0
],
"inputcount": 2
},
"_meta": {
"title": "Image Batch Multi"
}
},
"219:286": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": [
"219:325",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
},
"219:287": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
},
"_meta": {
"title": "CLIP Text Encode (Negative Prompt)"
}
},
"219:289": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "enable",
"cfg": 1,
"end_at_step": 2,
"latent_image": [
"219:283",
2
],
"model": [
"219:291",
0
],
"negative": [
"219:283",
1
],
"noise_seed": 1044595221991389,
"positive": [
"219:283",
0
],
"return_with_leftover_noise": "enable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 0,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"219:290": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "disable",
"cfg": 1,
"end_at_step": 10000,
"latent_image": [
"219:289",
0
],
"model": [
"219:292",
0
],
"negative": [
"219:283",
1
],
"noise_seed": 0,
"positive": [
"219:283",
0
],
"return_with_leftover_noise": "disable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 2,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"219:291": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"231",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"219:292": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"232",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"219:325": {
"class_type": "AILab_QwenVL",
"inputs": {
"attention_mode": "auto",
"custom_prompt": "Write a wild prompt for a video model that will take first and last frame. Maximize motion and go crazy. Give me the prompt and nothing else.",
"image": [
"219:285",
0
],
"keep_model_loaded": False,
"max_tokens": 1024,
"model_name": "Qwen3-VL-8B-Instruct",
"preset_prompt": "🖼️ Detailed Description",
"quantization": "None (FP16)",
"seed": 1738501745
},
"_meta": {
"title": "QwenVL"
}
},
"221:293": {
"class_type": "WanFirstLastFrameToVideo",
"inputs": {
"batch_size": 1,
"end_image": [
"20",
0
],
"height": [
"163",
0
],
"length": 81,
"negative": [
"221:297",
0
],
"positive": [
"221:296",
0
],
"start_image": [
"14",
0
],
"vae": [
"201",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "WanFirstLastFrameToVideo"
}
},
"221:294": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"221:299",
0
],
"vae": [
"201",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"221:295": {
"class_type": "ImageBatchMulti",
"inputs": {
"image_1": [
"14",
0
],
"image_2": [
"20",
0
],
"inputcount": 2
},
"_meta": {
"title": "Image Batch Multi"
}
},
"221:296": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": [
"221:326",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
},
"221:297": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
},
"_meta": {
"title": "CLIP Text Encode (Negative Prompt)"
}
},
"221:299": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "disable",
"cfg": 1,
"end_at_step": 10000,
"latent_image": [
"221:300",
0
],
"model": [
"221:302",
0
],
"negative": [
"221:293",
1
],
"noise_seed": 0,
"positive": [
"221:293",
0
],
"return_with_leftover_noise": "disable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 2,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"221:300": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "enable",
"cfg": 1,
"end_at_step": 2,
"latent_image": [
"221:293",
2
],
"model": [
"221:301",
0
],
"negative": [
"221:293",
1
],
"noise_seed": 870123508735268,
"positive": [
"221:293",
0
],
"return_with_leftover_noise": "enable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 0,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"221:301": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"231",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"221:302": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"232",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"221:326": {
"class_type": "AILab_QwenVL",
"inputs": {
"attention_mode": "auto",
"custom_prompt": "Write a wild prompt for a video model that will take first and last frame. Maximize motion and go crazy. Give me the prompt and nothing else.",
"image": [
"221:295",
0
],
"keep_model_loaded": False,
"max_tokens": 1024,
"model_name": "Qwen3-VL-8B-Instruct",
"preset_prompt": "🖼️ Detailed Description",
"quantization": "None (FP16)",
"seed": 1736034325
},
"_meta": {
"title": "QwenVL"
}
},
"225:303": {
"class_type": "WanFirstLastFrameToVideo",
"inputs": {
"batch_size": 1,
"end_image": [
"25",
0
],
"height": [
"163",
0
],
"length": 81,
"negative": [
"225:307",
0
],
"positive": [
"225:306",
0
],
"start_image": [
"20",
0
],
"vae": [
"201",
0
],
"width": [
"163",
0
]
},
"_meta": {
"title": "WanFirstLastFrameToVideo"
}
},
"225:304": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"225:309",
0
],
"vae": [
"201",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"225:305": {
"class_type": "ImageBatchMulti",
"inputs": {
"image_1": [
"20",
0
],
"image_2": [
"25",
0
],
"inputcount": 2
},
"_meta": {
"title": "Image Batch Multi"
}
},
"225:306": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": [
"225:327",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
},
"225:307": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
},
"_meta": {
"title": "CLIP Text Encode (Negative Prompt)"
}
},
"225:309": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "disable",
"cfg": 1,
"end_at_step": 10000,
"latent_image": [
"225:310",
0
],
"model": [
"225:311",
0
],
"negative": [
"225:303",
1
],
"noise_seed": 0,
"positive": [
"225:303",
0
],
"return_with_leftover_noise": "disable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 2,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"225:310": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "enable",
"cfg": 1,
"end_at_step": 2,
"latent_image": [
"225:303",
2
],
"model": [
"225:312",
0
],
"negative": [
"225:303",
1
],
"noise_seed": 649177653589995,
"positive": [
"225:303",
0
],
"return_with_leftover_noise": "enable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 0,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"225:311": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"232",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"225:312": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"231",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"225:327": {
"class_type": "AILab_QwenVL",
"inputs": {
"attention_mode": "auto",
"custom_prompt": "Write a wild prompt for a video model that will take first and last frame. Maximize motion and go crazy. Give me the prompt and nothing else.",
"image": [
"225:305",
0
],
"keep_model_loaded": False,
"max_tokens": 1024,
"model_name": "Qwen3-VL-8B-Instruct",
"preset_prompt": "🖼️ Detailed Description",
"quantization": "None (FP16)",
"seed": 479492193
},
"_meta": {
"title": "QwenVL"
}
},
"228:313": {
"class_type": "WanFirstLastFrameToVideo",
"inputs": {
"batch_size": 1,
"end_image": [
"5",
0
],
"height": [
"163",
0
],
"length": 81,
"negative": [
"228:317",
0
],
"positive": [
"228:316",
0
],
"start_image": [
"25",
0
],
"vae": [
"201",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "WanFirstLastFrameToVideo"
}
},
"228:314": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"228:320",
0
],
"vae": [
"201",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"228:315": {
"class_type": "ImageBatchMulti",
"inputs": {
"image_1": [
"25",
0
],
"image_2": [
"5",
0
],
"inputcount": 2
},
"_meta": {
"title": "Image Batch Multi"
}
},
"228:316": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": [
"228:328",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Positive Prompt)"
}
},
"228:317": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"195",
0
],
"text": "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
},
"_meta": {
"title": "CLIP Text Encode (Negative Prompt)"
}
},
"228:319": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "enable",
"cfg": 1,
"end_at_step": 2,
"latent_image": [
"228:313",
2
],
"model": [
"228:321",
0
],
"negative": [
"228:313",
1
],
"noise_seed": 75596193383703,
"positive": [
"228:313",
0
],
"return_with_leftover_noise": "enable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 0,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"228:320": {
"class_type": "KSamplerAdvanced",
"inputs": {
"add_noise": "disable",
"cfg": 1,
"end_at_step": 10000,
"latent_image": [
"228:319",
0
],
"model": [
"228:322",
0
],
"negative": [
"228:313",
1
],
"noise_seed": 0,
"positive": [
"228:313",
0
],
"return_with_leftover_noise": "disable",
"sampler_name": "euler",
"scheduler": "simple",
"start_at_step": 2,
"steps": 4
},
"_meta": {
"title": "KSampler (Advanced)"
}
},
"228:321": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"231",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"228:322": {
"class_type": "ModelSamplingSD3",
"inputs": {
"model": [
"232",
0
],
"shift": 5
},
"_meta": {
"title": "ModelSamplingSD3"
}
},
"228:328": {
"class_type": "AILab_QwenVL",
"inputs": {
"attention_mode": "auto",
"custom_prompt": "Write a wild prompt for a video model that will take first and last frame. Maximize motion and go crazy. Give me the prompt and nothing else.",
"image": [
"228:315",
0
],
"keep_model_loaded": False,
"max_tokens": 1024,
"model_name": "Qwen3-VL-8B-Instruct",
"preset_prompt": "🖼️ Detailed Description",
"quantization": "None (FP16)",
"seed": 1455269179
},
"_meta": {
"title": "QwenVL"
}
},
"99:234": {
"class_type": "ImageUpscaleWithModelBatched",
"inputs": {
"downscale_method": "bicubic",
"downscale_ratio": 0.5,
"images": [
"99:73",
0
],
"per_batch": 1,
"precision": "bfloat16",
"upscale_model": [
"194",
0
]
},
"_meta": {
"title": "Image Upscale With Model Batched"
}
},
"99:235": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 0.2,
"latent_image": [
"99:97",
0
],
"model": [
"99:69",
0
],
"negative": [
"99:70",
0
],
"positive": [
"99:72",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 974,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"99:66": {
"class_type": "KSampler",
"inputs": {
"cfg": 1,
"denoise": 1,
"latent_image": [
"99:79",
0
],
"model": [
"99:69",
0
],
"negative": [
"99:70",
0
],
"positive": [
"99:72",
0
],
"sampler_name": "res_multistep",
"scheduler": "simple",
"seed": 120051025389428,
"steps": 9
},
"_meta": {
"title": "KSampler"
}
},
"99:69": {
"class_type": "ModelSamplingAuraFlow",
"inputs": {
"model": [
"186",
0
],
"sampling": "flow",
"shift": 3
},
"_meta": {
"title": "ModelSamplingAuraFlow"
}
},
"99:70": {
"class_type": "ConditioningZeroOut",
"inputs": {
"conditioning": [
"99:72",
0
]
},
"_meta": {
"title": "Conditioning Zero Out"
}
},
"99:72": {
"class_type": "CLIPTextEncode",
"inputs": {
"clip": [
"187",
0
],
"text": [
"152",
0
]
},
"_meta": {
"title": "CLIP Text Encode (Prompt)"
}
},
"99:73": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"99:66",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"99:77": {
"class_type": "VAEDecode",
"inputs": {
"samples": [
"99:235",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Decode"
}
},
"99:79": {
"class_type": "EmptySD3LatentImage",
"inputs": {
"batch_size": 1,
"height": [
"163",
0
],
"width": [
"162",
0
]
},
"_meta": {
"title": "EmptySD3LatentImage"
}
},
"99:97": {
"class_type": "VAEEncode",
"inputs": {
"pixels": [
"99:234",
0
],
"vae": [
"188",
0
]
},
"_meta": {
"title": "VAE Encode"
}
}
})
# run() also passes api_key to the partner nodes in this workflow.
job = client.run(workflow, api_key=api_key)常见问答
Yes, you can upload any image as the starting point for the video generation process.
The workflow utilizes Wan2.2 and Z-Image-Turbo models for image and video generation.
Yes, you can opt to save individual frames by utilizing the 'Save frames' group within the workflow.
The workflow is designed to automatically stitch video clips into a seamless loop using the VHS_VideoCombine node.