How do you split a large catalogue before creating images?
A large catalogue is split into templates: groups of products that share one photo setup, one image list and one set of settings. Templates are what make volume manageable, because a decision is taken once per group and not once per product.
Source photos remain the slowest step. One UK e-commerce studio puts daily capacity at around 60 to 80 SKUs for simple garments at one angle, 30 to 50 for medium-complexity garments at two or three angles, and 15 to 25 for high-complexity pieces. At those rates, 1,000 medium-complexity SKUs take 20 to 34 studio days. Existing photos are worth auditing first: sharp images the business owns can serve as sources.
| Template | Source photo needed | Typical image set |
|---|---|---|
| Bags, shoes, homeware | One front or three-quarter photo on a plain surface | White-background main image, one styled scene |
| Tops, dresses, outerwear | Hanger or flat-lay front, plus back photo if a back view is sold | Ghost mannequin or on-model image, front and back |
| Jewellery and eyewear | Sharp close-up with controlled reflections | Main image on white, close on-model image |
| Colour runs of one style | One colour photographed, a real swatch for each other colour | One image per colour, checked against the swatch |
How do you keep thousands of product images consistent?
Thousands of product images stay consistent when background, angle, crop, shadow, format and model are fixed before production and never changed mid-run. A one-page style sheet per template records each decision.
In an API workflow, the style sheet becomes data. Settings go in params, so every job in a batch receives the same values, and a value outside the allowed list is refused with a 422 error instead of quietly producing a different look. A saved model can be named per job, which keeps the same synthetic model across a collection.
Format is a separate decision from style. Herofab fits an image to 20 marketplace sizes at download, without cropping and without extra credits, so one master image can serve several channels.
| Decision | Fix it as | What drifts if it is not fixed |
|---|---|---|
| Background | One value per template | Grids that look like several shops |
| Angle | Front, three-quarter, side or top-down | Products that seem to change size |
| Product fill | One crop rule per template | Thumbnails with uneven scale |
| Shadow | Soft, none or reflection | Mixed lighting across a category |
| Aspect ratio | One master, such as 1:1 or 3:4 | Cropped products in store grids |
| Model | One saved model per line | A different face on every product |
How should you name product image files?
Name each product image file with its SKU, colour and view, so a script can match image to product without anyone opening the file. Names are set on the source photos, before processing, because automation carries them forward: the Herofab bulk script saves each result under the source photo's own file name.
Google's image guidance says a filename gives "very light clues" about the subject and should be "short, but descriptive", so a public filename can add words without losing the SKU. Retail data exchange has its own rule. The GS1 Product Image Standard, Release 5.1 of September 2026, starts a filename with the 14-digit GTIN, then an underscore and codes for image type, facing, orientation and state, and offers an optional marker for AI-generated content.
| Use | Pattern | Example |
|---|---|---|
| Internal master | sku_colour_view_sequence | TS1042_navy_front_01.jpg |
| Public web file | product-colour-view-sku | cotton-t-shirt-navy-front-ts1042.jpg |
| GS1 data exchange | GTIN_type facing orientation state | [GTIN]_A1N1.tif |
Keep a mapping file
A CSV of SKU, file name, template and status gives a large job one source of truth, and it is the file a store import reads. Alt text belongs in the same sheet. Google calls alt text the most important attribute for image metadata and warns against filling it with keywords, and Shopify's import guidance recommends 125 characters or fewer. WooCommerce's core importer cannot add alt text, so that field needs another route.
How many images should you check in a large batch?
Check every image from the first 20 products in each template, check every main image, and sample the rest. The first run proves the settings, main images carry the most risk, and the sample measures whether the template stays reliable.
A sample gives a measurable limit. If n images are reviewed and none fail, the true failure rate is below 1 minus 0.05 to the power of 1/n at 95% confidence, as the table shows. The arithmetic assumes random selection across colours and categories.
A sample does not clear the images it skips. AI errors fall on individual images, so a good sample says the rate is low, not which image is wrong. Herofab's automated pre-delivery check flagged 20.8% of 303 generated test outputs, with invented detail at 9.6% and a different product at 4.0%. At a rate like that, a generator with no such check would put about 208 faulty images in a run of 1,000, and sampling alone would publish most of them. Herofab does not deliver flagged images, but its check missed cropping, so people still review. The check covered images made between 24 September and 12 October 2026, before Herofab's late-October image engine change.
A full pass is often affordable: at an assumed 10 seconds per image in a thumbnail grid, 1,000 images take under three hours.
| Images reviewed, none failed | Failure rate is below (95% confidence) |
|---|---|
| 30 | 9.5% |
| 60 | 4.9% |
| 100 | 3.0% |
| 300 | 1.0% |
Check a white background with the free checker
How does a batch API work for product photos?
A batch API takes many image jobs in one request, tracks them as a group and reports when all of them have finished. The Herofab API is available on every plan; the limits below come from its OpenAPI document, read in October 2026.
A folder of 5,000 photos becomes 50 batches. Multipart uploads run one at a time per workspace, and a second one receives a 503 with Retry-After, so the Herofab bulk script waits instead of uploading in parallel. A ledger file keeps job ids, so running the script again processes only new photos and does not pay twice.
Other vendors treat API access differently. Herofab's record of 13 October 2026 shows Photta including an API in all plans, and FASHN, Photoroom and Claid selling API access separately. Herofab's roundup of tools with an API has the wider comparison.
| Step | Herofab API behaviour |
|---|---|
| Upload | POST /api/v1/assets: multipart JPEG, PNG or WebP up to 25 MB, an upload intent for large files, or an import from a URL |
| Batch | POST /api/v1/batches: up to 100 jobs, all or nothing if credits do not cover every job |
| Vary | One photo, one setting, 2 to 10 values, one job per value |
| Chain | POST /api/v1/chains: 2 to 5 steps, each output feeding the next tool |
| Safe retries | Idempotency-Key required: same key and body return the original request |
| Credits | Held when the batch is created, charged per delivered image, returned for failed jobs |
| Download | GET /api/v1/batches/{id}/outputs.zip, with platform sizing at no extra credit and format=jpg |
Bulk product photos script in Python
How do webhooks replace polling in a photo workflow?
A webhook replaces polling by having the image service call your server when work finishes, so an integration does not have to keep asking.
Herofab sends signed POST requests for job.succeeded, job.failed, job.canceled and batch.completed, using the Standard Webhooks scheme with HMAC-SHA256. The event carries ids and states only, never image URLs; the image is fetched with an API key.
The receiver has three duties: check the signature on the raw body, answer with a 2xx status within 10 seconds, and ignore repeats. A retry carries the same webhook-id, so stored ids make duplicates harmless. Herofab retries for about two days, 10 attempts in all, and disables an endpoint after three days without a successful delivery. A workspace can hold up to 10 endpoints.
Herofab API, with webhooks reference
How do you add product images to Shopify in bulk?
Shopify takes bulk product images through a product CSV with public image URLs or through its Admin API. In a CSV, each image takes one row under the same product handle, the URL must be https with no password, and Shopify downloads and re-uploads the file during the import. Shopify allows up to 250 images on a product, shown in ascending order of image position.
The API route suits work that repeats. Herofab's Shopify guide uses three small Node.js files: one starts a job from each product's main image, and another receives the signed webhook and adds the result with Admin GraphQL version 2026-10. The route is code a developer runs, not an installed app.
The recipe uses a staged upload because a Herofab download link is short-lived, which also makes those links unsuitable for a CSV. It attaches images with productUpdate and its media argument, which adds media and keeps existing images. Shopify's productSet replaces list fields and can delete images that are not in the request.
Add images to Shopify products with the API
How do you add product images to WooCommerce in bulk?
WooCommerce takes bulk product images through its CSV importer or its REST API. In a CSV, the Images column holds comma-separated URLs, and the first becomes the featured image. Where a host blocks the download, the file goes into the Media Library first.
WooCommerce's guide gives no fixed row limit, because import size depends on the server. It recommends splitting a large CSV into smaller batches, testing on a staging site and backing up first.
Herofab's WooCommerce guide offers a single-file WordPress plugin that starts a job from a product's main image and receives the signed webhook at its own REST route. Action Scheduler then downloads the result and adds it to the end of the gallery. A second recipe does the same from outside WordPress with the REST APIs; there, the images list replaces all product images, so it must include the ones to keep.
WooCommerce plugin for product images
What does it cost to create images for 1,000 products?
Creating one image each for 1,000 products costs about $200 with AI credits and about $12,850 to $30,000 with a per-image studio at listed volume rates. The AI figures exclude source photos and review time. Prices were read in October 2026, and the guide What AI product photography costs compares tools.
| Route | Calculation | Cost |
|---|---|---|
| AI credits, Product studio | 1,000 × 4 = 4,000 credits, within the Studio plan's 5,000 | $199 |
| AI credits, allowing for reruns | 1,000 ÷ 0.792 = 1,263 outputs × 4 = 5,052 credits: Studio plan $199 plus 100-credit pack $12 | $211 |
| Editing existing photos, Pixelz | $95 plan plus 1,000 × $0.95 starting price | $1,045 |
| Per-image studio, ProShot Media | 1,000 × $15 less 15%, plus $100 setup for one product type | $12,850 |
| Per-image studio, ProductPhoto.com | 1,000 × $30 for on-white photos at 51 or more | $30,000 |
When is bulk automation the wrong method?
Bulk automation is the wrong method when the products differ more than the templates allow, or when a wrong image costs more than the work saved. High-value items, packs with legal text and one-off pieces should be handled one at a time, and, as an editorial rule of thumb, a catalogue under about 50 products rarely repays the time spent building a script.
Automation also needs a developer or a technical partner: the API routes above are code, and each one needs keys, a public HTTPS endpoint and someone to watch it. Poor sources are a further limit. No batch fixes a blurred photo, and AI fills in what the source does not show, so a back view should come from a back photo. A photo studio remains the better answer when source photos do not exist and cannot be shot in-house.
Checklist
- Write a one-page style sheet and an approved example for each template.
- Name source files by SKU, colour and view before processing.
- Test 20 products per template and fix settings before scaling.
- Check every main image, then sample at random across colours and categories.
- Test a CSV import or API write on a staging store or one product first.
Sources
- GS1 Product Image Standard, Release 5.1, September 2026
- Google Search Central — Image SEO best practices
- Shopify Help Center — Using CSV files to import and export products
- WooCommerce — Product CSV importer and exporter
- Pixeleyes Photography — E-commerce fashion photography at scale
- ProShot Media — Services and pricing
- ProductPhoto.com — Pricing
- Pixelz — Pricing
Checked 31 October 2026. Rules change; the official pages are the final reference.
