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

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

Shift your particles' color over the simulation

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

ParticleEmitter gives particles a starting color; this node makes that color change as the simulation runs. Think embers cooling from white-hot to red, or a color mood shift as a track builds - particles that start one color and drift toward another over a defined window, either on a fixed schedule or driven by an external reactive signal.

How it works

Like most of this pack's particle modulators, it uses a fixed timing window: start_frame/end_frame (or effect_duration as an alternative way to size that window) plus temporal_easing (ease_in_out, linear, bounce, elastic, none) shape how the transition ramps in and out. palindrome plays the modulation forward then reverses it within that window instead of holding at the target. random, when enabled, picks a random value between the starting color and target_color each time rather than a smooth, deterministic interpolation - useful if you want flickering variation instead of a clean gradient shift.

target_color is a literal RGB string, (255,255,255) by default - set it to whatever hue you want particles converging toward.

The two optional inputs are what make this composable rather than a one-off effect. previous_modulation chains modulations together - the same pattern used throughout this pack's force fields and emitters - so you can stack a color shift and a size shift and a speed shift into one combined modulation set, applied in sequence. feature lets an external FEATURE signal (from AudioFeatureExtractor, RhythmFeatureExtractor, or any other Feature source in the pack) drive the modulation instead of running purely on the fixed frame window - so the color shift can happen on a beat rather than a hardcoded timestamp.

The inputs and outputs that matter

  • target_color (default (255,255,255)) - the color particles converge toward.
  • start_frame/end_frame/effect_duration - the modulation window.
  • temporal_easing / palindrome / random - how the transition 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 color shift 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. The particle system runs on pymunk, pinned tightly in requirements.txt (>=6.8.0,<7.0.0) - a version mismatch there is a real, known source of install-time trouble specifically for this side of the pack.

Common issues & troubleshooting

Modulation node built, but nothing changes when you run the workflow. This node produces a definition, not the effect itself - it needs to actually be wired into ParticleEmitter's particle_modulation input (directly, or as the last link in a previous_modulation chain) before it does anything.

Chained several modulations and the result looks nothing like any single one. Chained modulations apply in sequence, not in isolation - if you're debugging a specific color behavior, temporarily disconnect the chain back to just this node alone to confirm it looks right before re-adding the rest.

Wired in a feature but the color still just follows the fixed timing. Double check the feature is actually connected end to end - with no feature input, this node quietly falls back to its own start_frame/end_frame/temporal_easing schedule, which can look identical to a badly-wired feature at a glance.

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_colorSTRING(255,255,255)Target color for particles at the end of the modulation (RGB tuple)
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β€”