k-anvas

paint with a prompt.

A photo editor and design tool where a sentence works like a brush, and where a script or an agent can design too. Change any part of a picture, re-shoot it on another camera and film, and lay out posts, posters and slides from a brief or from rows of your own data.

Desktop · iPad · iPhone · CLI · API · MCP

The k-anvas editor: a brass desk lamp with its base selected, and a new walnut base filled in.
Recorded in the app: select the base, ask for a walnut one, choose between three variants.

Workflows

One composer. Every verb.

Generate, Fill, Remove, Expand, Extract and Compose all start the same way: a selection, a sentence, a button. Every result lands as a layer that remembers its recipe. These are the real results, before and after. Press and hold a picture to see where it started.

  1. A brass desk lamp with a green glass shade on a walnut desk, generated from the sentence.

    Generate

    Start from a sentence.

    Describe a picture and get it at the size you need, up to about four megapixels. Words you ask for come out spelled right.

    4 to 5 s on the GPU at 1 MP

  2. The same lamp with its round marble base replaced by a square walnut one.

    Fill

    Change one part.

    Marquee the base, ask for a square walnut one, and choose between variants. The result goes back through your selection, so the lamp, the desk and the light stay exactly as they were.

    6.6 s on the GPU

  3. The desk and window with the lamp removed and the background filled in.

    Remove

    Make it gone.

    Select Subject finds the lamp in one tap. Remove fills in the wall, the window and the desk that were behind it.

    6.6 s on the GPU

  4. The lamp widened to 3:2: more window, wall and desk on both sides.

    Expand

    Give it room.

    Widen a square to 3:2 and the room carries on: more window, more wall, more desk. Your original pixels go back on top, untouched.

    10.4 s on the GPU at 1.5 MP

  5. The lamp lifted out onto a transparent background.

    Extract

    Lift it out.

    Extract returns the subject with real transparency, soft where the edges are soft. Drop it onto anything.

    6.6 s on the GPU, with alpha

  6. The woman from the portrait at a desk with the brass lamp beside her, in the same window light.

    Compose

    Bring things together.

    Use up to ten pictures as references and say how they meet: here the portrait and the lamp, at one desk, in the same light.

    9.7 s on the GPU with two references

  7. The portrait re-shot as black and white film with grain.

    Re-capture

    Shoot it again.

    Pick a camera, a lens and a film, and the picture is developed the way that film would. More on Re-capture.

    1 to 2 s on your device, offline

Re-capture

Shoot it again, on another camera.

Choose a camera, a lens, an aperture and a film stock, and k-anvas develops your picture the way that film would: its colour, its tone, its grain and the glow around bright lights. Fourteen cameras, twenty-nine lenses, twenty-one films, and looks that set them all in one tap.

The Re-capture screen: the portrait split before and after, a strip of looks, and the camera bag.
Recorded in the app: three looks on one portrait, developed on the device.
  • The original portrait.

    OriginalQwen-Image-2.1

  • The portrait with the Golden hour look: warmer, softer colour.

    Golden hourColour negative · ISO 400

  • The portrait with the Street, 1978 look: black and white with grain.

    Street, 1978Black and white · ISO 400

  • The portrait with the Night city look: cooler, tungsten-balanced colour.

    Night cityTungsten colour · ISO 800

Real Re-capture output: the film stage of the app's next build, run on a real Qwen-Image-2.1 portrait. With a renderer paired, an optional optics pass also re-shoots perspective, depth of field and bokeh for the lens. It uses Qwen-Image-2.1 (research use only) and has not been tested against a live renderer yet.

Design

From a brief to every size.

Say what it is for and k-anvas lays it out: a headline, the details, a button and a picture, each set as large as it fits. Resize for… sets the same words again for a post, a story, a thumbnail or an A4 flyer, with the safe areas and the bleed already right.

