Masonry Logo
AI & Technology

Bulk AI Product Photography: A 3-SKU Catalog Workflow

A real three-SKU batch shows how to standardize an AI product-photography recipe with a manifest, fixed scene contract, asynchronous Masonry jobs, product review, and cost-per-accepted-image accounting—and why one prompt and seed still did not produce a locked catalog set.

Gaurav BisenGaurav Bisen
10 min read

Bulk AI product photography is not “run the same prompt 500 times.” At catalog scale, the hard problem moves from generation to operations: which approved source belongs to each SKU, what cannot change, which scene version ran, where the job ID went, who reviewed the file, and whether the output is actually consistent with the rest of the set.

We tested that system on three fictional NORTHLINE products: an amber candle, a Vitamin C serum, and a sage water bottle. Every row used the same Nano Banana 2 route, 4:5 output, seed, background, plinth, camera, light direction, and negative-space brief. All three jobs succeeded and preserved their visible product names and quantities. The set still drifted in product scale, vertical position, plinth size, background warmth, and shadow strength.

That makes the result useful: three plausible secondary assets, but not one locked catalog system. This guide publishes the source sheet, output sheet, manifest, exact prompt contract, job IDs, and disposition logic so a merchant can reproduce the workflow without mistaking file count for production progress.

Evidence boundary: NORTHLINE is fictional, and these source products were created for earlier controlled Masonry articles. The three jobs and files below are real. This is a small operational pilot, not evidence about a physical catalog, model reliability, conversion lift, or performance at hundreds of SKUs. Current merchant discussions establish qualitative demand; they do not validate vendor performance claims.

Why the catalog workflow is a distinct merchant job

Masonry already has a one-supplier-photo asset-set workflow and a same-SKU model-fidelity test. Neither answers what happens after a merchant has chosen a route and needs repeatability across many products.

That gap appears directly in merchant questions. A Shopify merchant with about 400 lighting-fixture SKUs wanted five or six contextual images per product, exact fixture consistency, and bulk production because manual work was not viable. Read the catalog question. Another ecommerce discussion about hundreds of SKUs recommended a source-of-truth file, standardized templates, batch editing, and discrepancy detection rather than treating imagery as unrelated one-off shoots. Read the workflow discussion.

A current August 2026 Shopify app-builder post describes the same operational problem—recreating setups across a catalog, product-detail accuracy, manual work, and predictable cost—but it is the vendor's own positioning, not independent proof. Read it as qualitative product discovery.

The supplied three-month Search Console export contains no “bulk product photography” query among its top 1,000 rows. This page is therefore a deliberate adjacent-intent expansion based on current merchant workflow evidence and strong product fit, not a claim that Masonry already ranks for the term.

Step 1: build the SKU source-of-truth manifest

Start with rows, not prompts. Each row needs enough information to reject a beautiful image of the wrong product.

Source sheet, left to right: NL-CANDLE-CEDAR-8OZ, NL-SERUM-VITC-30ML, and NL-BOTTLE-SAGE-750ML. The bottle was cropped deterministically from the existing Sage/Clay source sheet; no generative edit was used to create the single-SKU source.

The operational manifest for this run recorded:

FieldWhy it exists
sku and variantprevents files and reviews from crossing products
approved source pathidentifies the factual pixels supplied to the route
product invariantsmakes label, geometry, material, color, quantity, and included-item rejection explicit
scene versionseparates the reusable art direction from product facts
model, aspect, seedrecords the generation contract without pretending it locks the scene
output path and job IDsupports asynchronous download, resume, and audit
status, reviewer, dispositionseparates service success from merchant acceptance

Download the completed TSV manifest. It includes the three actual job IDs and dispositions, not placeholder “done” rows.

Step 2: separate the fixed scene from each SKU's invariants

The shared scene specification stayed constant:

4:5 catalog-secondary image; centered product; one low rectangular pale limestone plinth; seamless warm-cream background; soft large window light from camera-left at 45 degrees; faint grounded shadow to camera-right; camera at product mid-height; straight-on view; restrained realistic contrast; quiet upper 18 percent negative space; no props.

