Photoshop has had batch automation since the 1990s, which is long enough for the advice about it to have gone stale twice over. Search for a tutorial and you will mostly find someone recording an action, running File > Automate > Batch across a folder, and declaring the job done.
That works beautifully for resizing and watermarking. It falls apart the moment the thing you want to vary is inside a smart object — which is the entire premise of a mockup template.
Here is what actually works, in the order you should try it.
First, the distinction everything else depends on
Two different things get called "batching", and confusing them wastes an afternoon.
| Varies | Right for | |
|---|---|---|
| Batch (File > Automate > Batch) | The document — it opens each file in a folder and runs the same action on it | Resize, convert, watermark, flatten |
| Data Sets (Image > Variables) | The contents of one open document | Mockups: one template, many designs |
A mockup template is a single document you never want to close. The design changes; the shirt, the wall, the shadow and the lighting all stay exactly where they are. That is a Data Sets job, not a Batch job.
Almost every "Photoshop batch mockup" tutorial that leaves you frustrated is one that reached for Batch.
Approach 1: Actions, and the wall you hit
Record an action anyway — you will need it later, and it teaches you where the limit sits.
- Open your template. Open the Actions panel (Window > Actions), create a new set, hit record.
- Double-click the smart object layer's thumbnail, or use Layer > Smart Objects > Replace Contents, and pick a design file.
- Save a flattened copy: File > Save As, JPEG, into an output folder.
- Stop recording. Undo everything back to the original state.
Play the action and it does exactly what you recorded — including placing the same design file again. The path is baked into the recorded step.
There is one escape hatch: the small square to the left of the Replace Contents step in the Actions panel. Switch it on and the action pauses there to show you the file dialog. That turns a hundred-image run into a hundred file pickers, which is faster than doing it manually and nowhere near automation.
So what? Actions alone give you repeatability, not variation. Use them for the fixed part of the job — the export settings, the resize, the sharpening — and let something else supply the changing part.
Approach 2: Variables and Data Sets, the real answer
This is the feature almost nobody uses, and it is the one built for exactly this problem.
Step one — define the variable. With the template open, go to Image > Variables > Define. Pick your artwork layer from the Layer dropdown and tick Pixel Replacement. Give it a name with no spaces, like artwork. The Method dropdown (Fit, Fill, As Is, Conform) decides how a replacement image that is not the same shape as the layer gets handled — Fit is the safe default, Conform stretches and will make you unhappy.
You can define more than one. Text Replacement swaps the contents of a type layer, which is how you get the product name burned into a listing image. Visibility turns a layer on or off per row, which is how one template covers three colourways.
Step two — build the data set. A CSV with one column per variable and one row per output:
artwork
C:\designs\mountain-print.jpg
C:\designs\coastal-print.jpg
C:\designs\botanical-print.jpg
Then Image > Variables > Data Sets, click Import, choose the CSV, tick "Use First Column For Data Set Names" so your exported files are named sensibly rather than Data Set 1.
Step three — export. File > Export > Data Sets as Files. Choose the output folder, choose the file naming, run it.
And now the part every tutorial forgets to mention: it writes PSDs. Only PSDs. There is no JPEG option, and this surprises everyone the first time. The fix is a second pass — File > Scripts > Image Processor, point it at the folder of PSDs, tick JPEG, set your quality and pixel dimensions, run. Two commands rather than one, and it is fully unattended.
The smart object caveat, stated honestly
Pixel Replacement swaps the pixels a layer is displaying. If your artwork sits on a flat, straight-on layer — most wall art, poster and flat-lay templates — it behaves exactly as you would hope.
Templates that fold, curve or wrap are a different matter. A crumpled t-shirt or a mug template carries a displacement map and a warp inside the smart object, and how faithfully those survive a replacement varies by how the template was built. Some come through perfectly; some do not.
Do not take anybody's word for this, mine included. Run three images through your specific template and look at the output at 100% before you queue two hundred. Ten minutes of checking is cheaper than discovering the wrap is wrong after you have uploaded a whole collection. Our notes on how to build a mockup template cover building a smart object that survives this cleanly.
Approach 3: Scripting, and when it earns its keep
Photoshop scripts (ExtendScript, or the newer UXP plugin route) can do everything above plus the thing Data Sets cannot: make decisions.
Worth it when your logic sounds like this:
- Use the portrait template for portrait artwork and the landscape one for landscape.
- Render every design against every template, except the combinations that do not make sense.
- Name each output from a product code that lives in a spreadsheet.
- Skip anything already rendered.
Not worth it when your logic sounds like "every design into every template". Data Sets already do that, and a script that reproduces them is a weekend spent rebuilding a feature you own.
Where the desktop approach stops making sense
There is nothing wrong with any of the above. There is one hard limitation, and it is not technical: the batch owns Photoshop while it runs. You cannot design during it. You cannot answer a customer message inside it. Your machine is a render farm for the duration, and if it sleeps, updates, or runs out of scratch disk halfway through, you restart it.
That is a fine trade at fifty images. At five hundred it is a working day. At two thousand — twelve designs against a dozen templates and a few colourways, which is an ordinary product launch — it stops being a trade at all.
The arithmetic that matters:
| Batch size | Photoshop, at ~4s/image | What you are doing meanwhile |
|---|---|---|
| 50 | ~3 minutes | Waiting |
| 500 | ~35 minutes | Not using Photoshop |
| 2,000 | ~2¼ hours | Hoping nothing crashes |
Server-side rendering removes the constraint rather than speeding it up: the job runs off your machine, at the template's native resolution, and hands back a ZIP. That is what PSDmate's bulk mockup generator does with the same PSD files you already own — no re-authoring, no subscription to a template library, no Photoshop open. Our Photoshop actions versus bulk mockup tools comparison puts numbers on the crossover point.
What should I do?
- Record the fixed half as an action — resize, sharpen, export settings. It is reusable regardless of which approach you pick.
- Define one Pixel Replacement variable on your template's artwork layer and export three test rows. Inspect them at 100%.
- Add the Image Processor pass to turn the exported PSDs into listing-ready JPEGs. Check the dimensions against Etsy's image requirements.
- Time one run honestly — start to finish, including the fixing. Multiply by your real launch volume.
- Move it off your desk when that number crosses an hour. Not before; there is no prize for outsourcing a three-minute job.
The tutorial you were looking for is Variables and Data Sets, followed by Image Processor. The thing nobody tells you is that it exports PSDs, and that the batch borrows your entire application while it runs.
Frequently asked questions
Can a Photoshop action replace a smart object with a different design each time?
Not on its own. An action records the file path you chose when you recorded it, so replaying it places that same file again. You get variation by toggling the dialog switch beside the Replace Contents step — which stops the batch for a manual file pick — or by driving the swap with Data Sets or a script instead of an action.
What is the difference between Batch and Data Sets in Photoshop?
Batch runs one action across a folder of files that are opened in turn, so it varies the document. Data Sets keep one document open and vary its contents from a spreadsheet — different image, different text, different layer visibility per row. Mockups need the second behaviour, because the template stays the same and the artwork changes.
Why does File > Export > Data Sets as Files only give me PSDs?
Because that is the only format the command writes. It is not a bug and there is no setting for it. The normal fix is a second pass: point File > Scripts > Image Processor at the folder of exported PSDs and have it write JPEGs at the size you actually list with.
How long should a batch of mockups take in Photoshop?
Budget roughly two to six seconds per rendered image on a modern machine, and considerably more for large templates with heavy smart filters or 4000 px canvases. A hundred images is a coffee break. A thousand is an afternoon during which you cannot use Photoshop for anything else, because the batch owns the application.
Is scripting worth learning for mockup automation?
Only if your variation is conditional — different templates per product type, skipping combinations that do not apply, naming files from a database. If every design simply goes into every template, Data Sets get you there without writing a line of code, and a hosted renderer gets you there without Photoshop running at all.