Particle Size Modulation β‘π ‘π π £π
Grow or shrink particles over the simulation
- previous_modulation
- feature
- PARTICLE_MODULATION
The sibling to ParticleColorModulation, aimed at size instead of color: particles that start at whatever ParticleEmitter's particle_size set them to, then grow or shrink toward a target_size over a defined window. Think sparks that shrink to nothing as they age, or a bloom effect where particles swell as a track builds - the kind of thing that reads as "alive" rather than a static sprite spray.
How it works
Same timing machinery as the other particle modulators in this pack: start_frame/end_frame (or effect_duration as an alternative way to size the window) plus temporal_easing (ease_in_out, linear, bounce, elastic, none) shape the ramp, and palindrome plays the size change forward then back within that window rather than holding at the target. random swaps the smooth, deterministic interpolation for a random pick between the starting size and target_size on each application - useful for a flickery, less uniform look instead of a clean scale-up.
target_size (default 20, up to 400) is the size particles converge toward - note this shares the same units as ParticleEmitter's own particle_size field, so set it relative to whatever size you gave particles at spawn.
The two optional inputs make this composable: previous_modulation chains earlier modulations (color, speed, or another size modulation) into one combined PARTICLE_MODULATION, and feature lets an external FEATURE signal - audio amplitude, MIDI velocity, whatever's already flowing through your graph - drive the size change instead of a fixed frame window, so particles can visibly pulse in size on a beat rather than growing on a hardcoded schedule.
The inputs and outputs that matter
target_size(default 20, 0β400) - the size 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 size 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 the particle-system side of this pack to fail on install.
Common issues & troubleshooting
Node runs but particle size never changes. It needs to be wired into ParticleEmitter's particle_modulation input - this node only produces a definition, the actual size change happens during simulation in ParticleEmissionMask.
Growth looks abrupt rather than gradual. That's temporal_easing set to linear or none - switch to ease_in_out for a smoother ramp, or check that effect_duration/end_frame isn't set too short relative to your total sequence length, which compresses the whole transition into a handful of frames.
Combined with a previous_modulation chain and sizes look off. Modulations in a chain apply in sequence, not independently - if size looks wrong, temporarily unplug the earlier links to confirm this node alone behaves as expected before re-adding the rest of the chain.
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_size | FLOAT | 20.00β400 | Target size for particles at the end of the modulation (0.0 to 400.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 | β |