đź’€Motion Opacity
Fade layers in and out instead of blinking them on
- Opacity
Any animation where a layer appears or disappears needs a fade, and đź’€Motion Opacity is the S4Motion node that does it. It's the simplest effector in the pack - two values, a curve, and timing - but it's the one you'll lean on constantly for intros, outros, and cross-dissolves.
Like the rest of the effectors, it does nothing standalone. Its Opacity output (an S4_OPACITY_EFFECTOR) goes into the opacity_effector socket on đź’€Motion Config, which is what actually composites frames. This node only decides each frame's alpha.
The inputs:
- default_opacity - starting opacity, 0 (invisible) to 1 (fully opaque).
- target_opacity - ending opacity.
- duration / delay - how long the fade takes and when it starts, in seconds.
- motion_curve -
linear,ease_in,ease_out,ease_in_out.ease_in_outmakes a fade read as deliberate;linearis fine for quick flashes. - inverse - fade out then back in (or the reverse of your keyframes).
- loop - repeat for the timeline.
The math to remember: effector opacity multiplies Motion Config's static opacity. Default 1 here means "leave the base alone." If Config has opacity 0.5 and this node goes 1 → 0, the layer fades from 50% to fully invisible - the base value acts as a ceiling.
Under the hood, opacity is applied through the layer's alpha channel when Motion Config composites, so a fade produces a clean dissolve against the background rather than a cheap darkening. If your layer is a JPG without alpha, Motion Config still fades it by handling the alpha during compositing - you don't need to pre-prepare RGBA inputs. When you pipe the frame sequence out, preserve_alpha on Motion Config decides whether the fade is baked in or exported as a real alpha channel for downstream compositing.
Install
cd ComfyUI/custom_nodes/
git clone https://github.com/S4MUEL-404/ComfyUI-S4Motion.git
pip install -r ComfyUI-S4Motion/requirements.txt
or ComfyUI Manager → "S4Motion" → install → restart.
This is the pack's smallest node and there's no community lore around it (S4Motion doesn't appear on reddit at all), so the examples/Opacity.json workflow is the ground truth for wiring. Set default 0 → target 1 with ease_out and you've got your standard fade-in.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| default_opacity | FLOAT | 1.000–1 | — |
| target_opacity | FLOAT | 1.000–1 | — |
| duration | FLOAT | 1.000–30 | — |
| delay | FLOAT | 0.000–30 | — |
| motion_curve | COMBO | linear | 4 options: linear, ease_in_out, ease_in, ease_out |
| inverse | BOOLEAN | false | — |
| loop | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| Opacity | S4_OPACITY_EFFECTOR | — |