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.
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?
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.
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.
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.
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.