three-overlayslisted
Install: claude install-skill Nagellabs/libi
# 3D / WebGL Overlays (three.js)
Use this when the user wants **real 3D** layered on a scene — an **arbitrary 3D
scene** (a simple animated 3D object — a rotating ring/knot/box), **floating
billboard text** that drifts in depth, or text mapped in **perspective onto the
road/floor**. This is the path when the look needs a real WebGL camera /
perspective / bespoke meshes that a flat Canvas2D `add_overlay({ kind: "code" })`
can't express.
> **STOP — gate before you build a `three` overlay.** If a `kind: "text"`
> overlay + `place3d` (+ `threeD` extrusion) can express it, use THAT, NOT a
> `three` overlay. A tilted, extruded, posed, or billboard CAPTION is text +
> `place3d` — including anything phrased "real 3D" or "WebGL". A plain "3D
> caption" is `add_overlay({ kind: "text" })` THEN `update_overlay({ place3d:
> true, transform3d })` (+ `threeD` for thickness) — never a `three` overlay.
> Reach for `kind: "three"` ONLY when the look is one of:
> - an arbitrary 3D **object / scene** (not just text) — a rotating ring, a mesh,
> a built scene;
> - **text mapped onto moving 3D geometry that tracks the footage** (a road /
> fly-through that recedes WITH the camera, beyond a static pose);
> - a **camera fly-through**;
> - **animated 3D beyond static pose + depth + extrusion** (something `threeD` +
> `transform3d` on a text overlay genuinely can't capture).
**For 3D TEXT, try `kind: "text"` + `place3d` / `threeD` FIRST.** A text overlay
is now declarative for depth — set `pl