LiveLab · 21 interactive benches

The lab.

Interactive studies of linkages, fabric structures and spatial behaviour. Drag the models and adjust their controls to compare how they move and form.

scroll
Moves the page — never the model.
drag
Works straight away: orbit, pull a joint, move a person.
expand ↗
Gives one bench the screen. The wheel then zooms; Esc restores.
01Reincarnation Machinetwo linkage kernels and a behaviour engine6 benchesCase study ↗
LAB 1-1SVG · 2D kernel

Four-bar linkage

Drag a joint to move the four-bar mechanism and trace its path.

Lab 1-1 / Fig. 01
Grashof crank-rocker
2D PBD · Gauss–Seidel · L 66·178·127 · plate 132·100
θ 0.0°
ω 0.00 · err 0.000 · idle
Drag a free joint · release to continue at its angular velocity

Drag a joint · wheel scrolls the page

live
LAB 1-2SVG · 2D kernel

Arch ring solver

The S4 scissor arch, driven by a crank-slider.

Lab 1-2
Ring S4 · M3×1.000
Same 2D kernel · 14 plates · slot-end stops · fixed step 1/120
φ 0.0°
apex 0.0 mm · err 0.00 · idle
Drag the apex · the feet · the crank pin

Drag the apex · wheel scrolls the page

live
LAB 1-3WebGL · 3D kernel

Tendon tentacle

Bend seven vertebrae with three tendons spaced at 120°.

Lab 1-3
Three-tendon tentacle
7 box vertebrae · 3 tendons at 120° · scanned mesh, 107k triangles
T 0 / 0 / 0 %
err 0.00 px · ×1.00
Drag to orbit · right-drag to pan · scroll to zoom
Tendons
Link

Drag to orbit · wheel scrolls the page

live
LAB 1-4WebGL · 3D kernel

Five-ring shell

Five rings opening and closing together.

Lab 1-4
S1–S5 shell family
85 mm pitch · in-phase breathing · slot ladder [0/2/4/8]
φ 0.0°
apex(S2) 0.0 mm · err 0.00 · spin
Drag to orbit · right-drag to pan · scroll to zoom
Phase
More
Skin

Drag to orbit · wheel scrolls the page

live
LAB 1-5WebGL · fixed view

Full assembly

One shaft drives five rings; three tendons bend the arm.

Lab 1-5
Full transmission
One shaft, five cranks · in phase · 180° reciprocating
φ 0.0°
apex(S3) 0.0 mm · err 0.00 · folding ↓
View set by the buttons below · try clicking a small arm
Speed
Phase
More
Skin
Parts
Ring
Tendons
Small armsswingrate

Fixed view · switch it with the buttons

live
LAB 1-6WebGL · behaviour engine

Behaviour engine

The full machine lives four lives, one persona each, and responds to touch.

Lab 1-6
Behaviour engine
Life 1 · Warm A · Birth
φ 0.0°
Rhythms not hardware-verified · base fixed
Move the pointer as a hand · click a small arm, press the large arm or the shell · views by the buttons below
First life
Life clock
PresenceBearing0°
Touch
Surroundings
Hand
Grasp · log
Grasp
Log
More
Skin
Parts
Ring
LAB 1-6A

Actuator workbench

↑ View machine

M1–M7 identify seven driven axes, retaining channels T1–T3, F1–F2, B and Y. Sound and light are separate outputs.

Motor types follow the project archive; the three tendon assignments are proposed here. Shaft angles are conditional calculations, not measurements or transmitted commands.

Awaiting sample

Values follow the behaviour engine. Switch to manual to adjust each channel independently.

NEMA17 + TMC2209Proposed assignment

M1 · Awaiting simulation sample

Simulated—mmTarget —
Sample-to-sample Δ —Awaiting sample
Motor shaft · conditional—

Drum radius unknown; model take-up only.

mm
Transmission & evidence

Motor → winch with ratio to confirm → assigned tendon. Increased take-up does not yet imply a known motor rotation.

Records include NEMA17 motors and cable drums; the July 9 list makes an additional motor conditional on three independent tendon axes. Three cable axes are assigned here as a proposal; installed routing remains unverified.

Effective drum radius, winding layers, ratio, zero and direction are missing, so motor angle stays blank. The 44 mm range is a model setting; physical travel and load need calibration.

Model ΔL = c × 44 mm; after calibration, θmotor = θzero + direction × G × ΔL / r (rad, constant single-layer radius).

Needs calibration:0–44 mm is model travel. Effective spool radius, gearing, zero, direction, travel and load need calibration; no force reading.

