Skip to content
Shapemetry

@huukhanhnguyen/model / lanes/textures/ops

lanes/textures/ops

normalizeColorStops()

normalizeColorStops(raw, method?): ColorStop[]

Color-ramp stops — object form only (schema-hygiene §D): [{t:0, color:'#000'}, {t:1, color:'#fff'}]. A positional [[t, color], …] tuple throws — it is not a second spelling, it is an error.

Parameters

raw

unknown

method?

string = "gradientMap"

Returns

ColorStop[]


opBandpass()

opBandpass(buffer, low, high): ImageBuffer

Keep only radial frequencies in [low, high] cycles per tile (DC survives when low <= 0). Turns raw noise into brushed metal, ocean chop, moire-free detail bands — spectral shaping without hand-built kernels.

Parameters

buffer

ImageBuffer

low

number

high

number

Returns

ImageBuffer


opBlend()

opBlend(buffer, other, mode, amount, mask?): ImageBuffer

Parameters

buffer

ImageBuffer

other

ImageBuffer

mode

string

amount

number

mask?

ImageBuffer

Returns

ImageBuffer


opBlur()

opBlur(buffer, radius): ImageBuffer

Parameters

buffer

ImageBuffer

radius

number

Returns

ImageBuffer


opCells()

opCells(value, options): ImageBuffer

Bond-pattern cell grid: joints at 0, every cell evaluated by the value formula with LOCAL (u, v) and k = the cell's stable id. joint is the full gap thickness in tile units, split half-and-half across neighboring cells so every gap reads the same.

Parameters

value

Formula

options

columns

number

height

number

joint

number

offset

number

pattern

string

rows

number

width

number

Returns

ImageBuffer


opChannels()

opChannels(base, red, green, blue, alpha): ImageBuffer

Pack up to four greyscale sources into RGBA. Missing channel → 0; missing alpha → 1. Dimensions follow the current stream buffer.

Parameters

base

ImageBuffer

red

ImageBuffer | undefined

green

ImageBuffer | undefined

blue

ImageBuffer | undefined

alpha

ImageBuffer | undefined

Returns

ImageBuffer


opDistance()

opDistance(buffer, threshold, maxDistance): ImageBuffer

Two-pass chamfer distance transform (approximate EDT, O(n)). Source pixels above threshold are sites (distance 0); output is min(dist, maxDistance) / maxDistance in 0..1.

Parameters

buffer

ImageBuffer

threshold

number

maxDistance

number

Returns

ImageBuffer


opField()

opField(value, width, height): ImageBuffer

Parameters

value

Formula

width

number

height

number

Returns

ImageBuffer


opGradientMap()

opGradientMap(buffer, stopsRaw): ImageBuffer

Multi-stop gradient LUT: scalar -> RGBA. Stops = [{t, color}, ...].

Parameters

buffer

ImageBuffer

stopsRaw

unknown

Returns

ImageBuffer


opIsolines()

opIsolines(buffer, density, blur): ImageBuffer

Contour lines through a scalar field: sin(density * value) draws evenly spaced rings, smoothstep turns the sign crossing into a soft-edged band of width blur instead of a jagged single-pixel line.

Parameters

buffer

ImageBuffer

density

number

blur

number

Returns

ImageBuffer


opLevels()

opLevels(buffer, gamma, multiply, add, invert): ImageBuffer

Parameters

buffer

ImageBuffer

gamma

number

multiply

number

add

number

invert

number

Returns

ImageBuffer


opNoise()

opNoise(type, scale, octaves, seed, width, height): ImageBuffer

Noise as a first-class source — long algorithms live in nodes, not in formula strings. seed shifts the hash lattice so two noise nodes with the same scale never correlate. type "tile" is the seamless torus-embedded fbm (see tfbmCore) — pick it whenever the source must repeat edge-to-edge; the other types ("value"/"fbm"/"cell"/"ridged") are plain planar noise and DO show a seam at the tile boundary.

Parameters

type

string

scale

number

octaves

number

seed

number

width

number

height

number

Returns

ImageBuffer


opNormalMap()

opNormalMap(buffer, strength): ImageBuffer

Parameters

buffer

ImageBuffer

strength

number

Returns

ImageBuffer


opSplatter()

opSplatter(stamp, options): ImageBuffer

Grid-with-jitter scatter of a stamp formula (evaluated in instance-local coordinates, u/v in [-0.5, 0.5], k = instance index) — the tile-sampler move that makes manufactured-organic surfaces read as real. Deterministic from seed; stamps wrap toroidally so the tile stays seamless.

Parameters

stamp

Formula

options

count

number

height

number

intensityJitter

number

mode

string

rotationJitter

number

seed

number

sizeJitter

number

stampSize

number

width

number

Returns

ImageBuffer


opStrokes()

opStrokes(x, y, options): ImageBuffer

Parameters

x

Formula

y

Formula

options

copies

number

height

number

intensity

number

samples

number

strokeWidth

number

t0

number

t1

number

width

number

Returns

ImageBuffer


opTint()

opTint(buffer, low, high): ImageBuffer

Parameters

buffer

ImageBuffer

low

string

high

string

Returns

ImageBuffer


opTransform()

opTransform(buffer, rotate, scale, offset, flipX, flipY): ImageBuffer

Affine transform with optional flip + configurable wrap (Task 2).

Parameters

buffer

ImageBuffer

rotate

number

scale

number | number[]

offset

number | number[]

flipX

boolean

flipY

boolean

Returns

ImageBuffer


opWarp()

opWarp(buffer, displacement, strength): ImageBuffer

Domain warp: displace the stream's lookup along the GRADIENT of another texture's scalar output (SD-style warp).

Parameters

buffer

ImageBuffer

displacement

ImageBuffer

strength

number

Returns

ImageBuffer


scalar()

scalar(width, height): ImageBuffer

Parameters

width

number

height

number

Returns

ImageBuffer

Last updated: 📖 5 min readEdit on GitHub