Nodes/ComfyUI illumorae/Procedural Patterns
ComfyUI Node

Procedural Patterns

Procedural patterns without a model download — the ComfyUI trick for guided shapes

By CorvaeOboro·Created 8 months ago·Updated 6 days ago· 1
Procedural Patterns
    • pattern_image
    • pattern_mask
    width512
    height512
    pattern_type
    ring_count8
    ring_thickness0.30
    ring_falloff0.50
    beam_count12
    beam_width0.30
    beam_falloff0.50
    center_x0.50
    center_y0.50
    rotation0
    scale1.0
    invertfalse
    colorizefalse
    chaos_modefalse
    seed0
    color_a#000000
    color_b#FFFFFF

    This node is the rare ComfyUI addition that is pure math and zero megabytes. Procedural Patterns generates symmetrical patterns - concentric torus rings, radial beams, spiral rings, or a combined mess of all three - and hands them to you as an image and a mask. No model files, no weights, no VRAM beyond the tensors themselves. It's from the ComfyUI_illumorae pack, a small collection of randomization and variation-exploration tools by CorvaeOboro, and it's one of the few nodes in the pack that touches pixels instead of strings.

    Why would you want a synthetic pattern in the middle of a generation workflow? Because it's a cheap, fully deterministic way to steer structure. Drop the pattern_image into an img2img pass and the rings give the sampler something to hang composition on. Use the pattern_mask to tell an inpainting or regional-prompt node where to work. It's the same instinct as feeding a generated mandala into a style transfer - you're injecting visual rhythm without waiting on a ControlNet preprocessor.

    How it works

    Everything is generated from parameters, numpy-style, on the CPU. The three concrete families are:

    • torus_rings - concentric bands radiating from a center, good for depth and focus
    • radial_beams - lines shooting out from a point, energy and direction
    • spiral_rings - radial plus angular phase, the one that looks like a galaxy

    Each band is built with a thickness, a falloff (how soft the edges are), and a count. There's also combined, which stacks the families. center_x/center_y place the origin, rotation and scale transform the whole thing, invert flips it, and colorize (with optional color_a/color_b hex strings) tints it.

    Here's the gotcha the brief warns about, and it's worth repeating because it will bite you: the seed only does anything in two situations. If pattern_type is random, the seed picks which family you get. If chaos_mode is on, the seed randomizes every parameter. Otherwise the output is fully deterministic and the seed is dead weight - you can crank it all day and nothing changes. So if you're seeding for variation and nothing moves, check those two toggles first.

    The inputs that matter

    You don't need to touch all fourteen. For a first run:

    • width / height - default 512 each, range up to 8192. Step is 8, so keep values on that grid.
    • pattern_type - the family dropdown, random included.
    • ring_count / beam_count and their _thickness/_falloff siblings - the actual shape controls. Defaults (8 rings, 12 beams, 0.3 thickness, 0.5 falloff) are a reasonable start.
    • chaos_mode - the one that turns it into a slot machine.

    Outputs are pattern_image (IMAGE) and pattern_mask (MASK). The mask is the useful half for compositing work - a clean single-channel you can wire into anything that eats masks.

    Installing it

    Part of the illumorae pack, so: ComfyUI Manager → search "illumorae" → install, or manually:

    cd ComfyUI/custom_nodes
    git clone https://github.com/CorvaeOboro/ComfyUI_illumorae
    

    Then restart ComfyUI. No model downloads, no heavy deps - the pack's requirements are numpy/pillow/torch, which you already have in any working ComfyUI. The pack is CC0 and every node is self-contained, so if you want only this one, you can copy its ComfyUI_illumorae_GenProceduralPatterns subfolder into custom_nodes and nothing else.

    Troubleshooting

    The main things people hit: the seed-not-working surprise above, and forgetting that this is a guide, not a texture pack - if you feed rings into img2img at high denoise they get smeared into whatever the model wants to draw, so keep the influence modest. There's no IS_CHANGED weirdness to fight since the outputs recompute cleanly with the seed, and nothing here touches the network, so a "random" run is instant. Not the flashiest node in your graph, but the one that keeps working when the checkpoint changes out from under you.

    Categoryillumorae

    Inputs (19)

    NameTypeDefaultDescription
    widthINT51264–8192
    heightINT51264–8192
    pattern_typeCOMBO5 options: random, torus_rings, radial_beams, combined, spiral_rings
    ring_countINT81–100
    ring_thicknessFLOAT0.300.01–1
    ring_falloffFLOAT0.500–0.99
    beam_countINT121–360
    beam_widthFLOAT0.300.01–1
    beam_falloffFLOAT0.500–0.99
    center_xFLOAT0.500–1
    center_yFLOAT0.500–1
    rotationFLOAT00–360
    scaleFLOAT1.00.1–10
    invertBOOLEANfalse
    colorizeBOOLEANfalse
    chaos_modeBOOLEANfalse
    seedINT00–18446744073709550000
    color_aoptSTRING#000000
    color_boptSTRING#FFFFFF

    Outputs (2)

    NameTypeDescription
    pattern_imageIMAGE
    pattern_maskMASK