Nodes/Eden.art nodesuite/Organic Fill Animation 🌿
ComfyUI Node Runs on cloud

Organic Fill Animation 🌿

Watch a shape grow from a seed β€” an organic 'fill the mask' animation, fully parameterized

By edenartlabΒ·Created 3 years agoΒ·Updated 6 months agoΒ· 119
Organic Fill Animation 🌿
  • image
  • frames
β—„target_seconds5.0β–Ί
β—„target_size512β–Ί
β—„threshold_value128β–Ί
β—„seed_radius5β–Ί
β—„growth_threshold0.50β–Ί
β—„noise_low0.0β–Ί
β—„noise_high1.2β–Ί
β—„starting_positioncenterβ–Ί
β—„position_randomness0.00β–Ί
β—„island_connection_radius0.0005β–Ί
β—„active_region_padding3β–Ί
β—„fps24β–Ί
β—„num_seeds1β–Ί
β—„invert_inputfalseβ–Ί
β—„looptrueβ–Ί
β—„hold_final_frame_fraction0.25β–Ί
β—„color_channelluminanceβ–Ί

Eden_OrganicFillAnimation turns an image into a video of a shape growing into being. It converts your image to a mask, drops one or more "seeds" on it, and animates the mask spreading outward from those seeds with organic, noise-driven growth - the effect looks like a liquid, a plant, or a stain slowly filling the shape. It's a procedural animation generator: no video model, no sampler, just a growth simulation producing frames.

How it works

The core is a cellular-growth simulation. Your image gets reduced to a threshold mask - pick color_channel (luminance, red, green, blue, or random) and a threshold_value (default 128), and pixels below the threshold count as "fillable area." A seed of seed_radius pixels is placed (position chosen by starting_position - center, corners, edges, or random - with position_randomness jittering it). Each step, the boundary pixels are tested against a noise field: a pixel grows only where the noise value exceeds growth_threshold. noise_low and noise_high define that noise field's range and are the main "how wild is the growth" knobs. island_connection_radius lets detached regions get connected back to the main blob; active_region_padding bounds how far the growth can wander.

The output is a frame sequence resampled to hit target_seconds at your fps, with a hold on the final frame (hold_final_frame_fraction) and optional loop (which plays the growth in reverse back to the start for a seamless cycle). num_seeds (1–10) grows from several points at once. invert_input flips which pixels are fillable.

Inputs you'll actually touch

  • image (IMAGE) - the input.
  • threshold_value, color_channel - what counts as fillable.
  • growth_threshold + noise_low/noise_high - the organic feel.
  • starting_position, num_seeds - where growth starts.
  • target_seconds, fps, loop - the video's shape.

Output: frames (IMAGE, a batch of frames ready for a video encode).

Where it fits

It's a VFX gadget for animated transitions and generative-video scaffolding. Feed it a logo mask and you get an organic logo-reveal. Feed it a depth-based mask and you get a fill animation that pairs with image-to-video. It slots in front of a video encoder, or the frames can be fed back into ComfyUI as a conditioning reference. It's niche, and honestly that's fine - it does one distinctive thing well and it's GPU-cheap (CPU simulation, mostly torch tensor ops).

Installing it

Part of the Eden.art nodesuite. Install via ComfyUI Manager (search "Eden.art nodesuite") or git clone https://github.com/edenartlab/eden_comfy_pipelines into custom_nodes/, then pip install -r requirements.txt and restart.

Common issues

Growth can stall if growth_threshold is too high - the simulation just stops filling. If a run finishes instantly with a mostly-empty result, drop growth_threshold. The noise range defaults (0.0–1.2) are a safe starting band. And remember: this generates frames, not a video file - you still need a video-save/encode node downstream, and long durations at high fps produce a lot of frames to hold in memory.

CategoryEden 🌱/animation

Inputs (18)

NameTypeDefaultDescription
imageIMAGEβ€”
target_secondsFLOAT5.00.5–120β€”
target_sizeINT51264–2048β€”
threshold_valueINT1281–254β€”
seed_radiusINT51–50β€”
growth_thresholdFLOAT0.500–1β€”
noise_lowFLOAT0.00–2β€”
noise_highFLOAT1.20–3β€”
starting_positionCOMBOcenter10 options: center, top_left, top_right, bottom_left, bottom_right, top_center, +4
position_randomnessFLOAT0.000–1β€”
island_connection_radiusFLOAT0.00050–0.05β€”
active_region_paddingINT30–20β€”
fpsFLOAT241–60β€”
num_seedsINT11–10β€”
invert_inputBOOLEANfalseβ€”
loopBOOLEANtrueβ€”
hold_final_frame_fractionFLOAT0.250–2β€”
color_channelCOMBOluminance5 options: luminance, red, green, blue, random

Outputs (1)

NameTypeDescription
framesIMAGEβ€”