NEMA17 + TMC2209Proposed assignment

M2 · Awaiting simulation sample

Simulated—mmTarget —
Sample-to-sample Δ —Awaiting sample
Motor shaft · conditional—

Drum radius unknown; model take-up only.

mm
Transmission & evidence

Motor → winch with ratio to confirm → assigned tendon. Increased take-up does not yet imply a known motor rotation.

Records include NEMA17 motors and cable drums; the July 9 list makes an additional motor conditional on three independent tendon axes. Three cable axes are assigned here as a proposal; installed routing remains unverified.

Effective drum radius, winding layers, ratio, zero and direction are missing, so motor angle stays blank. The 44 mm range is a model setting; physical travel and load need calibration.

Model ΔL = c × 44 mm; after calibration, θmotor = θzero + direction × G × ΔL / r (rad, constant single-layer radius).

Needs calibration:0–44 mm is model travel. Effective spool radius, gearing, zero, direction, travel and load need calibration; no force reading.

NEMA17 + TMC2209Proposed assignment

M3 · Awaiting simulation sample

Simulated—mmTarget —
Sample-to-sample Δ —Awaiting sample
Motor shaft · conditional—

Drum radius unknown; model take-up only.

mm
Transmission & evidence

Motor → winch with ratio to confirm → assigned tendon. Increased take-up does not yet imply a known motor rotation.

Records include NEMA17 motors and cable drums; the July 9 list makes an additional motor conditional on three independent tendon axes. Three cable axes are assigned here as a proposal; installed routing remains unverified.

Effective drum radius, winding layers, ratio, zero and direction are missing, so motor angle stays blank. The 44 mm range is a model setting; physical travel and load need calibration.

Model ΔL = c × 44 mm; after calibration, θmotor = θzero + direction × G × ΔL / r (rad, constant single-layer radius).

Needs calibration:0–44 mm is model travel. Effective spool radius, gearing, zero, direction, travel and load need calibration; no force reading.

SG90Recorded role

M4 · Awaiting simulation sample

Simulated—°Target —
Sample-to-sample Δ —Awaiting sample
Model servo angle—

Relative to model centre; calibrate physical centre, sign and pulses.

°
Transmission & evidence

Servo output shaft → feeler root link; the flexible section and tip follow passively.

The mechanism record assigns SG90s to the feeler roots, with two units reserved in the inventory. Individual units, installation and measured travel remain unverified.

Shown angle is relative to the model centre, not measured motor position. Calibrate mounting direction, centre, pulse-to-angle curve and stops separately; no universal pulse endpoints are assumed.

Angle = base + gain × startle wave, clamped to ±75°; pulse p = calibrated function(angle), in μs.

Needs calibration:±75° is the simulated drive range. Calibrate mounting direction, centre, pulse-to-angle relation, mechanical stops and loaded speed per servo.

SG90Recorded role

M5 · Awaiting simulation sample

Simulated—°Target —
Sample-to-sample Δ —Awaiting sample
Model servo angle—

Relative to model centre; calibrate physical centre, sign and pulses.

°
Transmission & evidence

Servo output shaft → feeler root link; the flexible section and tip follow passively.

The mechanism record assigns SG90s to the feeler roots, with two units reserved in the inventory. Individual units, installation and measured travel remain unverified.

Shown angle is relative to the model centre, not measured motor position. Calibrate mounting direction, centre, pulse-to-angle curve and stops separately; no universal pulse endpoints are assumed.

Angle = base + gain × startle wave, clamped to ±75°; pulse p = calibrated function(angle), in μs.

Needs calibration:±75° is the simulated drive range. Calibrate mounting direction, centre, pulse-to-angle relation, mechanical stops and loaded speed per servo.

NEMA17 + TMC2209Later recorded plan

M6 · Awaiting simulation sample

Simulated—%Target —
Sample-to-sample Δ —Awaiting sample
Motor shaft · conditional—

Assumes GT2 3:1 and linear s → 336° shaft sweep.

%

0% open · 100% folded

Transmission & evidence

Motor → GT2 → five gear pairs on one shaft → paired racks → five rings. The web model retains its crank mechanism; hardware angles are separate conditional calculations.

Records specify NEMA17 (0.51 N·m / 1.7 A), TMC2209 and a GT2 shared shaft. A later plan uses module-1 steel gears with 32/33/32/29/25 teeth and steel racks over a 336° sweep. Final teeth, material and installation are unverified; ratings are not loaded validation.

GT2 3:1 and linear s to 336° are calculation assumptions. Rack values are per-rack travel magnitudes for the S1–S5 pairs, not changes in foot separation. Verify installed ratio, origins, direction, backlash and limits.