Design from a brief: the fields filled in and the designs laid out at three sizes.
Recorded in the app: a brief becomes three layouts at every size, then Resize for… lays one out again for more.
Resize for…: the same design laid out for four sizes.
Resize for…One design, every feed and every page. Each size is its own editable design.
An A5 flyer in the editor with its print bleed and safe area shown.
Print and social formatsFrom a Story to an A2 poster, with real DPI, bleed and safe areas. Export at 0.5×, 1× or 2×, or as a PDF with crop marks.
The Templates screen: a gallery of layouts to start a design from.
TemplatesPosts, a story promo, a poster, a flyer, a business card and more, every part editable.
A Story design with a bar chart added, its bars and labels listed as layers.
Charts that stay editableBars, columns, a donut, a big number or a timeline, drawn as shapes and type you can still change.
  • Brand kitYour colours, typefaces and logo, set once and used by every brief and template.
  • ShapesRectangles, ellipses, polygons, stars, lines and arrows, as vector layers with fill and stroke.
  • Align and distributeLine layers up to each other or the page, and space them evenly.
  • Thirteen typefacesOpen-licence faces for headlines and body text, built in and offline.

For scripts and agents

Rows in. Designs out.

Everything the studio makes can be written as one design JSON. The app, a kanvas command line, an HTTP API and an MCP server all read it and draw it with the same engine, so a script or an agent designs the way you do. Point k-anvas at your own data and get a design for every row, or a whole deck.

posts.json$ kanvas render posts.json
{
  "kanvas": 1,
  "layout": "offer",
  "sizes": ["Instagram 4:5"],
  "style": "lime",
  "brief": {
    "kicker": "{{badge}}",
    "headline": "{{title}}",
    "details": "{{details}}",
    "action": "{{price}}",
    "image": "{{image}}"
  },
  "data": [
    { "title": "Desk lamp", "badge": "New", "price": "€89", … },
    { "title": "Cobalt cup", "badge": "Bestseller", … },
    { "title": "Wine glass", "badge": "Back in stock", … },
    { "title": "Weekend kit", "badge": "Limited", … }
  ]
}
  1. A post: New, Desk lamp, Brass, green glass shade, €89, over the lamp picture.
  2. A post: Bestseller, Cobalt cup, Glazed stoneware, with saucer, €18.
  3. A post: Back in stock, Wine glass, Hand-blown, set of two, €32.
  4. A post: Limited, Weekend kit, Film camera, notebook, sneakers, €240.

The four posts are the real output of kanvas render on the JSON beside them (shortened here), drawn by k-anvas's own engine with no screen at all. The pictures are earlier Qwen-Image-2.1 results.

  • $ kanvas render design.jsonCommand linePNG, JPEG, WebP, PDF, editable PowerPoint or a .kanvas file, from a script or a CI job.
  • POST /v1/renderHTTP APIkanvas serve answers on your own machine, with an OpenAPI description, for any language.
  • $ kanvas mcpMCP serverTwenty-one tools for agents like Claude: validate, render, preview, data sources, maps and batches.
  • Home → AutomateThe studioThe same sources, maps and batches with screens of their own. Or drop a .json on Home.

Data maps and batches

Your endpoint, your key.

Add a data source: the URL, the key it needs and where its rows are. The key stays on your machine. Map each of its keys to a design field, as words, a price, a picture, a date or a chart's rows, then run a batch: a design for every row, a contact sheet and a zip at the end.

A batch in the studio: rows from a data source mapped to design fields, and the finished designs.

Slides

A deck from the same rows.

A deck is a design too: ten slide layouts, speaker notes, and a slide for every row of your data. Export one PDF, or a PowerPoint file where every line of text is still a text box you can edit.

  1. Title slide: Spring, The catalogue, 4 pieces for the home and the weekend.
  2. Slide: Desk lamp, Brass, green glass shade, €89, beside the lamp picture.
  3. Slide: Cobalt cup, Glazed stoneware, with saucer, €18.
  4. Slide: Wine glass, Hand-blown, set of two, €32.
  5. Slide: Weekend kit, Film camera, notebook, sneakers, €240.
  6. Closing slide: Thank you, made from four rows of data.

Template files

Templates anyone can write.

A template is a JSON file with typed fields, checked against a published schema. kanvas templates validate draws it at every size it is made for and names every problem by its path. Import it and it joins Templates in the studio, with a form for its fields. Outside authors get a guide.

