PSD → PNG is never “just a format change.” It is where layer semantics, ICC intent, and straight alpha meet ops deadlines. This guide is written for designers and delivery leads who must pick a 2026 Mac batch stack—sips, ImageMagick, or a specialized CLI—and prove acceptance on a stable remote M4 worker. You will get PSD input risk points, a comparison table (quality, ICC, transparency, batch speed), remote directory and naming rules, a sign-off checklist including byte thresholds and sRGB / Display P3 policy, FAQ, and copy-paste commands.
Input PSD risk points (before any CLI)
CLIs only rasterize what the file actually contains. Treat every PSD as a legal contract between design and automation.
- Layer visibility & comps: Hidden groups, alternate artboards, and Layer Comps that are not the active export state will produce “wrong” PNGs that still pass a script.
- Smart Objects & resolution: Linked or embedded SOs may rasterize at a different effective PPI than the canvas; batch exports can look soft without a documented scale factor.
- Blend modes & adjustment stacks: Some modes survive flattening differently across engines. Freeze a golden trio of PSDs (flat UI, heavy shadow, hairline type) and compare pixels after each toolchain upgrade.
- Color space drift: A Display P3 working document exported without an explicit conversion step is not “sRGB” because the filename says PNG. Align language with your wider sRGB vs Display P3 checklist.
- Alpha semantics: Masks, clipped layers, and semi-transparent white “fringe” RGB under alpha will show up only on dark UI—catch them in QA, not in production.
Reality check on sips: sips is excellent for ICC-aware work on raster formats macOS understands well (PNG, JPEG, TIFF, HEIC). It is not a universal layered-PSD batch renderer. For most studios, the honest split is authoring export (Photoshop, Affinity, or an ImageMagick build with PSD readers) followed by sips normalization where policy requires.
Tool comparison: quality, ICC, transparency, batch speed
Use the table as a team decision record. “Quality” here means fidelity to the approved flatten, not artistic taste.
| Tool / path | PSD read / role | ICC & color | Transparency (alpha) | Batch speed (typical) |
|---|---|---|---|---|
| Photoshop / Affinity (batch, actions, DAM hooks) | Native PSD; best semantic fidelity | Explicit Assign vs Convert; embed sRGB per policy | Straight alpha when export settings match web spec | Medium; GUI or JSX; very predictable for design sign-off |
ImageMagick (magick) |
Rasterizes many PSDs; verify layer index [0] vs merged |
Use -colorspace sRGB, -profile with care; test P3→sRGB |
Check PNG32: vs PNG24:; validate fringe on #000 / #FFF |
High on M4 when I/O fits RAM; great for thousands of slices |
| sips (macOS) | Post-process rasters; not primary PSD engine | Strong for --matchTo / profile assignment on PNG |
Preserves alpha on PNG round-trips; watch unintended resize | Very high per file; ideal second stage |
Specialized CLIs (e.g. psd-tools, Sharp-based workers, custom Node/Python) |
Programmatic layer pickers; needs engineering tests | You must implement ICC same as front-end policy | Excellent when you need named layer → file maps | Depends on implementation; audit after dependency bumps |
After PNGs exist, lossless byte shaving and ICC chunk policy belong in the same delivery spec—see PNG metadata, ICC & lossless recompress on remote M4 so compression does not contradict color intent.
Executable command examples
Adjust paths and profiles to your repo; always dry-run on the golden trio first.
ImageMagick — flatten first PSD page to sRGB PNG with alpha:
magick "artboards/hero.psd[0]" -colorspace sRGB -strip "out/hero.png"
ImageMagick — scale to exact width, keep aspect:
magick "in/slice.psd[0]" -colorspace sRGB -resize 1200x -strip "out/slice-1200w.png"
sips — assign or match ICC on existing PNGs (post-export normalization):
sips --matchTo "/System/Library/ColorSync/Profiles/sRGB Profile.icc" out/*.png
sips — inspect dimensions (acceptance gate in shell):
sips -g pixelWidth -g pixelHeight -g format out/hero.png
Batch loop (zsh) — normalize every PNG in a folder:
for f in out/*.png; do sips -s format png "$f" --out "${f%.png}.normalized.png"; done
For very large frames and overnight queues, the same host discipline applies as in batch 4K PNG export on remote Mac M4: fixed macOS baseline, documented RAM/thermal headroom, and no sleep during jobs.
Directory structure & naming on remote M4
A remote Mac is only repeatable when folders read like a manifest.
- Layout:
sources/psd/(read-only handoff),work/png-raw/(first raster),dist/web-srgb/(signed-off),qa/previews/(dated browser or Figma overlay captures),logs/(tool version + flags per run). - Run IDs:
20260408T1030Z-im-v7.1.1/underwork/so you can diff outputs when ImageMagick updates. - Filename tokens:
{project}-{screen}-{variant}-w{width}-srgb.png— example:checkout-hero-light-w1440-srgb.png. Include-p3only when the ticket explicitly allows wide-gamut masters indist/. - Manifest: One
manifest.csvper run:relpath,pxW,pxH,bytes,colorIntent,sha256,im_version.
Acceptance checklist: byte thresholds, sRGB & Display P3
Publish these gates in the ticket; rejections should cite a row, not a vibe.
| Check | Rule of thumb (tune per product) | Pass |
|---|---|---|
| Dimensions | Match design grid ±0 px; @2x/@3x documented | sips -g pixelWidth matches spec |
| Byte ceiling | e.g. hero ≤ 800 KB, icons ≤ 120 KB (web); stricter for mobile | wc -c under threshold or flagged for manual opt |
| sRGB delivery | Converted, not merely tagged; embed policy matches README | Profile check + visual on sRGB monitor |
| Display P3 masters | Only in sources/ or labeled -p3 dist if allowed |
No accidental double conversion |
| Alpha | Straight alpha; no halos on #FFFFFF / #0B0B0B | Spot + 1% random sample in batch |
FAQ
Q: Can we skip Photoshop and rely on ImageMagick for every PSD?
A: Only after parity tests on real files. IM may not reproduce every comp; keep Photoshop or Affinity as the appeals court for tricky blends.
Q: Why do colors still shift after -colorspace sRGB?
A: Missing or double profiles, browser CSS assumptions, or masters still in wide gamut. Re-run the same ICC policy you documented against the sRGB / Display P3 checklist linked earlier in this guide.
Q: Is sips --matchTo the same as “convert to sRGB” in Photoshop?
A: Not always equivalent pixel-for-pixel. Pick one authoritative conversion stage (usually authoring) and use sips only for alignment with written policy.
Q: Batch is fast but some PNGs balloon in size—what then?
A: Separate lossless (oxipng) from lossy palette (pngquant) decisions; document which SKUs allow which, and reuse the byte / ICC thresholds from the metadata & lossless recompress playbook linked above.
Summary
PSD batching fails in the gaps: wrong comps, unclear ICC intent, and alpha that only breaks on dark mode. Map authoring export first, then use ImageMagick for throughput and sips for macOS-native profile work on rasters. Lock folder layout, run IDs, and manifest fields on your remote M4 so every release answers “which tool version flattened this?”
Next steps: rent a remote Mac for batch export
Offload long PSD→PNG queues to a dedicated Mac node so laptops stay free for creative iteration. Browse the MacPng homepage, compare packages and pricing, and read the help center (no login required) for SSH/VNC setup. For more design-delivery playbooks—batch PNG, transparency, and Figma/Sketch/Affinity parameters—open Tech Insights (no account needed).
Run PSD-derived PNG batches on a stable M4 host
Same macOS baseline, documented ICC rules, and overnight throughput—ideal when your team outgrows ad-hoc local exports.