Language: EN
Start free

Product photos for a catalogue, made in batches

Create product photos for hundreds or thousands of products in batches: split the catalogue into templates, fix one set of settings per template, name every file by SKU, test a small run, then process the rest and check a planned sample. Publishing then runs through CSV import or a store API.

With Herofab Test one template with Product studio before running a batch.

  1. Split the catalogue into templates by product type, and secure one clean source photo per SKU.
  2. Name every source file by SKU, colour and view before any processing.
  3. Run 20 products per template, inspect every image and freeze the settings.
  4. Process the rest in batches and collect results through a webhook instead of polling.
  5. Review every main image and sample the remainder at a rate set in advance.
  6. Publish through CSV import or the store's API, then spot-check live product pages.
Black-dial watch with a mesh strap on white, three-quarter view
Source photo: Plain product photo. Made with Herofab · Packshot studio

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.

TemplateSource photo neededTypical image set
Bags, shoes, homewareOne front or three-quarter photo on a plain surfaceWhite-background main image, one styled scene
Tops, dresses, outerwearHanger or flat-lay front, plus back photo if a back view is soldGhost mannequin or on-model image, front and back
Jewellery and eyewearSharp close-up with controlled reflectionsMain image on white, close on-model image
Colour runs of one styleOne colour photographed, a real swatch for each other colourOne 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.

DecisionFix it asWhat drifts if it is not fixed
BackgroundOne value per templateGrids that look like several shops
AngleFront, three-quarter, side or top-downProducts that seem to change size
Product fillOne crop rule per templateThumbnails with uneven scale
ShadowSoft, none or reflectionMixed lighting across a category
Aspect ratioOne master, such as 1:1 or 3:4Cropped products in store grids
ModelOne saved model per lineA 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.

UsePatternExample
Internal mastersku_colour_view_sequenceTS1042_navy_front_01.jpg
Public web fileproduct-colour-view-skucotton-t-shirt-navy-front-ts1042.jpg
GS1 data exchangeGTIN_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 failedFailure rate is below (95% confidence)
309.5%
604.9%
1003.0%
3001.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.

StepHerofab API behaviour
UploadPOST /api/v1/assets: multipart JPEG, PNG or WebP up to 25 MB, an upload intent for large files, or an import from a URL
BatchPOST /api/v1/batches: up to 100 jobs, all or nothing if credits do not cover every job
VaryOne photo, one setting, 2 to 10 values, one job per value
ChainPOST /api/v1/chains: 2 to 5 steps, each output feeding the next tool
Safe retriesIdempotency-Key required: same key and body return the original request
CreditsHeld when the batch is created, charged per delivered image, returned for failed jobs
DownloadGET /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.

RouteCalculationCost
AI credits, Product studio1,000 × 4 = 4,000 credits, within the Studio plan's 5,000$199
AI credits, allowing for reruns1,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 Media1,000 × $15 less 15%, plus $100 setup for one product type$12,850
Per-image studio, ProductPhoto.com1,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

Checked 31 October 2026. Rules change; the official pages are the final reference.

Questions

In short.

Do I need a developer to process thousands of product photos?

For an API workflow, yes, or someone comfortable running a script and hosting a webhook endpoint. Herofab publishes recipes in Python, Node.js and PHP, but each needs keys and a server. A smaller catalogue can be handled through a tool's web interface, or by a studio.

What happens when one job in a batch fails?

On Herofab, a failed job reports a failure code and its credits are returned. The batch.completed webhook counts succeeded, failed and cancelled jobs, so a script can rerun only the failures. The all-or-nothing rule applies when the batch is created: if credits do not cover every job, no job is created.

Can I use the images already in my Shopify store as sources?

Yes, if the business has the rights to them. Herofab's Shopify recipe starts each job from the product's own main image. Photos from a supplier need the owner's permission first, and a low-resolution image is a weak source, so an audit should come before a batch.

Will a bulk run replace my existing product images?

Herofab's recipes add images and keep existing ones: on Shopify through productUpdate with media, and on WooCommerce by appending to the gallery. WooCommerce's REST images list and Shopify's productSet do replace content, so a custom script using those needs a backup first.

Related
Get started

Your next collection, shot this week.

20 credits at sign-up, no card required. Images made with free credits carry a watermark.