The Spring sale template filled in: 25% off, Weekend edit, over a flat lay photo, at 4:5. The same template at 9:16 for a Story.
Integrations: data sources, data maps, and Use k-anvas from an agent, with the MCP, HTTP API and command line set-ups ready to copy.
Use k-anvas from an agentIntegrations shows the MCP, API and command line set-ups ready to copy, beside your sources and maps.
This design JSON needs a fix: three problems listed by path, and a design JSON that works beside them.
Drop in a design JSONDrop a .json on Home and it opens as a design. If it can't, every problem is named by its path, with a version that works.
Export a deck: PDF, PNG per slide, PowerPoint with editable text, or design JSON.
Export a deckOne PDF, a picture per slide, a PowerPoint file with every word still editable, or the design JSON.
An imported template, Spring sale, with a form for its fields and a live preview.
An imported templateIts fields become a form: words, a discount, a list, a button and a photo, with a preview as you type.

The agent tools come with the app's next build. Rendering, data and keys stay on your machine; a picture prompt goes only to the renderer you point k-anvas at.

The editor

A real editor, made for touch.

Layers, masks, selections and adjustments, in a bold layout: seven tool groups as labelled tiles, one clean top bar, layers and history as tabs, and big targets for a finger or a pen. Plain verbs, no sparkles.

Home: recent pictures and designs, with From a brief, Templates and Brand kit to start something new.
HomeYour pictures, designs and decks, and every way to start.
The editor with a generated lamp, the tool dock and the Layers tab.
The editorEvery result is a layer with a mask and its recipe.
The Brand kit screen: colours, typefaces and a logo, with previews.
Brand kitColours, faces and a logo that every design picks up.

Remove Background

One tap. A mask, not a deletion.

The background goes into a layer mask, so the original pixels stay underneath. An edge slider tunes the cut, and Select Subject refines it at full resolution.

A portrait of a woman in a teal sweater by a window. The same woman cut out onto a transparent background.

Upscale

Upscale on your own device.

Real-ESRGAN runs inside k-anvas, on your graphics card or your CPU, at 2x or 4x. It works offline and never touches your renderer.

A 4x upscale by classic resampling: the brass lamp stem is soft. The same crop upscaled 4x by k-anvas's on-device model: crisp edges and highlights. Classic k-anvas
  • SelectionsMarquee, lasso, magic wand and Select Subject, with add, subtract and feather.
  • AdjustmentsCurves, Levels and Hue/Saturation as adjustment layers, plus looks.
  • Branching historyUndo never throws work away. Go back, try something else, and both paths stay.
  • RecipesPrompt, seed, size and mask live with the layer. Reroll it, or edit the recipe and run it again.
  • Brush, eraser, textPaint, retouch and set real type on its own layer.
  • LibraryEvery result goes to the Library first, searchable, with its recipe.

Your GPU

Your renderer. Your account.

k-anvas renders on an endpoint you deploy to your own Modal account. Your pictures go from your device to your GPU and back. There is no k-anvas server in between, no credits and no sign-up.

about 7 s
for a warm edit at one megapixel
65 to 130 s
to wake a cold GPU, shown as it happens, never a surprise
one token
per device, so each one can be paired and let go on its own
every result
shows its GPU seconds and what they cost you

Devices

At the desk and on the couch.

One app, laid out for the screen it is on. Touch gets big targets, tile sheets and gestures. A mouse and keyboard get the same screens with single-key shortcuts.

k-anvas on desktop: the Fill on the lamp's base.
Desktop appmacOS, Windows and Linux
k-anvas on iPad, in landscape.
iPadAdd to Home Screen from Safari
k-anvas on iPhone.
iPhoneLaid out for one hand

Before launch: the desktop builds are not signed yet, and the iPad and iPhone layouts have been tested in browsers but not yet on real devices.

part of the k-family

  • k-holeOS
  • k-chaincompanion
  • k-flowagentic remote control
  • k-streammedia center
  • k-anvaspaint with a prompt.

Get k-anvas

The first release is almost here.

Desktop

macOS, Windows and Linux.

Coming soon

Web app

iPad, iPhone and desktop browsers. Installs to your Home Screen.

Coming soon

What you will need

A Modal account to run your renderer. k-anvas pairs with it in a minute, and you pay Modal only for the GPU seconds you use.

k-anvas renders with Qwen-Image-2.1, which is licensed under the Qwen Research License for research and evaluation only. Please don't use k-anvas for paid or client work.