Precision Sprite Studio — Visual Guide

What each part of the interface does, and the workflows that cover most jobs. Open the app at index.html and import a sprite sheet — drop it anywhere, paste from the clipboard, or use Import image….
The four areas 1 · Import & detection 2 · Background 3 · Vectorization 4 · Alignment 5 · Views, timeline & export Common flows Keyboard

The four areas at a glance

All control panels live in one collapsible column on the right, in workflow order — the work area gets the full remaining width. Sections you rarely touch (Background, Vectorization, Alignment) start collapsed; click a heading to open it.

Precision Sprite Studio Import image… Open project… Save project status: Traced 7 frames. Sheet Editor Preview 1 2 3 ▾ IMPORT & DETECTION method · thresholds · Detect ▸ BACKGROUND ▸ VECTORIZATION ▸ ALIGNMENT ▾ FRAME PROPERTIES Crop · Offset · Scale · Duration Difference 2.1% · α 98.1% effective transform ▾ EXPORT Export folder… (remembered) SVG · PNG · APNG · Sheet ZIP · Project JSON · Split TIMELINE src | svg · 100ms · 2.4% 1 2 3 4 5 6 7 8
1Import & frame detection — how frames are found on the sheet (auto, grid, grouping, manual rectangles).
2Background — detected background color, eyedropper, tolerance, and the three transparency modes.
3Vectorization — presets, palette, temporal-coherence switches, and advanced tracing controls.
4Alignment — anchor strategy, reference frame, master canvas, stable region, auto-align.
5Center views — Sheet (detection rectangles), Editor (original ↔ SVG comparison), Preview (live playback).
6Frame properties — the selected frame's crop, offset, timing and accuracy metrics.
7Export — SVG / PNG / APNG / sheet / ZIP / project JSON / split-to-files.
8Timeline — every frame as a source|SVG thumbnail with duration, enable, reorder, multi-select.

1Import & frame detection

Drop a PNG / JPEG / WebP sheet anywhere, paste from the clipboard, or use Import image…. The image is kept at native resolution and never resampled. Then a detection method draws a rectangle around each frame:

Auto (whitespace) splits on empty columns/rows best for clean sheets Projection + grouping connected blobs, merged when closer than “Group distance” Uniform grid rows × cols — identical cells; use with “origin” anchor to keep motion Manual rectangles you drag each box — the only method that survives ground lines & particle FX

On the Sheet view, dashed gray = detected cell, solid amber = tight crop. Click to select, drag to move, drag corners to resize — any method's result is editable. Gap threshold = how many empty columns split two frames; Min area ignores dust; Group distance joins detached parts (a flying feather) into their frame; Crop padding adds margin around every crop.

2Background

The background color is auto-detected from the sheet's corners and borders; override it with the Eyedropper, widen or narrow what counts as background with Tolerance. The Mode decides what happens to background-colored pixels:

Preserve background stays a real color — no transparency Transparent — border-connected (default) outside removed; enclosed details (wing, eye) kept Transparent — all every background-colored region punched out

Knockout edges are alpha-matted: partially blended fringe pixels get fractional transparency with the background unmixed from their color, so there's no pale halo on dark backgrounds. Transparency always previews over a checkerboard.

3Vectorization

The Output switch at the top of this panel picks one of two products. Traced vector (SVG) — described below — rebuilds every frame as genuine path-based SVG; right for flat / cel / bold-color art. Original pixels — no tracing skips the tracer entirely: detection, knockout, alignment and timing still apply, and the PNG / APNG / sheet exports carry the source pixels untouched — pick it for painted, 3D-rendered or pixel-art sheets, which posterize under a flat-color trace (SVG export is unavailable in that mode).

In vector mode the pipeline is: build a color palette → assign pixels → extract pixel-exact contours → detect corners → simplify → fit Bézier curves.

Presets

