Nodes/ꘇ Genereti/ꘇ top.noise
ComfyUI Node

ꘇ top.noise

1–4D Perlin/simplex/value noise with fBm, and it animates

By languel·Created about a month ago·Updated 3 days ago· 1
ꘇ top.noise
    • image
    ◄algorithm▾►
    ◄dimensions3►
    ◄width512►
    ◄height512►
    ◄scale8.00►
    ◄seed0►
    ◄z0.00►
    ◄octaves1►
    ◄lacunarity2.00►
    ◄gain0.50►
    ◄time0.00►
    ◄speed0.20►
    ◄loop0.0►
    ◄loop_radius1.00►
    ◄color▾►
    ◄performance{}►
    ◄offset_x0.00►
    ◄offset_y0.00►
    ◄offset_z0.00►
    ◄offset_t0.00►
    ◄amplitude1.00►
    ◄bias0.00►
    ◄shapeoff►
    ◄warp0.00►
    ◄power1.00►
    ◄normalizeoff►

    Noise is the seed of every procedural look: fog, marble, cloud, rust, organic warp maps, "painterly" feedback loops. ComfyUI's built-in noise nodes are tied to a sampler and driven by a seed; top.noise is different - it's a standalone texture generator with a domain you can animate, three algorithms, up to four dimensions, and fractal layering. It generates and it animates, which is what makes it the source node for the pack's feedback demos.

    How it works

    You pick an algorithm (perlin, simplex, value), a dimensions count between 1 and 4, an output width/height, and a scale which is the frequency - larger scale means finer, busier detail. Signed noise is remapped into 0..1 around the midpoint, so mid-grey is the neutral value, which is exactly what top.displace wants from a map.

    The dimensional tricks are the interesting part, and they follow the pattern you'd expect if you've used this in other tools:

    • 1D - animation translates along the single noise axis, so you get a smooth morphing field.
    • 2D - x translates, which scrolls/slides the pattern.
    • 3D (the default) - the third axis is z, and time moves through z, so the field evolves rather than slides. That's the one to use for organic motion.
    • 4D - z stays spatial and time gets its own coordinate, so you can animate a genuinely 3D field instead of travelling through a 3D slice.

    seed offsets the domain, so different seeds are different fields (it's not a per-run randomiser - set it to lock a look). octaves, lacunarity and gain are the standard fractal stack: octaves adds detail layers, lacunarity sets how much finer each layer is, gain sets how much fainter. One octave is smooth; four or five is rocky and expensive.

    color gives you Grayscale or RGB. RGB offsets the domain per channel, which decorrelates the three channels and gives you coloured noise rather than three copies of the same grey - cheap and effective for adding chroma grit.

    The inputs that matter

    scale, dimensions, octaves and speed carry most of the results. time is the animation phase and speed multiplies it, so speed 0 freezes the field even in live mode - which is a handy way to stop an animation without dismantling the graph. performance plus the optional offset_x/y/z/t domain offsets exist for timeline automation: they shift the sampling domain, and zero leaves it unchanged. Output is one image.

    The value proposition, in workflow terms: top.noise → top.displace is the warp pass, top.noise → top.feedback is the trail pass, and both together (the pack ships a ꘇ-Painterly-Noise-Feedback example) is the reason to have the pack installed at all.

    Install

    ComfyUI Manager → search ꘇ Genereti → install, or:

    git clone https://github.com/languel/genereti.git custom_nodes/genereti
    ./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
    

    Restart and refresh. One frontend pin, no models, no downloads - noise is free. It's ꘇ top.noise under Genereti / TOP; search genereti because the leading glyph sorts to the bottom of the node list.

    Traps

    In Queue, time is just the widget. Live mode runs on the WebGPU path and animation is continuous; a queued run samples the explicit time value, so a queue render is a single frozen frame. If your queued output has no motion, nothing is broken.

    Octaves cost. Each octave is another noise evaluation across every pixel; six octaves at 4K is a lot of GPU. Start at 1–3 and add only when you can see the difference.

    scale is frequency, not size. It's the opposite of what the word suggests to most people - big scale means fine detail. This catches everyone once.

    Live vs Queue, again. Live intermediates are 8-bit and Queue keeps float, so a low-contrast noise field can band slightly differently between the two backends.

    Pack status: super-alpha, early classroom testing. Back up your workflows.

    CategoryGenereti / TOP

    Inputs (26)

    NameTypeDefaultDescription
    algorithmCOMBOperlin: smooth gradient noise. simplex: smoother, fewer grid artefacts. value: blobby, blockier. hash: white noise per cell (scale sets the cell size). worley: distance to the nearest random point (cells, bright at the points). voronoi: a flat random value per cell. cracks: distance between the two nearest points, dark lines along cell borders (stone, dried mud).
    dimensionsINT31–4Noise space dimensions. 1/2: time slides the pattern sideways. 3: time travels along z. 4: z and time are separate axes. Higher is smoother in time but slower. Looping always uses 4.
    widthINT5121–4096—
    heightINT5121–4096—
    scaleFLOAT8.000.01–256Features across the image: higher is finer detail, lower is broader blobs.
    seedINT00–65535Shifts the pattern: a different seed is a different, repeatable noise field.
    zFLOAT0.00-10000–10000Position along the third axis: slide through the noise volume (a slice of 3D/4D noise). Moves the circle centre when looping.
    octavesINT11–6Layers of noise added together, each finer than the last. 1 is smooth; more adds detail (fractal noise). Costs time per layer.
    lacunarityFLOAT2.001–4Frequency multiplier from one octave to the next: 2 doubles the detail each layer, higher is more gap between layers. Needs octaves above 1.
    gainFLOAT0.500–1Persistence: how much each extra octave contributes. Needs octaves above 1.
    timeFLOAT0.00-100000–100000Time offset in seconds, added to the live clock; Queue uses it as the sample time.
    speedFLOAT0.20-10–10How fast the pattern moves per second of time (negative runs backwards). Ignored while looping: the radius sets that.
    loopFLOAT0.00–3600Loop length in seconds; 0 is off. Time travels once around a circle in the z–w plane of 4D noise, so the image at t and t+loop is identical (forces 4D). Speed and dimensions are ignored while looping.
    loop_radiusFLOAT1.000.01–16Circle radius in noise cells: a small circle drifts slowly, a large one changes quickly. z moves its centre.
    colorCOMBORGB samples independent noise fields for red, green and blue; RGBA adds one for alpha (transparent where it is low).
    performanceoptSTRING{}—
    offset_xoptFLOAT0.00-100000–100000Domain offset x; zero leaves the domain unchanged
    offset_yoptFLOAT0.00-100000–100000Domain offset y; zero leaves the domain unchanged
    offset_zoptFLOAT0.00-100000–100000Domain offset z; zero leaves the domain unchanged
    offset_toptFLOAT0.00-100000–100000Domain offset t; zero leaves the domain unchanged
    amplitudeoptFLOAT1.00-4–4Contrast around the middle grey; negative inverts.
    biasoptFLOAT0.00-1–1Added to the 0..1 result (a value offset).
    shapeoptCOMBOoffHow each octave is shaped before layering. off: plain fbm. ridged: sharp bright crests (mountains, veins). billow: soft round lumps (clouds). hybrid: average of fbm and ridged. Shaping always uses the stretched range.
    warpoptFLOAT0.000–8Domain warp: bends the sampling position with two more noise lookups, in noise cells. 0 is off; about 1–3 gives marble and flowing swirls.
    poweroptFLOAT1.000.1–8Redistribution: the result is raised to this power. Above 1 flattens valleys and sharpens peaks (terrain); below 1 lifts the shadows.
    normalizeoptCOMBOoffstretch: fill the full 0..1 range per octave. Perlin alone spans only about 0.25..0.75.

    Outputs (1)

    NameTypeDescription
    imageIMAGE—