Workflows

    Batch Image Edits: One Instruction, Forty Assets

    The instruction that survives forty different photos, the cheap model that makes a bad first pass affordable, and how much of the batch to actually check.

    Versely Team7 min read

    Forty product photos need the same fix — a drop shadow, a background swap, a consistent crop — and the instinct is to write forty small variations of the same instruction, one per photo, because each photo is a little different. That instinct is backwards. The instruction that survives a batch is the one written as if it will never see any specific photo at all, and the moment it starts describing the picture instead of the edit, it stops generalizing to picture two.

    One instruction, not forty

    The actual job isn't "edit this image" repeated forty times with forty different judgment calls. It's "apply this exact transform," issued once per asset with the transform held constant. Those read as the same task and they aren't — the first invites the instruction to drift toward whatever's in front of it, and the second treats every asset as an instance of the same rule.

    "Add a soft shadow under the red ceramic mug" is a description of one photo wearing the shape of an instruction. It breaks the instant asset two isn't a red ceramic mug. "Add a soft, realistic drop shadow beneath the product, matching the existing light direction" describes a transform that doesn't know or care what the product is — it reads the photo it's given rather than the photo it was written against, and that's the entire difference between an instruction that scales and one that only ever worked on the example someone was looking at when they wrote it.

    That difference is also most of what batch generation means as a term, rather than just "generating more than one thing." A batch isn't defined by the count — it's defined by one instruction being asked to hold across every item in the set without being rewritten per item. The moment you're editing the prompt between assets, you've quietly stopped batching and started doing forty individual edits that happen to share a folder.

    What makes an instruction generalize, concretely

    The rule of thumb: anything in the instruction that would need to change if you swapped the photo is a bug, not a detail. Product name, color, background description, framing specifics — all of it belongs to the asset, not the edit, and none of it should be in the prompt. What survives the swap is the operation and its constraints: match the existing light direction, preserve the original background, keep the subject's edges clean. Write the instruction against three or four visually different assets from the batch before running it on all forty, specifically picking the outliers — the darkest photo, the busiest background, the one shot from an unusual angle — because those are exactly where a description that quietly assumed "product roughly centered on white" falls apart first.

    Why the cheap model is the right default for the first pass

    A batch is a volume operation before it's anything else, which makes the first pass the wrong place to reach for a premium model. Run the cheapest capable option across all forty, review what comes back, and only escalate the failures — reversing that order means paying premium rates to discover the same instruction problems a cheap model would have surfaced for a fraction of the credits. Versely's catalog has real headroom here: Z-Image-Turbo, Flux 2 Klein 4B Base Edit, HiDream O1 Image Edit and Pruna Image Edit all bill at a single credit per call, which turns a forty-asset first pass into a forty-credit decision rather than a four-hundred-credit one.

    Cheap doesn't mean underpowered here, and it's worth knowing why. Z-Image-Turbo's own paper describes a distillation scheme built specifically for volume: sub-second inference latency on an enterprise-grade H800 GPU at just 8 NFEs, and compatibility with consumer hardware under 16GB of VRAM. That's an architecture designed to be run many times cheaply, not a corner cut from something more expensive — which is exactly the profile a batch pass wants. Versely's cheapest AI image models and the quality-per-credit report are worth checking before committing a whole batch to any one option, since price and output quality don't move together in lockstep across the catalog.

    The QA sample size that actually catches drift

    Checking one result out of forty tells you almost nothing, and it's worse than that — left to instinct, the one you check is usually the best-looking thumbnail in the grid, which is the least informative sample possible. Checking all forty defeats the point of batching in the first place. The useful middle is a stratified sample: the first two or three results (catches an instruction that was broken from the start), a handful pulled at random from the rest, and specifically the outliers — the assets most different from whatever "typical" photo the instruction was written and tested against, because a generalizing instruction fails at its edges before it fails in the middle.

    For a batch of forty, eight to ten checked — roughly a quarter — catches most systemic failures without re-reviewing the whole set by hand. If that sample comes back clean, the untested majority is a reasonable bet to trust. If even one shows drift, treat it as a signal about the instruction rather than a one-off to quietly fix — the other thirty-nine that share the same instruction almost certainly share whatever assumption broke on that one. Checking a proper spread, not just a count, is what separates a real QA pass from a confidence trick. See Versely's best image editing model comparison for how different models handle edit consistency across a run, which is a different axis from raw output quality and matters more for batch work.

    Where dedicated batch infrastructure enters the picture

    Looping one instruction across forty individual calls is a workable pattern at this scale, but it isn't the only shape batch editing takes in the market. Recraft's API exposes batch jobs and asynchronous processing as first-class primitives alongside its prompt-based editing, background removal, inpainting and outpainting tools — submit the whole set as one job and poll for completion, rather than issuing and tracking forty separate requests. That's a genuinely different operational tier, worth knowing exists as a category even outside whichever specific tool ends up doing the work, because it changes what "one instruction, forty assets" costs in orchestration overhead, not just in credits.

    A Versely walkthrough

    Budget before you run, then execute the same instruction across the set:

    "I have 40 product shots that all need a soft drop shadow added beneath the product, matching each photo's existing light direction. Use hidream-o1-image-edit for the first pass — check the cost first."

    That prompts estimate_cost with a single line item — HiDream O1 Image Edit, count 40 — which returns the full batch at 40 credits against the current balance before anything runs, the same pricing logic used for the real charge. Confirming that, generate_image_from_image runs once per asset with the identical instruction text and only the image_url swapped between calls — the same discipline covered above, just executed rather than described. Pull a stratified sample of the results — the first few, a random handful, and whichever source photos looked most different from the rest — before calling the batch done, and treat any drift in that sample as a reason to rewrite the instruction rather than patch the one asset it broke on.