keyline doesn't make images. Drop the references you love and it writes their visual direction: one brief you give to ChatGPT, Midjourney or any image model, so the results look like your references. Since November it is a desk: the board, and beside it the notes, prompts, drafts and cards of the project, each a file in a folder on your disk.
Forever. Not monthly, not per board, not per export. See the proof.
Runs in your browser. No sign-up.Proven on GPT Image 2, FLUX.2 max and Nano Banana.
Single dark object centred on a flat grey field, lit softly from above so gilded highlights and oxblood depths do the whole job.
hover or tap a line: it lights the references it was read from
A real board, composed by keyline's engine as it ships today (2026-10-10) and measured by its own code: seed 1, 3:2, Paper. Beside it, a real reading of the same seven references, 2026-09-09, as recorded. Every layer keeps the images it was read from; hover or tap a line and they are outlined, as in the app.
One direction. A doorway. A chair. A bottle.

OpenAI. Made 2026-08-25 from an earlier reading of the same seven references: the same compiled direction for all three, only the subject word changed.

Black Forest Labs. That direction asked for a “single cool periwinkle note”; watch it surface here too.

Google. The same compiled direction again. All three outputs are unedited.
The direction transferred. The subject didn’t matter.
One project, five kinds of file. The board is one of them.

A project is a folder. The home shows what is in it: boards, notes, prompts, drafts and cards, the favourites, the tags. Four example projects open with one key, one per field, every file real.

What the rest of this page is about, on the desk's chrome. Sources, the plate, the direction and the prompt, with the project's tags and the folder's name in the bar.

Markdown files. Decisions is the one keyline reads first. The board's palette names underline in the text; two brackets name any file in the project.

A prompt is kept as a file: the lines as copied for one model, its earlier versions beside it, and what the model returned kept with it.

An Excalidraw file on the Graphite ground: frames in the tag tints, references pinned from the board as prints, sticky notes for open questions, the board's colours as ink.

Research clips, quotes and observations, one small file each, in sections or by tag, with an image when there is one. Send to quotes a card into a note, adds it to a board as an Avoid term, or pins it on a draft.
In Chrome and Edge the project is a folder you pick; every file opens without keyline. Elsewhere it lives in the browser. The desk installs as an app from the address bar.
keyline reads what you can't describe. Real numbers from the pixels, then eight readings from the images.

Measured from your pixels, backgrounds discounted: hex and percentage, not vibes. A contrast score with it.

Composition, palette, material, light and four more. Switch one off and it is not asked for; mark one strong and it leads the layers in the prompt.

Every layer keeps the images it was read from. Hover one and they light up, in Sources and on the board.
One direction, compiled. Not a description you rewrite per tool.

The prompt carries a [SUBJECT] slot. Swap the noun, keep the taste. It stays on screen for the whole session.

Prose for chat models, one line with flags for Midjourney. Compiled, not rewritten. Copy any of the three with the unlock.

Type a subject, move a layer's strength, add an avoid: the prompt marks the line it rewrote. Live, with no AI call.
Set up for what you make.
Digital product, Brand & graphic, Interior, Architecture, Industrial design, Photography & art direction. Pick yours once: new boards start set up for it.
The layers a board starts with, its ratio, its prompt tab, one added line and one download. The field’s name never reaches the reading. Its strong layers are read first and in the most detail; nothing else about the reading changes.
A language, a tone, how much detail. They sit under the field’s line in ChatGPT and Claude prompts, marked as added by keyline. Midjourney takes neither.
Both on the Claude tab, over one recorded reading. Each board starts with its field’s strong and light layers and adds its field’s line.
A new Interior board starts with Material & finish, Palette and Light strong, Typography light (absent from this reading). Its line is added.
A new Digital product board starts with Composition, Typography and Palette strong (this reading has no Typography layer); Material & finish and Lineage light. Its line is added, and so is the example instruction.
Lines marked blue are added by keyline from What you make, not read from your board.
Compiled by keyline’s own code from the reading above (2026-09-09, as recorded) with each field’s starting strengths, 2026-10-18, unedited. The subject slot is left open. The instruction is an example typed for this page, on the Digital product column only.
Each field has one download of the measured palette. Part of the $29 unlock.

