- 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>
213 lines
4.1 KiB
JSON
213 lines
4.1 KiB
JSON
{
|
|
"id": "00000000-0000-0000-0000-000000000000",
|
|
"revision": 0,
|
|
"last_node_id": 5,
|
|
"last_link_id": 3,
|
|
"nodes": [
|
|
{
|
|
"id": 1,
|
|
"type": "TransformToMatrix",
|
|
"title": "Start pose (identity)",
|
|
"pos": [
|
|
-500,
|
|
320
|
|
],
|
|
"size": [
|
|
315,
|
|
154
|
|
],
|
|
"flags": {},
|
|
"order": 0,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [
|
|
{
|
|
"name": "transformation matrix",
|
|
"type": "MAT_4X4",
|
|
"links": [
|
|
1
|
|
],
|
|
"slot_index": 0
|
|
}
|
|
],
|
|
"properties": {
|
|
"Node name for S&R": "TransformToMatrix"
|
|
},
|
|
"widgets_values": [
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
0.0,
|
|
0.0
|
|
]
|
|
},
|
|
{
|
|
"id": 2,
|
|
"type": "TransformToMatrix",
|
|
"title": "End pose (edit me)",
|
|
"pos": [
|
|
-500,
|
|
540
|
|
],
|
|
"size": [
|
|
315,
|
|
154
|
|
],
|
|
"flags": {},
|
|
"order": 1,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [
|
|
{
|
|
"name": "transformation matrix",
|
|
"type": "MAT_4X4",
|
|
"links": [
|
|
2
|
|
],
|
|
"slot_index": 0
|
|
}
|
|
],
|
|
"properties": {
|
|
"Node name for S&R": "TransformToMatrix"
|
|
},
|
|
"widgets_values": [
|
|
0.0,
|
|
0.0,
|
|
0.3,
|
|
0.0,
|
|
30.0
|
|
]
|
|
},
|
|
{
|
|
"id": 3,
|
|
"type": "CameraInterpolationNode",
|
|
"title": "Interpolate 20 poses",
|
|
"pos": [
|
|
-120,
|
|
430
|
|
],
|
|
"size": [
|
|
226,
|
|
78
|
|
],
|
|
"flags": {},
|
|
"order": 2,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"name": "initial_matrix",
|
|
"type": "MAT_4X4",
|
|
"link": 1
|
|
},
|
|
{
|
|
"name": "final_matrix",
|
|
"type": "MAT_4X4",
|
|
"link": 2
|
|
}
|
|
],
|
|
"outputs": [
|
|
{
|
|
"name": "trajectory",
|
|
"type": "TENSOR",
|
|
"links": [
|
|
3
|
|
],
|
|
"slot_index": 0
|
|
}
|
|
],
|
|
"properties": {
|
|
"Node name for S&R": "CameraInterpolationNode"
|
|
},
|
|
"widgets_values": [
|
|
20
|
|
]
|
|
},
|
|
{
|
|
"id": 4,
|
|
"type": "SaveTrajectory",
|
|
"title": "Save to output/*.npy",
|
|
"pos": [
|
|
170,
|
|
430
|
|
],
|
|
"size": [
|
|
315,
|
|
82
|
|
],
|
|
"flags": {},
|
|
"order": 3,
|
|
"mode": 0,
|
|
"inputs": [
|
|
{
|
|
"name": "trajectory",
|
|
"type": "TENSOR",
|
|
"link": 3
|
|
}
|
|
],
|
|
"outputs": [],
|
|
"properties": {
|
|
"Node name for S&R": "SaveTrajectory"
|
|
},
|
|
"widgets_values": [
|
|
"ComfyUITrajectory"
|
|
]
|
|
},
|
|
{
|
|
"id": 5,
|
|
"type": "MarkdownNote",
|
|
"title": "About this workflow",
|
|
"pos": [
|
|
-1080,
|
|
320
|
|
],
|
|
"size": [
|
|
520,
|
|
430
|
|
],
|
|
"flags": {},
|
|
"order": 4,
|
|
"mode": 0,
|
|
"inputs": [],
|
|
"outputs": [],
|
|
"properties": {},
|
|
"widgets_values": [
|
|
"# Record a camera trajectory\n\nProduces the `.npy` trajectory file consumed by `PC_enricher.json` and `wan_vace_ref_to_video.json` (LoadTrajectory): two poses are SE(3)-interpolated into a smooth 20-step path and saved by **SaveTrajectory** to your ComfyUI **output** directory.\n\n- **Set:** the end pose (shift XYZ in scene units — metric if the cloud came from metric depth — plus theta = pitch, phi = yaw) and `num_steps`.\n- **Then:** move the saved file from `output/` to `input/` so LoadTrajectory can list it. A bundled example (`ComfyUITrajectory_00001.npy`) is already installed by install.py.\n- Chain more CameraInterpolationNode segments (or use CameraTrajectoryNode on a point cloud) for multi-keyframe paths."
|
|
],
|
|
"color": "#432",
|
|
"bgcolor": "#653"
|
|
}
|
|
],
|
|
"links": [
|
|
[
|
|
1,
|
|
1,
|
|
0,
|
|
3,
|
|
0,
|
|
"MAT_4X4"
|
|
],
|
|
[
|
|
2,
|
|
2,
|
|
0,
|
|
3,
|
|
1,
|
|
"MAT_4X4"
|
|
],
|
|
[
|
|
3,
|
|
3,
|
|
0,
|
|
4,
|
|
0,
|
|
"TENSOR"
|
|
]
|
|
],
|
|
"groups": [],
|
|
"config": {},
|
|
"extra": {
|
|
"camera_comfyui_rev": 1
|
|
},
|
|
"version": 0.4
|
|
}
|