Each row then appended a different immutable product block. The candle block required one amber cylindrical jar, black lid, ivory label, and exact NORTHLINE / CEDAR / 8 OZ text. The serum block required one clear cylinder, orange liquid, stepped silver pump, transparent cap, white label, and exact NORTHLINE / VITAMIN C / 30 ML text. The bottle block required one matte sage bottle, black cap and loop, vertical NORTHLINE, 750 ML, and the source shoulder, body, and base.

Keep claims, prices, offers, headlines, promotional badges, and channel disclosures outside the generated bitmap. They change on a different approval cycle and should not force a product rerun.

Step 3: launch asynchronous jobs and retain every ID

The live route was Nano Banana 2 through gemini-3.1-flash-image-preview. Its August 15 contract accepted repeated references, seed, and explicit image dimensions; this run used one reference per SKU, 4:5 (928 × 1152), and seed 260815.

One recorded command looked like this; the other two changed only the reference path, output name, and product-invariant paragraph:

Prompt

masonry image "$SCENE_SPEC $PRODUCT_INVARIANTS" \ --model gemini-3.1-flash-image-preview \ --aspect 4:5 \ --ref ./sources/NL-CANDLE-CEDAR-8OZ.webp \ --seed 260815 \ --output ./outputs/NL-CANDLE-CEDAR-8OZ_catalog-secondary.png

The command returns before generation completes. Capture the JSON response, write its job_id to the row, poll with masonry job status <job-id>, and download only after the status is succeeded. Do not launch an unbounded catalog in a shell loop without concurrency limits, rate-limit handling, a retry policy, and idempotent output names.

The successful jobs were:

  • candle: 7b25c75c-e85f-47ae-b80b-67a8338dcc08;
  • serum: 786c1df9-9b2a-4752-a0d5-85ea645b09cd;
  • bottle: 6646ee22-c9e5-4d2b-99d4-245049969a91.

The CLI returned no normalized per-job cost, so this run does not invent one. A production runner should store any available credit or invoice metadata beside the job, then add human review and repair cost before calculating cost per accepted image.

Step 4: review product truth and set consistency separately

Same route, aspect, seed, and shared scene contract; left to right are the candle, serum, and bottle outputs. Each is plausible alone. As a set, the product scale, baseline, plinth dimensions, background warmth, and shadow strength visibly drift.

The shared prompt succeeded at semantic consistency: warm neutral set, limestone plinth, left-side illumination, rightward shadow, straight-on product, upper negative space. It failed at layout consistency: those ideas were redrawn rather than locked.

Candle row

Candle candidate, 928 × 1152. Exact visible label text and one closed amber jar survive. The output uses a broad low plinth and a relatively large product scale. Keep as a reviewed secondary candidate; do not treat it as source-locked geometry.

Serum row

Serum candidate, 928 × 1152. The three label lines, orange liquid, clear bottle, silver pump, and transparent cap remain visible. The product is smaller in frame and the shadow is much harder and longer than the candle row.

Bottle row

Bottle candidate, 928 × 1152. The sage color, black cap and loop, vertical NORTHLINE, and 750 ML text survive visible review. The plinth is deeper, the product sits higher, and the background is cooler than the other rows.

The acceptance result

GateCandleSerumBottleSet disposition
One correct product and variantPass visible reviewPass visible reviewPass visible reviewContinue
Exact visible product textPassPassPassContinue
Source-locked physical geometryReviewReviewReviewCannot prove from generated redraws
Shared background familyPassPassPassKeep direction
Shared product scale and baselineFail set reviewFail set reviewFail set reviewNormalize or rerun
Shared plinth geometryFail set reviewFail set reviewFail set reviewUse a deterministic plate/template
Shared light and shadow strengthFail set reviewFail set reviewFail set reviewComposite or use controlled photography/3D
Final dispositionKeep secondaryKeep secondaryKeep secondaryReject as one locked catalog set

This pilot produced three successful generations, three files that pass the narrow visible-product screen, and zero files accepted into the proposed locked catalog set. That is not a 0% model success rate. It is a distinction between individual product plausibility and set-level art-direction compliance.

Step 5: fix the system before adding more SKUs

