Marketing and product teams love Lottie for lean vectors—but stores, ad networks, and legacy CMS stacks still demand PNG sequences for stickers, splash handoffs, and texture atlases. The hard part is not exporting once; it is making hundreds of frames reproducible across renderers, FPS policies, and sRGB intent without silent drift. This article is a 2026 delivery matrix: when to sample at 24 vs 30 vs 60 FPS, how to name and validate frames, which acceptance thresholds catch blank or tinted passes, and how a remote Mac mini M4 node turns the job into a boring batch.
On this page
① Decision matrix: PNG sequence vs live Lottie
Use the matrix below before you lock a pipeline. If any column reads “high risk” for your channel, bias toward PNG strips with explicit FPS and a manifest—even if you still ship a .json for in-app use.
| Scenario | Live Lottie | PNG sequence |
|---|---|---|
| Strict pixel grid (games, atlases) | Renderer-dependent sub-pixel filtering | Preferred — freeze WxH and mip policy per frame |
| Store / ad network asset specs | Often disallowed or sandboxed | Preferred — upload predictable rasters |
| Color-critical brand marks | Skia/CoreGraphics/WebGL paths may diverge | Preferred — pair with ICC policy (see below) |
| Editable motion iterations | Preferred — small JSON, fast tweaks | Re-render cost; automate on a worker |
| Long loops (>6s) at 60 FPS | Smallest on wire | Heavy disk; require byte budget per frame |
② Pre-export checks: FPS, duration, alpha, and blur
Sequences fail QA for boring reasons: off-by-one frame counts, half-transparent mattes, and motion blur baked differently between AE and runtime. Treat the After Effects (or design tool) comp as the contract, then prove the JSON and the rasterizer agree on work area and time remapping.
- FPS lock: pick one of
24(cinema + many social masters),30(web + NTSC-friendly), or60(UI micro-interactions, games). Never “export at 24” from a 30 FPS comp without documenting which frames disappear. - Frame math: expected frames =
ceil(duration_sec × export_fps)for half-open timelines; some tools emit an extra tail frame—your gate should allow ±0 against the spec, not “close enough”. - Alpha hygiene: premultiplied vs straight alpha must match the engine reading the strip; spot-check RGBA on #000 and #FFF plates exactly like static PNG reviews in the batch transparency checklist.
- Effects honesty: plugins unsupported by Bodymovin/Lottie should be flattened before raster export, or you will chase ghosts between JSON preview and PNG truth.
③ Batch processing parameters, naming templates, and validation thresholds
Publish these parameters beside the job folder so a remote worker (or teammate) can re-run the same bytes six months later.
Export FPS tiers (executable defaults)
| Tier | FPS | When to use | Watch-out |
|---|---|---|---|
| A — Cinematic | 24 |
Brand films, cross-region social masters | Scrolling UI on 120 Hz displays still samples at 24; test strobe |
| B — Web product | 30 |
Hero loops, onboarding coach marks | Match player clock to avoid duplicated frames in video mux |
| C — Crisp micro-motion | 60 |
Icon pulses, game VFX sheets | Byte budget explodes—enforce per-frame max_bytes |
Naming template (zero-padded)
Adopt a single template per repository—avoid OS sorting disasters where frame-2.png sorts after frame-19.png.
- Template:
{product}_{animation}_v{semver}_f%05d.png— example:payflow_onboarding_v1.4.2_f00037.png. - Start index: choose
0or1globally; FFmpeg, game engines, and compositors disagree—document once inREADME_JOB.md. - Locale tokens: append
_en-USonly when the same motion differs per locale; never encode marketing copy inside filenames if CMS slug rules forbid it.
Batch validation thresholds (promote / quarantine)
These are practical YAML-friendly numbers you can wire into shell, Make, or an OpenClaw-style watcher on a remote Mac.
| Gate | Threshold | Tooling hint (macOS) |
|---|---|---|
| Dimensions | Width/height ±0 px vs spec sheet | magick identify -format "%w %h\n" or sips -g pixelWidth -g pixelHeight |
| Frame count | Exactly N from timing contract |
find . -name "*.png" | wc -l scoped to one job folder |
| Blank / stuck frame | min_bytes ≥ 1_200 (tune per style) |
stat -f%z; pair with perceptual hash if needed |
| Runaway weight | max_bytes ≤ 800_000 per frame @1080p UI tier |
Catch accidental 16-bit writes or uncompressed giants |
| Alpha presence | Expect rgba vs rgb per SKU |
magick identify -format "%[channels]\n" |
# Example: scan one inbox for dimension drift (zsh)
spec_w=1080 spec_h=1080
for f in inbox/*.png(N); do
read w h <<<$(magick identify -format "%w %h" "$f")
[[ "$w" == "$spec_w" && "$h" == "$spec_h" ]] || print "FAIL $f ${w}x${h}"
done
For lossless tidy-up after QA passes, reuse the same ICC discipline you apply to static marketing PNGs in the ICC metadata and lossless recompress guide—after pixel gates, never before.
④ Cross-software consistency: Lottie JSON vs raster truth
Lottie players disagree in subtle ways—layer mattes, merge paths, and Gaussian blurs are frequent culprits. Your acceptance plan should assume one pinned raster path per SKU, not “whatever previewed in the browser yesterday”.
- Renderer lockfile: record AE + Bodymovin (or toolchain X) semver, canvas scale, and background color in
manifest.jsonlalongside sha256 per frame. - sRGB contract: decide whether PNGs must embed
IEC 61966-2.1, must be untagged sRGB, or may carry Display P3—then enforce with the same language as static exports in the sRGB vs Display P3 checklist. - Design handoff parity: align naming, color tokens, and export boxes with the broader Affinity / Sketch / Figma batch PNG parameters workflow so motion strips sit next to stills without special cases.
⑤ Failure modes and retry policy
Batch jobs fail intermittently when thermal throttling, font caches, or headless GPU paths hiccup. Treat retries as part of the spec.
- Quarantine first: move failing ranges to
quarantine/frames_120-140/with stderr attached—never overwrite passingout/trees. - Backoff: sleep
2^nseconds capped at 120s between rerenders; cap total attempts at 5 unless a human toggles a breaker. - Partial rerender: only re-run the failed index span and splice into the manifest—full recomposites waste GPU minutes on M4 clusters.
- Automation hook: mirror the logging spirit from OpenClaw PNG QA batch check (JSONL rows per frame: bytes, WxH, tool version, pass/fail).
⑥ Summary
Lottie remains the editorial source, but PNG sequences are a manufacturing output. Lock FPS tier, freeze frame counts, apply a naming template, and promote frames only after dimension, byte, and alpha gates pass. Put the heavy raster passes on a dedicated remote Mac mini M4 so laptops stay interactive while manifests accumulate—same ops model as 4K still batches, just with more files and stricter ordering.
Next steps: rent a remote Mac M4 for Lottie → PNG batches
Open the MacPng homepage for platform context, then review rental and purchase options and pricing & nodes—no login is required to compare plans. Use Help & setup to bring a worker online, drop sequences into an inbox/out manifest layout, and keep QA gates identical across teammates. Browse more delivery matrices from Tech Insights when you wire stills and motion into one pipeline.
Batch Lottie rasterization & PNG QA on a remote Mac
Offload long PNG strip renders to a stable M4 host, pin tool versions, and promote only manifest-signed frames—ideal for stickers, atlases, and store packs that outgrow live JSON.