Hugo-Dz/spritefusion-pixel-snapper

A tool to snap pixels to a perfect grid. Designed to fix messy and inconsistent pixel art generated by AI.

Rust

3,274

26 commits

updated Jul 16, 2026

See the code

README

Sprite Fusion Pixel Snapper

Sprite Fusion Pixel Snapper is the repository of the day

A tool to snap pixels to a perfect grid. Designed to fix messy and inconsistent pixel art generated by AI.

Pixel Snapper

Why ?

Current AI image models can't understand grid-based pixel art.

  • Pixel are inconsistent in size and position.
  • The grid resolution can drift over time.
  • Colors are not tied to a strict palette.

With Pixel Snapper:

  • ✅ Pixel are snapped to a perfect grid.
  • ✅ The grid resolution is consistent and can be scaled to pixel resolution.
  • ✅ Colors are tied to a strict, quantized palette. You can also use a custom palette.

Perfect for

  • AI generated pixel art that needs to be snapped to a grid.
  • Procedural 2D art that doesn't fit a grid like tilemaps or isometric maps.
  • 2D game assets and 3D textures that need to be perfectly scalable.
Details

Pixel Snapper preserves as much details as possible like dithering.


💻 CLI

Brew

brew install Hugo-Dz/tap/spritefusion-pixel-snapper

Cargo

Installation with Cargo requires Rust. Once installed, the CLI runs as a standalone native binary.

cargo install spritefusion-pixel-snapper

Usage

spritefusion-pixel-snapper <INPUT> <OUTPUT> [COLOR_COUNT] [OPTIONS]
  • <INPUT>: A PNG/JPEG image, or a directory for batch processing.
  • <OUTPUT>: An output PNG, or a different output directory for a batch.
  • [COLOR_COUNT]: Number of palette colors. Defaults to 16.
  • --pixel-size <PIXELS>: Overrides the auto-detected pixel size. The value must be between 1 and half the smallest image dimension.
  • --palette <HEX,...>: Constrains the output to comma-separated six-digit hex colors.

Examples:

# Quantize the image to a 16-color palette
spritefusion-pixel-snapper input.png output.png 16

# Process a directory as a batch
spritefusion-pixel-snapper sprites/batch_inputs sprites/batch_outputs 16

# Override the auto-detected pixel size
spritefusion-pixel-snapper input.png output.png --pixel-size 8
spritefusion-pixel-snapper sprites/batch_inputs sprites/batch_outputs 16 --pixel-size 8

# Use a fixed color palette
spritefusion-pixel-snapper input.png output.png --palette "0d2b45,203c56,544e68,8d697a,d08159,ffaa5e,ffd4a3,ffecd6"
spritefusion-pixel-snapper sprites/batch_inputs sprites/batch_outputs --palette "0d2b45,203c56,544e68,8d697a"

Run spritefusion-pixel-snapper --help to see every option.

Build from source

git clone https://github.com/Hugo-Dz/spritefusion-pixel-snapper.git
cd spritefusion-pixel-snapper
cargo build --release

The binary will be available at target/release/spritefusion-pixel-snapper.

🌐 Web (WASM)

git clone https://github.com/Hugo-Dz/spritefusion-pixel-snapper.git
cd spritefusion-pixel-snapper

Build the WASM module:

wasm-pack build --target web --out-dir pkg --release

Then use the WASM module in your project:

import init, { process_image } from "./pkg/spritefusion_pixel_snapper.js";

await init();

// process_image(inputBytes, kColors?, pixelSizeOverride?, paletteHex?)
const outputBytes = process_image(inputBytes, 16);

// With a custom palette
const recoloredBytes = process_image(inputBytes, null, null, "0f0f1b,ffecd6,ff4d6d,29adff");

Pass null for any optional argument you want to leave on its default behavior.

Acknowledgments

Pixel Snapper is a Sprite Fusion project. Sprite Fusion is a tool to generate TRUE pixel art sprites and animations for game development.

Sprite Fusion Pixel Art Generator

License

MIT License Hugo Duprez

gamedev
game-development
image-processing
pixel-art

Hugo-Dz/spritefusion-pixel-snapper

A tool to snap pixels to a perfect grid. Designed to fix messy and inconsistent pixel art generated by AI.

Rust