keyline-gilt-oxblood-palette-schedule.pdfInterior. An A4 page, the hex values selectable as text.
/* keyline · gilt & oxblood
Measured from 7 references, backgrounds discounted. */
:root {
--color-1: #bab6af; /* 21% */
--color-2: #524f4d; /* 14% */
--color-3: #828180; /* 13% */
--color-4: #532529; /* 10% */
--color-5: #53422a; /* 5% */
--color-6: #7d6f57; /* 5% */
--color-7: #715849; /* 5% */
--color-8: #292722; /* 4% */
}
Digital product. One CSS custom property per measured colour, its share beside it.
# gilt & oxblood Palette list. Measured from 7 references, backgrounds discounted. | No. | Hex | Share | | --- | --- | --- | | 01 | `#bab6af` | 21% | | 02 | `#524f4d` | 14% | | 03 | `#828180` | 13% | | 04 | `#532529` | 10% | | 05 | `#53422a` | 5% | | 06 | `#7d6f57` | 5% | | 07 | `#715849` | 5% | | 08 | `#292722` | 4% |
Architecture. A plain Markdown table: number, hex, share.
The three files hold the gilt & oxblood board’s eight measured colours, hex and share, and nothing else: no reading text. Brand & graphic and Industrial design get a Colour sheet .pdf, Photography & art direction a Palette sheet .pdf, the same table under another name. On the desk the palette is also a file of the project, palette.json, with the names you give the colours and a CSS variable for each, free. Generated 2026-10-18 by keyline’s own download code; the page is the image the app places in the .pdf.
No modules, no add-ons. Free to try on unlimited boards; $29 once owns the rest.
keyline is small on purpose. One person builds it, and every card here is live today.
Free: the desk and its files, boards, readings, tuning, the first lines of the prompt, watermarked export. $29 once: the full prompt, copies per model, clean exports, Inspect, your field’s palette download, restore. Yours forever. Unlock now.
Everything, forever: the compiled prompt with per-model copies, the Markdown brief, Inspect, the palette download for your field, and watermark-free print-resolution exports, on this board and every board you ever make. One payment. It is not a subscription and not a per-export fee.
No. A project is a folder on your disk in Chrome and Edge, or your browser's own storage elsewhere. Your references leave your machine only in one case: the images are sent to the AI for the reading each time you press Generate.
In the project folder, as files you can open without keyline: a board is a JSON file with its sources beside it and its direction as JSON and Markdown, the Markdown carrying the assembled prompt once you unlock; a note, a prompt and a card are Markdown with a few lines of front matter; a draft is an Excalidraw file; the palette is JSON. Rename or move the folder and the desk opens it again. Without folder access the same files live in the browser, and a folder can be chosen later; everything moves across and is read back equal before the move counts.
Yes. The empty desk offers four example projects, one per field keyline ships references for: an interior, a house on a quarry edge, a desk lamp, a set of fair posters. Each is a board with its direction, two notes, a prompt in versions, a draft and ten or more cards, and comes out again with one command.
A vision model will describe your pictures. keyline measures what they have in common: real hexes and weights from the pixels, eight traceable layers, and a compiled prompt with a [SUBJECT] slot that stays reusable. The three-model proof above is the difference in practice.
The field’s name never reaches the reading. Its strong layers are read first and in the most detail; nothing else about the reading changes. The rest happens on your side of it: the layers a new board starts with, its ratio, the prompt tab, one added line in ChatGPT and Claude prompts, and a download of the measured palette. Choosing a field is free; the download is part of the $29.
Your unlock is restored by the email you purchased with, from Settings › License in the app. In a project folder your files are on your disk and stay through anything the browser does; in the browser's own storage, choose a folder in Settings or export the brief for anything you can't lose.
Yes. The board is composed by the same engine and measured by the same code as yours, over seven CC0 references: four from the Met Open Access collection, three via Openverse. The reading beside it (2026-09-09) is shown as recorded; the three model outputs (2026-08-25, from an earlier reading of the same references) are unedited.
Forever. Not monthly, not per board, not per export.