InstantCameraMotionBrush
InstantCameraMotionBrush
- MotionBrush
InstantCameraMotionBrush is the shortcut node, and it's the one from this pack I actually reach for. You feed it nothing but an action and a speed, it hands back a ready-made MotionBrush, and that brush - wired into DragNUWA Run MotionBrush - produces a clean camera pan, tilt, or zoom across the whole frame. No trajectories to draw, no JSON to paste. It's the "make my still image feel alive" button.
Mechanically it's doing the boring-but-reliable thing: it lays a grid of points across the frame (10x10 by default) and computes, for each frame of the clip, where every grid point should be if the camera were executing that exact move. Pan left? Every point shifts left by speed pixels per frame. Zoom in? Points spread outward from the center proportionally to their distance from it. Those computed point paths get turned into a dense (frames, height, width, 2) flow tensor via the same trajectory-interpolation routine the tracking-points loaders use. It's not optical flow and it doesn't reason about scene content - it's pure synthetic camera geometry, which is exactly what you want for a camera move and would be useless for object motion.
The inputs
- model_length - frames in the clip, default 14. Keep it matched to your checkpoint.
- width / height - the brush resolution, defaults 576x320. Match your checkpoint's
dimension. The pairing matters: a brush built for 576x320 fed into a 512x512 model won't line up. - action -
left,right,up,down,zoomin,zoomout. That's the whole menu. - speed - a float, default 1.0. This is your per-frame displacement in pixels, so
speed=1on a 14-frame clip is subtle, andspeed=5+ gets you a real dolly. There's no cap, but beyond ~8 the motion gets swimmy and SVD starts producing warped frames instead of a camera move.
Output
A single MotionBrush. Feed it straight into DragNUWA Run MotionBrush with your image, or layer it under something else with CompositeMotionBrush - for instance, camera zoom-out plus an InstantObjectMotionBrush on a foreground subject for a proper dolly-pull.
Notes and gotchas
The brush is generated at whatever width/height you declare, with no reference to your actual image. If the numbers don't match the checkpoint dimension, the run node still applies it, and the mismatch shows up as drifted or misaligned motion. Keep the three numbers in lockstep across the whole workflow.
Also worth knowing: this is a generator, so it's cheap and instant - no model load, no cuda:0 hardcoding involved. The heavy lifting only happens when the brush meets DragNUWA Run MotionBrush. That makes it great for iterating: tweak action/speed, re-run, and the only cost is the actual video inference. The reddit-era demos for this pack were basically people zooming and panning stills into clips, and this node is why that was a one-node setup.
Same pack-level caveats as everywhere: this is 2024-era SVD tech, so the output quality trails modern image-to-video, and zoom-in particularly can produce that classic "breathing" artifact where the center of the frame looks like it's being sucked inward. Dial speed down and let the motion be gentle.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model_length | INT | 14 | — |
| width | INT | 576 | — |
| height | INT | 320 | — |
| action | COMBO | left | 6 options: left, right, up, down, zoomin, zoomout |
| speed | FLOAT | 1.00 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MotionBrush | MotionBrush | — |