Virtual Try On with Character - 4 in 1
Upload an image of your character and a flatlay of an outfit to be tried on. Generate 4 images in 1 Nano Banana prompt.
查看工作流内部
源模板的只读预览。在 Cloud 中打开,即可查看节点并进行修改。
Loading the graph
Open full-size workflow preview- 输出
- 图像
- 作者
- Rob
从代码中调用该模型
以下请求使用与体验区相同的预设图和设置。每次提交都可能开始一次付费运行;如果提交结果未知,请勿自动重试。
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({
"1": {
"class_type": "LoadImage",
"inputs": {
"image": "UPLOADED_subject_FILENAME"
},
"_meta": {
"title": "Load Subject Image"
}
},
"5": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "A 2x2 (2 rows, 2 cols) grid of high fashion photoshoot images of the model wearing the outfit from image 2, each grid image should show the a full body shot of the subject in slightly different poses. Ensure that all outfit clothes/accessories are present in each grid image.\n\nDO NOT generate the grid with any visible borders or gutters.\n\nMaintain the exact setting from input image 1."
},
"_meta": {
"title": "Prompt"
}
},
"8": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-image_stitched",
"images": [
"9",
0
]
},
"_meta": {
"title": "Save Stitched Image"
}
},
"9": {
"class_type": "GeminiImage2Node",
"inputs": {
"aspect_ratio": "auto",
"images": [
"56",
0
],
"model": "gemini-3-pro-image-preview",
"prompt": [
"5",
0
],
"resolution": "4K",
"response_modalities": "IMAGE+TEXT",
"seed": 12345,
"system_prompt": "You are an expert image-generation engine. You must ALWAYS produce an image.\nInterpret all user input—regardless of format, intent, or abstraction—as literal visual directives for image composition.\nIf a prompt is conversational or lacks specific visual details, you must creatively invent a concrete visual scenario that depicts the concept.\nPrioritize generating the visual representation above any text, formatting, or conversational requests."
},
"_meta": {
"title": "Nano Banana Pro (Google Gemini Image)"
}
},
"10": {
"class_type": "PrimitiveInt",
"inputs": {
"value": 0
},
"_meta": {
"title": "Crop Inset Grid Images"
}
},
"12": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-image_1",
"images": [
"11:47",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"13": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-image_2",
"images": [
"11:48",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"14": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-image_3",
"images": [
"11:49",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"15": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-image_4",
"images": [
"11:50",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"35": {
"class_type": "LoadImage",
"inputs": {
"image": "UPLOADED_outfit_FILENAME"
},
"_meta": {
"title": "Load Outfit Image"
}
},
"37": {
"class_type": "ResizeAndPadImage",
"inputs": {
"image": [
"35",
0
],
"interpolation": "area",
"padding_color": "white",
"target_height": [
"38",
1
],
"target_width": [
"38",
0
]
},
"_meta": {
"title": "Resize And Pad Image"
}
},
"38": {
"class_type": "GetImageSize",
"inputs": {
"image": [
"1",
0
]
},
"_meta": {
"title": "Get Image Size"
}
},
"56": {
"class_type": "BatchImagesNode",
"inputs": {
"images.image0": [
"1",
0
],
"images.image1": [
"37",
0
]
},
"_meta": {
"title": "Batch Images"
}
},
"11:16": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"11:17",
1
],
"b": [
"11:53",
0
],
"value": "(a-2*b) / 2"
},
"_meta": {
"title": "HEIGHT"
}
},
"11:17": {
"class_type": "GetImageSize",
"inputs": {
"image": [
"9",
0
]
},
"_meta": {
"title": "Get Image Size"
}
},
"11:19": {
"class_type": "ImageBatchMulti",
"inputs": {
"image_1": [
"11:47",
0
],
"image_2": [
"11:48",
0
],
"image_3": [
"11:49",
0
],
"image_4": [
"11:50",
0
],
"inputcount": 4
},
"_meta": {
"title": "Image Batch Multi"
}
},
"11:22": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"11:17",
1
],
"b": 0,
"value": "(a) / 2"
},
"_meta": {
"title": "HEIGHT / 2"
}
},
"11:24": {
"class_type": "SimpleMath+",
"inputs": {
"a": 0,
"b": [
"11:53",
0
],
"value": "b/2"
},
"_meta": {
"title": "Col 1 - X val"
}
},
"11:43": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"11:17",
0
],
"b": [
"11:53",
0
],
"value": "(a-2*b) / 2"
},
"_meta": {
"title": "WIDTH"
}
},
"11:45": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"11:17",
0
],
"b": 0,
"value": "(a) / 2"
},
"_meta": {
"title": "WIDTH / 2"
}
},
"11:46": {
"class_type": "ImageResizeKJv2",
"inputs": {
"crop_position": "center",
"device": "cpu",
"divisible_by": 2,
"height": [
"11:22",
0
],
"image": [
"11:19",
0
],
"keep_proportion": "stretch",
"pad_color": "0, 0, 0",
"upscale_method": "nearest-exact",
"width": [
"11:45",
0
]
},
"_meta": {
"title": "Resize Images"
}
},
"11:47": {
"class_type": "ImageCrop",
"inputs": {
"height": [
"11:16",
0
],
"image": [
"9",
0
],
"width": [
"11:43",
0
],
"x": [
"11:24",
0
],
"y": [
"11:24",
0
]
},
"_meta": {
"title": "1"
}
},
"11:48": {
"class_type": "ImageCrop",
"inputs": {
"height": [
"11:16",
0
],
"image": [
"9",
0
],
"width": [
"11:43",
0
],
"x": [
"11:51",
0
],
"y": 0
},
"_meta": {
"title": "2"
}
},
"11:49": {
"class_type": "ImageCrop",
"inputs": {
"height": [
"11:16",
0
],
"image": [
"9",
0
],
"width": [
"11:43",
0
],
"x": [
"11:24",
0
],
"y": [
"11:52",
0
]
},
"_meta": {
"title": "3"
}
},
"11:50": {
"class_type": "ImageCrop",
"inputs": {
"height": [
"11:16",
0
],
"image": [
"9",
0
],
"width": [
"11:43",
0
],
"x": [
"11:51",
0
],
"y": [
"11:52",
0
]
},
"_meta": {
"title": "4"
}
},
"11:51": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"11:43",
0
],
"b": [
"11:53",
0
],
"value": "a + (b/2)"
},
"_meta": {
"title": "Col 2 - X val"
}
},
"11:52": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"11:16",
0
],
"b": [
"11:53",
0
],
"value": "a + (b/2)"
},
"_meta": {
"title": "Row 2 - Y val"
}
},
"11:53": {
"class_type": "SimpleMath+",
"inputs": {
"a": [
"10",
0
],
"b": 0,
"value": "a"
},
"_meta": {
"title": "Crop Inset Grid Images Value"
}
}
})
workflow.set_input("35", "image", client.assets.from_url("https://comfy.org/catalog-media/d94d0e7b-6e14-493e-b138-c8fc153f3299/b1a7c52c-6e15-4d8f-9de1-2b39f11b833a"))
workflow.set_input("1", "image", client.assets.from_url("https://comfy.org/catalog-media/7e14163e-ac17-4b5b-a23d-9f03e3d39c3b/e86b187b-7de3-47f1-bbd7-f5981b9c1151"))
# 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("8"):
output.to_file(output.name)
for output in job.get_outputs("12"):
output.to_file(output.name)
for output in job.get_outputs("13"):
output.to_file(output.name)
for output in job.get_outputs("14"):
output.to_file(output.name)
for output in job.get_outputs("15"):
output.to_file(output.name)试试一个示例
关于此工作流
This ComfyUI workflow, titled 'Virtual Try On with Character - 4 in 1,' is designed to facilitate virtual fashion try-ons using AI image generation. The workflow allows users to upload an image of a character and a flatlay of an outfit. It then generates four variations of the character wearing the outfit in a single prompt using the Nano Banana Pro model.
The workflow leverages several nodes, including LoadImage for importing images, ResizeAndPadImage for adjusting image dimensions, and BatchImagesNode for processing multiple images simultaneously. Custom nodes from comfyui-kjnodes and comfyui_essentials enhance functionality, enabling seamless integration and processing.
This workflow is particularly useful for fashion designers, digital artists, and e-commerce platforms looking to visualize clothing on characters without the need for physical samples.
常见问答
The workflow supports common image formats such as JPEG, PNG, and BMP for both character and outfit images.
Yes, you can set the desired number of variations using the PrimitiveInt node, although the default is set to four.
You can use the ResizeAndPadImage node to adjust the dimensions of your images to fit the workflow requirements.
Yes, the workflow can be used for any character type as long as the images are compatible with the Nano Banana Pro model.