Fluid — Manual
Everything the instrument does — five minutes to read, free forever, nothing leaves your device
What it is
A generative art instrument. Up to three stacked fields — chosen from twenty-four engines —
are bent through a lens, coloured through a gradient you control, quantized into pixels, screened
with halftone dots and finished with grain. Load a photo and its luminance drives the structure
while the palette drives the colour, so anything melts into glowing chromatic imagery. Everything
renders live on your GPU; there is no server, no account, no upload.
You land on a fresh piece every visit, with your last design kept. Tap the canvas
to reseed, hit SHUFFLE for a new one, or load your own photo.
The canvas bar
The row above the artwork holds the things you reach for while looking at it, rather than
while building it.
- Shuffle
- a whole new random design. Tapping the canvas reseeds the current one
instead, keeping its character.
- Undo / Redo
- step back and forward through the pieces you have made this session.
Each button names where it is going, and dims at the ends of the history.
⌘Z and
⇧⌘Z do the same.
- Save
- keeps the current design in Saved, under the artwork.
- Frame
- puts the piece in a post — a mat around the art, with size, corner radius and
an optional shadow, plus your own image dropped on top.
- Text & logo
- lay type or a logo over the artwork, for a cover or a title card.
- Cursor
- what the pointer does on the art: OFF, RIPPLE, LENS, VORTEX or PUSH. Live
only — in STILL the pointer leaves a frozen piece alone.
- Embed / Designs
- the embed snippets, and the designs you have saved.
- Live / Still
- LIVE animates; STILL freezes the drift for a clean static export. You
can still tweak sliders and reseed while frozen.
- REC
- records the animation live, with a timer. Hidden in STILL.
Under the artwork
- Layers
- what the stack is currently made of, one chip per layer, with its blend and
mix. Remove one from here, or add another.
- Recent
- the pieces you have just been through — the visual form of undo.
- Saved
- everything you kept with the Save button. They survive a reload.
- Explore
- a wall of ready-made pieces to start from. Tap one to load it.
00 — Source
Optional — the piece is complete without one. Bring an image with
LOAD PHOTO, paste from the clipboard, or drag a file anywhere onto the page.
Photos are read by your GPU only; they never upload anywhere.
CAMERA starts the front camera live (selfies are mirrored so they read
naturally). FLIP switches facing. FREEZE captures the current
frame as a still source.
When a source loads, a before/after divider appears — drag it to compare the
original against the melt. It clamps at 70%, so the effect can never be fully hidden.
- Liquify
- how much the field displaces the photo — the melt amount.
- Photo blend
- how much the photo drives the structure vs pure noise.
01 — Size
- 1:1 / 4:5 / 5:4 / 3:2 / 16:9 / 9:16
- square, portrait, two landscapes, wide, and story.
The piece reflows, centered; a loaded image cover-fits the frame.
- Reposition
- with an image loaded, drag the artwork to pan it inside the
frame; CENTER IMAGE resets it.
02 — Colours
The section is one line: the ramp itself, named. Most colour decisions are
"is this right?", which you answer by looking at it. Everything that edits it lives behind
MORE, which opens a floating editor you can drag anywhere on the
page — it never covers the artwork against your will, and never blocks it.
- Palettes
- eight designer gradients — AURORA (navy→teal→green→pink), SUNSET
(plum→magenta→orange→gold), OCEAN (midnight→blue→cyan→seafoam), DUSK (indigo→violet→blush),
EMBER (black→crimson→amber→cream), MINT (teal→mint→cream), IRIS (indigo→blue→lilac), and CHROME
(a procedural liquid metal). All nine tiles sit in one grid, so nothing hides behind an arrow.
- Custom
- your own gradient — your exact brand colours. Choose how many colours to work
with (2 / 3 / 4): with 2 or 3, Fluid blends the full dark→light gradient between them; with 4 you
design every stop yourself. Editing any swatch drops into Custom; tap a preset to start over.
- Editor
- pick a stop, then work it on the saturation/brightness pad, the hue strip, or
numerically in HSB, RGB or hex — whichever moved, every control shows the same
stop. Custom colours travel in the share link and embeds, so the piece reproduces anywhere.
03 — Stack
The piece can be up to three layers, each running its own engine. The tabs at the
top of the card choose which layer you are editing; the strip below always edits the selected one.
+ ADD LAYER stacks another, REMOVE LAYER takes the current one away,
and SHUFFLE rerolls the engine and its settings.
- Blend
- how a layer meets the one under it — normal, multiply, screen, add, difference or
overlay. Layers 2 and 3 each carry their own.
- Mix
- how much of the layer is present, from nothing to full strength.
03b — Engines
- Twenty-four engines
- the generator. NOISE is domain-warped value noise (the default).
FLOW is the curl of a noise potential — divergence-free, so it swirls like fluid and smoke.
CELLULAR is Voronoi noise — crystalline cells whose edges vs centers are blended by Warp.
GYROID slices a 3D gyroid through time for interwoven organic bands. TRUCHET draws random corner
arcs per cell into woven maze / circuit lines. INTERFERE overlaps moving
ripple sources into moiré rings. KALEIDO folds the field into mirrored sectors for a mandala.
LINES is rotated parallel bands (Warp rotates them); GRID crosses two rulings into a lattice;
GOLDEN is a phyllotaxis sunflower spiral built on the golden angle; SMOKE is a soft turbulent plume;
CRYSTAL sums plane-waves into a quasicrystal (Warp sets the symmetry order); HONEYCOMB is a true
hex lattice of walls and cells; BLOOM is a living mesh gradient — the four palette colours drift
as soft 2D blobs and blend directly, made for grainy-gradient posters and soft logo fills;
SWEEP lays the colours corner-to-corner across the frame — a directional gradient whose
boundary breathes with noise (Warp = wobble). Pair it with 2 custom colours for a clean
two-tone gradient background. MARBLE drags ink bands through combed swirls like paper
marbling (Warp = drag depth); PLAID weaves two crossed stripe setts into a tartan with an
over/under shimmer (Warp = thread density); CURTAIN hangs thin luminous verticals that
ruffle and sway like an aurora (Warp = ruffle depth). STITCH threads 64 pegs on a ring into
times-table string art whose chord density glows along an epicycloid caustic (Warp = the
multiplier k, so the species itself changes); PURSUIT nests whirling polygons that spiral
into a vortex like mice chasing corner to corner (Warp = chase fraction; seed picks triangle
through hexagon); CHLADNI draws the nodal sand figures of a vibrating plate, sweeping between
resonances (Warp = eigenmode order); CASSINI contours the potential of four drifting foci into
nested Cassini ovals that pinch through figure-eights (Warp = contour density); TOPO draws the
elevation contours of a drifting landmass, like a survey map (Warp = ruggedness); EDDY is a von Kármán vortex street — the staggered double row of counter-rotating eddies that sheds behind a cylinder. The vortex rows are exact, and rather than drawing them directly it traces every pixel backwards through their velocity field to find the dye it started as, so the fluid is genuinely stretched and wound into the cores the way it is in a dye photograph (Warp = circulation, so the eddies roll tighter without the spacing changing).
04 — Look
Everything here applies to the whole piece, not to one layer.
- Speed
- animation rate. 0 freezes the drift; the piece itself stays.
- Zoom
- scale of the forms — low is large slow shapes, high is dense detail.
- Warp
- how violently the field folds — slides CELLULAR cells toward edges, tightens FLOW,
packs TRUCHET bands, and adds KALEIDO sectors.
- Grain
- analog noise over the final image.
- Symmetry
- folds the frame into mirrored sectors — a kaleidoscope over whatever the stack
is already doing. 0 is off.
04b — Lenses
- Lens — bend the space
- a named transform of the complex plane that every engine is
sampled through. SQUARE is the conformal map z² (angles double around the centre). INVERT is
circle inversion 1/z (inside and outside trade places). MÖBIUS is a disk automorphism whose pole
slowly orbits, so the whole space breathes. DROSTE is the log-polar Escher spiral — the piece
repeats into itself. HYPERBOLIC compresses the pattern without limit toward a circular rim
(the Poincaré-disk metric). JULIA iterates z²+c and samples the engine along the orbit for
fractal filigree. CUBE is the conformal map z³ (angles triple). EXP is e^z — horizontal strips
unroll into radial fans. SINE folds the plane through sin z into mirror lattices. JOUKOWSKI is
z + 1/z, the airfoil transform of aerodynamics. NEWTON samples through the basins of the Newton
iteration for z³ = 1 — three attractors with infinitely tangled shores. MODULAR folds space into
the SL(2,ℤ) fundamental domain, the hyperbolic tessellation behind number theory.
GROUND is the odd one out: not a map of the plane onto itself but a camera. It tips the
plane away from you and reads each screen row as a ray, so depth goes as 1/(horizon - y)
and any engine becomes a floor receding to a vanishing point. Above the horizon no ray
meets the plane, so the far side is mirrored into a sky.
AMOUNT blends flat space toward the transformed domain.
04c — Surface
- Screen — Square / Hex / ASCII / Dither / Glitch
- the pixel geometry. SQUARE is the classic
mosaic (with optional halftone dots). HEX is a honeycomb. ASCII maps each cell's brightness to a
character from a dark→light ramp ( .:-=+*#%@ ). DITHER uses an ordered Bayer threshold; Threshold
controls the bright-pixel density. GLITCH tears the frame into displaced scan blocks. Pixelate sets
the cell size.
- Pixelate
- mosaic / hex / glyph cell size. 1 is off (square only); 48 is brutalist.
- Halftone + dot size
- CMYK-style dot screen over a square field — dots over pixels is the signature look.
- Finish
- re-lights the palette colour as a material: GLASS, METAL, SAND, LIQUID or MOLTEN.
NONE leaves the flat colour alone.
05 — Output
- Copy link
- a URL that reproduces this exact piece — every slider, the seed, the whole
stack, your custom colours. Open it anywhere, remix from there.
- For Claude
- a ready-to-paste prompt for Claude Code or Cursor, with the embed snippet
already baked in. Hand it to an agent and the piece lands in your site.
- Iframe / full-bleed / CSS
- three ways to put the piece on a site: a responsive iframe,
a fixed full-bleed background that never eats clicks, or a CSS snippet for a static exported image.
See DEV.
05b — Export
- Size presets
- pick a target — Wallpaper (1080p, 1440p, 4K, ultrawide, phone), Web (hero,
OG image, background, X header), Social (post, story), or Icon. The export is exactly those pixels and
the frame reflows to match. 4K / ultrawide are heavy and scale down if the GPU can't hold them.
- PNG / JPG / WebP
- PNG and WebP keep transparency and are crisp; JPG is much smaller. The
readout shows the exact pixels and format.
- Filename
- names the download. Leave it empty and the piece names itself with a codename
like neon-current.
- Export image
- renders exactly the on-screen look at the chosen size. On phones it opens the
native share sheet instead of downloading.
- Record clip
- the REC chip on the canvas captures the animation as it plays, with a live
timer — MP4 (H.264) where the browser allows, so it plays everywhere; Firefox saves WebM. Resolution
cycles 1080p / 2K / 4K.
- Export clip
- 4, 8 or 15 seconds rendered offline, frame by frame, so the
result is smooth regardless of what your machine could manage in real time.
Clips and exports always render the pure effect — no divider, no UI.
06 — Share links, under the hood
Everything after #p= is the piece, as plain numbers in fixed positions: speed, zoom,
warp, grain, pixel, dot, halftone, palette, seed, liquify, blend, aspect, source preset, engine,
screen, threshold, symmetry — then your four custom colours packed one per slot, the dither, each
extra layer with its blend and mix, the finish, and the lens with its amount.
The format is append-only: new features take new slots on the end, so a link
written a year ago still opens. Trailing zeros are trimmed, which is why two links can be different
lengths and both be complete.
https://fluid.krackeddevs.com/#p=0.28,0.6,3.5,0.02,1,10,0,8,44,0,0,1,0,0,0,0,0,0,0,0,656898,7027205,15242255,16768906,0,0,0,0,5
06b — Seed of the day
fluid.krackeddevs.com/today opens one piece per UTC day — the same piece for
everyone, derived from the date alone. There is no storage behind it, so yesterday stays
reproducible: /api/today?date=YYYY-MM-DD replays any day as JSON.
07 — Use it in your code
Iframe embeds, an MCP server for Claude (claude mcp add --transport http fluid
https://fluid.krackeddevs.com/mcp), and a plain JSON API live on
the DEV page.
Two npm packages ship the renderer itself, so you are not bound to an iframe:
- fluid-core
- the engine as a library — mount a piece on your own canvas and drive it
from code. See the demo.
- fluid-bg
- a drop-in animated background: the
<fluid-bg> custom
element, a React component, or a CDN tag. It renders in your page, not in a frame.
08 — Notes
Free forever — all computation happens on the viewer's device, so there is nothing to pay
for and nothing to outgrow. No account, no upload, no app backend. Reduced-motion
users start paused. If the camera is blocked (some embedded browsers), loading a photo still
works — errors always say what still works.