Particle Speed Modulation β‘π ‘π π £π
Speed up or slow down particles over time
- previous_modulation
- feature
- PARTICLE_MODULATION
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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| start_frame | INT | 00β1000 | Frame to start the modulation effect (0 to 1000) |
| end_frame | INT | 00β1000 | Frame to end the modulation effect (0 to 1000) |
| effect_duration | INT | 00β1000 | Duration of the modulation effect in frames (0 to 1000) |
| temporal_easing | COMBO | Easing function for the modulation effect ('ease_in_out', 'linear', 'bounce', 'elastic', 'none') | |
| palindrome | BOOLEAN | false | Whether to reverse the modulation effect after completion |
| random | BOOLEAN | false | When enabled, selects random values between start and target |
| target_speed | FLOAT | 1000β1000 | Target speed for particles at the end of the modulation (0.0 to 1000.0) |
| previous_modulationopt | PARTICLE_MODULATION | Optional previous modulation to chain with (PARTICLE_MODULATION type) | |
| featureopt | FEATURE | Optional feature to drive the modulation (FEATURE type) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| PARTICLE_MODULATION | PARTICLE_MODULATION | β |