- 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>
5.8 KiB
5.8 KiB
Workflow review — July 2026
Scope: all 17 workflows/*.json. Tooling used (kept in notebooks/):
validate_workflows.py— checks every storedwidgets_valuesarray against the currentINPUT_TYPESof the node it targets (count + combo values). Run it whenever a node's inputs change.rework_workflows_2026_07.py— the one-shot migration that produced the current state of the files (documented below, idempotent-ish).
What was wrong (now fixed)
ComfyUI applies widgets_values positionally. When a node gains/loses/
reorders widgets, old workflows load with silently shifted values — no error,
just wrong settings. The validator found 28 such cases across 9 files:
| Node | Old → new widgets | Files affected | Migration applied |
|---|---|---|---|
DepthEstimatorNode |
2 → 3 (median_blur_kernel added) |
5 files, 12 nodes | appended default 1 |
FisheyeDepthEstimator |
6 → 8 (mode, median_blur_kernel added) |
2 files | inserted SOFTMERGE (radius was already configured), appended 1 |
PointCloudCleaner |
2 → 4 (screen-space width/height added; units changed) |
PointCloud.json |
reset to defaults [1024, 1024, 1.0, 3] — old world-unit values were meaningless in the new schema (retune on GPU box) |
CameraMotionNode |
6 → 9 (widen_mask, invert_mask, points_to_mask) |
3 files | appended defaults [0, false, false] |
CameraInterpolationNode |
0 → 1 (num_steps) |
3 files | set 2 (keyframes only — CameraMotionNode/VideoCameraMotionSequence interpolate frames themselves) |
PointcloudTrajectoryEnricher |
20 → 16 (render/reproject-back options internalized) | PC_enricher.json |
first 13 kept 1:1, new tail set to defaults |
Beyond widget drift:
outpainting_fisheye.jsonwas structurally broken: its sevenReprojectImagenodes stored patch rotations (±42°) in a pre-2025 widget slot that now lands on theinverseboolean (42 → truthy). Repaired by adding twoTransformToMatrixnodes (±42°) wired totransform_matrixinputs and setting properinverseflags — mirroring the structure ofoutpainting_fisheye_flux.json.outpainting_fisheye_flux.jsonstored45in oneinverseslot (truthy-by-accident); normalized all seven to real booleans.wan_vace_ref_to_video.jsonpointed the UNETLoader atwan2,1_vace14B_fp16.safetensors(comma typo + missing underscore) — no such file can exist; fixed towan2.1_vace_14B_fp16.safetensors(matchesinstall.sh's download name).Pointcloud walker.json/Test pointcloud_loading.jsonrenamed topointcloud_walker.json/test_pointcloud_loading.json(spaces break shell ergonomics and URL linking).- README workflow table was stale (claimed
pointcloud_walkerwas an "Open3D GUI", missed 5 workflows); rewritten with per-workflow extras columns.
Every workflow now carries an embedded “About this workflow” MarkdownNote (purpose, stages, what to set, required packs/models), meaningful group boxes, and titles on the nodes users are expected to edit.
Improvements — applied 2026-07-16
Implemented by notebooks/apply_improvements_2026_07.py plus repo changes:
- Runnable defaults ✅ —
example_inputs/shipscamera_example_pinhole.jpg,camera_example_fisheye.jpgandComfyUITrajectory_00001.npy;install.pycopies them into ComfyUI'sinput/dir (no overwrite), and every LoadImage/LoadTrajectory default points at them. Exception:video_camera.jsonstill needs a user video (none bundled — a clip would bloat the archive). - Template browser ✅ —
workflows/is already an accepted template directory name (per docs.comfy.org, alongsideexample_workflows), so no rename was needed; added the missing same-name.jpgthumbnails (10 workflows, generated 512 px fromdemo_images/) and removed the strayworkflows/__init__.py. Legacy graphs moved toworkflows/legacy/, which keeps them out of the browser. video_camera.jsondep trim ✅ — removed the dead-endBlurMaskFast(blur radius was 0/0 — a no-op even if wired), theeasy mathIntpad computation and the then-danglingVHS_VideoInfo; pad top/bottom now use the node's stored values (set to(W−H)/2, note explains); swapped KJNodes'GetImageRangeFromBatchfor the built-inImageFromBatch. Remaining pack deps: VideoHelperSuite + Florence2 (was five packs).- Fisheye-outpaint consolidation ✅ — SD-checkpoint variant moved to
workflows/legacy/outpainting_fisheye.json. - Depth consolidation ✅ —
workflows/legacy/Fisheye_depth_workflow.json. - Trajectory recorder ✅ — new
workflows/record_trajectory.json(TransformToMatrix ×2 → CameraInterpolationNode → SaveTrajectory), and the bundled example trajectory covers the zero-setup path. - CI guard ✅ —
.github/workflows/validate.ymlruns the workflow validator, installer-logic tests and the 4D smoke suite on CPU torch for every PR and push to main. - Schema versioning ✅ — every workflow now carries
extra.camera_comfyui_rev = 1; bump on the next migration. - Bonus: a bidirectional link-integrity sweep found and pruned 8 stale link
references (pre-existing) plus one dangling
maskinput inoutpainting_fisheye_flux.json.
Still open
- Retune migrated defaults on the GPU box.
PointCloudCleaner(inPointCloud.json) and the voxel-merge tail ofPointcloudTrajectoryEnricher(inPC_enricher.json) were reset to schema defaults; verify visual quality and bake in good values. - Load-and-queue pass in real ComfyUI. All checks here are static; open each template once on the GPU box to confirm layout and execution.
- Bundle a small example video for
video_camera.jsonif archive size allows (or document a public sample clip URL in its note).