If you are opening a PSD, changing the name layer, exporting, and repeating, you already know this does not scale. The question is what to do instead - and the honest answer starts with something most articles on this subject skip.
Photoshop can already do this. It has a data-driven graphics feature that most people who own it have never used. It is worth knowing about, because for some jobs it is the right tool and you do not need to buy anything.
It is also worth knowing where it stops working, because for personalized email it stops working quite early, and for reasons that are structural rather than a matter of effort.
First: the Photoshop feature you may not know about
Photoshop has Variables and Data Sets, which turns a layered file into a template driven by a spreadsheet.
The workflow, roughly:
- Define variables. Under
Image > Variables > Define, you pick a layer and assign it a variable - Text Replacement for a text layer, Pixel Replacement for an image layer, Visibility to show or hide it. - Import your data. Under
Image > Variables > Data Sets, import a CSV whose column headers match your variable names. Each row becomes a data set. - Export.
File > Export > Data Sets as Filesproduces one file per row.
That genuinely works. Point it at a CSV of five hundred names and it will produce five hundred images. InDesign has an equivalent in Data Merge, which is better suited to documents and print.
If your job is producing a batch of files - name badges to print, certificates to hand out, social assets to upload - this is a legitimate answer and you already have the licence.
Where it stops working for email
Four problems, and the fourth is the one that catches people out.
1. It produces static files, and email needs a URL. An email cannot contain an image file; it contains an image address. So exporting fifty thousand PNGs is not the end of the job, it is the beginning of a different one.
2. Which leads to the hosting and matching problem. You now have image_00001.png through image_50000.png sitting in a folder. They need to live somewhere public with a stable URL, and every recipient's email needs to point at the right one. That means uploading fifty thousand files, building a mapping of recipient to filename, importing that mapping into your email platform as a custom field, and referencing it in the image tag. This is the step nobody anticipates, and it is more work than the design was.
3. It is desktop-bound and slow. Rendering runs on one machine, in one application, at whatever speed that machine manages. Thousands of exports takes hours during which you cannot do much else with the computer, and it cannot be triggered by a workflow, a form submission, or a new CRM record. Someone has to sit down and run it.
4. Any change means re-rendering everything. This is the killer. A typo in the header, a wrong price, a client changing their logo the day before send - all of it means re-exporting the entire batch and re-uploading every file. On a live campaign, that is not a small correction, it is redoing the whole job.
There is a fifth, quieter problem: the image is frozen at export. It shows whatever was true when you rendered it, which for anything time-sensitive - a countdown, a price, stock levels - means it is wrong by the time somebody opens the email.
The alternative: generate at request time from a URL
The other approach inverts the model. Instead of producing files in advance, you build one template and produce an address that renders the image when it is requested.
https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name=Sarah&company=Acme
In an email, the values become merge tags, so one image tag serves every recipient:
<img src="https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name={{ first_name }}"
alt="A message for {{ first_name }}" width="600" />
Read against the four problems above:
- No files. Nothing to export, host, or upload.
- No matching. The recipient's own data populates the URL, so there is no mapping to build.
- Nothing to run. No machine, no batch, no waiting. The campaign is ready when the template is saved.
- Changes propagate. Fix the typo in the template and every future render is correct. There is no re-export because there was never an export.
And because the image is generated when it is opened rather than when it was sent, it can reflect what is true at that moment rather than at build time.
What you lose
Worth being straight about the trade-offs, because they are real.
Fine-grained design control. Photoshop is a professional image editor with two decades of features. A template-based generator handles text, images, colours, and layout well; it will not do complex compositing, advanced masking, or elaborate layer effects. For most email graphics that is irrelevant. For some, it matters.
Working offline. Photoshop runs on your machine. A rendering service is a network dependency.
Files you can hand over. If a client wants the layered source, or an asset needs to go to a printer, Photoshop is what produces that.
The sensible arrangement for most teams is both: design the visual identity and any complex artwork in Photoshop, then rebuild the repeating, data-driven pieces as templates in a generator. You are not replacing the design tool, you are removing the production task it was never meant to do.
When Photoshop is still the right answer
Do not over-correct. Stay in Photoshop when:
- You need files as the deliverable - print, handover, upload to a platform that will not take a URL
- The batch is small and one-off - a hundred name badges for an event next week does not justify new tooling
- The work needs genuine image editing - retouching, compositing, effects
- It is a one-time job that will not repeat
Move to generation when the images go into emails or web pages, when the volume is large or recurring, when the data changes, or when someone other than a designer needs to run it.
Moving an existing Photoshop template across
If you have a working PSD, the port is straightforward:
- Export the background and any fixed artwork as a single flattened image. Everything that never changes becomes one layer.
- Note the variable elements - which text sits where, at what size, in which font, and where images are placed.
- Rebuild in the template editor, using the flattened export as the background and adding dynamic layers for the parts that change.
- Match the fonts. If the brand font is not available, choose one with the same structure - serif or sans, similar weight and width.
- Test with your longest real values. Photoshop let you nudge text by hand when a name overflowed; a template needs to handle that automatically, so build with the long case.
Half an hour for a design that already exists.
Frequently asked questions
Can Photoshop generate personalized images from a spreadsheet? Yes. Variables and Data Sets, under the Image menu, let you define replaceable text and image layers, import a CSV, and export one file per row. InDesign's Data Merge does the equivalent for documents.
Why is that not enough for email campaigns? It produces static files, and email needs URLs. You then have to host every file publicly, build a mapping of recipient to filename, and import it into your email platform. It also runs on one desktop machine, cannot be triggered automatically, and any design change means re-exporting and re-uploading the entire batch.
What is the alternative to editing a PSD per recipient? A template-based generator that produces an image URL. One template, one image tag with merge tags in it, and each recipient's email renders their own version when they open it. No files, no hosting, no per-recipient work.
Do I have to stop using Photoshop? No, and most teams should not. Design the artwork and brand assets in Photoshop, then rebuild the repeating data-driven pieces as templates. You are removing a production task, not replacing the design tool.
How long does it take to convert an existing PSD? About half an hour. Flatten everything static into a background image, then recreate the variable text and image layers in the template editor.
What about complex effects and compositing? Template generators handle text, images, colour and layout. They do not replicate advanced Photoshop compositing. If a graphic genuinely needs that, build it in Photoshop and use the output as a static background layer in your template.
Is it faster than batch exporting? Substantially, because there is no export step at all. A batch of fifty thousand takes hours in Photoshop plus the upload; with URL generation the campaign is ready as soon as the template is saved.
What happens when I need to fix a mistake after sending? With exported files, you would have to re-render and re-upload everything, and already-delivered emails would still point at the old files. With a template, correcting it fixes every future render immediately.
Try porting one template
The useful test is not a comparison, it is a conversion. Take one PSD you currently open repeatedly, flatten the static parts, rebuild the variable ones as a template, and put the URL in a real email. That takes about half an hour and tells you whether the trade-offs land for your work.
OKZest generates personalized images from a single template as a URL - no exporting, no hosting, no per-recipient files - and works with any email platform that accepts a custom image URL.
Create a free account, no credit card required.
Related reading: put every recipient's name inside your email image for the no-design-skills route, generating images from a CSV via the API, and running campaigns without a design team.