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
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: 60Build `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