A vector logo kit from a coding agent: SVG, PNG, favicon and OG image without an image model
How a recipe turns real font outlines into a logo kit by code: mark, wordmark, lockups, dark and mono versions, favicons, app icons and OG image.
Duchamp
Short answer
An image model gives you a picture of a logo. A coding agent can give you a logo system: it reads the outlines of a licensed font, cuts your initial out of a circle or squircle, writes the result as SVG paths and rasterizes every size you need, so the mark is the same geometry at 16 px and at 1024 px.
Why not ask an image model for a logo?
Because a logo is not one image. It is a mark that has to survive a 16 px favicon and a 1024 px app icon, a wordmark set in a real typeface, two lockups, a dark version and a single-color version, and they all have to agree. An image model produces a raster at one size, redraws the letter slightly differently each time, fakes the typography and cannot output a vector. You then spend the afternoon tracing it.
The recipe approach starts from geometry instead. The agent runs a small Node program that reads a font's glyph outlines with opentype.js and converts them to paths, builds the shape and the cut-outs with polygon booleans, writes SVG directly and rasterizes PNGs with resvg. No browser, no image model, no paid API. The recipe states a run takes about a second.
What is in the kit?
Every file comes from the same geometry, so a change to the brand name or the colors regenerates the whole set consistently.
| Group | Files |
|---|---|
| Vector | mark.svg, wordmark.svg, lockup-horizontal.svg, lockup-stacked.svg, each with a -dark counterpart, plus mark-mono.svg |
| Favicons | favicon-16.png, favicon-32.png, favicon-48.png, favicon.ico |
| App icons | apple-touch-icon-180.png, app-icon-1024.png |
| Social | og-1200x630.png with your one-line topic set in type |
| Review | brand-sheet.png at 1600×1000 with every piece at actual size, and check.json with the measurements |
The recipe closes with the three lines to add to a site: the .ico and the 180 px touch icon at the root, and the OG image in the page head.
How does the geometric monogram recipe draw the mark?
The first published recipe is the geometric monogram, Duchamp's name for it is "Geometric monogram logo kit". The mark is one circle or squircle with the initial cut out as a negative. Where the letter has a vertical stem with an open end, that stem is extended to the edge of the shape so it divides the shape into fields: an N extends bottom-left and top-right and makes two fields, an H extends all four ends and makes four. The letter is sized by code so the wall between glyph and edge is 1.15 times the stem weight. The wordmark is Geist at weight 600 with letter-spacing of −2.2%. The stated reference feeling is the restraint of Linear, Vercel and Raycast.
You fill five blanks. Brand name up to 20 characters, used in the wordmark exactly as typed. Two HEX colors, primary and background, defaulting to near-black on warm white. A topic line up to 90 characters that becomes the OG image's single line. One letter for the mark, defaulting to the first letter of the name. A variant: A for circle, B for squircle, C for a cropped squircle where the letter breaks through the bottom edge, or automatic, which picks the squircle for round letters. A Korean brand name is optional and adds a wordmark-ko.svg outside the default kit.
The agent then saves four code files without changing a character, writes props.json from your blanks, runs npm install and node logo-render.mjs.
What does the code check, and what does the agent still have to look at?
check.json must come back with ok: true or the run exits with a non-zero code. The checks are:
- No
<text>,<image>or external reference in any SVG. Letters are paths, so the file looks identical on a machine without the font. thin32: the mark and the 32 px favicon are scaled to 32 px geometry, rasterized at 8× and measured by distance transform; the thinnest stroke and the narrowest gap must both be at least 1.5 px.ink16: the 16 px mark and favicon must have 15% to 75% ink, so they neither fill into a block nor fade to nothing.- Contrast between primary and background. Below 3:1 the kit switches to a monochrome black-and-white set, records a warning and the agent asks whether to change the colors.
- Every output file exists, every PNG has its exact size, and the wordmark text equals the brand name.
Code checks do not catch a mark that resembles Apple, Nike, Airbnb, the Vercel triangle, Linear, Mastercard or Target, nor clichés like a light bulb, a rocket or a swoosh. So the recipe requires the agent to open the brand sheet and the PNGs and look, and to name any resemblance it sees in its report. It is also told not to patch the code if a check fails. It may switch the variant and run again.
What do the examples look like?
Two fictional brands were run through the recipe and their full kits are shown on the recipe page.
| Brand | Primary on background | Topic line |
|---|---|---|
| Northline | #1E3A8A on #F5F3EE | Weather data for small farms |
| Halden | #A63D24 on #FBF7F2 | Booking software for independent clinics |
Where do I find it?
The recipe lives in Readymade under Brand › Logo as Geometric monogram logo kit. It is scheduled for the Monday drop on October 12, 2026 at 10:00 KST; until then the page is reachable but not listed. Over MCP it is found with search_image_templates using use: logo and fetched with get_template. Fetching a recipe counts against the daily free limit, searching does not.
What are the limits?
It is a letter-only logo. The field division needs a stem, and a brand whose mark must be a pictogram is out of scope. A primary color too close to the background drops the kit to monochrome. The fonts are fixed. And a geometric monogram can land near an existing trademark, so the recipe makes a trademark search your job before you ship it.
FAQ
- Can I use my own font in the recipe?
- Not in this version. The agent is told to save the code exactly as given and to change only props.json. The fonts are fixed to open-licensed families the geometry was tuned for. Geist for the mark and wordmark, IBM Plex Mono for sheet labels, IBM Plex Sans KR when a Korean name is added.
- Can I use the output commercially?
- The fonts are SIL Open Font License 1.1 and only their outlines, converted to paths, end up in the files, so the kit itself carries no font license. A letter-only mark can still resemble an existing trademark, which is why the recipe tells you to run a trademark search before using it.
- Does it need an internet connection?
- Only for npm install, because the fonts arrive as npm packages. Rendering is offline and needs no browser. The recipe says a run takes about a second on Node 18 or newer.
- What if my initial is a round letter like O or S?
- The field division comes from open vertical stems, so letters like N, H, K or T split the shape into fields while O, S, E, B, D, A, C or G get only the centered cut-out. The recipe calls this normal, and the automatic variant picks a squircle for round letters.
Related
- Landing page and hero section references your coding agent can use over MCPWhy a vibe-coded landing page needs a reference, and how Duchamp UI, 21st.dev, Mobbin, shadcn/ui and Magic UI compare for Claude Code and Codex users.
- Render a 9:16 motion graphic video with Claude Code and HyperFrames, no AI video modelHow a coding agent renders a 1080×1920 vertical motion video from a recipe: React composition, HyperFrames (Apache 2.0), headless Chrome, FFmpeg.