Stroke s: 0 open, 1 folded; rack x = calibrated f(s). Interpolate endpoints only after confirming linearity. The crank uses existing nonlinear kinematics.

Needs calibration:Web crank angle is not rack position. Confirm current transmission, open/closed endpoints, distance per step, homing, speed and acceleration.

HDB60XZ45B · size-42 stepper + TMC2209Later recorded plan

M7 · Awaiting simulation sample

Simulated—°Target —
Sample-to-sample Δ —Awaiting sample
Motor shaft · conditional—

Recorded 45:1 · relative to zero, not accumulated turns.

°
Transmission & evidence

Platform stepper → 45:1 reduction → upper-body orientation; no additional standalone NEMA17 is assumed on top of the built-in motor.

Later records identify the HDB60XZ45B platform, a built-in size-42 stepper and 45:1 reduction. The internal motor SKU is read inconsistently, so neither 1704HS20D5 nor SM1705 is asserted.

Motor rotation relative to zero uses the recorded 45:1 ratio; it is not accumulated turns. Confirm the SKU, external microsteps, zero, sign, cable travel and loaded speed.

Motor angle = zero + direction × gear ratio × body angle; valid only within calibrated mechanical travel.

Needs calibration:±180° is the engine range. Verify the recorded 45:1 ratio, travel, cable limits, zero and end stops; display angle wrapping is not a mechanical limit.

Historical purchase plan: PAM8403 + 4Ω 3W speaker

Simulated—%Target —
Sample-to-sample Δ —Awaiting sample
%

Panel illustration only; physical mounting is unspecified.

Historical purchase plan: 12-pixel WS2812B ring

Simulated—%Target —
Sample-to-sample Δ —Awaiting sample
%

Brightness illustration · WS2812B data protocol

Panel illustration only; physical mounting is unspecified.

Simulation · no hardware connectedSample time —
Arduino-style preview & calibration

A C++-style preview of simulation requirements, not firmware. No serial connection or hardware commands are sent. Calibrate motors, pulses, steps and pins for the installed hardware first.

The preview appears after the model produces its first sample.
Large arm · tendon 1

Proposed independent NEMA17 + TMC2209 cable axis; installed assignment unverified

Needs calibration:0–44 mm is model travel. Effective spool radius, gearing, zero, direction, travel and load need calibration; no force reading.

Large arm · tendon 2

Proposed independent NEMA17 + TMC2209 cable axis; installed assignment unverified

Needs calibration:0–44 mm is model travel. Effective spool radius, gearing, zero, direction, travel and load need calibration; no force reading.

Large arm · tendon 3

Proposed independent NEMA17 + TMC2209 cable axis; installed assignment unverified

Needs calibration:0–44 mm is model travel. Effective spool radius, gearing, zero, direction, travel and load need calibration; no force reading.

Small feeler · left

SG90; historical mechanism record

Needs calibration:±75° is the simulated drive range. Calibrate mounting direction, centre, pulse-to-angle relation, mechanical stops and loaded speed per servo.

Small feeler · right

SG90; historical mechanism record

Needs calibration:±75° is the simulated drive range. Calibrate mounting direction, centre, pulse-to-angle relation, mechanical stops and loaded speed per servo.

Shell · breathing drive

Recorded: NEMA17 + TMC2209 → GT2 → shared-shaft gears and steel racks; installation uncalibrated

Needs calibration:Web crank angle is not rack position. Confirm current transmission, open/closed endpoints, distance per step, homing, speed and acceleration.

Body · turntable

Recorded: HDB60XZ45B platform with built-in size-42 stepper + TMC2209, 45:1; exact motor SKU unverified

Needs calibration:±180° is the engine range. Verify the recorded 45:1 ratio, travel, cable limits, zero and end stops; display angle wrapping is not a mechanical limit.

Sound · speaker

Historical purchase plan: PAM8403 + 4Ω 3W speaker

Needs calibration:Confirm audio source, supply and gain; normalized level is not dB. Voiced time per breath is not electrical PWM duty.

Light · ring

Historical purchase plan: 12-pixel WS2812B ring

Needs calibration:Confirm installed ring, colour, brightness response, power and current budget; percentage is neither illuminance nor a plain monochrome PWM pin value.

Touch the machine · wheel scrolls the page

live
02Cross-species spaceshape-changing units and the behaviour that moves them15 benchesCase study ↗

Ⅰ · One band3 benches

LAB 2-1SVG · research-code port

Contractile skin units

Four bond patterns turn a contracting strip into four shapes.

