Making generative art with AI to sell as print on demand

Fifth post in “Tools I build with.” Every post so far has been about the tools. This one is the first of the print-on-demand case studies: generating art with AI and selling it as print on demand under an imprint called Lowphi.

The brief

The goal is a coherent collection of prints that each could fit in a mid-century interior. To get there, I use generative art with a set of rules: the rules keep the pieces related to each other, the generator keeps each one different.

Rule 1: Renaissance proportions

1 1/φ
A golden rectangle: a square plus a smaller golden rectangle, repeating forever.

A Renaissance proportion. φ (phi) is a specific number, roughly 1.618, that appears in natural growth patterns (the spiral of a sunflower, the shell of a nautilus, the arrangement of leaves on a stem). Architects and designers have borrowed it for centuries because proportions built on φ tend to feel balanced without looking calculated.

Rule 2: Shapes inspired by suprematism

Rectangle
Wedge
Disc
Hairline
Cross
Teardrop

Borrowed from the Russian avant-garde, roughly 1915 to 1935. Names worth recognising: Kazimir Malevich, El Lissitzky, Alexander Rodchenko, Varvara Stepanova.

Every piece is built from six shape families only: rectangles (in squares, slabs, bars, and slivers), triangular wedges, large discs, hairlines, crosses, and an occasional teardrop accent. Nothing else gets drawn.

Rule 3: Colour steps inspired by generative art

Eleven colours per family, one of two families per piece. Each family has the same structure: three lead colours, three mid colours, four accents, and one rare colour reserved for the largest background discs.

The Vermillion family. Every non-ink colour sits at a phi multiple of vermillion: +0φ, +2φ, +3φ, +4φ, +5φ, +6φ, +7φ, +8φ, +9φ, +10φ around the hue wheel. The +1φ step (a bright green-teal) is deliberately skipped so the family stays distinct from the Suprematist reference below. Ink is the dark neutral.

Vermillion +0φ anchor #d31717
Ink neutral #1a1613
Plum +2φ #503761
Ochre +3φ #beb259
Slate +4φ #398392
Rose +5φ #9a3b6f
Olive +6φ #578249
Indigo +7φ #424072
Coral +8φ #b15d33
Moss +9φ #368b6b
Mauve +10φ #844d89

The Suprematist reference family. Not phi-rotated. Eleven colours sampled directly from Russian avant-garde paintings: the burnt umber, vermilion red, and ink black that anchor every reference; the ochres and cobalts that sit between them; the dusty violets and bricks that thicken the middle range. The rules are otherwise identical to the Vermillion family.

Brown burnt umber #6b3a24
Red vermilion #c8251f
Ink carbon #1a1613
Ochre cadmium #e8a01a
Orange cadmium #d95a1f
Cobalt pure #1f3a8a
Teal slate #2f8a78
Slate blue muted #7d8aa3
Violet dusty #6e5c7a
Brick warm #8a3222
Pale disc pink #f0cab8

A piece commits to one family. The code never mixes hues across families in a single piece. Chalk is the paper, ink is the darkest colour, the other nine do the work.

Add quality by adding texture

Digital colour is perfect, which is the problem. A solid red rectangle rendered by a computer looks flat, sterile, slightly cheap. The paper the print will eventually live on is the opposite: warm, slightly uneven, catching the light differently across its surface. The job of the texture layer is to close that gap before the file ever leaves the computer.

Four treatments work together.

  • Mottled paint inside every shape. A soft radial gradient of slightly darker and lighter versions of the fill, plus a dozen thin streaks in a darker shade, plus a fine speckle of tiny dots. Each shape reads as hand-painted rather than digitally colour-filled.
  • Chalk ground, not flat. The paper underneath has broad, irregular tonal blotches, warm and cool, so the base itself has presence and catches light differently in different regions.
  • Paper grain. A low-amplitude random noise across the whole image. Reads as tooth, the uncoated-stock feel of paper that still has a hand to it.
  • Warm vignette. A slight warm darkening toward the corners. Makes the finished piece look like a photograph of a painting rather than a digital export.

