Grand Diomande Research · Full HTML Reader

LUME ↔ Duncan Fewkes playbook gap analysis

> **STATUS WARNING — stale status table.** This document remains useful as a > Duncan/Fewkes feature checklist, but its "LUME status" column predates later > Unity work. For current shipped/not-shipped state, use > `unity/lume_pcloud/ARCHITECTURE.md` first. As of 2026-05-01, the newer project > includes impulse, runtime calibration panel, motion gate, fluid sim, LUMM > mocopi receiver/animator, display controller, skeleton-fluid injector, and VFX > editor files that are not reflected accurately below. Treat rows 4,

Embodied Trajectory Systems technical note experiment writeup candidate score 24 .md

Full Public Reader

LUME ↔ Duncan Fewkes playbook gap analysis

> STATUS WARNING — stale status table. This document remains useful as a
> Duncan/Fewkes feature checklist, but its "LUME status" column predates later
> Unity work. For current shipped/not-shipped state, use
> `unity/lume_pcloud/ARCHITECTURE.md` first. As of 2026-05-01, the newer project
> includes impulse, runtime calibration panel, motion gate, fluid sim, LUMM
> mocopi receiver/animator, display controller, skeleton-fluid injector, and VFX
> editor files that are not reflected accurately below. Treat rows 4, 5, 8, 10,
> 11, and 15 as old-plan notes until this table is regenerated.

_2026-04-26 — generated to anchor the Wave 5 priority list. Sources: the
4 Duncan playbook memory files (master + DV-DU + DT-DS + DR-DQ chunks)
and the 16 Wave 1-4 commits on `main`._

The reels are the source of truth for "what Duncan ships." The commits
are the source of truth for "what we ship." This file is the diff.

Layer-by-layer status

Legend: ✅ shipped · 🟡 partial · ❌ not started

#LayerDuncan's stackLUME statusCommitGap
1Depth reprojectionFemto/Kinect → CPU/GPU pinhole✅ Wave 2 GPU compute`7387abb2`
2Optical flowLK pyramid on linearised depth✅ Wave 4 dense single-scale LK`ca975000`Pyramid (multi-scale) deferred — fast motion above ~8 px/frame may alias
3Audio FFT4 EQ bands + RMS + spectral centroid + transient✅ Wave 4-B LUMF sidecar`976e594a`, `e36956f7`
4Audio reactivity (3-channel)outline=form, inner=action, impulse=transient kick via VFX AddForce🟡 outline + inner shipped; impulse not wiredTrack C set transient bit on `_OutlineFlash`, but no per-particle force kickWire AddForce into VFX Graph from `_OutlineFlash` transient bit
52D Eulerian fluid simKeijiro StableFluids fork, 6 named presets, reflective boundaries❌ NOT STARTEDVendor `keijiro/StableFluids`, port advection kernel into URP, expose 6 presets (Default / Default_Smooth / LongThrow / MidThrow / ShortThrow / InvertedObstacle)
6VFX Graph particles`Multiparticle_Spine_FX` + `ParticleSystem_Spine_Trail` layered on depth particles🟡 Bootstrap shipped, node graph empty`6d312a95`, `cf9becc4`User wires the .vfx node graph per `Reference/Duncan/analyses/E460-noreel.md` recipe; runtime bridge already pushes globals
7Marching cubesKeijiro `ComputeMarchingCubes`, twin-mesh nested with `_InnerThreshold` / `_OuterThreshold` for glass-over-gold❌ NOT STARTEDVendor Keijiro MC, write twin-mesh shader pass
8CalibrationPer-install runtime tweak grid + circular degree-marked spatial UI; persisted to disk🟡 `LumeCalibration` ScriptableObject (intrinsics only)`2f63709e`No runtime debug UI yet, no per-install persistence, no spatial grid overlay
9Wordmark / logo as payloadHOLOVIS letters as: blendshape inflation target + reflection probe + particle spawn surface + light source + SDF for "punch through" reveals❌ NOT STARTED (LUME wordmark is debossed plastic only)Wave 5+: model the wordmark as a real Mesh in-scene, drive blendshape from `_AudioLevels.x`, use as VFX spawn source
10Skeletal avatar`Framed_MotionCap` digital human, particles bind to spine bones, not raw depth pixels❌ NOT STARTEDWave 6+: requires mocopi PRO / Sapiens skeleton stream — depth-pixel only for Wave 5
11SuperHot motion-gatingSim slows when player still, runs full speed on motion❌ NOT STARTEDUse existing W3 motion-mag scalar to drive `Time.timeScale` modulation on the fluid sim only
12Frozen velocity bufferOne-shot snapshot mode for stillness-then-trail effect❌ NOT STARTEDWave 5+: `RWTexture2D<float2>` cache + freeze flag
13Human Kaleidoscope16-clone radial mirror render of the depth point cloud❌ NOT STARTEDWave 5+: Camera Stack with rotated VFX submission, 16× render passes
14Strip particles + pinscreen meshProcedural strip-extruded particles instead of quads, + blendshape pinscreen mesh for the wordmark❌ NOT STARTEDWave 6+
15Settings + Motion-Settings UISeparate from VFX Editor — runtime tweak panel for thresholds❌ NOT STARTED (we have `LumeWaveAutoWire` Editor menu only)Wave 5: in-Player IMGUI for thresholds — Duncan calls this out as "hard product requirement, not nice-to-have" (E568)
16Render pipelineHDRP (compute thickness for metaballs, screen-space planar reflections, MULTIPLE_SCATTERING sky)URP 17All commitsDecision deferred: stay URP for Sat-demo floor; evaluate HDRP migration only if metaball compute-thickness becomes Wave 6 priority