Lab 2-1 / Project II
Contracting tensioned skin
Soft skin · stiffness made by bonds · four maps, one protocol
r 0.95
step 0/1500 · 0 locked · contracting
Core contracts → skin goes slack → bonds catch · forming only
More
Speed

Watch it form · wheel scrolls the page

live
LAB 2-2WebGL

Skin units, solid

The four fabric bands in 3D, with visible sections and bonds.

Lab 2-2 / Project II
Skin units · solid bands
Extruded sections · fabric thickness 5px · one contraction protocol
r 0.95
step 0/1500 · bonds 0 · Contracting
Drag to orbit · right-drag to pan
More
Speed

Drag to orbit · wheel scrolls the page

live
LAB 2-3WebGL

Two structures, one band

Two structures on one strip, with an adjustable gap.

Lab 2-3 / Project II
Two structures in one band
5 bands · two independent bond maps and zippers per band · one contraction protocol
r 0.95
step 0/1500 · bonds 0 · Contracting
Four matched pairs and one mixed pair · adjust spacing · drag to orbit
Spacing
More
Speed

Drag to orbit · wheel scrolls the page

live

Ⅱ · A row1 bench

LAB 2-4WebGL

Series

Compare a graded series with a platform splitting in two.

Lab 2-4 / Project II
A graded series, bulb flange to stepped box
Twelve narrow bands · bond length 0.10→0.32 in even steps · one protocol
r 0.95
step 0/1500 · bonds 0 · Contracting
A bulb flange at one end, a stepped box at the other, every band a real solve · plan and layout switchable
Pattern
Arrangement
More
Speed

Drag to orbit · wheel scrolls the page

live

Ⅲ · A ring3 benches

LAB 2-5WebGL

Cylinder of units

Twenty bands form a level, undulating, changing, split or double platform.

Lab 2-5 / Project II
Cylinder · an annular platform
20 bands · stepped ledge · height varies around the ring · 11 levels
r 0.95
step 0/1500 · bonds 0 · Contracting
Adjust pattern, form and radius · top view shows the ring · drag to orbit
Pattern
Forms
More
Speed
Skin35
Radius30

Drag to orbit · wheel scrolls the page

live
LAB 2-6WebGL · multi-view

Layers within one unit

Round to square, with independent shelf sizes, tilts, gaps and joins.

Inspect
Lab 2-6 / Project II
Layers within one unit
Target geometry · spatial prototype
Drag to orbit
Joins 0°
Upper green · lower purple · joins gold
Upper · Plan0°Lower · Plan0°Section · 45°
Presets
Ring shape
Edit
Coverage
Thick sector
0° joined

The drawings show target outlines and sections. Both views share these parameters.

Drag to orbit · wheel scrolls the page

live
LAB 2-7WebGL

A square ring

Vary each band’s reach to change a round platform into a square.

Lab 2-7 / Project II
A square ring, drawn by how far each band reaches
20 narrow bands · three depths 56 / 64 / 89 px · box 36 px high everywhere · a square, side 169 px
r 0.95
step 0/1500 · bonds 0 · Contracting
face 8·k35 · edge 8·k39 · corner 4·k52 · 10 rungs on every band · read the plan from above · drag to orbit
Outline
Pattern
Layout
More
Speed
Skin35

Drag to orbit · wheel scrolls the page

live

Ⅳ · A room1 bench

LAB 2-8WebGL · 16 live rings

Four by four

Sixteen rings in a room, with a 1.70 m figure for scale.

Lab 2-8 / Project II
Sixteen rings, one floor
4×4 rings · one bond map: stepped ledge · platform ⌀1.04 m · room 3.74 m high
r 0.95
step 0/1500 · bonds 0 · Contracting
Plan / form switchable · radius drives the pitch · top view reads the grid · drag to orbit · figure 1.70 m for scale
Pattern
Forms
More
Speed
Skin35
Radius30

Drag to orbit · wheel scrolls the page

live

Ⅴ · Between units1 bench

LAB 2-9WebGL

Between units

Arrange 2, 3, 4 or 9 rings and compare their spacing, heights and timing.

Lab 2-9 / Project II
Between units
2 rings · interleaved · pitch 0.59 m · platform ⌀0.89 m · 2 levels, ≥ 0.35 m apart · platforms overlap 0.30 m
r 0.95
step 0/1500 · bonds 0 · Contracting
Cluster / relation / timing / form switchable · spacing preserves progress · radius drives the pitch · drag to orbit
Pattern
Relations
Timing
Forms
More
Speed
Skin35
Radius30

