Style Transfer Vid2Vid - GPT Image 2 + Seedance 2.0
Create up to 4 style transfer video to video generations using state of the art models. This workflow creates a depth map from your input video to guide the Seedance 2.0 generation. The first frame of the video is extracted and used as reference with your style prompts using GPT-Image-2.
概要
This depth-aware, reference-guided video-to-video workflow applies consistent style transfer to your footage while preserving motion and scene geometry. It starts by ingesting your clip with LoadVideo, then computes a per-frame depth map to anchor structure and camera movement (handled by the custom processing node c3b10638-32f0-4101-9b21-21fcda8712d8). The very first frame is extracted and saved (via SaveImage and helper utilities like 8dbec705-cae4-4197-9594-85b48cc18483), then passed to OpenAIGPTImageNodeV2 together with your text prompt from PrimitiveStringMultiline.
GPT-Image-2 generates a style-matched reference image from that initial frame, which the workflow uses to steer the overall look.
The core stylization is driven by Seedance 2.0 through ByteDance2ReferenceNode, which fuses three signals: the depth map (structure), the first-frame style reference (appearance), and your prompt (semantic guidance). You can queue up to four style variations in one run using the batch fan-out/collector nodes (a3edb32a-4533-45e3-8eb2-84399225da2e), then reassemble the generated frames into final videos with CreateVideo and SaveVideo. The result is a set of stable, on-style clips that maintain the original timing and motion while reflecting your chosen aesthetic.
入力するもの
- ワークフローを読み込み中
ComfyUI で実行できます。 このワークフローはこのページでは実行できません。すべてが読み込まれた状態でComfy Cloudで開くか、ご自身のComfyUI用にダウンロードしてください。
Cloudで試すワークフローの内部
ノードグラフの読み取り専用プレビューです。ノードを編集するには、Comfy 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({
"5001": {
"class_type": "LoadVideo",
"inputs": {
"file": "4d3c0f63a57ce34ca0b50ac4800b8000c60773c7c135779fb153ff7b3e54980d.mp4"
},
"_meta": {
"title": "Load Video"
}
},
"5312": {
"class_type": "CreateVideo",
"inputs": {
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": 24,
"images": [
"5337:5326",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"5313": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "2x2_stack_final",
"format": "auto",
"format.codec": "auto",
"video": [
"5312",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"5340": {
"class_type": "ByteDance2ReferenceNode",
"inputs": {
"model": "Seedance 2.0",
"model.auto_downscale": False,
"model.auto_upscale": False,
"model.duration": 6,
"model.generate_audio": True,
"model.prompt": [
"5391:5394",
0
],
"model.ratio": "adaptive",
"model.reference_images.image_1": [
"5346",
0
],
"model.reference_videos.video_1": [
"5405:5359",
0
],
"model.resolution": "480p",
"seed": 111,
"watermark": False
},
"_meta": {
"title": "ByteDance Seedance 2.5 Reference to Video (Legacy)"
}
},
"5341": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "2x2_stack_1_video",
"format": "auto",
"format.codec": "auto",
"video": [
"5340",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"5346": {
"class_type": "OpenAIGPTImageNodeV2",
"inputs": {
"model": "gpt-image-2",
"model.background": "auto",
"model.custom_height": 1024,
"model.custom_width": 1024,
"model.images.image_1": [
"5405:5406",
0
],
"model.quality": "medium",
"model.size": "auto",
"n": 1,
"prompt": [
"5391:5384",
0
],
"seed": 111
},
"_meta": {
"title": "OpenAI GPT Image 2.5"
}
},
"5347": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "2x2_stack_2_image",
"images": [
"5362",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"5349": {
"class_type": "ByteDance2ReferenceNode",
"inputs": {
"model": "Seedance 2.0",
"model.auto_downscale": False,
"model.auto_upscale": False,
"model.duration": 6,
"model.generate_audio": True,
"model.prompt": [
"5391:5395",
0
],
"model.ratio": "adaptive",
"model.reference_images.image_1": [
"5362",
0
],
"model.reference_videos.video_1": [
"5405:5359",
0
],
"model.resolution": "480p",
"seed": 22,
"watermark": False
},
"_meta": {
"title": "ByteDance Seedance 2.5 Reference to Video (Legacy)"
}
},
"5350": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "2x2_stack_2_video",
"format": "auto",
"format.codec": "auto",
"video": [
"5349",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"5351": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "2x2_stack_3_image",
"images": [
"5363",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"5353": {
"class_type": "ByteDance2ReferenceNode",
"inputs": {
"model": "Seedance 2.0",
"model.auto_downscale": False,
"model.auto_upscale": False,
"model.duration": 6,
"model.generate_audio": True,
"model.prompt": [
"5391:5396",
0
],
"model.ratio": "adaptive",
"model.reference_images.image_1": [
"5363",
0
],
"model.reference_videos.video_1": [
"5405:5359",
0
],
"model.resolution": "480p",
"seed": 333,
"watermark": False
},
"_meta": {
"title": "ByteDance Seedance 2.5 Reference to Video (Legacy)"
}
},
"5354": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "2x2_stack_3_video",
"format": "auto",
"format.codec": "auto",
"video": [
"5353",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"5355": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "2x2_stack_4_image",
"images": [
"5364",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"5357": {
"class_type": "ByteDance2ReferenceNode",
"inputs": {
"model": "Seedance 2.0",
"model.auto_downscale": False,
"model.auto_upscale": False,
"model.duration": 6,
"model.generate_audio": True,
"model.prompt": [
"5391:5397",
0
],
"model.ratio": "adaptive",
"model.reference_images.image_1": [
"5364",
0
],
"model.reference_videos.video_1": [
"5405:5359",
0
],
"model.resolution": "480p",
"seed": 4,
"watermark": False
},
"_meta": {
"title": "ByteDance Seedance 2.5 Reference to Video (Legacy)"
}
},
"5358": {
"class_type": "SaveVideo",
"inputs": {
"codec": "auto",
"filename_prefix": "2x2_stack_4_video",
"format": "auto",
"format.codec": "auto",
"video": [
"5357",
0
]
},
"_meta": {
"title": "Save Video"
}
},
"5360": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "2x2_stack_1_image",
"images": [
"5346",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"5362": {
"class_type": "OpenAIGPTImageNodeV2",
"inputs": {
"model": "gpt-image-2",
"model.background": "auto",
"model.custom_height": 1024,
"model.custom_width": 1024,
"model.images.image_1": [
"5405:5406",
0
],
"model.quality": "medium",
"model.size": "auto",
"n": 1,
"prompt": [
"5391:5386",
0
],
"seed": 222
},
"_meta": {
"title": "OpenAI GPT Image 2.5"
}
},
"5363": {
"class_type": "OpenAIGPTImageNodeV2",
"inputs": {
"model": "gpt-image-2",
"model.background": "auto",
"model.custom_height": 1024,
"model.custom_width": 1024,
"model.images.image_1": [
"5405:5406",
0
],
"model.quality": "medium",
"model.size": "auto",
"n": 1,
"prompt": [
"5391:5388",
0
],
"seed": 333
},
"_meta": {
"title": "OpenAI GPT Image 2.5"
}
},
"5364": {
"class_type": "OpenAIGPTImageNodeV2",
"inputs": {
"model": "gpt-image-2",
"model.background": "auto",
"model.custom_height": 1024,
"model.custom_width": 1024,
"model.images.image_1": [
"5405:5406",
0
],
"model.quality": "medium",
"model.size": "auto",
"n": 1,
"prompt": [
"5391:5390",
0
],
"seed": 444
},
"_meta": {
"title": "OpenAI GPT Image 2.5"
}
},
"5401": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "apply a post-apocalyptic orange and teal desert grade"
},
"_meta": {
"title": "Prompt - Style 1"
}
},
"5402": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "apply a surreal dreamlike bloom grade with glowing highlights, soft halation around light sources, lifted blacks, and a hazy ethereal pastel wash across the midtones"
},
"_meta": {
"title": "Prompt - Style 2"
}
},
"5403": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "apply a olive and amber grade with deep shadows"
},
"_meta": {
"title": "Prompt - Style 3"
}
},
"5404": {
"class_type": "PrimitiveStringMultiline",
"inputs": {
"value": "apply a symmetrical pastel grade with mustard yellows and dusty pinks"
},
"_meta": {
"title": "Prompt - Style 4"
}
},
"5337:5326": {
"class_type": "ImageStitch",
"inputs": {
"direction": "down",
"image1": [
"5337:5327",
0
],
"image2": [
"5337:5334",
0
],
"match_image_size": True,
"spacing_color": "white",
"spacing_width": 0
},
"_meta": {
"title": "Stitch Images"
}
},
"5337:5327": {
"class_type": "ImageStitch",
"inputs": {
"direction": "right",
"image1": [
"5337:5330",
0
],
"image2": [
"5337:5328",
0
],
"match_image_size": True,
"spacing_color": "white",
"spacing_width": 0
},
"_meta": {
"title": "Stitch Images"
}
},
"5337:5328": {
"class_type": "GetVideoComponents",
"inputs": {
"video": [
"5349",
0
]
},
"_meta": {
"title": "Get Video Components"
}
},
"5337:5330": {
"class_type": "GetVideoComponents",
"inputs": {
"video": [
"5340",
0
]
},
"_meta": {
"title": "Get Video Components"
}
},
"5337:5332": {
"class_type": "GetVideoComponents",
"inputs": {
"video": [
"5353",
0
]
},
"_meta": {
"title": "Get Video Components"
}
},
"5337:5334": {
"class_type": "ImageStitch",
"inputs": {
"direction": "right",
"image1": [
"5337:5332",
0
],
"image2": [
"5337:5335",
0
],
"match_image_size": True,
"spacing_color": "white",
"spacing_width": 0
},
"_meta": {
"title": "Stitch Images"
}
},
"5337:5335": {
"class_type": "GetVideoComponents",
"inputs": {
"video": [
"5357",
0
]
},
"_meta": {
"title": "Get Video Components"
}
},
"5391:5384": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Change the style of @image_1 to",
"string_b": [
"5401",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5386": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Change the style of @image_1 to",
"string_b": [
"5402",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5388": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Change the style of @image_1 to",
"string_b": [
"5403",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5390": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Change the style of @image_1 to",
"string_b": [
"5404",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5394": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Use @image_1 from the reference images as a start frame and visual style. Use the motion from the depth map from @video_1. Ensure that the style of the video is",
"string_b": [
"5401",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5395": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Use @image_1 from the reference images as a start frame and visual style. Use the motion from the depth map from @video_1. Ensure that the style of the video is",
"string_b": [
"5402",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5396": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Use @image_1 from the reference images as a start frame and visual style. Use the motion from the depth map from @video_1. Ensure that the style of the video is",
"string_b": [
"5403",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5391:5397": {
"class_type": "StringConcatenate",
"inputs": {
"delimiter": " ",
"string_a": "Use @image_1 from the reference images as a start frame and visual style. Use the motion from the depth map from @video_1. Ensure that the style of the video is",
"string_b": [
"5404",
0
]
},
"_meta": {
"title": "Concatenate Text"
}
},
"5405:5342": {
"class_type": "DepthAnything_V3",
"inputs": {
"da3_model": [
"5405:5343",
0
],
"images": [
"5405:5344",
0
],
"invert_depth": False,
"keep_model_size": False,
"normalization_mode": "V2-Style",
"resize_method": "resize"
},
"_meta": {
"title": "Depth Anything V3"
}
},
"5405:5343": {
"class_type": "DownloadAndLoadDepthAnythingV3Model",
"inputs": {
"attention": "auto",
"model": "da3_large.safetensors",
"precision": "auto"
},
"_meta": {
"title": "Load Depth Anything V3 Model"
}
},
"5405:5344": {
"class_type": "GetVideoComponents",
"inputs": {
"video": [
"5001",
0
]
},
"_meta": {
"title": "Get Video Components"
}
},
"5405:5359": {
"class_type": "CreateVideo",
"inputs": {
"audio": [
"5405:5344",
1
],
"bit_depth": "auto",
"codec": "none",
"color_space": "sRGB",
"fps": [
"5405:5344",
2
],
"images": [
"5405:5342",
0
]
},
"_meta": {
"title": "Create Video"
}
},
"5405:5406": {
"class_type": "ImageFromBatch",
"inputs": {
"batch_index": 0,
"image": [
"5405:5344",
0
],
"length": 1
},
"_meta": {
"title": "Get Image from Batch"
}
}
})
# run() also passes api_key to the partner nodes in this workflow.
job = client.run(workflow, api_key=api_key)よくある質問
It computes a per-frame depth map from your input video to preserve scene structure, then uses ByteDance2ReferenceNode (Seedance 2.0) to blend that structure with a style reference created from the first frame by GPT-Image-2. Increasing depth/consistency settings (if exposed) typically reduces flicker and warping.
Yes. OpenAIGPTImageNodeV2 calls GPT-Image-2 to create a style-matched reference from the first frame. Add your API key in that node’s settings and adjust any available parameters to control the reference output.
Yes. Enter up to four prompts (one per line) in PrimitiveStringMultiline. The batch nodes (a3edb32a-4533-45e3-8eb2-84399225da2e) fan out the inputs so the pipeline produces up to four videos in one run.
Try increasing the depth influence or temporal consistency in ByteDance2ReferenceNode, lowering the style strength, and using a fixed seed. Also ensure the input fps and resolution are sensible for your GPU; excessively high settings can cause instability.
No. SaveVideo writes silent video files. If you need audio, export it from the original clip and remux it onto the styled output in your video editor.