Teams still receive WebP from vendors, crawlers, or automated pipelines—then discover the downstream spec demands PNG for CMS, print-adjacent workflows, or legacy clients. This article is a 2026 delivery matrix for Mac-based design ops: when transcoding is acceptable, how lossy WebP limits what PNG can recover, how to protect transparency, how to lock sRGB, and how to enforce byte thresholds on a remote Mac mini M4 batch host so QA is reproducible instead of eyeballed once in Slack.
On this page
Pain points: why WebP→PNG is a policy problem, not a button
- Lossy WebP is not reversible. Decode preserves WxH but not discarded detail; blame often lands on PNG when WebP was already wrong.
- Alpha semantics differ. Straight versus premultiplied breaks soft edges; silent flatten drops transparency.
- ICC wanders. Without a written rule, Safari, Chrome, and Figma disagree—especially on wide-gamut displays.
- Volume needs gates. Use
statbyte caps and hashed manifests on a dedicated worker, not laptop thermals.
Align format strategy with the WebP / AVIF vs PNG delivery checklist; this page is the WebP exit ramp into PNG contracts.
Decision matrix: stay WebP, decode lossless PNG, or lossy-shrink PNG
| Signal in source WebP | Preferred handoff | Risk if you force PNG |
|---|---|---|
| Lossless WebP with alpha | Decode to PNG32; keep ICC policy identical to static masters | Low—bytes may rise; budget storage, not color science |
| Lossy WebP, photographic texture | Re-export from original PSD/AF/TIFF when possible | High—PNG will look “waxy” and no encoder flag fixes missing detail |
| Lossy WebP, flat UI with alpha | Decode then optional pngquant band if max_bytes fails |
Medium—watch banding on gradients; document quality range |
| Animation inside WebP | Keep WebP/APNG/GIF policy separate; do not pretend one PNG frame is the motion contract | High—motion QA is a different SKU than still decode |
Mirror sRGB rules from the sRGB vs Display P3 checklist; decode never auto-assigns ICC. If PNG must carry metadata, follow ICC-aware lossless recompress after decode to avoid double-stripping tags.
Pinned decode and promotion steps (remote M4 friendly)
Pin Homebrew versions on the worker; log dwebp -version and magick -version per job.
Step 1 — Lossless decode to PNG (libwebp)
dwebp -mt input.webp -o decoded.png
Default output is PNG with alpha retained; add -alpha_dither only when the WebP used quantized alpha and you accept smoother transparency noise. Use -pam for channel debug.
Step 2 — Decode with explicit color typing (ImageMagick 7)
magick input.webp -colorspace sRGB PNG32:handoff.png
Use PNG32 for RGBA; PNG24 only when alpha is provably absent.
Step 3 — FFmpeg path for odd containers
ffmpeg -y -i input.webp -c:v png -pix_fmt rgba frame_%05d.png
Use for odd single-frame containers; motion belongs in the FPS pipeline, not this decode.
Step 4 — Optional lossy fallback inside a written band
pngquant --quality=70-85 --speed 1 --skip-if-larger -f -o handoff-q.png handoff.png
If output grows, --skip-if-larger keeps lossless; log the branch in JSONL.
Step 5 — Inspect before promotion
magick identify -verbose handoff.png | egrep 'Geometry|Colorspace|Type|Properties:.*icc'
Fail palette-only output when soft alpha was promised; fail mystery ICC when the brief says strip profiles.
Remote Mac M4 volume threshold acceptance checklist
- Geometry lock: decoded WxH equals spec ±0 px; downscale only if the written brief allows it and you log the scale factor.
- Byte ceilings: at ≤1600 px long edge, common
max_bytesbands:≤ 350 KBlean,≤ 800 KBstandard,≤ 1.6 MBhero—tune to CDN and document. - Alpha composite test: overlay on
#FFFFFFand#0B0D12in the target browser; fringe halos fail the batch. - sRGB compliance: embed
sRGB IEC61966-2.1or strip with a README line—no guesswork. - Manifest: sha256 in and out, tool versions, pass or fail—match other PNG QA batches.
Citable thresholds and export settings
- pngquant band: default
70–85; tighten to75–90on skin-heavy art if banding shows. - WebP source control:
cwebp -losslessfor UI chrome;cwebp -q 85 -alpha_q 100as a first lossy preset. - Gate command:
test "$(stat -f%z handoff.png)" -le 800000for an eight-hundred-kilobyte cap—swap the number per SKU.
FAQ
Decode bloated bytes. Lossless WebP can beat PNG on noisy photos—plan storage or allow approved pngquant.
Neon on one monitor. Wide-gamut preview ignored the tag—fix viewer settings and the sRGB contract.
Next steps: MacPng for remote M4 batch workers
Visit MacPng, rent or buy, see pricing, and Help to bring an Apple Silicon worker online for overnight dwebp / pngquant sweeps. More matrices live in Tech Insights.
Offload WebP→PNG gates to a stable worker
Keep decode flags, ICC rules, and max_bytes checks consistent across folders while designers stay on Figma locally.