Skip to content

demo(blob): dub-space arrangement + a beat-locked particle field - #354

Merged
jeffcrouse merged 2 commits into
mainfrom
demo-blob-beat-locked-particles
Aug 16, 2026
Merged

demo(blob): dub-space arrangement + a beat-locked particle field#354
jeffcrouse merged 2 commits into
mainfrom
demo-blob-beat-locked-particles

Conversation

@jeffcrouse

@jeffcrouse jeffcrouse commented Aug 16, 2026

Copy link
Copy Markdown
Member

Reworks the blob demo's music and its particle field so the visuals read as caused by the kick rather than as ambient swarm motion.

The particle field was the problem

The old field wired the arp note-instances into the attractors port, so the swarm chased the beads around the wheel. In motion that reads as aimless "swarming to different places" — busy, but not obviously caused by anything you can hear.

Attract is now off, and the baseline emission_rate is zero — at rest there are no particles at all. transport.beat_pulse spawns a fresh wave near the centre on each kick, speed flings it outward, and a short lifetime plus high drag clear it before the next beat. You see the motes born on the beat instead of an old cloud glowing. Bass nudges the newborn wave's size and speed; highs brighten it.

Arrangement

  • New stab track — sparse minor chords on the off-beats through a Surge FX send (a low type lands in the delay/reverb family), smeared into dub space. The FX call is guarded: an FX quirk must not break the build.
  • Bass split into two figures — sustained sub roots in the intro (a deep bed, out of the kick's way), then off-beat sub in verse/chorus so it interlocks with the four-on-the-floor kick instead of doubling it. Bounce rather than a wall.
  • Levels rebalanced for the extra track: bass 0.78 → 0.52, lead 0.5 → 0.36, master 0.55 → 0.5.
  • Drums lead on kick + off-beat open hat, with the 16th closed-hat roll held back for the chorus.

Stage

Darkened toward near-black (bg 0.02 → 0.008), with the background-breathing mapping cut 0.08 → 0.015 so the glows carry the image rather than a lifted background. Camera pulled in (orbit radius 17 → 12.5) and bloom opened slightly to match.

Notes

Generated projects under examples/demos/projects/ are gitignored, so this script is the source of truth. It has been run and produces a playable 4-track project (Cassette Drums / bass / stab / lead).

Content-only — no engine or app code is touched.

🤖 Generated with Claude Code


Measured reactivity — the burst claim did NOT verify

Ran analyze_output(mode="av") against the chorus on a healthy app, five captures over ~38s
(arm → fill → judge each time, since the perception ring is throttled to ~12fps and holds ~4–8s):

Capture Onsets onset_response_rate energy_motion_correlation
1 1 0.0 0.140
2 1 0.0 0.150
3 1 0.0 0.205
4 4 0.0 0.266
5 6 0.0 0.289

13 onsets, onset_response_rate 0.0 on every capture. Mean motion correlation 0.21 against a

0.5 working threshold; mean_brightness 0.169, so rendering is healthy and this is not a dead-graph
artifact.

The audio side was verified independently first — rapid-polling the drum track during playback
(444 polls / 5s) gives peak transient 1.0, so the kick is firing hard and there genuinely are
onsets to respond to.

So the beat-locked particle wave does not register as a visual event on the kick. The modest
motion correlation is consistent with the blob's pre-existing continuous bass/mid mappings, which
this PR does not change.

Untested hypothesis for follow-up: the burst may be too brief or too small to move a frame-difference
metric — lifetime=0.6 with release=0.13 on the emission_rate mapping. That needs a parameter
sweep, not more reasoning.

The arrangement work (stab track, interlocking off-beat sub, darkened stage) stands on its own and is
unaffected by this finding.

Reworks the blob demo's music and its particle field so the visuals read as
caused by the kick rather than as ambient swarm motion.

Arrangement
- New `stab` track: sparse minor chords on the off-beats through a Surge FX
  send (a low `type` lands in the delay/reverb family), smeared into dub space.
  The FX call is guarded — an FX quirk must not break the build.
- Bass reworked from one step-loop into two figures: sustained sub roots in the
  intro (a deep bed, out of the kick's way), then OFF-beat sub in verse/chorus
  so it interlocks with the four-on-the-floor kick instead of doubling it —
  bounce rather than a wall. Gains pulled back accordingly (bass 0.78 → 0.52,
  lead 0.5 → 0.36) and master 0.55 → 0.5 now that a fourth track sums in.
- Drums lead on kick + off-beat open hat, with the 16th closed-hat roll held
  back for the chorus.

Particle field
The old field wired the arp note-instances into `attractors`, so the swarm
chased the beads around the wheel — which read as aimless "swarming to
different places", not as a response to the music. Attract is now OFF and the
baseline emission_rate is ZERO: `transport.beat_pulse` spawns a fresh wave near
the centre on each kick, `speed` flings it outward, and a short lifetime + high
drag clear it before the next beat, so the motes are visibly BORN on the beat.
Bass nudges the newborn wave's size/speed; highs brighten it.

Stage
Darkened toward near-black (bg 0.02 → 0.008) with the background-breathing
mapping cut 0.08 → 0.015, so the glows carry the image instead of a lifted
background. Camera pulled in (orbit radius 17 → 12.5) and bloom opened up
slightly to match.

Generated projects under examples/demos/projects/ are gitignored, so this script
is the source of truth; it has been run and produces a playable 4-track project.
@jeffcrouse
jeffcrouse enabled auto-merge (squash) August 16, 2026 14:20
@github-actions

Copy link
Copy Markdown
Contributor

Production gate (core): ✅ PASS

  • 83/83 tests passed (0 failed) in 15.754s

@jeffcrouse
jeffcrouse merged commit e039120 into main Aug 16, 2026
8 checks passed
@jeffcrouse
jeffcrouse deleted the demo-blob-beat-locked-particles branch August 16, 2026 20:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant