Grand Diomande Research · Full HTML Reader

E521 — Duncan Fewkes reel analysis digest

- 20 reels ingested (`reels-ingest/{shortcode}/`): - DT-prefix (E500–E521 era): DT0G7SyCtGg E519, DT2tfJzip8A E520, DT6IlEfig-k E521, DTbJvnKCrHO E509, DTBUJiDCvPQ E500, DTEEQNnCvHh E501, DThrF5Miq0- E512, DTmyro9CqUa E514, DTQRPBFiu2v E504, DTr5TQfCpG4 E516 - DS-prefix (E475–E494 era): DSLMOE6iuFH E479, DSA7b7MClVf E475, DScEatyilnk E489, DSDVSJ0itoN E476, DSfZYMUChIi E490, DShj9nlivqf E491, DSkpKC_iie8 E491, DSPfEuWCmTg E483, DSvasHCCiSX E494, DSZmIhOCrTv E488 - 4 Gemini visual analyses successful (DT0G7SyCtGg, D

Embodied Trajectory Systems research note backlog reference score 34 .md

Full Public Reader

E521 — Duncan Fewkes reel analysis digest

Source video: `../reels/E521-DT6IlEfig-k.mp4` (symlink to `[home-path]`)
Caption: `../reels/E521-DT6IlEfig-k.txt`

This file aggregates every playbook chunk section that cites E521. Sections are de-duplicated by heading.

Source data

_From `lume-duncan-playbook-chunk-DT-DS.md`_

  • 20 reels ingested (`reels-ingest/{shortcode}/`):
  • DT-prefix (E500–E521 era): DT0G7SyCtGg E519, DT2tfJzip8A E520, DT6IlEfig-k E521, DTbJvnKCrHO E509, DTBUJiDCvPQ E500, DTEEQNnCvHh E501, DThrF5Miq0- E512, DTmyro9CqUa E514, DTQRPBFiu2v E504, DTr5TQfCpG4 E516
  • DS-prefix (E475–E494 era): DSLMOE6iuFH E479, DSA7b7MClVf E475, DScEatyilnk E489, DSDVSJ0itoN E476, DSfZYMUChIi E490, DShj9nlivqf E491, DSkpKC_iie8 E491, DSPfEuWCmTg E483, DSvasHCCiSX E494, DSZmIhOCrTv E488
  • 4 Gemini visual analyses successful (DT0G7SyCtGg, DT6IlEfig-k, DTBUJiDCvPQ, DScEatyilnk). DSfZYMUChIi + DSZmIhOCrTv hit Gemini 429 quota exhaustion; captions on those are still detailed.

---

NEW preset taxonomy (revealed by E521 visual analysis text overlays)

_From `lume-duncan-playbook-chunk-DT-DS.md`_

The recent playbook only exposed `Multiparticle_Spine_FX` and `slime/water/chrome` material names. E521's screen recording shows the actual UI panel cycling through every preset. Update the LUME `LumeVfxEditor.cs` slot enums to match:

### `Depth:` slot (the surface visual on the human silhouette)
- `GhostChromatic2` — translucent particle-filled ghost, chromatic aberration on edges
- `GlassThin` — thin refractive glass sculpture
- `GlassThick` — solid heavy glass form
- `GlassScan1` / `GlassScan2` / `GlassScan3` — three styles of scan-line / fragmented glass
- (E520 reveals) `DepthCubes` with a runtime LOD randomizer — VFX Graph mesh particles fed by live depth buffer, audio-reactive trigger script flips LOD level on beat

### `VFX:` slot (the additional particle layer on top)
- `Clones Audio Drop Bright` — beat-snapshot clone with gravity drop + speed-to-brightness boost (the headliner)
- `Particle Clone` (single colour, mirror silhouette only)
- `Particle Clones Audio` (multi-clone audio variant — what gets ringed in E479's kaleidoscope)
- `Swirly Particles` family (E509, E512, E514, E516) — floor-spawn vortex particles around the user

### `Lighting:` slot (every lighting rig has a name — copy these)
- `FogSpotLeftRight1` — two fog spotlights, sides
- `FogSpotLeftRight2` — variant of the above (different colour/intensity)
- `FogSpotRight` — single fog spot from right
- `FogSpotOverhead` — single fog spot from above
- `FogPointOrbitPulse` — pulsating point lights orbiting the figure (E521 shows a strong red orbiting one)
- `BrightRoom` — neutral bright fill
- `SpotsLeftRightWithFill` — dual side spots + fill
- `None` — no realtime lights, only emissive particles + depth projection (E516 verbatim: "looked interesting without any realtime lights because the emissive particles and live 3D depth projection makes it look like solid shadow/negative space punch through.")

### `Background:` slot
- `TestRoomDark` — dark gridded test environment
- `StudioBG_Grey` (from prior playbook)
- (sunset / salt flats — recent only)

### Critical UX rule: every preset list ENDS with "None" / "Off"
> E516 verbatim: "Cycling through test lighting presets and the last is always 'None' (same for the script for cycling through depth visuals, VFX, backgrounds etc — always allow for 'Off' to be an option)"

→ For LUME `LumeVfxEditor.cs`: every preset enum's last entry MUST be `None`. The "Off" state is a feature, not a bug. The negative-space look that emerges from `Lighting=None + emissive depth particles` is its own aesthetic.

---

`Lighting:` slot (every lighting rig has a name — copy these)

_From `lume-duncan-playbook-chunk-DT-DS.md`_

  • `FogSpotLeftRight1` — two fog spotlights, sides
  • `FogSpotLeftRight2` — variant of the above (different colour/intensity)
  • `FogSpotRight` — single fog spot from right
  • `FogSpotOverhead` — single fog spot from above
  • `FogPointOrbitPulse` — pulsating point lights orbiting the figure (E521 shows a strong red orbiting one)
  • `BrightRoom` — neutral bright fill
  • `SpotsLeftRightWithFill` — dual side spots + fill
  • `None` — no realtime lights, only emissive particles + depth projection (E516 verbatim: "looked interesting without any realtime lights because the emissive particles and live 3D depth projection makes it look like solid shadow/negative space punch through.")

---

NEW: Hardware perf reality check

_From `lume-duncan-playbook-chunk-DT-DS.md`_

  • E521: laptop with 3070 GPU runs the full HDRP stack in real-time. No A6000 needed for development.
  • E489: production target is a Quadro A6000 (Ampere) machine driving an LED wall + LED floor combo.
  • E501: install camera mount = 2.3m off ground, tilted downwards, above an LED wall.

→ For LUME Beelink GTR7 / GMKtec K8 budget: the 3070 development reality validates that a strong x86 mini-PC with iGPU+discrete (or Ryzen 7940HS class iGPU with FSR scaling) is in-range for the Wave 1 fluid+depth surface load. The Quadro A6000 spec is for >curved LED wall (>4K, >120Hz) production targets only.

---

NEW: Depth surface ≠ particles. They are separate slots.

_From `lume-duncan-playbook-chunk-DT-DS.md`_

Prior playbook treated "depth particles" as one thing. E521 reveals they are TWO independent slots (`Depth:` for surface treatment of the silhouette + `VFX:` for the additional particle layer). They cycle independently. This means LUME's `LumeVfxEditor.cs` needs:

Depth: Ghost / Glass / Cubes / Off    (~4-6 surface treatments)
VFX:   Clones / Particles / Swirl / Off  (~4-6 particle layers)

→ 4×4 = 16 distinct combos before colour/lighting variations. Big gain in operator-controlled variety with very few new assets.

---

NEW: Mic input as a development shortcut (E504, E521)

_From `lume-duncan-playbook-chunk-DT-DS.md`_

He repeatedly uses laptop microphone audio input for live testing — not pre-recorded audio, not line-in. This is a workflow accelerator: the entire audio-reactivity pipeline can be developed from a couch with a laptop mic playing music nearby. No DAW, no virtual audio cable.

→ For LUME Wave 1: in the Mac5 Unity scaffold, ensure `AudioSource` mic-capture path is the dev default, not line-in. Mic-permission pre-grant (already P1 from prior chain:genesis) handles this. Unblocks dev iteration speed.

---

Evolution arc (E475 → E521)

_From `lume-duncan-playbook-chunk-DT-DS.md`_

Reading the captions in chronological order surfaces his actual learning curve:

1. E475–E479 (DS, Human Kaleidoscope): Form-mirroring spatial symmetry. Discovers 16-clone is the readability sweet spot. Rejects per-clone variance.
2. E483–E491 (DS, Audio Particle Clones): Pivots from spatial to temporal (snapshots on beat). Discovers speed-to-brightness as the alive-feeling parameter. Discovers blend-shape→fluid-sim feedback loop.
3. E494 (DS, Metaball Lighting): Tests material variants against lighting rigs. Settles on opaque core (slime) over fully translucent for shape readability under strong backlight.
4. E500–E504 (DT, Turntable Snapshots + Mic Input): Productionizes the input path (mic) and viewing tools (debug camera turntable for face closeups + multi-angle review).
5. E509–E516 (DT, Swirly Particles): Iterates spawn topology (floor-spawn discovery) and audio-axis mapping (XZ-twist vs Y-lift bulges). Establishes "always have an Off entry" rule.
6. E519–E521 (DT, Chromatic Glass + Lighting Rigs): Decouples Depth shader from VFX layer; cycles through 8+ named lighting presets in one demo. The system becomes operator-friendly.

Key finding: between E479 and E521 he transitioned from a single hand-crafted demo per reel to a swappable preset matrix (Depth × VFX × Lighting × Background). This is the design pattern LUME should aim for from Wave 2 onwards. The earlier work was bespoke; the later work is a control surface.

---

v1 vs v2

_From `lume-duncan-playbook.md`_

v1 (this file as of earlier 2026-04-25, 161 lines): 12 most-recent reels (E579-E606, 1 month coverage), 3 Gemini analyses. Established the two-channel reactivity philosophy and v1 VFX Editor data model.

v2 (this file now): 72 reels (E415-E606, ~2 years coverage), 20 Gemini analyses, source data from 4 chunks aggregated. Adds 2 years of foundational architecture decisions Duncan stopped re-explaining in his recent reels: shader parameter values, complete preset taxonomy, target hardware, calibration system, Holovis commercial brand.

If the granular per-chunk evidence is needed, it stays on disk:
- `lume-duncan-playbook-chunk-DV-DU.md` (E485-E570, 20 reels, 5 visual analyses)
- `lume-duncan-playbook-chunk-DT-DS.md` (E475-E521, 20 reels, 4 visual analyses)
- `lume-duncan-playbook-chunk-DR-DQ.md` (E415-E474, 20 reels, 8 visual analyses)

This file is the canonical synthesis. Step 3 (creative:forge) should read this; chunks are authoritative for verbatim quotes and Inspector dumps.

---

Complete VFX Editor data model (v2 — supersedes v1)

_From `lume-duncan-playbook.md`_

The v1 model had ~7 slots with placeholder names. v2 has 9 slots with verbatim preset names from his UI overlays (E516, E521, E532, E534, E568):

VFX Editor
├── Auto Cycle VFX [checkbox]    # BPM/16-bar phrase auto-transition
│
├── Depth: <preset>              # surface treatment of human silhouette
│   options: GhostChromatic2, GlassThin, GlassThick, GlassScan1/2/3, DepthCubes, HolePunch, None
│
├── VFX 01: <preset>             # additional particle layer
│   options: ClonesAudioDropBright, ParticleClone, ParticleClonesAudio,
│            SwirlyParticles, KaleidoscopeRing16, Multiparticle_Spine_FX, None
│
├── VFX 02: <preset>             # second layer (compositional)
│   options: ParticleSystem_Spine_Trail, ClonesSnapshotRed, ClonesSnapshotRedPlexus, None
│
├── Painting: <preset>           # surface-shader / material slot
│   options: SpotsLeftRightWithFill, Bounce_Frosted, Bounce_Plastic, None
│
├── Lighting: <preset>           # named lighting rigs
│   options: FogSpotLeftRight1, FogSpotLeftRight2, FogSpotRight, FogSpotOverhead,
│            FogPointOrbitPulse, BrightRoom, SpotsLeftRightWithFill, EmissiveOnly, None
│
├── LightingProfile: <enum>      # NEW from E473 — perf vs cinematic toggle
│   options: EmissiveOnly (160-170 fps, no shadows), SpotShadows (70-110 fps, 7x cast)
│
├── Environment: <preset>        # 3D scene around the figure
│   options: Studio_Sky_Sphere, Sunset, BolivianSaltFlats, TestRoomDark, None
│
├── Background: <preset>         # 2D backdrop layer
│   options: StudioBG_Grey, Gallery2, TestRoomDark, None
│
├── Logo: <preset>               # brand overlay slot — also acts as VFX volume
│   options: HOLOVIS_Letters_AudioBlendshape, KOATJI/LUME_equivalent, Off
│
├── FluidSim: <preset>           # 6 verbatim names from E534
│   options: Default, Default_Smooth, LongThrow, MidThrow, ShortThrow, InvertedObstacle
│
├── BodySim: <preset>            # NEW from E532 — separate sim slot for body-driven motion
│   options: same value set as FluidSim
│
├── FX: <preset>                 # additional one-shot effects
│   options: ClonesSnapshotRed, ClonesSnapshotRedPlexus, None
│
├── SpawnTopology: <enum>        # NEW from E509 floor-spawn discovery
│   options: FloorPlane, BodyVolume, CeilingPlane, WallPlanes, MidPlane
│
├── NoiseAxisMode: <enum>        # NEW from E514
│   options: XZ_Twist_Contained, Y_Lift_With_LowFreqBulges
│
├── Auto Load Default Scene [button]
├── Update Settings Default Scene [button]
│
├── Camera Settings: FOV slider + Sensitivity slider
├── VFX Settings: Intensity, Density, Count, Gravity, InitialVelocity, Lifetime, SpawnRate
├── Render Settings: Exposure, Gamma, AmbientOcclusion, Bloom
├── VFX Color: RGB sliders + hex + color picker
└── FX LiveOnColorClear [checkbox]

Critical UX rule (E516 verbatim)

> Cycling through test lighting presets and the last is always 'None' (same for the script for cycling through depth visuals, VFX, backgrounds etc — always allow for 'Off' to be an option).

Every preset enum's last entry MUST be `None`. The negative-space look that emerges from `Lighting=None + emissive depth particles` is its own aesthetic, not a bug. From E516: "looked interesting without any realtime lights because the emissive particles and live 3D depth projection makes it look like solid shadow/negative space punch through."

Depth ≠ VFX: 4×4=16 combos for free

Prior assumption (v1): "depth particles" was one thing. v2 reveals they are two independent slots — `Depth:` (surface treatment of the silhouette) + `VFX:` (the additional particle layer on top). They cycle independently.

Depth: Ghost / Glass / Cubes / Off    (~4-6 surface treatments)
VFX:   Clones / Particles / Swirl / Off  (~4-6 particle layers)

= 16+ distinct combinations before lighting/colour/background variation. Operator gets massive variety from a small preset library.

Performance HUD (top-right, persistent in every reel)

avg min max
38  39  60   16.6ms
FPS: 60

Build `LumePerfHud.cs` with same layout. F8 toggle. Useful both for dev and operator confidence the install is healthy.

---

Self-critiques worth borrowing as LUME design principles

_From `lume-duncan-playbook.md`_

  • E534: "Plexus links almost invisible so I need to figure out how to match brightness with the source/linked particles." → emissive consistency between primitives is its own bug class
  • E535: "Not very noticeable so needs more definite/large change in motion, but without it going crazy and losing coherence." → audio-transient response: read clearly without losing form coherence
  • E548: "Pretty huge fail when I finally check some footage of real kelp and realise mine looks bugger all like an actual kelp forest. I think I must have had some kind of Spongebob cartoony swishy stuff in mind." → reference-check before lookdev
  • E556: "Otherwise it would feedback and he'd go apeshit." → coupled sim systems: pick one direction
  • E567/E568: "Probably easiest to expose in settings and debug menu to allow for tweak values for each install individually." → ship per-install settings as first-class architecture, not afterthought
  • E516: "Always allow for 'Off' to be an option." → every preset enum ends with `None`
  • E488: "Another lesson to myself to push past the disappointing failures and keep digging to see if there's anything there." → don't quit at first disappointing test
  • E521 / E479 evolution arc: Duncan transitioned from bespoke per-reel demos to a swappable preset matrix (Depth × VFX × Lighting × Background). LUME should target this pattern from Wave 2 onwards. Earlier work was bespoke; later work is a control surface.
  • #normalizefailure — he tags failures and shows them. Authenticity move worth borrowing for LUME devlog culture.

---

Updated wave plan (v2 — supersedes v1)

_From `lume-duncan-playbook.md`_

Wave 1 (Sat demo, ship-blocking) — keep tight, only adopt cheap items

  • Two-channel reactivity scaffolding in `LumeAudioReactor.cs` (carry over from v1):
  • `OutlineFlash` uniform (audio RMS + beat-threshold step)
  • `InnerSpread` uniform (placeholder = 0 until Wave 3 optical flow lands)
  • NEW Wave 1 adds from v2:
  • 4 EQ'd frequency bands (bass / low-mid / high-mid / treble), NOT just RMS+3 — drives position offsets directly, not force
  • EQ before auto-gain (or fixed dynamic range)
  • Audio transient channel ("overamp" — separate from RMS, drives velocity-kick AddForce in VFX Graph)
  • Per-particle hue-shift by speed — cheap shader patch (`hue += speedScalar * shiftAmount`)
  • Performance HUD overlay (avg/min/max/ms FPS top-right) — visible during Sat demo helps detect frame drops live, F8 toggle
  • Linearise depth in `LumeDepthReprojection` — even though optical flow is Wave 3, the calibration layer should already linearise (one-line shader change)
  • Bound the 2D fluid sim — reflective Dirichlet boundaries at screen edges
  • Mic-capture as dev default (already P1 from chain:genesis, now confirmed by Duncan's E504/E521 pattern)
  • Lighting: warm directional + neutral fill (closer to "sunset" preset than cold studio)

Wave 2 — VFX Editor scaffolding (post-Sat)

  • Build `LumeVfxEditor.cs` with 9 slots + 15+ enums (see complete data model above)
  • Every preset enum's last entry = `None`
  • 6-preset FluidSim taxonomy by literal name: Default / Default_Smooth / LongThrow / MidThrow / ShortThrow / InvertedObstacle
  • `LumeSettingsMenu.cs` — separate operator panel (Calibration / Camera / Motion / Performance / Audio + Setup save/load)
  • `[home-path]` per-install settings file
  • `LightingProfile` enum (EmissiveOnly / SpotShadows) — runtime A/B
  • Top-left media-transport widget (track title, play/pause, progress)
  • VFX-Graph particle ceiling: target 100-200k on Mac5 / Beelink (his ceiling on 3070 = 300k)
  • Pinscreen mesh (cube-grid, instanced, vertex displaced by depth+dye) — clean alternative to point-cloud
  • `ILumeSpawnSource` interface from day 1 with `DepthPointCloudSource`, `LogoSDFSource`, `MetaballSDFSource`, `PaintingMaskSource`
  • `LumeWordmarkInflator.cs` — audio-reactive blendshape feeding fluid sim + tight power-curve emission gating
  • Material variants on disk (asset references, not parameter blobs) — drag-drop preset extension

Wave 3 — Spine-bone particles + motion-gated sim (depends on mocopi PRO)

  • mocopi PRO arrives → 12-bone skeleton stream → particle emitters bound to spine bones
  • `LumeMotionGatedFluidSim.cs` — SuperHot mode (motion → sim timescale) + `FreezeVelocityField` toggle (frozen velocity buffer mode)
  • One-euro filter for motion smoothing (name-checked E567; pull a C# impl, don't roll our own)
  • `LumeOpticalFlow` on linearised depth (E460 promotion)
  • `LumeFluidDriver` primitive — any animatable rig emits source particles
  • Wall-spawn / Floor-spawn / MidPlane / CeilingPlane spawn topology enum
  • Plexus links shader with endpoint-emissive average

Wave 4 — Bullet-time + clones + kaleidoscope + strip particles

  • Audio-transient-triggered freeze + clone capture
  • Snapshot timing locked: `holdDuration = 0.25s` + `kGravityEaseIn` curve into gravity
  • Speed-to-brightness power curve + threshold (live operator dial, no preset)
  • Camera-spin (full bullet-time) AND screen-warp (no-spin variant) — both modes per install
  • `LumeKaleidoscope.cs` — 16-clone radial ring with chrome/matte toggle + central reflection probe
  • VFX Graph particle strips (ribbon particles) with per-strip stiffness, parent→child force propagation
  • Spectrum-mapped vertical audio response on strips (FFT bin → Y position)
  • `LumeRecorder.cs` — internal 4K MP4 capture on operator hotkey
  • Drop-physics rules (no shadow-cast self-collision; always layer fluid kick on top of gravity)

Wave 5 — Metaball / surface-material family + HDRP migration

  • Either HDRP migration OR screen-space SDF metaball approximation in URP
  • Material presets: slime, water, energy, chrome, oily — as on-disk material variants, not parameter blobs
  • Shader parameter dump mirrored: IOR=1.33, Translucency=0.003, Emissions Scale 0.00-0.05, Fresnel default 0.0
  • Twin-mesh nested MC (`_InnerThreshold` + `_OuterThreshold`) — Keijiro `ComputeMarchingCubes` fork
  • Inverse compute-thickness mode (alpha ∝ 1−thickness, emissive ∝ (1−thickness)^k) — `Inverse` checkbox on metaball shader
  • Wall-decal projector on fluid intersect

---

Wave 1 (Sat demo, ship-blocking) — keep tight, only adopt cheap items

_From `lume-duncan-playbook.md`_

  • Two-channel reactivity scaffolding in `LumeAudioReactor.cs` (carry over from v1):
  • `OutlineFlash` uniform (audio RMS + beat-threshold step)
  • `InnerSpread` uniform (placeholder = 0 until Wave 3 optical flow lands)
  • NEW Wave 1 adds from v2:
  • 4 EQ'd frequency bands (bass / low-mid / high-mid / treble), NOT just RMS+3 — drives position offsets directly, not force
  • EQ before auto-gain (or fixed dynamic range)
  • Audio transient channel ("overamp" — separate from RMS, drives velocity-kick AddForce in VFX Graph)
  • Per-particle hue-shift by speed — cheap shader patch (`hue += speedScalar * shiftAmount`)
  • Performance HUD overlay (avg/min/max/ms FPS top-right) — visible during Sat demo helps detect frame drops live, F8 toggle
  • Linearise depth in `LumeDepthReprojection` — even though optical flow is Wave 3, the calibration layer should already linearise (one-line shader change)
  • Bound the 2D fluid sim — reflective Dirichlet boundaries at screen edges
  • Mic-capture as dev default (already P1 from chain:genesis, now confirmed by Duncan's E504/E521 pattern)
  • Lighting: warm directional + neutral fill (closer to "sunset" preset than cold studio)

---

File locations

_From `lume-duncan-playbook.md`_

  • Cached MP4s: `[home]/.openclaw/browser/reels-ingest/D{X,W,V,U,T,S,R,Q}/.mp4`
  • Caption JSON: same dirs, `*.info.json`
  • Gemini visual analyses: `[home-path]`
  • Full URL list (161 reels): `/tmp/duncan_reels.txt`
  • Top-72 ingested across 4 chunks: see chunk files for granular shortcode lists
  • Per-chunk verbatim evidence (read these for direct quotes / Inspector dumps not summarized here):
  • `lume-duncan-playbook-chunk-DV-DU.md` (E485-E570)
  • `lume-duncan-playbook-chunk-DT-DS.md` (E475-E521)
  • `lume-duncan-playbook-chunk-DR-DQ.md` (E415-E474)

---

Promotion Decision

Keep in the searchable backlog until it intersects a live paper or system.

Source Anchor

lume-commerce/hardware/reference/duncan/analyses/E521-DT6IlEfig-k.md

Detected Structure

Method · References · Figures · Code Anchors · Architecture