PresetBehavior
Exact / Faithfulpixel-perfect polygons, no simplification — maximum fidelity
Clean Vectorremoves redundant points, silhouette visually unchanged (default)
Smooth Illustrationstronger smoothing and curve fitting for a drawn look
Customany manual change to an advanced slider switches here

Advanced controls

Simplify — how far a point may drift when removed (px) · Corner angle — turns sharper than this stay sharp · Smoothing — pre-fit contour relaxing · Curve error — max Bézier deviation · Min feature / Despeckle — drop tiny shapes & noise · Alpha threshold / Edge bias — antialiased edge cutoff and grow/shrink · Detail merge — similarity needed to unify a detail across frames.

Temporal coherence (anti-boil)

off — each frame decides alone color & outline flicker frame-to-frame on — shared palette + stabilized pixels + one canonical shape identical geometry in every frame

Shared palette — one quantization for the whole animation · Stabilize repeated details — pixels where most aligned frames agree are averaged; moving parts untouched · Consolidate repeated shapes — near-identical detail loops replaced by one canonical path (the main silhouette is exempt, so poses are never snapped). For AI-generated art where details vary more, lower Detail merge toward 70%.

4Alignment

All frames land on one fixed master canvas (same size and viewBox for every export). The anchor strategy decides which point of each frame is pinned where:

centroid / bbox / silhouette mass center pinned — general idle loops baseline feet pinned to a ground line — walks, runs stable region stable body (registration) search best overlap inside your drawn box original origin keeps in-cell position — preserves arcs & jumps

Anchors are computed from the foreground only — blank margins never influence registration. Auto-align all registers every frame to the Reference frame inside the stable region (drawn with Draw stable region, or a torso-window default), searching whole pixels then refining to subpixel. Per-frame Offset / Scale / Rotation plus arrow-key nudging fine-tune the result; Reset frame zeroes it; Copy alignment to selected propagates it. ⚠ in the timeline marks weak registration matches. Fit canvas to frames is the one-click recovery when sprites bleed off an edge: it resizes the master canvas to the largest frame plus padding, recenters the anchor, and zeroes every frame's manual offset.

5Views, timeline & export

Sheet

The source image with detection rectangles. Select / move / resize crops, draw new ones (manual mode), pick the background with the eyedropper. Numbers match the timeline order.

Editor — comparison & alignment

Original / SVG / Overlay / Difference views; hold A/B to flip instantly; opacity slider for overlays. The Difference view paints mismatching pixels red and the status bar reports diff %, mean color error and alpha overlap — tune tracing until these settle. Onion skin (previous / next / reference, ghost or difference-blend), baseline / center / bbox / anchor guides, and a pixel grid at high zoom. Drag the frame to adjust its offset; drag a box in stable-region mode; double-click to place a custom anchor.

Preview

Plays the vector frames with real per-frame durations (identical timing to the exported APNG). Play / pause / step / scrub, FPS, speed ×0.25–4, loop / once / ping-pong, zoom to 1600% (Fit / 1:1), nearest or smooth display, checkerboard / solid / image background, onion skin and overlays. Stepping with |◀ ▶|, scrubbing, or clicking a timeline frame pauses playback — the frame you chose stays put until you press play again.

Timeline

One card per frame: source|SVG thumbnail, duration (ms), enable checkbox, diff score (red when the trace drifts), ⚠ alignment warning. Click to select, Shift/⌘ for multi-select, then Duplicate / Delete / Move / batch-set duration.

Export

ButtonProduces
SVG framesone true-vector SVG per frame, all sharing one viewBox
PNG framestransparent sequence at 1× / 2× / 4× / custom
APNGreal animated PNG — lossless alpha, per-frame delays, loop count
Sprite sheetframes re-packed side-by-side on the fixed canvas
ZIP bundleall of the above in one archive
Project JSONeverything needed to reopen and reproduce exactly
Split rectangleseach crop as its own raw PNG + coordinate manifest

