A DAZZLE.EXE homage, built with AI-guided coding in ARMv9.2-A
assembly for Apple Silicon — and beyond. It listens to whatever your Mac is
playing and paints to it: never the same pattern, never the same colours.
JellyDazzle is audio-reactive — put something on before you watch it.
Anything playing on your Mac will do: a record, a film, a livestream. On macOS 14.2+ it listens to the
system output, so it follows whatever app is making the sound. In silence it still runs, but on internal
clocks — and you are seeing maybe half of what it does.
Nothing to hand? Play this. “And I Need Ur Love” by
The Rat’s Asses,
featuring the man who wrote JellyDazzle. Free, no account — press play, then open the app.
Also on Spotify
— free accounts only get a 30-second preview there, so the video is the whole song.
Signed by Apple
This download is code-signed as Developer ID Application: LIBCSYSTEMS LLC
and notarised by Apple, with the ticket stapled so it verifies offline.
It installs and opens with no warnings — no “cannot verify”, no right-click trick.
Mac App Store submission is in review.
How a frame is built
Up to four layers run at once, bottom to top: a ground fills
the screen, a field covers most of it with gaps, a figure drops distinct
shapes over that, and a spark adds glints. They blend by brightness, so dark
parts of an upper layer let the one below show through.
Each layer takes a turn of its own length, then a new routine is drawn from a
shuffled bag and fades in. Timing is random by design — never a fixed loop.
At startup the engine measures every routine and assigns it a layer by how much
of the screen it actually covers.
24
ARMv9.2-A assembly engine modes
610
C pattern plug-ins in the shipping build
180
palette schemes, interpolated in OKLab
Where things stand
A few people hit real problems with the earlier downloads. They are
fixed, and it is worth being straight about what they were.
It would not open on older Macs. The build inherited the macOS version of the
machine that compiled it, so a copy built on the newest system simply refused to launch on
anything earlier — which meant the download only worked for people already running the
latest OS. The floor is now macOS 11, set explicitly and pinned in the bundled SDL2 as
well, so what you download runs on hardware older than the machine that built it.
Resolved in 2.7.
It looked frozen when you first opened it. On first run JellyDazzle measures every
routine in the library and probes the available audio devices before it draws anything, which
on some Macs takes 30–60 seconds with nothing on screen. It was working, not hung. Those
measurements are now cached and there is a count-up clock and a cancel, so it says what it is
doing and every later launch is immediate. Resolved in 2.7.
Patterns repeated themselves. Two routines from the same shape family could end up
on screen together, which made a library of hundreds feel smaller than it was. Families are
now tracked and never share the screen. Resolved in 2.7.
macOS said it “cannot verify” the app. Fixed in
3.0.2. Every earlier download was signed only ad-hoc, so Gatekeeper could not check
who made it and warned you. The current release is signed as Developer ID Application:
LIBCSYSTEMS LLC and notarised by Apple, with the ticket stapled so it works offline.
Download it, open it, done — no warning, no right-click trick.
Coming next — your own images
The next version lets you hand JellyDazzle your own pictures and
have the engine look through them — your photographs fed into the same kaleidoscope,
refracted, folded and palette-cycled by the routines that already drive the generated patterns.
Same engine, your source material.
3.0.4 — the accent layers were never being drawn. On a Retina
display you were seeing a background and, at most, one layer on top of it. The
small bright accent and spark layers — the ones that give the picture its
snap — never appeared at all. Not dim, not washed out: never drawn.
A load valve that thins the stack when frames get expensive was latching the
first time a frame ran long and then never releasing, because releasing needed
120 fast frames in a row and at full Retina resolution that never happens. One
early hiccup removed half the layer stack for the rest of the session. Measured
on the headless harness at 3456×2160, the accent layer was present in
0.0% of frames before this build. Layers now enter at half rate under
load instead of being refused outright. The contrast and fog tuning behind this
is still being measured rather than guessed — that part is not finished.
3.0.3 — patterns keep going past their own edge. A pattern that
zoomed out or drifted across the screen used to tow a hard black rectangle behind
it — you could see the box it was drawn in. Everything outside the pattern was
being filled with solid black. It now mirrors instead, so the pattern reflects at
its own edge and carries on, and the box is gone. The first-run notice is also
honest now: it used to say “press space to continue anyway”, which
suggested skipping it stopped the database build. It never did.
3.0.2 — signed, and two keys that drive the show. The download is now
signed and notarised by Apple, so it opens with no warning at all. C changes the
colour and S changes the shapes — neither cuts, both fade, because nothing here
strobes. C used to pick the single most-distant scheme, which sounds right but is
deterministic and symmetric: it toggled between two palettes and the other 178 never appeared.
It now chooses at random among the most distant, never repeating the one it just left. There
is also a real Mac menu bar — Help on ⌘?, with the site and support contact,
because macOS has no F1.
2.8.0 — fractals. Seven new routines, each a different visual
language: 604 Mandel Deep, 605 Julia Morph — a Julia set that
genuinely changes shape while you watch, its constant walking through ten
curated values while the plane is re-swept fourteen scanlines a frame, forever —
606 Burning Ship, 607 Newton Basins, 608 Lyapunov,
609 Buddhabrot, which exposes over about a minute like a photographic plate
rather than arriving finished, and 610 Flame IFS, whose attractor is drawn
from the seed so every instance is one that has probably never been rendered before.
None of them paint anything black: interiors are coloured by orbit trap and exteriors
by trap-folded escape, so the whole frame is live colour. They share a shape family,
so two never run at once.
2.7 — the whole library. All 400 held candidate patterns promoted
into the shipping build — no work discarded — taking it from 201 plug-ins
to 610. Shape repetition fixed: two routines of the same family can no longer share
the screen. The startup database is genuinely built once, with a count-up clock and a
cancel. The macOS floor dropped from 26 to 11, so the download runs on hardware older
than the machine that built it.
2.6 — the mark, and movement. Adaptive mobility: the engine measures
how much each routine moves on its own and gives the stillest ones the most transform,
so nothing sits static.
2.5.4 — surprise. Every layer used to take a window into one
shared palette ramp, blended from just two curated schemes — so every colour
on screen came from the same two palettes, and the engine was architecturally
incapable of clashing or of opposites. About 30% of overlay layers now break
out, taking a scheme of their own and optionally rotating hue 120° or
240° (luma-preserving, so nothing dims). The result is pairings the curated
schemes would never produce: red on blue, magenta on green. The ground stays
coherent on purpose. The palettes are a guide now, not a law.
2.5.3 — advanced colour management. Rotation moves a pattern through
its own window of the ramp, so a narrow span means little hue travels. The
startup probe now measures colour diversity and gives flat, graphic routines up to
2.4× the span. Only 9% of the library is flat — and those are
exactly the ones that looked static. They don't change colour less; a flat
region just becomes a different flat colour, and nothing sweeps. Morph needs
gradients.
2.5.2 — even spread, breathing silence. The memory ring covers every
spawn now, budgeted per role: routines repeating 4+ times across eight runs fell from
15 to 7. And silence gets its own rhythm from three clocks that never line up, instead
of going flat when the music stops.
2.5.1 — the Dazzle method.602 String Envelope is the first
pattern that works the way the original did: it draws a composition once into a
plane of palette indices, then animates for its whole turn by moving the palette
underneath. The geometry never moves. Only the colour travels. That is how
DAZZLE.EXE got such rich motion out of an 8088, and video of it running shows eight of
twelve sampled frames holding identical geometry with only the colour sweeping
(the story). The content is the original's workhorse primitive,
line-sweep string art — every line straight, the envelope they trace curved.
Per-frame cost: one table lookup per pixel.
Press A and the app now names every layer on screen, so you can tell
exactly what you are looking at.
2.4.4 — layers always read apart. A layer's palette window used
to be picked at random with no regard for what was already on screen, so an
overlay could land on the same hue family as the ground and vanish. Measured
across 232 concurrent pairs, the closest sat at 0.0% — identical. A
spawning layer now takes the furthest of eight candidate windows; worst
separation is 17.6%, with nothing under 15%.
2.4.3 — it never opens on the same thing. For the first couple of
seconds only one layer is on screen, so first impressions came from a single
bag of ~77 backgrounds drawn with no memory between launches — a repeat
roughly every ten runs. It now remembers its last 25 openings and refuses
them. Thirty launches, thirty unique openings.
2.4.2 — the colour never stops. Palette rotation was driven
entirely by audio, so in silence the hues morphed but stopped travelling.
There's now an idle floor of about one turn of the ramp every 50 seconds, with
audio stacking on top. Taken straight from video of the original
(see the tribute), where eight of twelve sampled frames
are the same geometry with only the colour moving.
2.4.1 — an icon, and an About card. Press A for version,
source, library and the key map.
2.4.0 — system audio, no strobe, solid fullscreen. Captures what
your Mac is actually playing through a Core Audio process tap. Layer palette
windows are cyclic, so audio-driven rotation can't drag a pattern across a
discontinuity. Fullscreen no longer restarts the engine or crashes. Startup
measurements are cached, so every launch begins with the whole library sorted
into layers.
Build it yourself
git clone https://github.com/LIBCSYS/JellyDazzle.git
cd JellyDazzle
make # build
make run # build and launch
make app # signed self-contained .app
Needs only the Xcode command line tools
(xcode-select --install). SDL2 ships in the repository, built against the
minimum supported macOS — deliberately, because a Homebrew SDL is compiled for whichever
macOS the build machine happens to run and silently pins the finished app to it. Apple Silicon
only; the rendering core is hand-written ARM64 assembly. macOS asks for microphone permission on
first launch so the visuals can move with your music — they run on internal clocks without
it. First launch can take 30–60 seconds while it probes audio devices; it is working,
not hung.
In tribute
JellyDazzle exists because of DAZZLE.EXE, written by
James R. Shiflett of Houston, Texas. He wrote it at night — “a sort of
therapy,” he called it — while his day job was administrative work around an
NEC SX-2 supercomputer at the Houston Advanced Research Center.
MicroTronics released it as shareware in 1990 for $15. Road Scholar Software
published it at retail as Razzle Dazzle in 1992, and by 1993 it was earning
more in shareware registrations each week than most people made in a month. It went
head to head with After Dark, and in 1993 its visuals became a 45-minute art film
scored by Jonn Serrie.
Its source was never released. This is not a port and not a
reverse engineering — nothing was disassembled. It is an homage written from
scratch, chasing the same feeling: cheap geometry, mirrored symmetry, and colour that
moves because the palette moves rather than because the pixels do.
Shiflett’s exit splash read: “Our Creator, evidenced by our creativity.”