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
コードからこのモデルを呼び出す
以下のリクエストでは、Playground と同じ準備済みグラフと設定を使用します。送信ごとに有料実行が開始される場合があります。結果が不明な送信を自動的に再試行しないでください。
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({
"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.