Flield

A browser tool that draws three color pixel art from seeded flow fields, exporting to PNG, SVG or GIF.

IndustrySoftware
ClientSelf-Initiated
RoleDesigner, Developer
FocusProduct Design, Creative Coding, Interfaces

Summary

Overview

Flield is a browser tool that generates three color pixel art from seeded flow fields. A background and two independently configurable layers, each shaped by its own noise field and its own texture, export to PNG, SVG, or an animated GIF that loops back into its first frame with no cut. There is no build step and no dependency to install. Open the file and it runs, with the network off if you like. The name is a contraction of flow field, the mechanic the whole thing turns on.

Challenge

You need a placeholder graphic or a background texture, and you do not want to open a design tool or dig through stock photos to get one. A stock library is finite, and it was built for someone else's palette, so close is the best it can do. The problem was never a better library. It was art made from a brand's own colors, with no limit on how many you can have.

Process

01 Engine

A string seed hashed to a 32 bit integer, feeding a small deterministic PRNG. Same seed in, same image out, on any machine. Everything after this point inherits that property, which is what makes a composition shareable as a URL rather than a file.

02 Architecture

The decision that mattered most came first: decoupling the canvas pixel size from the grid cell count. A 3000 by 2000 canvas at a 20px block is a 150 by 100 grid underneath. Every feature added later, the flow field, the second layer, the live favicon, inherited that cheapness for free.

03 Composition

Symmetry runs as a pass after generation rather than a mode inside it, so seven of the eight modes ship without their own implementation. Shape masks treat their boundary as a probability gradient instead of a hard line, for reasons the mask section gets to.

04 Interface

A dark theme with a full light variant, a thirteen step tutorial that opens itself on a first visit, per field locks so a randomize pass can hold some settings and re roll the rest, and toast confirmations for anything that changes state off screen.

01 The Tool

A Generator, Not a Library

Flield generates against a palette directly, hue, saturation and lightness ranges included, so there is no upper bound on how many correct variations one palette can produce. Swap in a brand's color range, seed a batch, export the one that fits.

Set a motion preset and the same composition becomes a looping background. That turned into the quiet workhorse: a moving backdrop or a hover state that never needed an animator's time.

The generator: canvas, settings, animation and the keyboard shortcuts along the foot
The generator: canvas, settings, animation and the keyboard shortcuts along the foot
02 The Interface

The Control Panel

Density of controls was the standing problem. Forty of them sit across three tabs, and the canvas has to stay in view while any one moves.

A layer is more than a color and a density. It carries its own seed, its own palette window, its own flow texture and its own curl, so two layers on one canvas are two independent compositions sharing a frame.

The light theme was drawn, not inverted. The canvas is the one thing that does not change between them, because the artwork has to be judged against what it will sit on.

A layer in the dark theme: seed, palette window, flow texture and curl The same controls in the light theme
A layer in the dark theme: seed, palette window, flow texture and curl
03 The Interface

What Each Control Decides

A lock is a small icon beside a field, a palette window looks like any other collapsed section, and a flow texture reads as one more select. Nothing on the screenshot says which four of the forty carry the ideas, so the panel is annotated.

One layer of the panel, with four of its controls outlined and numbered
  1. Three tabs, forty controls

    General, Layer A and Layer B. The canvas never leaves the screen while any of them moves, because the canvas is the thing being judged.

  2. Every layer carries its own seed

    So a layer rebuilds identically whatever the other one is doing, and a composition is a set of names rather than a file.

  3. Ranges, not the full span

    Palette Range and Density Range are windows a randomize pass draws from. Left unconstrained, a long autoplay run finds a flat wall of one color sooner or later, and then goes on finding it.

  4. A texture per layer, and a lock on every field

    Six flow textures, chosen per layer rather than per composition. The lock beside a field holds it while a pass re-rolls everything else, which is the difference between randomize as a tool and randomize as a dice roll.

04 The Interface

Mobile Layout

The phone layout is not the desktop one stacked. The canvas takes the screen and the controls sit in a bar along the bottom edge, so randomize falls under the thumb already holding the device.

The phone layout: the canvas taking the screen, and the export sheet
The phone layout: the canvas taking the screen, and the export sheet
05 The Interface

The Pinned Control

Changing a motion means watching the canvas, then changing it again, which on a phone is three taps each way. The pin takes two of them back, and what it does only exists between one frame and the next.

  1. Open the settings

    The sheet covers the lower half and leaves the canvas in view above it, which is the whole reason it is a sheet and not a screen.

    The settings sheet open over the canvas
  2. Change one thing

    The Motion select, scrolled to and set to Drift. The canvas starts moving behind the sheet straight away, and a toast names the change, because the thing being judged is above the sheet rather than in it.

    Motion set to Drift, with a toast naming the change
  3. Close it

    The control you just touched is pinned above the toolbar, with its own dismiss. Changing it again is one tap instead of three.

    The sheet closed, with the Motion control pinned above the toolbar
