Nodes/ComfyUI S4Motion/đź’€Motion Config
ComfyUI Node

đź’€Motion Config

The control room of S4Motion — where all the effectors actually render

By S4MUEL-404·Created about a year ago·Updated 11 months ago· 4
đź’€Motion Config
  • layer_image
  • background_image
  • rotation_effector
  • position_effector
  • scale_effector
  • opacity_effector
  • distortion_effector
  • mask_effector
  • shake_effector
  • Output path
  • Frame sequence
â—„time2.0â–ş
â—„fps15â–ş
â—„loopfalseâ–ş
â—„formatwebpâ–ş
â—„preserve_alphafalseâ–ş
â—„rotation0â–ş
â—„position_x0â–ş
â—„position_y0â–ş
â—„scale1.0â–ş
â—„opacity1.00â–ş

Every other motion node in the S4Motion pack is a dead end by itself - a đź’€Motion Position or đź’€Motion Rotation on its own does nothing. đź’€Motion Config is the node they all feed into, and the only one that actually produces output. Think of it as a tiny After Effects comp: you give it a layer, a background, a timeline, and it renders the frames.

Here's the core setup. layer_image is the thing that moves, background_image is what it sits on top of. time (seconds, 0.1–30) and fps (1–60) define the timeline - the node renders time × fps frames. loop makes the saved animation repeat, format picks webp (default) or apng for the file it writes, and preserve_alpha keeps RGBA channels in the output frames instead of flattening to RGB.

You can animate four things statically right on the node - rotation, position_x, position_y, scale, opacity - no effector needed. But that's the boring path. The interesting path is the seven optional inputs down the bottom: rotation_effector, position_effector, scale_effector, opacity_effector, distortion_effector, mask_effector, shake_effector. Each one takes the matching effector node's output, and the two combine: effector rotation values add to the static rotation, effector scale and opacity multiply theirs, and effector positions add to position_x/y. So an effector's "default" value of 0 (or 1) means "no change from the static base."

Each effector output is a callable object with a type tag, and the node validates the type on connection - wire a Position effector into the rotation_effector socket and you get a clear "effector type mismatch" error telling you exactly what to connect where. That validation is honestly the best part of this pack's UX.

Outputs

  • Output path (STRING) - the absolute path of the webp/apng file it saved. Useful for passing into a preview or save node.
  • Frame sequence (IMAGE) - every rendered frame, ready to wire into SaveAnimatedWEBP, a video saver, or back into another part of your graph.

The gotcha that bites everyone

The animation file is not saved to ComfyUI's usual output/ folder. It goes to custom_nodes/ComfyUI-S4Motion/output/ - inside the pack's own directory - with a random name like motion_12345678.webp. If you can't find your render, that's where it is. If you want the file somewhere sane, take the Frame sequence output and save it yourself.

Install

ComfyUI Manager → search "S4Motion" → install → restart, or:

cd ComfyUI/custom_nodes/
git clone https://github.com/S4MUEL-404/ComfyUI-S4Motion.git
pip install -r ComfyUI-S4Motion/requirements.txt

One more thing: the pack's requirements.txt lists scipy, scikit-image, and opencv-python as "optional," but đź’€Motion Position On Path imports them unconditionally at load time - if you want the whole pack to boot, install everything in the requirements file, not just the "core" three. And if you see a "đź’€Motion Config" node in a workflow you downloaded, you need this pack installed - there's no reddit discussion of it to lean on, so the examples/ folder in the repo is your best reference for wiring.

Categoryđź’€S4Motion

Inputs (19)

NameTypeDefaultDescription
layer_imageIMAGE—
background_imageIMAGE—
timeFLOAT2.00.1–30—
fpsINT151–60—
loopBOOLEANfalse—
formatCOMBOwebp2 options: webp, apng
preserve_alphaBOOLEANfalse—
rotationFLOAT0-360–360—
position_xFLOAT0-4096–4096—
position_yFLOAT0-4096–4096—
scaleFLOAT1.00.1–10—
opacityFLOAT1.000–1—
rotation_effectoroptS4_ROTATION_EFFECTOR—
position_effectoroptS4_POSITION_EFFECTOR—
scale_effectoroptS4_SCALE_EFFECTOR—
opacity_effectoroptS4_OPACITY_EFFECTOR—
distortion_effectoroptS4_DISTORTION_EFFECTOR—
mask_effectoroptS4_MASK_EFFECTOR—
shake_effectoroptS4_SHAKE_EFFECTOR—

Outputs (2)

NameTypeDescription
Output pathSTRING—
Frame sequenceIMAGE—