E579 — Duncan Fewkes reel analysis digest
- Cached MP4s: `[home]/.openclaw/browser/reels-ingest/{DU,DV}*/` - Caption JSON: same dir, `*.info.json` - Gemini visual analyses: `[home-path]` - Prior playbook (E579-E606): `lume-duncan-playbook.md` - Master URL list: `/tmp/duncan_reels.txt`
Full Public Reader
E579 — Duncan Fewkes reel analysis digest
Source video: `../reels/E579-DWd8U8Sig9F.mp4` (symlink to `[home-path]`)
Caption: `../reels/E579-DWd8U8Sig9F.txt`
This file aggregates every playbook chunk section that cites E579. Sections are de-duplicated by heading.
File locations
_From `lume-duncan-playbook-chunk-DV-DU.md`_
- Cached MP4s: `[home]/.openclaw/browser/reels-ingest/{DU,DV}*/`
- Caption JSON: same dir, `*.info.json`
- Gemini visual analyses: `[home-path]`
- Prior playbook (E579-E606): `lume-duncan-playbook.md`
- Master URL list: `/tmp/duncan_reels.txt`
---
Cross-link to existing LUME memory
_From `lume-duncan-playbook-chunk-DV-DU.md`_
- `lume-duncan-playbook.md` — primary, 12 most-recent reels (E579-E606)
- `lume-v1-duncan-fewkes-stack.md` — initial inspiration cataloging
- `lume-v1-evo3-masterplan.md` — 5-wave plan that the additions above plug into
- `lume-v1-forge-architecture.md` — `LumeAudioReactor.cs` + shader patch (where transient channel lands in Wave 1)
- `lume-v1-rail-plan.md` — EW-governed track plan (Wave 2-5 additions above are new tracks)
---
Big picture: this is the "Audio Particle Clones" arc
_From `lume-duncan-playbook-chunk-DT-DS.md`_
Mid-period work is dominated by Audio Particle Clones (E483→E491) — beat-snapshot human silhouette as particle clouds layered with live depth visuals. This is the direct ancestor of the recent "Sunset Clone Plane" (E605) and "Motion Sparks 4" (E579) work. Three things are clearer here than in the recent reels:
1. Snapshot timing is a published failure mode. E491 (DSkpKC_iie8): "needs a response time/curve adding so that snapshot pose/shape holds for a bit longer (maybe 250ms) and then slightly eases into the gravity fall, so you have time to read the shape better." → For LUME `LumeCloneSnapshot.cs`: `holdDuration = 0.25s`, then ease-in to gravity. Don't drop straight to physics.
2. Audio reactivity is two-stage with a feedback loop, not a single mapping. Beat trigger → snapshot AND audio FFT → reactive logo blend-shape inflation → blend-shape adds motion vectors to fluid sim → fluid sim moves OTHER particles → speed-to-brightness lights them up. (E489 + E490). This is a self-reinforcing cascade, not parallel channels.
3. Speed→brightness is the "twinkle" parameter. Every audio clones reel calls it out as the secret-sauce visual flourish that makes the system feel alive. Brightness boost is a power curve with a threshold — overshoot → blow-out, undershoot → no twinkle. Tune by ear.
---
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.
---
Three-channel reactivity philosophy
_From `lume-duncan-playbook.md`_
v1 had two channels (outline=audio, inner=motion). v2 elevates this to three with the audio-transient discovery (E535):
| Channel | Drives | Source signal | Visual purpose |
|---|---|---|---|
| Outline (form) | Fresnel power × audio RMS, with `flash = step(beat_threshold, audio_rms)`. Emissive bright color on outline edge. | RMS + 4 EQ'd bands | "Where you are" — silhouette pulses on beat |
| Inner (action) | Motion-magnitude (from optical flow on linearised depth) modulates fresnel-power inverse — high motion drops fresnel (color spreads), low motion concentrates to silhouette | Optical flow from depth-camera frames | "What you're doing" — motion paints color |
| Impulse (kick) | `AddForce` event in VFX Graph, fires on transient onset only. Velocity kick to existing particles. | Audio transient detector (peak / onset, NOT smoothed RMS) | "When it hits" — particles react to drum hits, not to overall loudness |
Verbatim from E579:
> Outline (form) reacts to audio: brightness flashes on beat — shows you "where you are."
> Inner color (action) reacts to motion: hue/spread driven by motion vectors — shows you "what you're doing."
Verbatim from E535 (the third channel):
> WIP testing quick "overamp" method for audio transients to add a kick to the particle motion. Not very noticeable so needs more definite/large change in motion, but without it going crazy and losing coherence.
Concrete audio→VFX rules from E512 (most actionable engineering note in entire corpus)
> 1) Fluid sim preset with shorter range (lower velocity propagation) works better at full screen scale — and also for multiple people.
> 2) Audio response boosting position directly (rather than feeding into force levels) makes it nice and snappy without blowing up the fluid sim.
> 3) Audio response still needs work. Need to EQ before auto-gain (or fixed dynamic range with no auto-gain) to tame bass level but give natural response where louder parts make particles react more than quieter.
> 4) Bass should affect sim large low-freq positional offsets, mid range and highs work nicely when the timer cycle causes higher-freq position offsets.
For `LumeAudioReactor.cs`:
- 4 frequency bands (bass / low-mid / high-mid / treble) NOT just RMS+3 generic
- Bass band → low-freq large positional offset (slow wave bulges)
- Mid + high bands → high-freq small positional offsets (timer-cycled)
- Audio drives position directly, NOT force/velocity (avoids sim blowup)
- EQ stage BEFORE auto-gain (or use fixed dynamic range entirely)
- Speed→brightness as the "twinkle" parameter (E490) — power curve with threshold, tune live by ear (no preset)
Per-particle hue inputs (3 stacked sources)
1. Global slow cycle — 1 rev / 30s, applied to all particles
2. Per-particle hue from RGB luma at spawn — each particle takes color from where on the body it spawned (RGB texture binding alongside depth)
3. Per-particle speed-driven hue shift each frame — `hue = baseHue + speedScalar * shiftAmount` (E568)
---
Effect taxonomy (catalogued across 72 reels — all families)
_From `lume-duncan-playbook.md`_
### A. Metaball / liquid / blobby family (E461, E462, E468, E593, E595)
- "Blobby guys" with material variants: slime, water, pink energy, oily, chrome/mercury
- HDRP compute thickness + translucent materials = the depth/turntable look
- Inverse compute-thickness mode (E468): alpha ∝ (1−thickness), neon-edge look + glowing wall decals
- Twin-mesh nested MC (E427): inner gold + outer glass, same particles, two surface thresholds
- LUME equivalent: URP doesn't ship compute thickness. Approximate with screen-space SDF metaball shader (cheap, ~80
### B. Bullet-time / freeze-snapshot family (E536, E599, E595, E604)
- Audio-transient trigger (clap/snap) → pause → swap to debug orbit camera → 1 full orbit with ease-in/out curve → swap back → unpause
- "In-place slowmo with screen-warping" alternative (no camera spin — for wall installs)
- Beat-triggering of clone snapshots stays active during bullet-time — no "down time"
- LUME: `LumeBulletTime.cs` + `LumeCloneSnapshot.cs`. Wave 3.
### C. Clone / dissolve / multi-self family (E483, E488, E491, E598, E604)
- Frozen poses captured as red snapshots, layered with live purple/orange depth mesh
- Snapshot timing locked: `holdDuration = 0.25s` then ease-in to gravity (E491 verbatim self-critique)
- Drop-physics rules from E488:
- Particles MUST NOT cast shadows (or use layer-filtered depth buffer) — self-collision turns it into a mess
- Pure gravity + collision is visually dead — ALWAYS layer fluid-sim kick + turbulence on top
- "Don't quit at the first disappointing test" — verbatim
- Dual-channel: red snapshots (frozen) vs live purple/orange mesh (current)
- LUME default: both layers, with slider to toggle live-depth opacity 0-1
### D. Sunset / infinite plane / planar reflection (E605)
- "Sunset" lighting preset = warm directional + atmospheric haze
- Infinite plane (procedural ground) with planar floor reflection — but toggleable because it's a known perf hit (E532)
- "Bolivian Salt Flats" environment ambition
- LUME: URP planar reflection probe + procedural ground shader + warm-tone post-processing volume. `LumeFloorReflection.cs` togglable.
### E. Motion-sparks / particle-burst family (E579, E587, E589)
- Surface shader audio reaction: brightness flash on beat
- Surface shader motion reaction: fresnel pulled down where motion occurs
- Particles: hue cycle + per-spawn hue-shift by RGB luma + size/glow fade by speed + speed-driven hue shift
- "Music on/off" toggle is part of his demo (E587) — proves audio-reactivity is opt-in, not always-on
### F. Maximalism stress-test (E599)
- Pushed fluid forces and particle count/lifespan to the limit
- Caption: "sometimes more is more" — he likes the busy look, not the minimal
- LUME tuning: don't be conservative on particle count. Aim high then dial back.
### G. Logo / wordmark as 3D VFX volume (E527-E531, E544, E470, E489)
NEW family from DV-DU + DR-DQ chunks. Logos are not static overlays — they are 3D volumes that become particle obstacles, spawn surfaces, "punch through" reveals, AND audio-reactive blendshape drivers:
- E530 "Punch Through": invisible logo + inverted-obstacle fluid sim → particles thrown out of letter shapes, leaving the user visible through gaps. "High fluid influence throws particles out of the logo letters, and no particle kill for zero velocity, so particles get stuck in non-fluid-flow area."
- E528 cymatics: ShortThrow fluid sim + logo letters → particles "stuck" on letters bouncing internally → almost cymatic (Chladni-plate) pattern.
- E544 "Blocky PinScreen Revisit": HOLOVIS text reacts volumetrically — "interactive text displayed and reacts volumetrically to the user's movements, allowing the user to walk through or displace the letters."
- E489 wordmark feedback loop (CRITICAL): wordmark uses BlendShape inflation driven by FFT bands → blendshape inflation generates motion vectors → motion vectors get injected into fluid sim → fluid sim pushes nearby particles. The wordmark BECOMES part of the audio-reactivity loop, not just an overlay.
- E470 power-curve emission gating: HDRP compute-thickness → screen-space buffer → tight power curve `pow(thickness, k)` with `k≈6-10` → bistable letter glow (dark, then suddenly glow at threshold). Cleaner than `emission *= audioRMS`.
LUME mapping: KOATJI / LUME wordmark becomes a 3D extruded SDF that the depth-camera point cloud can punch through, with particles spawning along the letter surface. Build `LumeWordmarkInflator.cs` + tight power-curve emission gating in shader.
### H. Pinscreen / cube-grid VFX (E544, E545)
NEW family.
- Regular grid of small cubes locked into XY position
- Z-position pushed by reprojected depth + fluid-sim dye buffer
- Two-tone shading: front-facing white plastic; rear-facing gold (or accent)
- Transparent variant uses HDRP thickness for transmission color
- Cleaner alternative to point-cloud particles. Less "swarmy", more "architectural". Single mesh, instanced grid, vertex shader displaces by depth. Cheaper than per-pixel particles. Wave 2 add.
### I. Strip-particle / kelp / boids family (E546-E549, E556-E557)
NEW family.
- VFX Graph particle strips (= ribbon particles) used as kelp strands
- Per-strip stiffness; motion/forces propagated parent→child
- Spectrum-mapped vertical audio response (E557): map FFT bin index → vertical Y position on strip particle. Bass drives bottom leaves, treble drives top leaves.
- Boids variant: Reynolds boids sim with audio params on cruising speed and separation.
- "Wobbly Lads" feedback gotcha (E556): bidirectional sim coupling = feedback loop. Pick one direction.
- LUME relevance: kelp aesthetic is niche, but the strip-particle physics primitive is broadly useful (tendrils, smoke ribbons, hair). Wave 4-5.
### J. SuperHot motion-gated fluid sim (E567, E568)
NEW killer mode. Verbatim:
> Utility script hooks user motion (from depth camera) to fluid sim timescale with a fairly quick smoothing/falloff — so a bit like SuperHot, where the sim only updates/moves when you move.
Implementation:
- Compute scalar motion level from depth-camera frame-to-frame delta (smoothed via one-euro filter — name-checked E567)
- Map motion level → fluid sim's local timescale (NOT `Time.timeScale` — fluid has own dt)
- Lower-threshold → "no motion = fully frozen sim"
- Per-install threshold tuning (depth noise prevents reaching zero when user is far)
Killer feature for bar/lounge installs — when nobody moves, visuals freeze into a sculpted form. When the room moves, it comes alive. Wave 2-3.
### K. Frozen velocity buffer (E560, E567, E568)
NEW mode, distinct from SuperHot. Found accidentally and kept:
> Stopped Unity editor playback and the fluid sim stops updating but the buffers don't get cleared (as they exist in asset database), so the particle VFX continue to update and the particles follow the frozen sim velocity buffer paths. This creates frozen forms in the motion paths that you don't get while the sim is updating.
Distinct mechanism: SuperHot pauses sim time when user is still; this freezes the velocity field while particles keep flowing through it. Result: laminar streams along etched-in paths. Implement as a `FreezeVelocityField` toggle on `LumeMotionGatedFluidSim`.
### L. Human Kaleidoscope (E475, E476, E479, E469, E471, E472)
NEW mode (entirely missing from v1).
- 16-clone radial ring around centre — N=16 is settled value (tested 20/24/32, "harder to read the human form")
- Each clone is rotational copy of live depth silhouette
- Slow top-level rotation of entire ring
- LOD mesh switching to push more clones (tunnel formation in E476)
- E479: SECOND ring of new-colour clones snapshot every second, falling inwards into turbulence — temporal stacking on top of spatial mirroring
- Explicitly rejected per-clone twist — "too much variance and makes the shape much harder to read"
- E472 extends to full body so legs participate
- DR-prefix variant uses chrome / matte material toggle + reflection probe in middle of symmetry
LUME design rule from this: when stacking visual transforms, ONE rotational symmetry is enough. Don't compound symmetries; pick one and let temporal evolution do the rest.
`LumeKaleidoscope.cs` Wave 4 deliverable. Cheap to ship — single render texture + N copies rotated by `360°/N`.
---
E. Motion-sparks / particle-burst family (E579, E587, E589)
_From `lume-duncan-playbook.md`_
- Surface shader audio reaction: brightness flash on beat
- Surface shader motion reaction: fresnel pulled down where motion occurs
- Particles: hue cycle + per-spawn hue-shift by RGB luma + size/glow fade by speed + speed-driven hue shift
- "Music on/off" toggle is part of his demo (E587) — proves audio-reactivity is opt-in, not always-on
---
Promotion Decision
Attach run IDs, datasets, metrics, and reproduction commands.
Source Anchor
lume-commerce/hardware/reference/duncan/analyses/E579-DWd8U8Sig9F.md
Detected Structure
Method · Evaluation · Code Anchors · Architecture