Nodes
The v1 catalog holds 80 node kinds, grouped by namespace.
This page is rendered straight from @pylinka/graph, so it cannot drift from the
code.
input.*
Read particle and emitter state: position, velocity, age, life, time, spawn index.
input.age Age | in none out out:f32 |
input.ageNormalized Age (normalized) | in none out out:f32 |
input.emitterPosition Emitter position | in none out out:vec2 |
input.emitterVelocity Emitter velocity | in none out out:vec2 |
input.frame Frame | in none out out:f32 |
input.life Life | in none out out:f32 |
input.position Position | in none out out:vec2 |
input.spawnIndex Spawn index | in none out out:f32 |
input.time Time | in none out out:f32 |
input.velocity Velocity | in none out out:vec2 |
param.*
Read a project knob by reference.
param.ref Param | in none out out:f32 |
gen.*
Stable and per-frame randomness, plus value, colour and scale curves over life.
gen.alphaOverLife Alpha over life | in from:f32, to:f32 out out:f32 |
gen.colorOverLife Color over life | in from:color, to:color out out:color |
gen.curveOverLife Curve over life | in from:f32, to:f32 out out:f32 |
gen.ease Ease | in t:f32 out out:f32 |
gen.frameRandom Frame random | in none out out:f32 |
gen.noise med Noise | in scale:f32, speed:f32 out out:f32 |
gen.numberOverLife Number over life | in from:f32, to:f32 out out:f32 |
gen.random Random | in none out out:f32 |
gen.randomRange Random range | in min:f32, max:f32 out out:f32 |
gen.randomVec2 Random vec2 | in min:vec2, max:vec2 out out:vec2 |
gen.rotationOverLife Rotation over life | in from:f32, to:f32 out out:f32 |
gen.scaleOverLife Scale over life | in from:f32, to:f32 out out:f32 |
gen.spin Spin (rad/s) | in rate:f32 out out:f32 |
math.*
Arithmetic and vector helpers.
math.abs Abs | in x:f32 out out:f32 |
math.add Add | in a:f32, b:f32 out out:f32 |
math.clamp Clamp | in x:f32, min:f32, max:f32 out out:f32 |
math.component Component | in v:vec2 out out:f32 |
math.cos Cos | in x:f32 out out:f32 |
math.div Divide | in a:f32, b:f32 out out:f32 |
math.length Length | in v:vec2 out out:f32 |
math.mad Multiply-add | in a:f32, b:f32, c:f32 out out:f32 |
math.makeVec2 Make vec2 | in x:f32, y:f32 out out:vec2 |
math.makeVec4 Make vec4 | in x:f32, y:f32, z:f32, w:f32 out out:vec4 |
math.max Max | in a:f32, b:f32 out out:f32 |
math.min Min | in a:f32, b:f32 out out:f32 |
math.mix Mix | in a:f32, b:f32, t:f32 out out:f32 |
math.mul Multiply | in a:f32, b:f32 out out:f32 |
math.normalize Normalize | in v:vec2 out out:vec2 |
math.radians Degrees to radians | in degrees:f32 out out:f32 |
math.rotate2d Rotate 2D | in v:vec2, angle:f32 out out:vec2 |
math.sin Sin | in x:f32 out out:f32 |
math.splat Splat | in x:f32 out out:vec2 |
math.sub Subtract | in a:f32, b:f32 out out:f32 |
math.swizzle Swizzle | in v:vec2 out out:vec2 |
field.*
Force fields that accumulate into a particle's motion, including the obstacle body.
field.directional Directional (wind) | in strength:f32, angle:f32 out force:vec2 |
field.drag Drag | in coefficient:f32 out drag:f32 |
field.gravity Gravity | in g:vec2 out force:vec2 |
field.obstacle Obstacle (push) | in center:vec2, velocity:vec2, radius:f32, strength:f32, softness:f32, swirl:f32, carry:f32 out force:vec2 |
field.radial Radial | in center:vec2, strength:f32 out force:vec2 |
field.turbulence med Turbulence | in strength:f32, scale:f32, speed:f32 out force:vec2 |
field.vortex med Vortex | in center:vec2, strength:f32, pull:f32, radius:f32 out force:vec2 |
shape.*
Spawn shapes, emitter-relative, feeding output.spawnPosition.
shape.burstRing Burst ring | in radius:f32 out pos:vec2 |
shape.circle Circle | in radius:f32 out pos:vec2 |
shape.point Point | in offset:vec2 out pos:vec2 |
shape.polygonalChain Polygonal chain | in start:vec2, end:vec2 out pos:vec2 |
shape.rectangle Rectangle | in size:vec2 out pos:vec2 |
shape.torus Torus | in innerRadius:f32, outerRadius:f32 out pos:vec2 |
output.*
Where results are written, including the collide family. Every system needs spawnPosition and initLife.
output.addForce Add force | in force:vec2 out none |
output.collideCircle Collide: circle | in center:vec2, radius:f32, restitution:f32, friction:f32, velocity:vec2 out none |
output.collidePlane Collide: plane (floor/wall) | in point:vec2, normal:vec2, restitution:f32, friction:f32 out none |
output.collideRect Collide: rect | in min:vec2, max:vec2, restitution:f32, friction:f32 out none |
output.deathBurst med Burst from parent | in countMin:f32, countMax:f32, inheritVelocity:f32 out none |
output.drag Drag | in drag:f32 out none |
output.initLife Init life | in life:f32 out none |
output.initRotation Init rotation | in rot:f32 out none |
output.initTexIndex Init texture index | in index:f32 out none |
output.initVelocity Init velocity | in vel:vec2 out none |
output.killIf Kill if | in cond:bool out none |
output.killIfOutOfRect Kill if out of rect | in min:vec2, max:vec2 out none |
output.reflectInRect Reflect in rect | in min:vec2, max:vec2 out none |
output.setVelocity Set velocity | in vel:vec2 out none |
output.spawnPosition Spawn position | in pos:vec2 out none |
output.writeAlpha Write alpha | in alpha:f32 out none |
output.writeColor Write color | in color:color out none |
output.writePosition Write position | in pos:vec2 out none |
output.writeRotation Write rotation | in rot:f32 out none |
output.writeScale Write scale | in scale:f32 out none |
tex.*
Texture selection for rendering.
tex.random Random texture | in none out none |
tex.single Single texture | in none out none |
Reading a node
Each input port has a default value you can scrub inline or wire from another node's output.
Ports are typed; an f32 splats into a vec2/vec4, and
color interchanges with vec4, but other narrowing needs an explicit
math.component or math.swizzle. Nodes tagged med/high
cost more on low-tier devices.