Draw Shape On Path (QQ)
Preview your motion path with a bouncing circle before you spend GPU hours
- bg_image
- image
- mask
- output_coordinates
- preview
Wan generation is slow, and the most expensive mistake you can make is discovering at the end that your camera move looks wrong. DrawShapeOnPath exists to catch that before you pay: it takes a set of coordinates and renders a circle, square, or triangle moving along them, one frame at a time, so you can watch the path play back in seconds. It's the dry-run for motion work - and it doubles as a way to build control masks (white shape on black, with blur, fed into a VACE or control pipeline).
The node works the way you'd hope: coordinates (a STRING of points, which is exactly what PowerSplineEditor outputs) defines the path, bg_image is your backdrop (or use bg_color for a solid one), and shape picks circle/square/triangle. shape_width/shape_height set the object size, shape_color its fill. Locations are center locations, and the author explicitly allows coordinates outside the frame for "fly-in" effects - an object entering from off-screen is just a coordinate past the edge.
The dials worth knowing
- frames - how many frames the animation spans. Tie this to your target Wan frame count so the preview matches the real render.
- blur_radius and intensity - soften/harden the shape. For a control mask you'll want blur; for a raw position preview, keep them minimal.
- trailing (0–1) - leaves a fading trail behind the moving shape, which is genuinely useful for eyeballing velocity and easing: if the trail spacing bunches up, your path's timing is uneven.
- animated_fade_start / static_fade_start (0–1) - fade the shape in/out across the animation, or across static frames.
- border_width / border_color - outlines, mainly for contrast on busy backgrounds.
- preview_enabled - toggle the live preview widget.
Outputs: image (the rendered frames), mask (the shape as a mask - feed this into masking/control nodes), output_coordinates (the path echoed back, so you can chain), and preview (an IMAGE for viewing without saving).
When it earns its keep
Two patterns. First, motion preview: wire PowerSplineEditor → DrawShapeOnPath, set frames to match your render, and you've got a cheap animated mockup of the exact trajectory before the 25-minute 720p pass. Second, control prep: render a white blurred dot chasing a path over a black background and use the mask/image as a VACE control input or a regional mask. The "fly-in" support means you can rehearse entrances and exits too, which most simple drawing nodes can't.
Installing it
Part of siraxe/ComfyUI-WanVideoWrapper_QQ - install via ComfyUI Manager (search WanVideoWrapper_QQ/SA-Nodes-QQ), or:
cd ComfyUI/custom_nodes
git clone https://github.com/siraxe/ComfyUI-WanVideoWrapper_QQ.git
Restart ComfyUI. No extra deps.
Gotchas
- Coordinate format matters. Coordinates come from
PowerSplineEditor(or are hand-written) in the same canvas space - mismatched scales produce paths off-frame. If nothing shows, check the format againstoutput_coordinates. framesof 0 renders a single static frame - set it explicitly if you want motion.- Pack note: repo renamed to ComfyUI-SA-Nodes-QQ in v1.3.4; delete any stale
wanwrapper_qqfolder incustom_nodesif old workflows reference it.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| shape | COMBO | circle | 3 options: circle, square, triangle |
| bg_image | IMAGE | — | |
| coordinates | STRING | — | |
| shape_width | INT | 402–1000 | — |
| shape_height | INT | 402–1000 | — |
| shape_color | STRING | white | — |
| bg_color | STRING | black | — |
| blur_radius | FLOAT | 10–100 | — |
| intensity | FLOAT | 1.000.01–100 | — |
| trailingopt | FLOAT | 0.000–1 | — |
| border_widthopt | INT | 00–100 | — |
| border_coloropt | STRING | black | — |
| framesopt | INT | — | |
| animated_fade_startopt | FLOAT | 1.000–1 | — |
| static_fade_startopt | FLOAT | 1.000–1 | — |
| preview_enabledopt | BOOLEAN | true | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| output_coordinates | STRING | — |
| preview | IMAGE | — |