Number Zero
Problem
Printful already handles printing, packing and shipping, and it ships blind, so the box says Number Zero, not Printful. Connected to Shopify, a product made in Printful shows up for sale instantly. That covers the logistics. Everything a customer actually sees was still missing.
The old store looked like what it was. Product descriptions were fabric specs. The products had no types or tags, the sizes listed out of order, and all five policy pages were empty. Photography, a look, copy and a pricing model each normally mean hiring someone or spending weeks on it.
So the question was whether one person could run a store that feels like a real company, with AI doing everything except the designs.
Before
The product photos were mostly Printful's mockups: clean and accurate, but a shirt floating on white, the same as every other Printful store. A few products also had a one-off AI shot made from the mockup, each with a different person in a different place, so nothing tied them together. There was no cast, no setting and no reason to believe these came from one brand.
Approach
The rule was that AI does the work and I make the calls, with one exception: no AI model is the source of truth for a print. The customer has to get exactly what's in the photo, so the pixels of the print come from the real file every time.
I started with research instead of a theme. Five research tracks covered peer brands and pricing, ecommerce UX and conversion, the Shopify build, the AI photo options on fal.ai, and voice and copy. They were combined into a plan with eleven decisions, each with a recommendation. I approved most of them and changed a few.
Two of the recommendations changed the business, not just the look. I'd planned to list the products the normal way, and the research said to release them as numbered drops instead, starting at Drop 000, with an email signup for the next one. It also said my prices were low for the category. With free shipping, a $24 hat would have netted about $3. With tees at $45 and hats at $36, a tee still nets about $22.50 after Printful's base cost, fees and US shipping. I wasn't sure I could offer free shipping. The higher prices are what made free US shipping on every order possible.
| Piece | Price |
|---|---|
| Trustless Fade Tee | $40 → $45 |
| Art(work) Collegiate Tee | $40 → $45 |
| Art(work) Collegiate Tank | $25 → $36 |
| Art(work) Dad Hat | $24 → $36 |
| US shipping | Charged → free on every order |
How the photo pipeline works
The pipeline is a set of Python commands that call image models through fal.ai, one API that gives access to many models. Every step that generates images ends at an HTML contact sheet, where I pick one.
- Pull from Printful. Variants, garment colors, print files, print placement and the official mockups come down from the Printful API.
- Cast. About six candidate faces per role. I pick one, and the pick gets a character sheet of about ten views.
- Base plates. Each catalog model wears each blank garment, in each color, with no print.
- Place. An image editor adds the print to the blank plate. Only its position, scale and perspective are kept.
- Paste. The real print file is warped into that spot and lit by the fabric underneath it.
- Check. The final is mapped back to the print file and scored for how closely it matches.
- Export. 2000×2500 JPEGs, named in gallery order, with alt text, pushed into Shopify.
What I shipped
A recurring cast
Five synthetic models: three for catalog shots and two for editorial. The catalog cast wears every product, so the same faces show up across the whole store. The editorial cast can change with each drop. Each model has a codename and a written description in the cast file. None has a listed height or size, because "model wears an L" would be an invented fact about a person who doesn't exist.
A bake-off before committing to a model
Image models change monthly, so the pipeline tested seven of them on my own prints before I picked one: three prints, three shot types, two candidates each, for about $12.70. Each result was scored for how closely the print matched the file and how far the garment color was from Printful's. Nano Banana 2.1 became the main editor and GPT Image 2.5 the backup. Every generative model spelled the lettering correctly. None got the print pixel-exact, which is why the paste step is mandatory.
Base plates
A base plate is one catalog model in one blank garment and color, with nothing printed on it. There are twelve: three models in four blank and color combinations. Each one is scored for how far the shirt color is from Printful's, and I choose the one with the right face, a flat chest and the closest color. Plates get reused. Any future design printed on one of these blanks starts from a plate that's already approved, so the faces can't drift between products.
The real print, lit by the photo
This is the step that makes the photos believable. The AI editor puts the print on the plate, but its version gets thrown away. The pipeline uses only where it put the print. It finds the AI's print in the image, aligns the image back onto the untouched plate, then warps the actual print file into that position. The ink is lit by the shirt underneath it, so folds and shadows run through the print the way they would on a real shirt, and the photo's grain goes over it so it isn't sharper than everything around it. The shirt color is nudged toward Printful's color, and the print is left alone.
Then the final is mapped back onto the print file and compared pixel by pixel. The tank below scored 0.974, where 1.0 is identical.
Hats are the exception. Embroidery can't be composited convincingly, so hat shots are generated with Printful's embroidery mockup as the reference and approved by eye, checking that the lettering reads exactly ART(WORK).
Editorial scenes and the lookbook
The lifestyle shots use the same idea at a bigger scale. Scenes are generated with everyone in blank tops: a track, a ballfield fence, a locker room, a gym. Drop 000 has an athletic theme, so every location fits it. In group shots, prints are placed one person at a time, because the editors handle one print far more reliably than three. Then each real print is pasted in, lit by the scene. Models from the product shots end up together in group shots, which is a big part of why it reads as a real shoot.
The site says plainly that the models are AI-generated: "Shown on AI-generated models. The print and colour are exact." I didn't want anyone to feel misled, and the line points to the thing that matters to a buyer, which is that the shirt matches the photo.
Straight into Shopify
The export step builds each product's gallery in order, for example hero front, three-quarter, a close-up of the print, the flat, and an editorial shot. Drop 000 came out to 22 product images plus a homepage hero and six lookbook images. A content script then pushes everything into the store through Shopify's Admin API: new titles, prices, copy, SEO fields, the corrected size order, the photos with alt text, and redirects from every old URL. It runs as a dry run first and saves the store's before-state, so any change can be undone by hand.
A theme that changes with each drop
Before writing any Shopify code, I had three homepage directions built as static prototypes using the real logo and designs, then a fourth that combined the two I liked. The final theme is a fork of Horizon, Shopify's free theme, so it cost nothing instead of $300 or more for a premium theme, and it keeps working with the theme editor and Shopify's apps. Everything custom lives in its own files, so Shopify's updates to Horizon can still be merged in.
Each drop gets its own palette. That was my idea, and it shaped the build. The theme has a set of drop color roles in its settings, and changing them in the Shopify admin recolors the whole site. Drop 000 is Varsity, forest green and gold, to match the athletic theme. The next drop can look completely different without touching code.
The theme lives in a GitHub repo connected to the store. Code changes go live when the repo updates, and edits made in the admin are committed back to the repo, so I can work either way.
Product pages that read the label
Everything is 100% cotton, and the research said to make that a pillar instead of a footnote. Every product page has a "What's in it" placard listing the fabric, ink, stock and origin, and the homepage has a "Read the label" section built around it. The product pages also show a size guide built from Printful's real garment measurements, an estimated delivery date, and the free size exchange.
The product copy comes from a fill-in template of facts and a reusable prompt with the voice rules. The prompt tells the model never to invent a spec and to write [MISSING] instead.
The next drop
The second drop is cheaper than the first. The cast, character sheets, base plates and theme already exist. I design the art, create the products in Printful, and pick a theme and a palette. The pipeline composites the prints onto the existing plates, generates themed lookbook scenes and exports the galleries, the copy system drafts the descriptions, and the content script pushes it all into Shopify. Planned time is an hour or two per product, mostly reviewing contact sheets. A new design on an existing blank costs about $1 to $2 in image generation, and a drop's hero and lookbook cost about $5.
Outcome
The whole rebuild happened on October 6, 2026. I started in the morning with research, the first image request went out at 3:48 p.m., and the new theme was published around 11 p.m. Drop 000 has four pieces, a full gallery for each, a homepage hero and a lookbook. Image generation for the whole day was 401 requests and 422 images, about $40, against a planned budget of $150 to $200. All 18 old URLs still resolve, and the old theme is kept as a rollback.
I haven't announced it yet, so there are no sales numbers to report. What's measurable now is the operation. Printful prints and ships, Shopify takes the orders, and the pipeline produces the photos and copy. The only work left for me is designing the shirts, plus the occasional exchange.