Snap to whole pixels rounds placement at raster time only (vector data keeps subpixel floats). Preview and every export render through the same placement math — they cannot disagree.

Export folder — pick once, no more save dialogs

Export folder… (top of the Export panel, Chrome/Edge/Arc/Brave) lets you pick a destination folder once; from then on every export — SVG frames, PNG sequence, APNG, sheet, ZIP, project JSON — is written straight into it, no dialogs, and re-exports overwrite in place. The choice is remembered across sessions (the browser asks you to re-confirm access once per session on first write). Use downloads switches back to normal browser downloads, which is also the automatic fallback in Safari/Firefox or if the folder disappears.

Common flows

A · Clean sprite sheet → animated vector (the happy path)

Top barImport sheetdrop it anywhere, paste from the clipboard, or “Import image…”
Panel 1Detect framesAuto (whitespace) finds each frame; verify rectangles on Sheet
Panel 4Auto-align allregisters frames to the reference inside the stable region
PreviewPlay & tuneSpace to play; adjust FPS/durations while it loops
ExportAPNG / ZIPsame timing & alignment as the preview

Need a known-good input to try the flow? The bundled test sheet lives at assets/sprite-idle.png.

B · Messy sheet (ground lines, explosions, particles) → manual rectangles

SymptomDetection fails1 giant frame (a ground line connects everything) or dozens of fragments (particles)
Panel 1Method: Manual rectanglesauto-detection is bypassed entirely
SheetDrag a box per sectionmove / resize after; each box becomes a frame
ExportSplit rectangles to filesone raw PNG per box + JSON manifest of source coordinates
ResultSections processed individuallyre-import a part alone, or feed files to other tools

C · A detail flickers between frames (wing “boiling”) → temporal coherence

SymptomDetail changes shape/colorlooks like dithering artifacts during playback
Panel 3Check the three switchesShared palette · Stabilize details · Consolidate shapes (all default on)
Panel 4Auto-align firststabilization compares frames at their aligned positions
Panel 3 · AdvancedLower “Detail merge”toward 70% for hand-drawn / AI art whose details vary more
EditorVerifyflip A/B and step frames with [ ] — the detail should hold still

D · The animation moves on purpose (jump arc, hop) → don't flatten it

SymptomJump height disappearscentroid anchoring pins the body, canceling intentional motion
Panel 1Method: Uniform grididentical cells preserve where each pose sits in its cell
Panel 4Anchor: Original frame originin-cell position carries through to the master canvas
PreviewArc preservednudge individual frames with arrow keys if the sheet itself drifts

Rule of thumb: stable-body / centroid anchors remove position noise; grid + origin preserves position as animation. Choose by what the motion means.

E · Trace doesn't match the source → measure, then tune

EditorDifference viewred overlay = mismatched pixels; diff % / mean error / α-overlap in the corner
Panel 3Fix the palette firstwrong colors? edit a swatch or uncheck auto-detect; raise Max colors
Panel 3 · AdvancedThen geometrylost details → lower Min feature / Simplify; ragged edges → Alpha threshold & Edge bias; too sharp/soft → Corner angle
Panel 3Retrace all framestimeline diff scores update — iterate until green
PresetStill off? “Exact/Faithful”pixel-perfect polygons, zero interpretation

F · Save now, continue later → project JSON

Top barSave projectcrops, anchors, transforms, timing, palette, all settings + the embedded image
LaterOpen project…the sheet, frames and alignment come back exactly
GuaranteeIdentical outputre-exported SVGs are byte-identical (covered by the test suite)

Keyboard

KeysAction
nudge selected frame(s) by 1 px
Shift + arrowsnudge by 10 px
Alt/Option + arrowsnudge by 0.1 px (subpixel)
[ / ]previous / next frame
Spaceplay / pause the preview

More depth: README.md (usage) · NOTES.md (how detection, tracing, alignment and APNG encoding work) · automated checks at tests/tests.html.