Files
Alexankharin-camera-comfyUI/workflows/video_camera.json
T
Alexander KharinandClaude Fable 5 d77af07189 Apply workflow improvements: runnable defaults, templates, dep trim, CI
- Bundle example inputs (example_inputs/: pinhole + fisheye JPEG, example
  trajectory .npy); install.py copies them into ComfyUI's input/ folder and
  every LoadImage/LoadTrajectory default now points at them, so the shipped
  workflows queue on a fresh install.
- Template browser: add same-name .jpg thumbnails for 10 workflows
  (workflows/ is already a recognized template dir); drop the stray
  workflows/__init__.py.
- Move superseded reference graphs to workflows/legacy/ (SD-checkpoint
  outpaint variant, manual multi-view fisheye depth) - out of the template
  browser, still documented.
- video_camera.json: remove dead-end BlurMaskFast (radius 0/0 no-op),
  easy-mathInt pad math and dangling VHS_VideoInfo; swap KJNodes
  GetImageRangeFromBatch for built-in ImageFromBatch. Pack deps cut from
  five to two (VideoHelperSuite + Florence2).
- New workflows/record_trajectory.json - produces the .npy trajectory that
  PC_enricher and wan_vace_ref_to_video consume.
- Stamp extra.camera_comfyui_rev=1 in all workflows for future migrations;
  prune 8 pre-existing stale link references found by a bidirectional
  integrity sweep.
- CI: .github/workflows/validate.yml runs the schema validator,
  installer-logic tests and 4D smoke suite (CPU torch) on PRs and main.
- README + docs/workflows_review.md updated accordingly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 18:49:14 +03:00

