Video Motion Trails
Light trails without the after-effects
- video
- motion
- video
A trail effect is one of those things everybody wants and nobody wants to build. The naive version - blend the last N frames together - trails the whole picture, so a camera pan smears everything including the background you were happy with. Video Motion Trails does the version you actually wanted: measure the motion, and leave a fading trail only behind things that moved relative to the world. A pan leaves none.
The result is the look you would otherwise go to After Effects for: a dancer's hands glowing a path behind them, a car's lights drawing a line, a sword leaving an arc, while the room stays exactly as it was.
Inputs
video is the clip, at least two frames. Frame rate and audio carry through untouched.
length is how many frames a trail takes to fade - 3 is a short tail, 8 the default, 30 long streaks. spacing is frames between echoes: 1 gives a continuous smear, 4 gives separate copies rather than one line. Those two together are most of the creative range; a long length with a large spacing is the staccato stop-motion look, and 1 with anything is the smooth one.
opacity (default 0.6) is how strongly the trail shows and how it survives - at 1 it is solid and reads more like a duplicate than a light streak. threshold is the pixels-per-frame speed that earns a trail: 0.5 catches slight motion, 1.0 default, 4.0 only fast action. This is the control that decides whether your subject trails or your subject's eyebrows trail.
blend is where the look lives. normal paints the trail over the frame. lighten keeps only what is brighter than what is already there, which is the additive-light look and the one to reach for on anything glowing. add glows harder and blows out faster - fine on a dark clip, mush on a bright one.
ignore_camera (default true) subtracts a pan and its parallax, so a moving shot trails only its subjects. Turn it off and everything the camera sweeps past trails, which is a different and occasionally useful effect: it makes the camera itself feel like a brush.
motion is optional, and takes a measurement from Video Motion of this same clip at any size. Worth wiring if the graph already measures flow for another node.
Output is one video, same size, length, frame rate and audio.
Getting a good result
Order matters more than any single setting. Trail artifacts compound, so make the trail early in the chain, before grading or upscaling, and let the rest of the graph work on it. A trail added after an upscale will be a trail added at 4× the resolution by measuring 4× the flow - slower, and no better looking.
The other habit worth forming: start with threshold high (4.0) and bring it down. A high threshold gives you the clean "only the fast thing trails" version. Bringing it down gradually turns the effect on for more and more of the frame, and you can stop at the exact point where it starts looking like a blur rather than a trail. Going the other direction from a mushy result is much harder to judge.
Install
ComfyUI Manager → search WAS Node Suite v3 → install → restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
ComfyUI 0.14.0+, Python 3.10+. The pack installs nothing - requirements.txt is a comment line, no pip runs at install or on later starts, and v3 cut outbound requests entirely unless you explicitly set features.network: true. First start is a second or two slower while config.yaml is written and the bytecode compiled. This node needs no model weights; a learned flow network is optional and lives in ComfyUI/models/optical_flow.
Rough edges
Trails through a cut. Flow across a hard cut is meaningless, and a trail is exactly the kind of effect that shows it - you can get a streak dragged from the old shot into the new one. Split the clip first, or accept it as part of the glitch.
Everything is a subject. If ignore_camera is true and things still trail that should not, they are moving relative to the world - leaves, smoke, a person's hair. There is no "only the important motion" setting; that is the threshold and, eventually, a mask.
Maskless by design. Unlike Motion Blur, this node has no mask input. If you need "trail only on this subject", the way to do it is to trail the whole clip and composite back, or trail a version of the clip with the subject isolated.
Cost. Trails hold length frames of history per output frame, and the flow measurement is the expensive part. A length of 240 with a 20-second clip is a lot of clip resident at once.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | The clip, at least two frames. | |
| length | FLOAT | 8.00.5–240 | Frames a trail takes to fade: 3 = a short tail; 8 = default; 30 = long streaks. |
| spacing | INT | 11–120 | Frames between echoes: 1 = a continuous smear; 4 = separate copies. |
| opacity | FLOAT | 0.600–1 | How strongly the trail shows: 0 = none; 0.6 = default; 1 = solid. |
| threshold | FLOAT | 1.00–100 | Speed, in pixels per frame, that leaves a trail: 0.5 = slight motion too; 4 = only fast action. |
| blend | COMBO | normal | How the trail is laid over the frame: 'normal' paints it; 'lighten' keeps only what is brighter, for light trails; 'add' glows. |
| ignore_camera | BOOLEAN | true | `true` = a pan, its parallax included, leaves no trail; `false` = everything the camera sweeps past trails. |
| motionopt | WAS_MOTION | Motion from Video Motion, measured from this same clip at any size. Left empty, it is measured here at 768 px on the long side. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | The clip with its trails: same size, length, frame rate and audio. |