Nodes/MKRShift_Nodes/Texture Strata
ComfyUI Node

Texture Strata

Sedimentary rock, cliff bands, and plywood, minus the prompt lottery

By criskb·Created 7 months ago·Updated 5 months ago· 0
Texture Strata
    • image
    • mask
    • strata_info
    settings_json{"width":1024,"height":1024,"profile":"soft","band_scale_px":180.0,"direction_deg":24.0,"warp_strength":0.32,"breakup_scale_px":112.0,"breakup_strength":0.38,"micro_breakup":0.18,"contrast":1.15,"balance":0.0,"invert":false,"seed":53}

    Horizontal bands of sediment, layered cliff faces, wood grain on plywood, even canyon walls - these all reduce to the same visual structure: parallel layers that vary in thickness and wander slightly. Texture Strata is a procedural generator for exactly that, and like its siblings in this pack it outputs a seamless field, so your rock texture tiles without you doing seam surgery afterward.

    How it works

    The pattern starts as banded strata - a field of stacked horizontal layers whose thickness is driven by band_scale_px. Then it gets rough in two stages. warp_strength distorts the bands with a noise field so they wander like real sediment layers instead of sitting perfectly straight, and breakup_scale_px with breakup_strength breaks the bands up into lenses and lenses-of-lenses, the way compressed sediment pokes through in irregular blobs. micro_breakup adds fine grain inside the layers. direction_deg rotates the whole thing if you want diagonal bedding planes.

    Three profile options change the layer character: soft (the default, gentle rounded bands), veins (thinner, more mineral-vein-like layers), and terrace (hard flat steps, like cut rock shelves). All of it is wrapped value noise under the hood, deterministic on seed, generated in numpy - a millisecond, not a diffusion pass.

    The inputs that matter

    Everything's in one settings_json text box, the pack's house style. The defaults are runnable; the ones you'll edit:

    • profile - soft / veins / terrace
    • band_scale_px - layer thickness (180 px default)
    • direction_deg - bedding angle
    • warp_strength and breakup_strength - how much the layers wander and break
    • seed - a new layout on demand
    • contrast / balance / invert - tonal shaping

    Outputs: image (grayscale field as RGB), mask (same field, single channel - your height map or the mix source), and a strata_info string with the resolved settings. Since it's seamless, you can run it straight into a height/normal/roughness chain without a detile step.

    Installing it

    Part of MKRShift Nodes from criskb. Use ComfyUI Manager (search "MKRShift Nodes"), or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/criskb/MKRShift_Nodes
    

    Restart ComfyUI; the node lands under MKRShift Nodes → Surface → Texture. No models, no pip extras - pure numpy/Pillow/torch, all already present. The README's ffmpeg/slicer notes are for other lanes of the pack and don't apply here.

    Common gotchas

    The pack is young enough to have no community lore yet, so trust the code. The recurring trap: a syntax error in settings_json silently falls back to defaults rather than failing, and out-of-range values are clamped - both make the node seem to ignore you when it's actually just being lenient. If you want finer strata, drop band_scale_px; the 1024×1024 default with a scale of 180 gives you roughly five bands per tile, which reads well.

    CategoryMKRShift Nodes/Surface/Texture

    Inputs (1)

    NameTypeDefaultDescription
    settings_jsonSTRING{"width":1024,"height":1024,"profile":"soft","band_scale_px":180.0,"direction_deg":24.0,"warp_strength":0.32,"breakup_scale_px":112.0,"breakup_strength":0.38,"micro_breakup":0.18,"contrast":1.15,"balance":0.0,"invert":false,"seed":53}

    Outputs (3)

    NameTypeDescription
    imageIMAGE
    maskMASK
    strata_infoSTRING