1961 lines
35 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"id": "6a6957a6-60ed-4027-9a58-b0b7a511139f",
"revision": 0,
"last_node_id": 76,
"last_link_id": 151,
"nodes": [
{
"id": 10,
"type": "CameraInterpolationNode",
"pos": [
103.8042984008789,
837.6078491210938
],
"size": [
200.21640014648438,
46
],
"flags": {},
"order": 9,
"mode": 0,
"inputs": [
{
"name": "initial_matrix",
"type": "MAT_4X4",
"link": 15
},
{
"name": "final_matrix",
"type": "MAT_4X4",
"link": 9
}
],
"outputs": [
{
"name": "trajectory",
"type": "TENSOR",
"links": [
7
]
}
],
"properties": {
"aux_id": "Alexankharin/camera-comfyUI",
"ver": "bc358f82634eb51b60207e1a8ddd5b29aaaaa2ae",
"Node name for S&R": "CameraInterpolationNode"
},
"widgets_values": [
2
]
},
{
"id": 30,
"type": "CLIPTextEncode",
"pos": [
310.296875,
-166.51046752929688
],
"size": [
425.27801513671875,
180.6060791015625
],
"flags": {},
"order": 7,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 40
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"slot_index": 0,
"links": [
45
]
}
],
"title": "CLIP Text Encode (Negative Prompt)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "CLIPTextEncode",
"widget_ue_connectable": {}
},
"widgets_values": [
"色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
],
"color": "#322",
"bgcolor": "#533"
},
{
"id": 29,
"type": "CLIPLoader",
"pos": [
-174.19113159179688,
-208.77528381347656
],
"size": [
390,
106
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "CLIP",
"type": "CLIP",
"slot_index": 0,
"links": [
40,
41
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "CLIPLoader",
"widget_ue_connectable": {}
},
"widgets_values": [
"umt5_xxl_fp16.safetensors",
"wan",
"default"
]
},
{
"id": 33,
"type": "ModelSamplingSD3",
"pos": [
253.36837768554688,
-520.986328125
],
"size": [
315,
58
],
"flags": {},
"order": 8,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 36
}
],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"slot_index": 0,
"links": [
35
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "ModelSamplingSD3",
"widget_ue_connectable": {}
},
"widgets_values": [
8
]
},
{
"id": 32,
"type": "UNETLoader",
"pos": [
-232.87193298339844,
-425.1252746582031
],
"size": [
346.7470703125,
82
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "MODEL",
"type": "MODEL",
"slot_index": 0,
"links": [
36
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "UNETLoader",
"widget_ue_connectable": {}
},
"widgets_values": [
"wan2.1_vace_14B_fp16.safetensors",
"default"
]
},
{
"id": 28,
"type": "WanVaceToVideo",
"pos": [
1328.1142578125,
76.63162994384766
],
"size": [
304.60546875,
254
],
"flags": {},
"order": 30,
"mode": 0,
"inputs": [
{
"name": "positive",
"type": "CONDITIONING",
"link": 46
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 45
},
{
"name": "vae",
"type": "VAE",
"link": 108
},
{
"name": "control_video",
"shape": 7,
"type": "IMAGE",
"link": 151
},
{
"name": "control_masks",
"shape": 7,
"type": "MASK",
"link": 144
},
{
"name": "reference_image",
"shape": 7,
"type": "IMAGE",
"link": null
}
],
"outputs": [
{
"name": "positive",
"type": "CONDITIONING",
"links": [
47
]
},
{
"name": "negative",
"type": "CONDITIONING",
"links": [
48
]
},
{
"name": "latent",
"type": "LATENT",
"links": [
49
]
},
{
"name": "trim_latent",
"type": "INT",
"links": [
50
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "WanVaceToVideo",
"widget_ue_connectable": {}
},
"widgets_values": [
1024,
1024,
81,
1,
1
],
"title": "WAN VACE control"
},
{
"id": 35,
"type": "VAEDecode",
"pos": [
1726.5771484375,
-108.60779571533203
],
"size": [
210,
256.0000305175781
],
"flags": {},
"order": 33,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 37
},
{
"name": "vae",
"type": "VAE",
"link": 109
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"slot_index": 0,
"links": [
51
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "VAEDecode",
"widget_ue_connectable": {}
},
"widgets_values": []
},
{
"id": 34,
"type": "VAELoader",
"pos": [
772.9067993164062,
-1.818621039390564
],
"size": [
306.36004638671875,
58
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "VAE",
"type": "VAE",
"slot_index": 0,
"links": [
108,
109
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "VAELoader",
"widget_ue_connectable": {}
},
"widgets_values": [
"wan_2.1_vae.safetensors"
]
},
{
"id": 36,
"type": "TrimVideoLatent",
"pos": [
1665.982177734375,
-248.55215454101562
],
"size": [
270,
58
],
"flags": {},
"order": 32,
"mode": 0,
"inputs": [
{
"name": "samples",
"type": "LATENT",
"link": 39
},
{
"name": "trim_amount",
"type": "INT",
"widget": {
"name": "trim_amount"
},
"link": 50
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"links": [
37
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "TrimVideoLatent",
"widget_ue_connectable": {
"trim_amount": true
}
},
"widgets_values": [
0
]
},
{
"id": 63,
"type": "ImageFromBatch",
"pos": [
583.0528564453125,
-1016.3375854492188
],
"size": [
428.4000244140625,
102
],
"flags": {},
"order": 10,
"mode": 0,
"inputs": [
{
"name": "image",
"shape": 7,
"type": "IMAGE",
"link": 116
},
{
"name": "masks",
"shape": 7,
"type": "MASK",
"link": null
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
113
]
},
{
"name": "MASK",
"type": "MASK",
"links": null
}
],
"properties": {
"cnr_id": "comfyui-kjnodes",
"ver": "d57154c3a808b8a3f232ed293eaa2d000867c884",
"Node name for S&R": "ImageFromBatch"
},
"widgets_values": [
0,
1
],
"title": "First frame (for captioning)"
},
{
"id": 62,
"type": "DownloadAndLoadFlorence2Model",
"pos": [
422.0513000488281,
-755.7509155273438
],
"size": [
365.4000244140625,
130
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "lora",
"shape": 7,
"type": "PEFTLORA",
"link": null
}
],
"outputs": [
{
"name": "florence2_model",
"type": "FL2MODEL",
"links": [
114
]
}
],
"properties": {
"cnr_id": "comfyui-florence2",
"ver": "8d7115944536f32c72475c63980c2d26d9c3dfca",
"Node name for S&R": "DownloadAndLoadFlorence2Model"
},
"widgets_values": [
"MiaoshouAI/Florence-2-base-PromptGen-v2.0",
"fp16",
"sdpa",
false
]
},
{
"id": 31,
"type": "KSampler",
"pos": [
1251.724609375,
-293.723876953125
],
"size": [
315,
262
],
"flags": {},
"order": 31,
"mode": 0,
"inputs": [
{
"name": "model",
"type": "MODEL",
"link": 35
},
{
"name": "positive",
"type": "CONDITIONING",
"link": 47
},
{
"name": "negative",
"type": "CONDITIONING",
"link": 48
},
{
"name": "latent_image",
"type": "LATENT",
"link": 49
}
],
"outputs": [
{
"name": "LATENT",
"type": "LATENT",
"slot_index": 0,
"links": [
39
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "KSampler",
"widget_ue_connectable": {}
},
"widgets_values": [
359341936730965,
"fixed",
20,
6,
"uni_pc",
"simple",
1
]
},
{
"id": 38,
"type": "SaveWEBM",
"pos": [
2063.07177734375,
-207.39794921875
],
"size": [
270,
392
],
"flags": {},
"order": 34,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 51
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "SaveWEBM"
},
"widgets_values": [
"camera_motion",
"vp9",
24,
32
]
},
{
"id": 19,
"type": "ImageScale",
"pos": [
-356.9869384765625,
541.9141235351562
],
"size": [
301.4917907714844,
130
],
"flags": {},
"order": 17,
"mode": 0,
"inputs": [
{
"name": "image",
"type": "IMAGE",
"link": 23
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
20,
21
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "ImageScale"
},
"widgets_values": [
"bilinear",
1024,
1024,
"disabled"
]
},
{
"id": 21,
"type": "ImagePadForOutpaint",
"pos": [
-291.3959045410156,
195.00233459472656
],
"size": [
427.1841735839844,
174
],
"flags": {},
"order": 16,
"mode": 0,
"inputs": [
{
"name": "image",
"type": "IMAGE",
"link": 22
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
23
]
},
{
"name": "MASK",
"type": "MASK",
"links": [
126
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "ImagePadForOutpaint"
},
"widgets_values": [
0,
280,
0,
280,
1
],
"title": "Pad to square — set top/bottom to (W−H)/2"
},
{
"id": 68,
"type": "InvertMask",
"pos": [
177.8126983642578,
324.9949645996094
],
"size": [
140,
26
],
"flags": {},
"order": 18,
"mode": 0,
"inputs": [
{
"name": "mask",
"type": "MASK",
"link": 126
}
],
"outputs": [
{
"name": "MASK",
"type": "MASK",
"links": [
127
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "InvertMask"
},
"widgets_values": []
},
{
"id": 16,
"type": "TransformToMatrix",
"pos": [
-273.3038330078125,
862.0293579101562
],
"size": [
270,
154
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "transformation matrix",
"type": "MAT_4X4",
"links": [
15
]
}
],
"properties": {
"aux_id": "Alexankharin/camera-comfyUI",
"ver": "bc358f82634eb51b60207e1a8ddd5b29aaaaa2ae",
"Node name for S&R": "TransformToMatrix"
},
"widgets_values": [
0,
0,
0,
0,
0
]
},
{
"id": 11,
"type": "TransformToMatrix",
"pos": [
-290.3587646484375,
1070.493408203125
],
"size": [
270,
154
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "transformation matrix",
"type": "MAT_4X4",
"links": [
9
]
}
],
"properties": {
"aux_id": "Alexankharin/camera-comfyUI",
"ver": "bc358f82634eb51b60207e1a8ddd5b29aaaaa2ae",
"Node name for S&R": "TransformToMatrix"
},
"widgets_values": [
1.0000000000000002,
0,
1.0000000000000002,
0,
-16.666717529296875
],
"title": "Final camera pose (edit me)"
},
{
"id": 61,
"type": "Florence2Run",
"pos": [
897.55859375,
-785.4447021484375
],
"size": [
400,
364
],
"flags": {},
"order": 12,
"mode": 0,
"inputs": [
{
"name": "image",
"type": "IMAGE",
"link": 113
},
{
"name": "florence2_model",
"type": "FL2MODEL",
"link": 114
}
],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": null
},
{
"name": "mask",
"type": "MASK",
"links": null
},
{
"name": "caption",
"type": "STRING",
"links": [
115
]
},
{
"name": "data",
"type": "JSON",
"links": null
}
],
"properties": {
"cnr_id": "comfyui-florence2",
"ver": "8d7115944536f32c72475c63980c2d26d9c3dfca",
"Node name for S&R": "Florence2Run"
},
"widgets_values": [
"",
"detailed_caption",
true,
false,
1024,
3,
true,
"",
1,
"fixed"
]
},
{
"id": 9,
"type": "VHS_LoadVideoPath",
"pos": [
-879.115966796875,
614.129150390625
],
"size": [
231.8896484375,
383.1529235839844
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "meta_batch",
"shape": 7,
"type": "VHS_BatchManager",
"link": null
},
{
"name": "vae",
"shape": 7,
"type": "VAE",
"link": null
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
22,
116
]
},
{
"name": "frame_count",
"type": "INT",
"links": null
},
{
"name": "audio",
"type": "AUDIO",
"links": null
},
{
"name": "video_info",
"type": "VHS_VIDEOINFO",
"links": []
}
],
"properties": {
"cnr_id": "comfyui-videohelpersuite",
"ver": "a7ce59e381934733bfae03b1be029756d6ce936d",
"Node name for S&R": "VHS_LoadVideoPath",
"aux_id": "Kosinkadink/ComfyUI-VideoHelperSuite"
},
"widgets_values": {
"video": "input/Ironcrop.mp4",
"force_rate": 0,
"custom_width": 0,
"custom_height": 0,
"frame_load_cap": 81,
"skip_first_frames": 1600,
"select_every_nth": 1,
"format": "AnimateDiff",
"videopreview": {
"hidden": false,
"paused": false,
"params": {
"filename": "input/Ironcrop.mp4",
"type": "path",
"format": "video/mp4",
"force_rate": 0,
"custom_width": 1024,
"custom_height": 0,
"frame_load_cap": 81,
"skip_first_frames": 1600,
"select_every_nth": 1
}
}
}
},
{
"id": 12,
"type": "VideoMetricDepthEstimate",
"pos": [
-21.097909927368164,
496.6513671875
],
"size": [
270,
126
],
"flags": {},
"order": 19,
"mode": 0,
"inputs": [
{
"name": "frames",
"type": "IMAGE",
"link": 20
}
],
"outputs": [
{
"name": "metric_depths",
"type": "TENSOR",
"links": [
11
]
},
{
"name": "fps",
"type": "FLOAT",
"links": null
}
],
"properties": {
"aux_id": "Alexankharin/camera-comfyUI",
"ver": "bc358f82634eb51b60207e1a8ddd5b29aaaaa2ae",
"Node name for S&R": "VideoMetricDepthEstimate"
},
"widgets_values": [
"metric_video_depth_anything_vitl.pth",
518,
60
]
},
{
"id": 14,
"type": "SaveWEBM",
"pos": [
1578.020751953125,
613.9002075195312
],
"size": [
297.037109375,
419.037109375
],
"flags": {},
"order": 24,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 13
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "SaveWEBM"
},
"widgets_values": [
"depth",
"vp9",
24,
32
]
},
{
"id": 6,
"type": "VideoCameraMotionSequence",
"pos": [
357.6648864746094,
486.8964538574219
],
"size": [
290.3218688964844,
358
],
"flags": {},
"order": 20,
"mode": 0,
"inputs": [
{
"name": "frames",
"type": "IMAGE",
"link": 21
},
{
"name": "depth_seq",
"type": "TENSOR",
"link": 11
},
{
"name": "trajectory",
"type": "TENSOR",
"link": 7
},
{
"name": "mask_seq",
"type": "MASK",
"link": 127
}
],
"outputs": [
{
"name": "video_frames",
"type": "IMAGE",
"links": [
146
]
},
{
"name": "mask_frames",
"type": "MASK",
"links": [
130,
136
]
},
{
"name": "depths",
"type": "TENSOR",
"links": [
12
]
}
],
"properties": {
"aux_id": "Alexankharin/camera-comfyUI",
"ver": "bc358f82634eb51b60207e1a8ddd5b29aaaaa2ae",
"Node name for S&R": "VideoCameraMotionSequence"
},
"widgets_values": [
"PINHOLE",
90,
1,
false,
"PINHOLE",
90,
1024,
1024,
3,
1,
1
],
"title": "Re-render along trajectory"
},
{
"id": 4,
"type": "SaveWEBM",
"pos": [
1064.8194580078125,
799.7720336914062
],
"size": [
297.037109375,
419.037109375
],
"flags": {},
"order": 29,
"mode": 0,
"inputs": [
{
"name": "images",
"type": "IMAGE",
"link": 147
}
],
"outputs": [],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "SaveWEBM"
},
"widgets_values": [
"ComfyUI",
"vp9",
24,
32
]
},
{
"id": 41,
"type": "GrowMask",
"pos": [
724.7805786132812,
564.5791625976562
],
"size": [
270,
82
],
"flags": {},
"order": 23,
"mode": 0,
"inputs": [
{
"name": "mask",
"type": "MASK",
"link": 56
}
],
"outputs": [
{
"name": "MASK",
"type": "MASK",
"links": [
144,
145,
149
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "GrowMask"
},
"widgets_values": [
5,
true
]
},
{
"id": 39,
"type": "InvertMask",
"pos": [
732.7352294921875,
497.3684387207031
],
"size": [
140,
26
],
"flags": {},
"order": 21,
"mode": 0,
"inputs": [
{
"name": "mask",
"type": "MASK",
"link": 136
}
],
"outputs": [
{
"name": "MASK",
"type": "MASK",
"links": [
56
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "InvertMask"
},
"widgets_values": []
},
{
"id": 75,
"type": "InvertMask",
"pos": [
739.36376953125,
690.1857299804688
],
"size": [
140,
26
],
"flags": {},
"order": 26,
"mode": 0,
"inputs": [
{
"name": "mask",
"type": "MASK",
"link": 149
}
],
"outputs": [
{
"name": "MASK",
"type": "MASK",
"links": [
150
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "InvertMask"
},
"widgets_values": []
},
{
"id": 54,
"type": "MaskToImage",
"pos": [
733.598876953125,
760.3591918945312
],
"size": [
184.62362670898438,
26
],
"flags": {},
"order": 27,
"mode": 0,
"inputs": [
{
"name": "mask",
"type": "MASK",
"link": 150
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
148
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.41",
"Node name for S&R": "MaskToImage"
},
"widgets_values": []
},
{
"id": 74,
"type": "ImageCompositeMasked",
"pos": [
721.5014038085938,
833.953857421875
],
"size": [
270,
146
],
"flags": {},
"order": 28,
"mode": 0,
"inputs": [
{
"name": "destination",
"type": "IMAGE",
"link": 146
},
{
"name": "source",
"type": "IMAGE",
"link": 148
},
{
"name": "mask",
"shape": 7,
"type": "MASK",
"link": 145
}
],
"outputs": [
{
"name": "IMAGE",
"type": "IMAGE",
"links": [
147,
151
]
}
],
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.44",
"Node name for S&R": "ImageCompositeMasked"
},
"widgets_values": [
0,
0,
false
]
},
{
"id": 13,
"type": "DepthFramesToVideo",
"pos": [
802.4984130859375,
332.2725524902344
],
"size": [
270,
102
],
"flags": {},
"order": 22,
"mode": 0,
"inputs": [
{
"name": "depth_seq",
"type": "TENSOR",
"link": 12
},
{
"name": "mask_seq",
"type": "MASK",
"link": 130
}
],
"outputs": [
{
"name": "video_frames",
"type": "TENSOR",
"links": null
},
{
"name": "depth_video",
"type": "IMAGE",
"links": [
13
]
}
],
"properties": {
"aux_id": "Alexankharin/camera-comfyUI",
"ver": "bc358f82634eb51b60207e1a8ddd5b29aaaaa2ae",
"Node name for S&R": "DepthFramesToVideo"
},
"widgets_values": [
true,
false
]
},
{
"id": 37,
"type": "CLIPTextEncode",
"pos": [
790.9496459960938,
-273.84527587890625
],
"size": [
422.84503173828125,
164.31304931640625
],
"flags": {},
"order": 14,
"mode": 0,
"inputs": [
{
"name": "clip",
"type": "CLIP",
"link": 41
},
{
"name": "text",
"type": "STRING",
"widget": {
"name": "text"
},
"link": 115
}
],
"outputs": [
{
"name": "CONDITIONING",
"type": "CONDITIONING",
"slot_index": 0,
"links": [
46
]
}
],
"title": "CLIP Text Encode (Positive Prompt)",
"properties": {
"cnr_id": "comfy-core",
"ver": "0.3.35",
"Node name for S&R": "CLIPTextEncode",
"widget_ue_connectable": {}
},
"widgets_values": [
"black and white high-res image of train and people, open scene with moving camera"
],
"color": "#232",
"bgcolor": "#353"
},
{
"id": 76,
"type": "MarkdownNote",
"title": "About this workflow",
"pos": [
-1439.115966796875,
-1016.3375854492188
],
"size": [
520,
392
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [],
"properties": {},
"widgets_values": [
"# Re-shoot a video with a new camera move\n\nRe-renders an input video along a user-defined camera trajectory and uses WAN 2.1 VACE to regenerate what the new camera reveals:\n\n1. Video is padded square (ImagePadForOutpaint — set top/bottom to (width−height)/2 for your video) and depth-estimated per frame (Video-Depth-Anything metric).\n2. **VideoCameraMotionSequence** lifts each frame to a point cloud and re-renders it along the SE(3)-interpolated trajectory.\n3. Disocclusion masks + re-rendered frames become VACE control video/masks; **Florence2** auto-captions the clip as the prompt; WAN 2.1 VACE 14B fills the gaps.\n\n- **Set:** video path (VHS Load Video Path); the camera move (two TransformToMatrix poses); pad amounts; override the auto-caption in CLIPTextEncode if desired.\n- **Requires (packs):** VideoHelperSuite, ComfyUI-Florence2.\n- **Requires (models):** `metric_video_depth_anything_vitl.pth` (install.sh `depth`), WAN 2.1 VACE 14B + umt5-xxl + WAN VAE (install.sh `vae`), Florence-2 (auto-download).\n- **Outputs:** re-rendered composite WEBM, depth WEBM, final VACE clip."
],
"color": "#432",
"bgcolor": "#653"
}
],
"links": [
[
7,
10,
0,
6,
2,
"TENSOR"
],
[
9,
11,
0,
10,
1,
"MAT_4X4"
],
[
11,
12,
0,
6,
1,
"TENSOR"
],
[
12,
6,
2,
13,
0,
"TENSOR"
],
[
13,
13,
1,
14,
0,
"IMAGE"
],
[
15,
16,
0,
10,
0,
"MAT_4X4"
],
[
20,
19,
0,
12,
0,
"IMAGE"
],
[
21,
19,
0,
6,
0,
"IMAGE"
],
[
22,
9,
0,
21,
0,
"IMAGE"
],
[
23,
21,
0,
19,
0,
"IMAGE"
],
[
35,
33,
0,
31,
0,
"MODEL"
],
[
36,
32,
0,
33,
0,
"MODEL"
],
[
37,
36,
0,
35,
0,
"LATENT"
],
[
39,
31,
0,
36,
0,
"LATENT"
],
[
40,
29,
0,
30,
0,
"CLIP"
],
[
41,
29,
0,
37,
0,
"CLIP"
],
[
45,
30,
0,
28,
1,
"CONDITIONING"
],
[
46,
37,
0,
28,
0,
"CONDITIONING"
],
[
47,
28,
0,
31,
1,
"CONDITIONING"
],
[
48,
28,
1,
31,
2,
"CONDITIONING"
],
[
49,
28,
2,
31,
3,
"LATENT"
],
[
50,
28,
3,
36,
1,
"INT"
],
[
51,
35,
0,
38,
0,
"IMAGE"
],
[
56,
39,
0,
41,
0,
"MASK"
],
[
108,
34,
0,
28,
2,
"VAE"
],
[
109,
34,
0,
35,
1,
"VAE"
],
[
113,
63,
0,
61,
0,
"IMAGE"
],
[
114,
62,
0,
61,
1,
"FL2MODEL"
],
[
115,
61,
2,
37,
1,
"STRING"
],
[
116,
9,
0,
63,
0,
"IMAGE"
],
[
126,
21,
1,
68,
0,
"MASK"
],
[
127,
68,
0,
6,
3,
"MASK"
],
[
130,
6,
1,
13,
1,
"MASK"
],
[
136,
6,
1,
39,
0,
"MASK"
],
[
144,
41,
0,
28,
4,
"MASK"
],
[
145,
41,
0,
74,
2,
"MASK"
],
[
146,
6,
0,
74,
0,
"IMAGE"
],
[
147,
74,
0,
4,
0,
"IMAGE"
],
[
148,
54,
0,
74,
1,
"IMAGE"
],
[
149,
41,
0,
75,
0,
"MASK"
],
[
150,
75,
0,
54,
0,
"MASK"
],
[
151,
74,
0,
28,
3,
"IMAGE"
]
],
"groups": [
{
"id": 1,
"title": "1. Load & pad video",
"bounding": [
-899.115966796875,
135.00233459472656,
1236.9286651611328,
882.2797393798828
],
"color": "#3f789e",
"font_size": 24,
"flags": {}
},
{
"id": 2,
"title": "2. Metric video depth",
"bounding": [
-376.9869384765625,
436.6513671875,
645.8890285491943,
255.26275634765625
],
"color": "#a1309b",
"font_size": 24,
"flags": {}
},
{
"id": 3,
"title": "3. Re-render with new camera",
"bounding": [
-310.3587646484375,
426.8964538574219,
978.3455200195312,
817.5969543457031
],
"color": "#8A8",
"font_size": 24,
"flags": {}
},
{
"id": 4,
"title": "4. Masks & composite",
"bounding": [
701.5014038085938,
437.3684387207031,
313.2791748046875,
562.5854187011719
],
"color": "#b58b2a",
"font_size": 24,
"flags": {}
},
{
"id": 5,
"title": "5. Auto-caption (Florence2)",
"bounding": [
402.0513000488281,
-1076.3375854492188,
915.5072937011719,
674.8928833007812
],
"color": "#88A",
"font_size": 24,
"flags": {}
},
{
"id": 6,
"title": "6. WAN VACE re-generation",
"bounding": [
-252.87193298339844,
-580.986328125,
2209.4490814208984,
931.6179580688477
],
"color": "#b06634",
"font_size": 24,
"flags": {}
},
{
"id": 7,
"title": "7. Outputs",
"bounding": [
782.4984130859375,
-267.39794921875,
1570.5733642578125,
1506.2070922851562
],
"color": "#535",
"font_size": 24,
"flags": {}
}
],
"config": {},
"extra": {
"ds": {
"scale": 0.379749833583251,
"offset": [
-41.3843679793205,
198.46235778583016
]
},
"frontendVersion": "1.23.4",
"VHS_latentpreview": false,
"VHS_latentpreviewrate": 0,
"VHS_MetadataImage": true,
"VHS_KeepIntermediate": true,
"camera_comfyui_rev": 1
},
"version": 0.4
}