← back to the machine murmur · technical notes

How Murmur works

Murmur turns a few pictures into a looping animation where a crowd of tiny shapes gathers into each one, holds, scatters, and reforms as the next.

A live one, right here — the same engine the app uses, morphing ❤ → GIF → ★ → 🐟 and recoloring itself for each.
1 · Sampling a shape

A picture becomes a cloud of points

Each scene — an emoji, a word, or an image you upload — is drawn onto a hidden canvas. Murmur reads the pixels back, keeps the ones that aren't transparent, and turns the picture into a cloud of points, each remembering the color it sat on.

The cloud is recentered on its own bounding box, and if a glyph would run off the edge it's redrawn a little smaller until it fits. That last part matters: browsers rasterize the same emoji at slightly different sizes, and without it a heart could come out clipped on one side in Safari but not Chrome. Ask me how I know?

one star, forming
2 · The crowd

Particles interpolate between clouds

A few hundred particles ease from one shape's points to the next — scatter, gather with a slight stagger, hold, disperse — looping through your four scenes. Each particle is drawn as the pixel you picked (confetti, dot, heart, star, petal, fish, spark, or gem) in the color of the point it lands on.

Uploaded images get their background removed first: Murmur reads the image's own corners to guess the background color, then drops pixels close to it — so a logo or a clear subject comes through as a shape rather than a filled rectangle.

same heart, different pixels
3 · Making the GIF

Encoded frame by frame, in the tab

When you crank it out, Murmur replays the exact animation deterministically into an offscreen canvas and encodes it to a GIF on the spot with gifenc, quantising each frame to 256 colors. The finished file is handed to your device's share sheet — Save to Photos, Messages, Mail — or downloaded on a desktop.

4 · Privacy

Nothing leaves your browser

No backend, no analytics, no third-party requests. The fonts and the GIF encoder are served from this site, not a CDN. Whatever you type or upload stays on your device — the GIF is built on your machine and only goes where you send it.

5 · Lineage

It came from a fish

The swarm first appeared on a birthday card for Jamie — Happy Birthday, Jamie, in base 256 — then turned into a school of little fish behind skipjack.ppr3.com, an activity report for one tuna. Murmur takes that swarm and hands you the controls.

a fish, made of fish

← make one © 2026 ppr3 · ppr3.com