Write commands, change a number, see what happens. Distances use your own units, Y points up, and angles are in radians. Comments start with # or //.
MAKE SOMETHING
point(x, y, z)
box(x, y, z, width, height, depth)
sphere(x, y, z, radius, segments)
triangle(ax, ay, az, bx, by, bz, cx, cy, cz)
color(red, green, blue)
Colors are 0–1. Sphere segments are optional (default 20). Color applies to following commands.
MAKE IT YOURS
param height = 3, 0, 10, 0.1
# name = default, minimum, maximum, step
let angle = pi / 4
repeat 20 as i {
point(cos(i) * 4, i * 0.2, sin(i) * 4)
}Parameters live outside loops. Loop indices start at zero. Variables inside a loop stay inside it.
MAKE A LANDSCAPE
surface(64, 64, 20, 20,
sin(x * 0.5) * cos(z * 0.5) * 3
)
Columns, rows, width, depth, height expression. Inside the height expression, x,z are world coordinates and u,v run from 0 to 1.
A LITTLE MATH
+ - * / % ^ pi tau e
sin cos tan abs sqrt floor ceil round
exp log min(a,b) max(a,b) pow(a,b)
atan2(y,x) clamp(x,min,max) mix(a,b,t)
seed(42)
rand() # 0–1, deterministic each run
Use floor() for calculated repeat counts. Scripts cannot access files, network, or JavaScript.
Limits: 150,000 vertices · 180,000 triangles · 2 million operations · 2 second worker timeout. Point previews sample at most 40,000 markers; exports contain every point.