Drag to orbit · wheel scrolls the page

live

Ⅵ · People3 benches

LAB 2-10Canvas · plan

A person walks through

Move one person and watch nearby units respond to their floor trace.

Lab 2-10 / Project II
A person walks through
Plan · behaviour → floor trace → a group of units forms
formed 0 / 64
t 0:00 · 0 at half or more · peak reading 0.0 s · deepest floor trace 0.0 s · 0 held back · walking
Green disc = live reading · purple ring = structure position; withdraws once they leave
behaviour
grid
Model settings
reading
response
reach 1.50 m
view 180°
threshold 2 s
floor share 50%
fade 6 s
pace 1.2 m/s
time

Drag the person · wheel scrolls the page

live
LAB 2-11Canvas · up to 8 people

A few people

Place or drag people to see how their overlapping views affect the units.

Lab 2-11 / Project II
A few people
Plan · place · drag · wander → units form live
formed 0 / 64
t 0:00 · 2 people (0 walking · 2 standing) · 0 at half or more · deepest floor trace 0.0 s · 0 held back
Green disc = live reading · purple ring = structure position; withdraws once they leave
People
grid
Model settings
reading
response
reach 1.50 m
view 180°
threshold 2 s
floor share 50%
fade 6 s
pace 0.7 m/s
time

Click to add · wheel scrolls the page

live
LAB 2-12Canvas · cat behaviour

A cat in the room

Watch a cat move across the units; occupied platforms stay open and the next landing activates ahead.

Lab 2-12 / Project II
A cat in the room
Cross successive units · leave a route
Formed 0 / 64
Sit · 0 s · Support —
Solid = support · dashed = next landing · purple = activation
Visited 1 units · 0.0 m · Use trace 0.0 s
Posture detail
WalkSit
Action source · Stanton et al. · 2015 · Table 6 ↗ · Sitting
Timing, speed, routes and Free sequencing are demo settings; landing waits belong to the platform rule.
Behaviour
Grid
Model settings
Response
Prepare 1 s
Pace 1×
Fade 6 s
Time

Drag the cat · wheel scrolls the page

live

Ⅶ · Compositions1 bench

LAB 2-13WebGL

Joined platforms

Join round or square platforms into steps, ramps and enclosures.

Lab 2-13 / Project II
Joined platforms
a descent · 3 straight ledge rings · touching · 3.11 m end to end · all seams level · surface 1.39–1.74 m above floor
r 0.95
step 0/1500 · bonds 0 · Contracting
Figure / unit family / form / spacing switchable · spacing re-places, no re-solve · drag to orbit
Figures
Unit
Forms
Distance
More
Speed
Skin35
Radius30

Drag to orbit · wheel scrolls the page

live

Ⅷ · Together2 benches

LAB 2-14Canvas · two species

People and cats together

Visitors walk, stand or sit; resident cats live on the units. Sitting down leads a cat over, and the four encounter events are counted.

Lab 2-14 / Project II
People and cats together
Plan · visitors + resident cats · two costs · four events
formed 0 / 64
co-gaze 0 (0 s) · co-warmth 0 (0 s) · contact 0 · crossing 0
t 0:00 · 1 people · 1 cats · cat beyond 1 m 100% (reference 78%) · detour 0.0 m · 0 bands giving way
People: grey outline walking · ink outline standing · solid ink sitting · thin grey line = same party · grey dashed ring under a cat = cat on the floor · dotted purple ring = the unit in front of a seat (where a cat is led) · green dashes = the route the space lays for the cat (arrow = next step) · purple ring = formed · solid ink ring = wall for people · links: green dashed co-gaze / purple co-warmth / rose contact
case study runs
rule
space
lead to
Bodies
Layout
Furniture
Model settings
giving way
grid
response
threshold 2 s
fade 6 s
pace 0.7 m/s
time

Drag a body · wheel scrolls the page

live
LAB 2-15WebGL · two species

People and cats together, in 3D

The Lab 2-14 simulation in the Lab 2-8 room: sixty-four square units, filling the room, descend, retract and give way over visitors and cats.

Lab 2-15 / Project II
People and cats together, in 3D
8×8 · square platform 0.00 m · room 3.74 m high · 6 visitors · 2 cats
baking band trajectory 0%
Drag to orbit · three spaces to compare · units rest stowed at the ceiling, then descend and form under the Lab 2-14 rules, bands in the way retract on their own · band shapes come from three engine runs, one per depth
space

Drag to orbit · wheel scrolls the page

live
03Project IIIIn progress

No benches yet. They will appear here, in build order, as the project takes shape.