06 The Interface

Confirming a Change

Several actions change state somewhere the user is not looking. Locking every field changes icons on tabs that may not be open, and picking a motion starts something that takes a second to become obvious. Both report back in the same place, a brief line above the canvas, so there is one feedback pattern to learn, not one per feature.

Picking a motion says so, in the same place every other confirmation appears
Picking a motion says so, in the same place every other confirmation appears
07 The Interface

Onboarding Tutorial

A generative tool has a cold start problem. Nothing on screen explains what a flow field is, and a first time visitor has no reason to guess which of forty controls to move first. A thirteen step tutorial opens itself on a first visit and walks through the ideas. The buttons come second, and the flow field slide draws the field itself and names the textures it can draw.

Step one of the tutorial, drawing the flow field rather than describing it
Step one of the tutorial, drawing the flow field rather than describing it
08 What It Makes

A Set, Not a Picture

The output is design work, and the unit of it is a set rather than an image. Give the generator a brand's color range and what comes back is a campaign's worth of correct variations. A header, the five social cards under it, a backdrop for the landing page. Each different, all plainly the same family. The seed is a name you choose, so the same asset rebuilds a year later when the campaign needs one more.

Five seeds from one run, with structure and palette held: a set rather than a picture
Five seeds from one run, with structure and palette held: a set rather than a picture
09 What It Makes

The Levers

Symmetry and tiling change what a composition is. Masks and density change how it sits on the page. Every picture below was drawn by the generator itself, on the seeds and palette the screenshots already use, so the diagram of how the tool works is made by the tool.

  1. Symmetry Is a Pass

    Only a unique region of the grid is ever randomized. Mirror, rotation and diagonal passes then derive the rest from it. Keeping that step after generation, out of the noise itself, is why seven of the eight modes needed no generation code of their own.

    The region a randomize pass fillsThe mirror derived from that region
  2. Eight Modes, One Mechanism

    Kaleidoscope composes three passes in sequence, a diagonal mirror on the quadrant, then horizontal, then vertical, which gives full eight way symmetry without a code path written for it. The eighth is Tile, not a reflection at all: it repeats the region by index, the same structure with a different relationship between the copies.

    All eight symmetry modes on one seed
  3. Where the Design Stops

    The first shape mask tested inside or outside and looked pasted on: a smooth geometric edge against an organic, noisy texture reads as artificial immediately. The fix treats the boundary as a probability band. Cells well inside always survive, cells well outside are cleared, and the ones between fade from near certain to near none, seeded from the layer's own seed.

    A hard inside or outside testThe dithered edge Flield actually draws
  4. The Mask Set

    A mask clips to a form inscribed in the canvas's own aspect ratio, so a wide canvas gets an ellipse rather than a small centered circle fighting the rectangle. Circle and diamond were the first two. Vignettes and stripes followed on the same mechanism, because the boundary was already a distance function and a new shape is a new distance.

    Four of the mask set on one seed: circle, diamond, vignette and stripes
  5. Density Bias

    Density decides how much of the grid fills. A seeded noise field is rotated toward a direction and stretched along it, which turns isotropic noise into streaks that point somewhere. The field nudges each cell's fill probability rather than deciding the outcome, and that distinction is the difference between a hard border and a gradient.

    The same seed and base density at field strength zeroThe same seed with the field at one
  6. Tiling

    The most common ask is a background, which means it has to tile. Tile repeats the unique region across the grid by index, with no reflection, so the result runs edge to edge with nothing to give away where one copy ends. The same decoupling draws the favicon at 64px, by the exact functions that draw the main artwork.

    The Tile preset: the region repeats three times across and the streaks run through the joins
10 What It Makes

Motion, and Its Six Shapes

Motion adds a duration to the still and changes nothing else about it. The still is one frame of the cycle and the cycle returns to it, so phase runs nought to one and the last frame is the first. A background that loops cleanly sits behind a page with no cut to give it away, which is what makes it usable instead of decorative.

  1. One Cycle, Five Phases

    The same composition at nought, a quarter, a half, three quarters and back to nought. Nothing about the asset changes except that it now has a duration, which is why a still and its animation are the same file with one more number.

    One cycle sampled at five phases, the last frame returning to the first
  2. The Six Motions

    They divide by what they act on. Loop circles the point the field is sampled from, so the surface turns without going anywhere. Drift runs the particles along the flow instead of turning the flow under them. Wind holds the broad shapes still and passes a gust over them. Pulse touches no field at all, swinging each layer's density forty percent either way. Ripple is rain, where seeded drops land at their own moments and crossing rings add. Tide is the only one where the layers touch, each field pushed along the ridges of the other.

    The six in order: Loop, Drift and Wind above, Pulse, Ripple and Tide below
  3. Why They Read Apart

    Every clip is thirty two frames of one eight second cycle, on the same seeds and palette as the stills. They share a speed and do not look like it, because Loop, Pulse and Tide resample their blocks in place while Drift slides a whole pattern across the frame. Wind and Tide carry twice the depth of the rest, since the default leaves their gust and their push too little to work with.

    Tide, the only motion where the two layers touchWind, standing shapes bent once by a gust