Do not respond to set drift by launching 497 more products. Choose a production route based on the required exactness:

  1. For deterministic catalog geometry: remove or preserve the real product, place every approved cutout into one locked background/plinth template, and build shadows with a repeatable compositing rule.
  2. For generative secondary scenes: define acceptable ranges for product height, baseline, background color, plinth footprint, and shadow angle; generate several candidates per row and accept only the ones inside the range.
  3. For physical accuracy across views: use conventional photography or a verified 3D asset. A front reference cannot reveal hidden geometry or prove dimensions.
  4. For a new catalog version: change one scene-version identifier and rerun a small stratified pilot—hard labels, transparent items, reflective items, tall and short products—before the long tail.

The same-SKU fidelity benchmark explains why exact text can coexist with changed package geometry. The Shopify variant-image workflow covers the downstream preview, gallery, cart, and checkout checks when a batch contains variants.

Measure throughput with accepted assets, not generated files

Track a funnel for the production system:

StageDefinition
attemptedone manifest row sent to a route
service-succeededthe route returned a downloadable file
source-reviewedproduct and variant truth were checked
set-reviewedcrop, scale, baseline, scene, light, and shadow fit the catalog version
acceptedthe file passed every required gate for its intended channel
publishedthe accepted file is mapped to the correct SKU and placement

Then calculate:

Prompt

acceptance rate = accepted files / attempted jobs cost per accepted image = all production cost / accepted files cycle time per accepted image = elapsed production time / accepted files

Opens with the prompt already filled in.Try this prompt

“All three jobs succeeded” is an infrastructure metric. “Zero entered the locked set” is the production decision. Both belong in the record.

Where this belongs in the ecommerce workflow

Use the AI product-photography tools guide when choosing between a dedicated batch editor, API pipeline, art-directed tool, and multi-model workspace. Use Masonry when explicit model choice, canvas review, or CLI orchestration fits the workflow; this article does not claim native Shopify sync or a one-click catalog batch product.

When one listing combines several sold SKUs, use the AI product-bundle image workflow to add exact component-count and packaging-truth gates instead of treating the bundle as another single-SKU row.

When a catalog slot must explain dimensions, capacity, or included items, use the fact-safe product listing infographic workflow and render approved facts separately from the generated visual layer.

Keep approved product media authoritative and check current channel rules before publishing. Shopify's product-media guidance describes supported product media and store behavior; marketplace and ad requirements can differ.

The scalable unit is not one prompt. It is one versioned scene contract, one row per approved SKU, one asynchronous job record, two separate review gates, and one honest acceptance denominator.

Share:
FAQ

Questions from this guide

Concise answers to the questions readers ask after this guide

How do I use AI product photography across a large catalog?

Start with a manifest that maps each SKU to approved source files, immutable product attributes, target asset, scene version, model route, size, seed, output name, job ID, reviewer, and disposition. Pilot the hardest products first, launch one asynchronous job per row, and scale only after the accepted outputs—not merely successful generations—meet both product-truth and catalog-consistency gates.

Does using the same AI prompt and seed keep catalog images consistent?

No. It removes two variables, but it does not lock camera geometry, product scale, plinth dimensions, background color, light intensity, or shadow treatment across different sources. In this three-SKU run, all three jobs used the same route, aspect, seed, and shared scene specification, yet the resulting catalog treatment still drifted visibly.

What is the difference between a successful AI job and an accepted catalog image?

A successful job only means the service returned a file. An accepted catalog image also passes the exact SKU, variant, quantity, geometry, material, label, claim, crop, scene, and set-consistency checks for its intended channel. Track generated, downloaded, reviewed, accepted, rejected, and published as separate states.

How should ecommerce teams calculate bulk AI image cost?

Include generation credits, source preparation, orchestration, downloads, human review, retouching or compositing, reruns, rejected files, storage, and publishing work. Divide the total by accepted channel-ready images. The Masonry CLI did not return normalized per-job cost for this run, so the article reports attempts and acceptance dispositions without inventing a price.

Should AI-generated catalog images replace factual product photos?

Not automatically. Keep approved photography or renders as the factual listing anchor. Use reviewed AI-assisted files as secondary catalog or campaign assets, or generate a scene plate and composite the approved product when exact identity is required. A coherent-looking set cannot compensate for a wrong SKU, variant, label, quantity, or included item.