NodeTool on Comfy — Open Source Higgsfield challenge entry
NodeTool: the open-source AI filmmaking studio, rendering on ComfyUI.
Direct a film shot by shot in NodeTool’s Storyboard. Pick a camera move for each shot, render it on Comfy Cloud with a pinned, open-weights ComfyUI workflow (Wan 2.2 or LTX-2.3), keep every take, and choose the take that goes into the timeline. The ComfyUI graph behind every render is one click away and editable.
| Clip model | Graph | Clip |
|---|---|---|
comfyui-workflow/wan2.2-ti2v-5b |
Wan 2.2 TI2V 5B, 20 steps | 1280×704, 24 fps, up to 121 frames |
comfyui-workflow/wan2.2-i2v-a14b |
Wan 2.2 I2V A14B high and low noise, 4-step lightx2v LoRAs | 832×480, 16 fps, up to 81 frames |
comfyui-workflow/ltx-2.3-i2v |
LTX-2.3 22B, half-size pass, x2 latent upscale, refine pass, audio | 1280×704, 24 fps, up to 241 frames |
comfyui-workflow/minimax-h3-i2v |
MiniMax H3 with the turbo LoRA, audio. Off unless NODETOOL_COMFY_ENABLE_RESTRICTED_LICENSE_MODELS=1, because its license excludes the EU, the UK, the US and South Korea |
864×480, 24 fps |
The graphs live in
comfy-workflow-models.ts
and comfy-workflow-graphs.ts.
Each Wan and LTX graph also ships as an editable Shot Director example.
- Editable graphs: the
Shot Directorexample workflows. A test keeps each equal to the graph the provider runs. - Camera presets (open JSON):
packages/presets/catalog/camera/ - Comfy node for graph authors:
lib.comfy.RunWorkflowOnCloudincomfy-cloud.ts, using the Comfy API v2 SDK.
How it works
Storyboard shot ─▶ Render dialog: a "(ComfyUI workflow)" clip model
still + camera preset │
▼
shot prompt + compiled preset clause ─▶ generate_media
│
▼
ComfyCloudProvider.imageToVideo ─▶ pinned graph, Comfy API v2 SDK
│
▼
take added to the shot ─▶ pick a take ─▶ timeline clip follows the pick
- The shot’s still is the first frame. The camera preset compiles to the
clause written for the model’s family (
local-wanfor the Wan graphs,ltxfor LTX-2.3) and joins the shot prompt. - The provider writes prompt, seed, size (from the board’s aspect ratio) and frame count (from the shot duration, on the model’s latent grid) into the pinned graph, uploads the still and submits the job. Cancelling the render cancels the Comfy job.
- The result is a take on the shot. Earlier takes stay, and the timeline clip changes only when you pick a take in the gallery.
The Router partner models on the same provider (Seedance, Kling, Veo and others) are a separate path. They are partner APIs and are not part of the open-weights render path.
The Wan 2.2 TI2V 5B graph
Wan 2.2 TI2V 5B image-to-video, ComfyUI core nodes only, no partner/API nodes:
| Node | Class | Setting |
|---|---|---|
| 37 | UNETLoader |
wan2.2_ti2v_5B_fp16.safetensors |
| 38 | CLIPLoader |
umt5_xxl_fp8_e4m3fn_scaled.safetensors, type wan |
| 39 | VAELoader |
wan2.2_vae.safetensors |
| 48 | ModelSamplingSD3 |
shift 8 |
| 55 | Wan22ImageToVideoLatent |
1280×704, 121 frames |
| 3 | KSampler |
20 steps, cfg 5, uni_pc / simple, seed from the app |
| 57/58 | CreateVideo / SaveVideo |
24 fps |
The model weights are Wan 2.2 (Apache-2.0), which keeps the render path open-weights.
Run it
- Get a Comfy API key at https://platform.comfy.org and add it as
COMFY_API_KEYin NodeTool Settings (it stays server-side). - Open a storyboard, give a shot a still and a camera move, and open Render clip. Choose one of the (ComfyUI workflow) models under Comfy Cloud and render. Render again for another take.
- Open ComfyUI workflow in the render dialog opens an editable copy of the graph.
The example workflow also runs on its own. Headless, from the repository. Pass the still as a file:// ref, because the
CLI run context does not resolve the default package:// sample:
COMFY_API_KEY=... npm run dev:nodetool -- run \
"packages/base-nodes/nodetool/examples/nodetool-base/Shot Director.json" \
--params '{"camera_move":"orbit","seed":7,"source_image":{"type":"image","uri":"file:///path/to/still.jpg"}}'
The golden-render script submits the same pinned graph straight through the Comfy API v2 SDK and writes the video plus a run record:
COMFY_API_KEY=... node scripts/comfy-challenge/golden-render.mjs --move "dolly in" --seed 42 --out out/comfy-golden
What is and isn’t claimed
- Camera presets are prompt guidance for Wan 2.2, not geometric camera control. Motion quality varies per input.
- Comfy Cloud reports no per-job cost to NodeTool, so the run record holds the job id but no price.
- Real renders (job ids, outputs, latency) are listed in
evidence.md, including what has not been verified yet. A Wan 2.2 5B render on Comfy Cloud took 88 to 106 seconds from submit to finished. Wan 2.2 14B took 37 s and LTX-2.3 took 42 s.