11 The Site

The Sitemap

The writing around the tool is part of the work. A tool that makes something most people have no word for has to explain the thing before it can offer to make it. The pages that do the explaining are also the only ones a search engine has anything to index.

Four supporting pages carry that, and the shape is deliberately flat. Three answer a question someone actually types, answer it properly before mentioning the product, and link to the tool. The fourth is the guide, written for someone already using it. None is a funnel step: a reader who only wanted to know what a flow field is gets told, and leaves better off.

What Reaches Each Page

  • "what is a flow field"

    What is a flow field?/flow-fields/
  • "seamless tiling background"

    Tiling background, no image/seamless-backgrounds/
  • "looping animated background"

    Looping animated background/animated-backgrounds/
  • already using the tool

    Guide/guide/

and to each other

flield.com"animated background generator"

Every page draws its examples live, with the generator the tool runs on

  • A link on the page
  • In the markup only

The guide is the only visible way out of the tool. From any supporting page the tool is one click away. Going the other way, the tool's footer links the guide and the guide leads on to the three explainers, in its body and in its own footer. The tool also lists those three in a screen-reader paragraph, out of the tab order, which puts them one hop from the homepage for a crawler where a reader takes two.

Found By

  • sitemap.xml five URLs, named in robots.txt and submitted in both consoles
  • Google takes the sitemap, and nothing else: it does not accept IndexNow
  • Bing, Yandex, Seznam, Naver take an IndexNow ping on every push that touches a page
  • Both consoles are verified by a DNS record rather than by a tag or a file

Served From

  • Cloudflare Worker at flield.com, with GitHub Pages live behind it as a fallback
  • _headers sets the content policy, nosniff, and cache rules for versioned assets
  • www to the bare domain 301 with the query string kept, so a shared link survives
  • Cloudflare Web Analytics the only request the page makes to anyone else
12 The Site

Live Examples on Every Page

None of the four carries a picture of output. Every panel on them is drawn live by the same code the app runs, because a page that demonstrates the thing it defines beats one that describes it, and it costs nothing extra when the generator is already a set of plain functions.

The Unglamorous Half

The technical side is unglamorous and most of it is free. A sitemap and a robots file, descriptive titles that match what a person would type, response headers set at the edge, and every dependency vendored so nothing blocks on a third party.

Where The Last Six Points Came From

The structure earned most of the accessibility score on its own, because the controls were built as controls: every slider a real input, every toggle a button with a label. The first run scored 94 and the whole gap was text contrast. The footer and the empty save slots used a small gray at 4.1:1 on the dark ground, which is a brighter gray at 7.7:1 now, and the content column became a main landmark. The same pass took 168ms of forced layout off startup, which is most of the distance from 89 to 95 on mobile.

Two of the four pages drawing their own explanation: the field and the particles tracing it above, one tile against its nine times repeat below The tiling page, one tile beside that tile repeated nine times, both drawn live with the symmetry switchable
Two of the four pages drawing their own explanation: the field and the particles tracing it above, one tile against its nine times repeat below
13 What Is Next

Three Pieces Planned

Each follows from a decision already made, and none is a change of direction.

The generator is already plain functions with no dependency on the document until the final draw, so an interface for it is a decision about shape rather than a rewrite. State in a URL is right for handing someone one composition and every control it was built with, and the next step is holding a run of them together. Instrumenting the writing comes last, because the pages had to exist before there was anything to measure.

  1. An API

    • Forty controls, driven once per asset
    • A campaign's worth of variations in one call
  2. Sets, not single links

    • One composition per URL, and a tab you cannot close
    • A palette and the seeds that worked against it, kept together
  3. Knowing what the writing does

    • Lighthouse says the page is fast and reachable
    • Which pages bring people, and which compositions get shared

Notes

Impact

100 and 95 Lighthouse performance, desktop and mobile, with a Cumulative Layout Shift of zero on both
100 Accessibility One pass over text contrast took it from 94; the controls were already controls
Half a Second Desktop largest paint, with no blocking time; mobile reaches its own in 2.1 seconds
Five Requests The whole page, one of them the analytics beacon, with every dependency vendored
No Build Step Plain HTML, CSS and JavaScript, served to the browser as the files they are
Runs Offline Identical behavior with the network off, including the GIF export

More Work

View All