3,274

26 commits

updated Jul 16, 2026

See the code

README

Sprite Fusion Pixel Snapper

Sprite Fusion Pixel Snapper is the repository of the day

A tool to snap pixels to a perfect grid. Designed to fix messy and inconsistent pixel art generated by AI.

Pixel Snapper

Why ?

Current AI image models can't understand grid-based pixel art.

  • Pixel are inconsistent in size and position.
  • The grid resolution can drift over time.
  • Colors are not tied to a strict palette.

With Pixel Snapper:

  • ✅ Pixel are snapped to a perfect grid.
  • ✅ The grid resolution is consistent and can be scaled to pixel resolution.
  • ✅ Colors are tied to a strict, quantized palette. You can also use a custom palette.

Perfect for

  • AI generated pixel art that needs to be snapped to a grid.
  • Procedural 2D art that doesn't fit a grid like tilemaps or isometric maps.
  • 2D game assets and 3D textures that need to be perfectly scalable.
Details

Pixel Snapper preserves as much details as possible like dithering.


💻 CLI

Brew

brew install Hugo-Dz/tap/spritefusion-pixel-snapper

Cargo

Installation with Cargo requires Rust. Once installed, the CLI runs as a standalone native binary.

cargo install spritefusion-pixel-snapper

Usage

spritefusion-pixel-snapper <INPUT> <OUTPUT> [COLOR_COUNT] [OPTIONS]
  • <INPUT>: A PNG/JPEG image, or a directory for batch processing.
  • <OUTPUT>: An output PNG, or a different output directory for a batch.
  • [COLOR_COUNT]: Number of palette colors. Defaults to 16.
  • --pixel-size <PIXELS>: Overrides the auto-detected pixel size. The value must be between 1 and half the smallest image dimension.
  • --palette <HEX,...>: Constrains the output to comma-separated six-digit hex colors.

Examples:

# Quantize the image to a 16-color palette
spritefusion-pixel-snapper input.png output.png 16

# Process a directory as a batch
spritefusion-pixel-snapper sprites/batch_inputs sprites/batch_outputs 16

# Override the auto-detected pixel size
spritefusion-pixel-snapper input.png output.png --pixel-size 8
spritefusion-pixel-snapper sprites/batch_inputs sprites/batch_outputs 16 --pixel-size 8

# Use a fixed color palette
spritefusion-pixel-snapper input.png output.png --palette "0d2b45,203c56,544e68,8d697a,d08159,ffaa5e,ffd4a3,ffecd6"
spritefusion-pixel-snapper sprites/batch_inputs sprites/batch_outputs --palette "0d2b45,203c56,544e68,8d697a"

Run spritefusion-pixel-snapper --help to see every option.

Build from source

git clone https://github.com/Hugo-Dz/spritefusion-pixel-snapper.git
cd spritefusion-pixel-snapper
cargo build --release

The binary will be available at target/release/spritefusion-pixel-snapper.

🌐 Web (WASM)

git clone https://github.com/Hugo-Dz/spritefusion-pixel-snapper.git
cd spritefusion-pixel-snapper

Build the WASM module:

wasm-pack build --target web --out-dir pkg --release

Then use the WASM module in your project:

import init, { process_image } from "./pkg/spritefusion_pixel_snapper.js";

await init();

// process_image(inputBytes, kColors?, pixelSizeOverride?, paletteHex?)
const outputBytes = process_image(inputBytes, 16);

// With a custom palette
const recoloredBytes = process_image(inputBytes, null, null, "0f0f1b,ffecd6,ff4d6d,29adff");

Pass null for any optional argument you want to leave on its default behavior.

Acknowledgments

Pixel Snapper is a Sprite Fusion project. Sprite Fusion is a tool to generate TRUE pixel art sprites and animations for game development.

Sprite Fusion Pixel Art Generator

License

MIT License Hugo Duprez

gamedev
game-development
image-processing
pixel-art

Project health

Latest release

1.0.0 · Jul 16, 2026

Releases this year

1

Significant stargazers

(top 24 of 49)

Sebastian Thiel

1,422 followers · starred Dec 2025

CanisMinor

892 followers · starred Mar 2026

Onuralp SEZER

808 followers · starred Nov 2025

quininer

739 followers · starred Dec 2025