6.4 KiB
Repixelizer Spec
Summary
Repixelizer is a Python tool with a CLI and web GUI for converting "fake pixel art" into true grid-aligned pixel art. The target use cases are single-image icons, emblems, logos, and simple sprites, especially images that already resemble pixel art but fail to obey a consistent pixel lattice.
The project exists because generated imagery often creates appealing pixel-like local patterns while violating the actual constraints of pixel art:
- inconsistent subpixel alignment
- locally plausible but globally incoherent clusters
- noisy highlights and outlines
- fake micro-detail that collapses when downsampled
Repixelizer treats this as a lattice-inference and reconstruction problem.
Goals
- Recover an implied target pixel grid from a fake-pixel-art source image.
- Produce a true discrete-grid output image that looks authored, not merely resized.
- Preserve alpha, silhouette clarity, and strong interior structure.
- Support palette-free output by default, with optional palette-constrained modes.
- Provide diagnostics and baseline comparisons so results are inspectable and measurable.
Non-goals for v1
- full sprite-sheet or animation consistency
- manual painting or mask authoring as a required workflow
- a native desktop app
- generalized photo-to-pixel-art stylization
- a learned model trained on a large dataset
Primary users
- artists or developers trying to salvage generated fake pixel art
- tool builders experimenting with constrained repixelization
- game/UI developers creating icons, emblems, badges, and simple sprites
Input and output contract
Input
- one RGBA image file
- optional explicit target size override
- optional palette file
- optional diagnostics directory
- optional solver/device settings
Output
- one final RGBA PNG
- optional palette-constrained output behavior
- optional diagnostics bundle containing JSON and visual artifacts
Product behavior
Canonical mode
The canonical workflow should be fully automatic:
- load the source image
- infer lattice size from autocorrelation candidates, unless the caller pins it
- render a diagnostic edge preview
- build the solver's hierarchical flatness signal from the source
- run the
phase-fieldreconstruction over the inferred lattice - sample real source pixels from the final source-position field
- snap alpha to the final discrete mask
- optionally quantize to a palette
- write output and diagnostics
No manual masks or user-authored region hints are assumed in v1.
This is the canonical machine in the repo. Comparison mode just runs that same
phase-field result next to the baselines.
CLI shape
Primary commands:
repixelize input.png --out output.png
repixelize compare input.png --out output.png
Supported flags:
--target-size--target-width--target-height--palette--palette-mode off|fit|strict--diagnostics-dir--seed--steps--device cpu|cuda
Palette behavior
off: produce unconstrained RGBA outputfit: adapt to a useful palette derived from or compatible with the resultstrict: stay strictly inside a supplied palette
Palette constraints are optional because many generated fake-pixel-art images do not originate from a coherent palette.
Technical design
1. Lattice inference
The tool must estimate the resolution of the fake lattice being mimicked.
Requirements:
- infer candidate target sizes from autocorrelation hints
- use canonical cell centers for each candidate
- score candidates using coherence-oriented metrics and source-derived periodicity priors
- expose the top-ranked alternatives in diagnostics
- if
--target-size,--target-width, or--target-heightis provided, skip automatic inference
Scoring goals:
- low isolated-pixel rate
- high cluster continuity
- strong alpha-edge crispness
- straighter outlines
- lower local color chatter
- reasonable agreement with source-derived periodicity priors
2. Diagnostic analysis and solver signal
The pipeline keeps two source-derived views separate:
- a diagnostic edge preview for GUI and run inspection
- a hierarchical flatness signal that actually steers the solver
The live solver signal is built from multiscale luminance gradient and curvature energy. It rewards calm local source regions while leaving edge preview as a gauge, not a hidden steering wheel.
3. Phase-field reconstruction
The solver represents each output pixel as one live source-space sample position initialized at a fixed lattice center.
Requirements:
- operate in premultiplied RGBA space
- initialize from canonical fixed lattice centers
- let each sample choose from a small local candidate window
- blend toward the locally preferred flatter source position
- relax row and column springs so the sample field stays coherent
- nearest-sample the original source pixels for final output
The current implementation is explicit NumPy local search plus spring relaxation.
4. Discrete projection and cleanup
After the phase-field stage, the result must be treated as a true pixel grid.
The discrete stage should:
- preserve source-sampled RGBA values
- snap alpha to an opaque/transparent mask
- keep structural repair in the solver
Cleanup is intentionally small in v1.
5. Baselines and comparison mode
The project must ship comparison baselines:
- Lanczos downscale
- naive resize
- resize plus error diffusion
compare mode should run:
- the same
phase-fieldpipeline - all baselines
- metric collection
- a visual contact sheet
The project should treat these baselines as the minimum bar for usefulness.
Diagnostics
Diagnostics should be machine-readable and human-readable.
Required artifacts:
run.jsonlattice-overlay.pngcomparison.pngalpha-preview.pngnoise-heatmap.png
Compare mode should additionally write:
compare.jsoncompare.csvcompare-sheet.png
Acceptance criteria
The tool is successful for v1 if it can:
- infer sensible target sizes on curated synthetic cases
- preserve transparency and silhouette quality
- produce outputs that are visibly more grid-coherent than simple resize baselines
- avoid obvious isolated-pixel explosions
- generate diagnostics that explain how and why a run behaved the way it did
Future expansion
The design should leave room for:
- manual region hints or lock zones
- multi-frame consistency for sprite sheets
- more advanced warping or lattice-field models
- learned priors or ranking models for candidate outputs