Runs entirely in your browser

An AI agent that paints your photograph,
one brushstroke at a time.

Not a filter and not a style transfer. Bristle picks a palette, tones a ground, blocks in the masses with a big brush, then steps back, looks at what it has actually done, and decides where to go next — with simulated bristles, wet paint and a hand that is not quite steady.

No account. No upload. Bring your own model key.

How it works

Four stages, and you can watch every one of them happen on the canvas.

  1. 01

    Give it a photograph

    Upload a picture or take one with your camera. It is decoded and analysed on your own machine — the file is never uploaded anywhere.

  2. 02

    It studies the picture

    Before a mark is made, the image is broken down into a painter's limited palette, a structure tensor that says which way the form runs, and a saliency map that says where the detail belongs.

  3. 03

    It paints, and watches itself

    The agent lays a toned ground, blocks in the masses with a big brush, then steps back and looks at its own canvas. It decides the next pass from what it sees, and undoes a pass that went wrong.

  4. 04

    Then you talk to it

    When it finishes, ask for changes in plain language. Warm the shadows, loosen the background, rework the face. It picks up the same brushes and does it.

The engine

The agent decides intent. The engine turns that intent into marks — because no language model should be emitting five thousand stroke coordinates.

Real bristles, not vector paths

Every stroke is a trail of stamped dabs, one per bristle, each carrying its own charge of paint. Bristles run dry at different moments, which is where the streaking and the scratchy dry-brush tails come from.

Paint that behaves like paint

Colour is lifted from what is already on the canvas, so strokes muddy and blend where they cross. A separate height buffer accumulates the paint itself, then gets lit — so thick passages actually catch the light.

A hand, not a plotter

Trajectories follow a minimum-jerk profile with the 2/3 power law, so speed and curvature relate the way an arm's do. On top of that sits pink-noise tremor, endpoint scatter that grows with distance, and pressure that ramps in and out.

Strokes that follow the form

Direction comes from the image's own structure, so marks travel along an edge rather than across it — and where the picture is flat, the brush lays a consistent block-in angle instead of defaulting to a grid.

Canvas you can feel

A woven substrate catches the paint, and the weave only bites on brushes big enough to ride over it. Fine detail strokes stay crisp instead of being shredded by texture meant for a broad brush.

WebGPU, with a fallback

On WebGPU each stroke is one compute dispatch, and every dab sees the paint the previous dab just laid down at that pixel. Where WebGPU is unavailable it falls back to WebGL2 automatically.

Bring your own model

Bristle has no back end and no billing. You point it at a provider you already pay for, and your credentials stay in your browser's local storage — every request goes straight from your browser to that provider. The one exception is GitHub's sign-in, which refuses cross-origin calls; two auth requests are relayed for it, and nothing else ever is.

Once you pick a model, the reasoning level and context window are read from the provider itself rather than a hardcoded list, so you only ever see settings that model actually supports.

Open workspace
  • GitHub Copilot
  • OpenAI
  • Anthropic
  • Google Gemini
  • OpenRouter
  • Ollama
  • Any OpenAI-compatible endpoint

Questions

Where do my photographs go?

Nowhere. The image is decoded, analysed and painted entirely in your browser. The only thing that leaves your machine is a small snapshot sent to the model provider you chose, so the agent can see its own work and decide what to paint next.

Do I need an account?

No. There is no sign-up and no server holding your data. You bring your own model credentials, and they are kept in your browser's local storage.

What does it cost?

The app is free. You pay your model provider directly for what the agent uses — a painting is typically a few dozen requests, most of them small.

Why does it not look exactly like my photo?

Because it is painting, not filtering. It works from a limited palette with deliberate mixing error, leaves the edges less resolved than the focal point, and stops before everything is uniformly finished. That is what separates a painting from a print.

Can I use the result?

Yes. Export a full-resolution PNG whenever you like, including part-way through.

What do I need to run it?

A recent desktop or mobile browser. WebGPU is used when available and WebGL2 otherwise, so anything from roughly the last few years will work.

Give it something to paint.

A photograph, a model key, and one button. The rest happens on the canvas in front of you.

Open workspace