Tooling parity

ToolingDuncanLUME
Reference librarypersonal✅ `Reference/Duncan/` (83 reels + 69 analyses)
Wire formatNDI/OSC✅ LUME / LUMD / LUMF + reserved LUMC
Test suitenone visible✅ 37 pytest cases (33 fast + 4 slow)
Smoke-test runbooknone visible✅ `MAC5-SMOKE-TEST.md` (6-stage)
Health-checknone visible✅ `launchagents/health-check.sh`
Mac5 LaunchAgentsn/a✅ synthpub + audio-pub
Editor automationmanual scene tweaks✅ `Lume → Auto-Wire` + `Lume → Bootstrap Scene → Procedural Tunnel` + `Lume → Bootstrap Scene → Add VFX Graph Particles`

What ships today (the "Wave 1 floor")

Even with everything in the ❌ column missing, the demo path works:

1. `Lume → Bootstrap Scene → Procedural Tunnel` → 6,144-point cylindrical helix
2. Press Play → audio-reactive cyan-pink particles, hue-cycle, beat-flash outline
3. Run `pointcloud_pub.py --synthetic-depth` → swap to Wave 2 GPU-projected
wavy bowl with motion-driven inner spread (W3) and LK flow vector field (W4-A)
4. Run `audio_pub.py --synthetic` → low-latency 4-band FFT replaces mic capture (W4-B)

Everything from row 1-4 in the layer table is live and tested. Rows 5-16 are
the Wave 5+ ladder.

Wave 5 priority order (recommended)

1. Layer 4 — Impulse channel (~2 hr): wire transient bit → VFX AddForce. The
plumbing exists; this is the smallest gap with the largest visual delta.
2. Layer 8 — Calibration runtime UI (~4 hr): Duncan calls this out as
"hard requirement" (E568). In-Player IMGUI panel binding to LumeOpticalFlow
tunables (`diffNormMm`, `responseGain`, `lkFlowClampPx`) + persist to JSON.
3. Layer 5 — Fluid sim (~1 day): vendor StableFluids, 6 presets, bass→large
low-freq positional offsets / mid+high→high-freq small offsets
per E512.
4. Layer 11 — SuperHot motion-gating (~2 hr after layer 5): trivially layered
on top once fluid sim exists.
5. Layer 7 — Twin-mesh marching cubes (~1 day): vendor Keijiro MC.
6. Defer rows 9-15 to Wave 6+ (require mocopi PRO / wordmark mesh / camera stack).

Reference cross-links

- `Reference/Duncan/INDEX.md` — 83-row table of reels with analysis cross-links
- `Reference/Duncan/analyses/E512-*.md` — verbatim engineering notes on fluid sim
audio-reactivity rules (Bass→position, EQ-before-auto-gain, etc.)
- `Reference/Duncan/analyses/E535-*.md` — third-channel transient kick rationale
- `Reference/Duncan/analyses/E527-*.md` — HOLOVIS commercial install brand
- `Reference/Duncan/analyses/E470-*.md` — A6000@60fps target hardware
- `[home-path]` — canonical synthesis

Promotion Decision

Attach run IDs, datasets, metrics, and reproduction commands.

Source Anchor

lume-commerce/docs/research/DUNCAN-GAP-ANALYSIS.md

Detected Structure

Method · Evaluation · Code Anchors · Architecture