Deliberately absent: halftone dots (a print technique, not a painting one), pixel noise (too digital), heavy colour misregistration (too pretend-vintage). The texture layer is trying to make the digital file feel like a painted canvas that was then photographed, not a printed poster.

Finding the name

With the rules settled, the project needed a name. It had to sit between the two things the project was really about: a warm, intentionally imperfect aesthetic (the “lo-fi” side) and mathematical proportion (the “phi” side). One word. Pronounceable out loud. Ideally one syllable to remember and one reference to discover.

I landed on Lowphi. Phonetically “low-fye,” rhymes with “eye.” It combines lo-fi with φ, the Greek letter for the golden ratio.

The generator

seed , palette , shapes

Every press is a new piece drawn from the same rule set: one of the two colour families, one of four composition strategies, roughly twenty shapes, placed so no two shapes of the same colour overlap. The code runs a quality gate on every piece and retries up to six seed variants if a result reads off (no clear hero, too many lead-colour shapes, one quadrant crowded). Same rule book, never the same piece twice.

The four composition strategies:

  • Axial. Two crossing tilts, tiered shape sizes (one hero, a few mediums, several smalls). The densest layout.
  • Anchor. One oversized slab dominates, satellites orbit outward. Sometimes with a large background disc behind everything.
  • Edge. Mass clusters at one corner, the rest of the canvas breathes. Calligraphic hairlines sweep across the empty side.
  • Axis. One dominant tilt, most shapes line up along it, with three smaller hotspots elsewhere on the page.
Show the code

The full rule book

  • Palette: eleven colours + chalk ground + ink neutral, one of two families per piece (Vermillion or Suprematist reference).
  • Shapes: 6 families only (rectangle, wedge, disc, hairline, cross, teardrop).
  • Rectangle proportions: square (1:1), slab (1:φ), bar (1:φ³), sliver (1:φ⁴). Four fixed kinds, nothing in between.
  • Size tiers: hero at φ²×unit, mediums at unit, smalls at unit/φ, specks at unit/φ². Phi sets the baseline scale.
  • Jitter: a ±15 to 30% random factor on hero width and height, wedge length, and disc radius. A ±2° wobble on every rotation. Strict phi on its own is boring; the jitter is the lo-fi half of Lowphi earning its keep.
  • Ink coverage: one hero (≥ 2.2× median area), at least two smalls (≤ 0.5× median), at least one saturated accent, at most two shapes of the capped lead colour.
  • Separation: no two shapes of the same colour may overlap. The code enforces this with an oriented bounding box + SAT collision test and recolours on clash.
  • Layering: larger shapes sit behind smaller ones. Hero masses recede; smaller accents, hairlines and crosses come forward. No big slab ever eats the piece.
  • Paint feel: mottled paint inside every shape (radial gradient + streaks + speckle); chalk ground with tonal blotches; paper grain; warm vignette. No halftone.

What the pieces sell for

Two poster sizes to start: 30×40 cm at €22, and 50×70 cm at €39. A tote bag lands at €18.

The 30×40 price sits below most curated indie imprints, which tend to open around €30 for the same size. It sits above pure-commodity print shops, which open around €10 to €15. Enough headroom for production, delivery and returns, enough space under the curated end to feel like a deliberate entry price rather than a luxury one.

A full price rationale, the benchmark sheet, and the name-check script all sit in episode 8.

What’s next in the series

  • Another print-on-demand case study. A sister brand called Lunaire, built around personalised embroidered apparel: a hoodie whose pattern is generated from the buyer’s birth data, plus a crewneck sweatshirt with a #001 to #999 edition number on the right sleeve.
  • A third case study from the same brand. A phone case where buyers pick between two and eight pastel neon colours and the generator draws a dye pattern underneath a fixed wordmark.
  • Comparing print-on-demand providers. A benchmarking framework (print quality, poster and tote costs, delivery, minimum order, API availability, white-label packaging) against the main candidates.

Subscribe below for the next one.