Texture Strata
Sedimentary rock, cliff bands, and plywood, minus the prompt lottery
- image
- mask
- strata_info
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 / terraceband_scale_px- layer thickness (180 px default)direction_deg- bedding anglewarp_strengthandbreakup_strength- how much the layers wander and breakseed- a new layout on demandcontrast/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.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| settings_json | STRING | {"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)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |
| strata_info | STRING | — |