Nodes/RyanOnTheInside/Particle Speed Modulation βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Particle Speed Modulation βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Speed up or slow down particles over time

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Particle Speed Modulation βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • previous_modulation
  • feature
  • PARTICLE_MODULATION
β—„start_frame0β–Ί
β—„end_frame0β–Ί
β—„effect_duration0β–Ί
β—„temporal_easingβ–Ύβ–Ί
β—„palindromefalseβ–Ί
β—„randomfalseβ–Ί
β—„target_speed100β–Ί

The third of this pack's particle attribute modulators, alongside color and size - this one changes how fast particles move as the simulation runs. A system that starts calm and accelerates into chaos, or one that erupts and then settles, reads very differently than particles moving at one constant speed the whole time. That difference is what this node buys you.

How it works

Same modulation machinery as its siblings ParticleColorModulation and ParticleSizeModulation: a fixed window set by start_frame/end_frame (or effect_duration), shaped by temporal_easing (ease_in_out, linear, bounce, elastic, none), with palindrome optionally playing the speed change forward and then back within that window. random swaps a smooth interpolation for a random value between the current speed and target_speed each application, for jittery, less predictable variation instead of a clean ramp.

target_speed (default 100, up to 1000) is what particles' velocity converges toward - set relative to whatever ParticleEmitter's own particle_speed field started them at, so a target_speed lower than the emitter's starting speed decelerates particles over the window, and a higher one accelerates them.

previous_modulation chains this into a combined set alongside color and size modulations (they all apply in sequence, not independently). feature is the reactive hook - plug in a FEATURE from AudioFeatureExtractor, RhythmFeatureExtractor, or any other source in the pack, and particle speed can ramp with the music instead of on a fixed clock - a very natural pairing, since "particles get faster on the buildup" is one of the more intuitive audio-reactive effects to read at a glance.

The inputs and outputs that matter

  • target_speed (default 100, 0–1000) - the speed particles converge toward.
  • start_frame/end_frame/effect_duration - the modulation window.
  • temporal_easing / palindrome / random - how the change plays out.
  • previous_modulation (optional, PARTICLE_MODULATION) - chain in earlier modulations.
  • feature (optional, FEATURE) - drive the modulation reactively.

Output is a single PARTICLE_MODULATION, which plugs into ParticleEmitter's particle_modulation input to actually apply the speed change in the simulation.

How to install it

ComfyUI Manager: search "RyanOnTheInside", install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

then restart. Runs on pymunk, pinned tightly (>=6.8.0,<7.0.0) in requirements.txt - a version conflict there is a real, known way for this whole particle-system side of the pack to fail on install.

Common issues & troubleshooting

Speed never visibly changes. Confirm this is actually wired into ParticleEmitter's particle_modulation input - on its own it's just a definition, the change only happens once ParticleEmissionMask runs the simulation.

Particles seem to teleport or move unnaturally at the transition point. A very short effect_duration/window relative to your total sequence compresses a large speed change into just a few frames, which can look like a jump cut rather than acceleration. Widen the window, or switch temporal_easing off linear for a gentler ramp.

Feature-driven speed spikes look chaotic instead of exciting. That's usually the input FEATURE being noisy, not this node - a raw, unsmoothed signal driving target_speed will jitter frame to frame. Try a smoother source (rms_energy on AudioFeatureExtractor rather than amplitude_envelope, for instance) if the result feels erratic.

CategoryRyanOnTheInside/ParticleSystems/Modulators/ParticleModulators

Inputs (9)

NameTypeDefaultDescription
start_frameINT00–1000Frame to start the modulation effect (0 to 1000)
end_frameINT00–1000Frame to end the modulation effect (0 to 1000)
effect_durationINT00–1000Duration of the modulation effect in frames (0 to 1000)
temporal_easingCOMBOEasing function for the modulation effect ('ease_in_out', 'linear', 'bounce', 'elastic', 'none')
palindromeBOOLEANfalseWhether to reverse the modulation effect after completion
randomBOOLEANfalseWhen enabled, selects random values between start and target
target_speedFLOAT1000–1000Target speed for particles at the end of the modulation (0.0 to 1000.0)
previous_modulationoptPARTICLE_MODULATIONOptional previous modulation to chain with (PARTICLE_MODULATION type)
featureoptFEATUREOptional feature to drive the modulation (FEATURE type)

Outputs (1)

NameTypeDescription
PARTICLE_MODULATIONPARTICLE_MODULATIONβ€”