Load MotionBrush From Tracking Points
Load MotionBrush From Tracking Points
- model
- MotionBrush
Load MotionBrush From Tracking Points is the bridge between the two input styles in this pack. DragNUWA Run eats tracking points directly; the brush-based run node eats a dense MotionBrush. This node takes the exact same tracking-points JSON you'd type into the run node and converts it into a brush, so you can build a point-driven motion field and then route it through the brush pipeline - masking it, compositing it, layering it with camera moves.
Mechanically it's the same interpolation the run node does internally. Your JSON is a list of trajectories ([[[x0,y0],[x1,y1],...], ...], one inner list per drag handle), and each trajectory is spline-interpolated across the full model_length frames, then written as per-pixel displacement into a dense (frames, height, width, 2) flow tensor. Sparse points in, dense field out. The single-point case is handled too: a handle with just one coordinate gets nudged by a pixel so it still registers as a stationary constraint rather than vanishing.
Inputs
- model - the
DragNUWAobject. This one genuinely needs it: the brush is built at the model'smodel_lengthand resolution, so there's no way to size it without the checkpoint loaded. - tracking_points - the JSON string. Same format and same source as DragNUWA Run: write it by hand, or generate it with the author's
tools/draw.htmltrajectory tool and paste the output. Coordinates are in model pixels.
Output
A MotionBrush ready for BrushMotion, a composite, or direct entry into DragNUWA Run MotionBrush.
Why you'd bother
Two reasons. One: trajectory drawing with the web tool gives you much finer, curvier paths than anything the instant brushes can synthesize, and this node lets you keep those fine paths while still using the brush pipeline's masking and compositing. Two: it's the "authoritative" path for pose-driven work - Split Tracking Points outputs exactly this JSON format, so a pose-keypoint pipeline can flow into a brush here and get masked or layered.
The catch: the model dependency
This is the version that needs a loaded checkpoint, and it's the reason the pack ships a twin. Load MotionBrush From Tracking Points Without Model does the identical conversion with explicit model_length/width/height inputs and no checkpoint required. If you're prototyping, use the Without Model node - this one is for when you're already inside a run workflow and the model's loaded anyway.
Same pack-level ground rules as everywhere: coordinates are model-pixel space (576x320 default), keep model_length consistent across every node, expect the hardcoded cuda:0 load, and remember the output quality ceiling is 2024-era SVD. For drawing a genuinely curved, hand-made trajectory and turning it into video, this is still the smoothest route the pack offers.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | DragNUWA | — | |
| tracking_points | STRING | [[[25,25],[128,128]]] | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MotionBrush | MotionBrush | — |