Zum Hauptinhalt springen
  1. The Foundry/

Art Library

Gantt Planet has a collectible art codex — hit your habits, earn an illustration. Feeding that system needs more artwork than one person can draw. This page is that artwork, and how it came to exist.

One object, five styles
#

This is the single most informative image in the collection. Read across for eight different objects; read down for the same object in five styles:

Fig 1 · One list × five styles
Eight objects (envelope, teapot, palm frond, briefcase, nail polish, mushroom, comet, exclamation mark) each rendered in five styles: sticker, watercolor, clay 3D, papercut, isometric monoline
Note: The object list is written once; style is the variable that changes. Each row is one batch run, so the style holds; each column is one object, so the concept holds.

The design follows from one observation: the list and the style are independent of each other. Coming up with objects (envelope, teapot, palm frond…) costs imagination. Nailing a style costs prompt engineering. Separate them, and adding a sixth style stops being “think of 500 more things” and becomes “tune a prefix, hit go, come back tomorrow.”

Scale
#

ItemCountNotes
Object list500Across 17 thematic categories
Styles5Sticker, watercolor, clay 3D, papercut, isometric monoline
Main assets2,500500 × 5, all 1024×1024 transparent PNG
Border sets30Corner + straight edge in pairs, tile to any size
UI indicators15Small state glyphs
Textures / wallpapers33Opaque, full-bleed
Total2,578Two further re-renders with different models exist, ~2,500 each

What the 17 categories look like
#

Fig 2 · Six samples from each of 17 categories
Seventeen rows of six transparent illustrations each, covering plants, stationery, travel, home objects, abstract symbols, food, technology, fashion, architecture, sports, sky, professional tools, retro culture, fantasy, city, science, and holiday decoration
Note: The categories weren’t imposed afterwards — they were fixed before generation started. They determine how the list is written, how batches are split, and which segment gets re-run when something fails.

Borders: generated in pairs so they tile
#

Fig 3 · Decorative borders, corner and straight edge
Several sets of decorative frame assets, each consisting of one corner piece and one straight-edge piece
Note: Each set is two renders — one corner, one straight run. Those two tile into a frame of any width and height, so no separate artwork per aspect ratio.

Textures
#

Fig 4 · Textures and wallpapers
Textures including Victorian brocade, letterpress paper, washi, brushed metal, art deco geometry, pale wood grain, linen, and Venetian plaster
Note: This batch is not background-removed and runs on a separate line. A cutout model looks at a full-bleed image, fails to find a subject, and destroys it — so textures have to be lifted out of the main flow.

Some of the method
#

The skeleton is: a Python config describing what to generate → a batch script rewriting workflow nodes → a local ComfyUI instance → poll for results → remove background → write files → emit a report JSON. The whole thing runs on my own hardware. No cloud API bill.

Generation was never the hard part. These four were:

1. Failures must be re-runnable in isolation. A 500-piece run takes hours, and something always breaks — a black frame, a cutout that eats the subject, a dropped connection. So every script has --resume: files that already exist are skipped. It looks like a trivial flag. It’s the line between a pipeline you use and one you abandon. Without it, failing on piece 470 costs you the will to continue.

2. Seeds must be reproducible. The random seed per image isn’t random — it’s the CRC32 of the item’s name. The same name always draws the same seed, so “re-run palm_frond” and “the original palm_frond” agree. That turns patching a single asset into a safe operation rather than a gamble.

3. Every PNG remembers how it was made. The full generation workflow is written into the PNG’s metadata. Two months later, staring at an image you can’t place, you read the prompt and parameters back out of the file itself instead of digging through logs.

4. Cutout quality is the ceiling on the whole line. Generative models are eager to cooperate; background removal models are not. Transparency is decided in post, and three cases break generic cutout models: dark object edges, semi-transparent material (glass, smoke, water), and objects that are themselves white. That last one is exactly why the textures had to move to their own line.

What’s not here
#

  • The prompt prefixes for each of the five styles, and the negative prompts — the most time-consuming part to tune
  • How the 500-item list across 17 categories was generated without concept collisions
  • Cutout threshold parameters, and the recovery path for dark or semi-transparent objects
  • Which prompts had to be rewritten wholesale when re-running the same list on two other models

Got a batch of “the same thing several hundred times, only the content differs”? That’s the same shape as this line. The commissions page has more examples of that shape.