Skip to main content

A library for auto grid detection and pixel art refinement.

Project description

Perfect Pixel

Auto detect and Get perfect Pixel art

Python License

Standard scaling often fails to sample AI-generated pixel art due to inconsistent sizes and non-square grids.

This tool automatically detects the optimal grid and delivers perfectly aligned, pixel-perfect results.

Features

  • Automatically detect grid size from pixel style images.
  • Refines AI generated pixel style image to perfectly aligned grids.
  • Easy to integrate into your own workflow.

Try Web Demo

Installation

git clone https://github.com/theamusing/perfectPixel.git

or just download the python files and put them into your project folder.

Usage

Step 1: Get pixel style image

First you need extra tools to get a pixel styled image. The recommanded size is between 512 to 1024.

You can use Stable Diffusion with any Pixel Style Lora, or you can use ChatGPT or Gemini to generate one.

For example, I used ChatGPT to transfer an image into pixel style.

prompt: Convert the input image into a TRUE perler bead pixel pattern designed for physical bead crafting, not digital illustration. Canvas size must be exactly 32×32 pixels OR 16×16 pixels, where each pixel represents exactly one perler bead. Use extremely large, chunky pixels with very few active pixels overall. Simplicity is critical. Only keep the main subject. Remove the entire background. For human characters, make sure the face is flat and no shadow. The subject must be centered with clear empty bead rows around all edges to allow easy mounting on a bead board. Add a clean, continuous dark outline around the subject so the silhouette is clearly readable when made with beads. Use a very limited solid color palette (maximum 6–8 colors total). No gradients, no shading, no lighting, no dithering, no texture. No anti-aliasing or smoothing — every pixel must be a perfect square bead aligned to the grid. The output image should be pixel-perfect, each grid only contains one color. Background must be pure solid white.

The image is in pixel style but the grids are distorted. Also we don't know the number of grids.

Step 2: Use Perfect Pixel to refine your image

You can use the Web Demo to refine your image.

The grid size is automatically detected, and the image is refined.

Also you can use the provided python function in your local environment.

Perfect Pixel provides two implementations of the same core algorithm. The Lighweight Backend is designed in case you can't or don't want to use cv2. You can choose the one that best fits your environment:

Feature OpenCV Backend (perfectPixel.py) Lightweight Backend (perfectPixelnoCV2.py)
Dependencies opencv-python, numpy numpy

For the OpenCV Backend

import cv2
from perfectPixel import getPerfectPixel

bgr = cv2.imread("images/avatar.png", cv2.IMREAD_COLOR)
rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)

w, h, out = getPerfectPixel(rgb)

Also see example.py.

python example.py

For the Lightweight Backend

from perfectPixelnoCV2 import getPerfectPixel
from PIL import Image # for example we use PIL to load the image

img = Image.open("images/avatar.png").convert("RGB")
img_array = np.array(img)

w, h, out = getPerfectPixel(img_array)

Try integrate it into your own projects!

Algorithm

The whole algorithm mainly contains 3 steps:

  1. Detect grid size from FFT magnitude of the original image and generate grids.
  2. Detect edges using Sobel and refine the grids by aligning them to edges.
  3. Use the grids to sample the original image and to get the scaled image.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

perfect_pixel-0.1.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

perfect_pixel-0.1.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file perfect_pixel-0.1.0.tar.gz.

File metadata

  • Download URL: perfect_pixel-0.1.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for perfect_pixel-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8bd8e39df7d16df87135a391ac2fcd74e7aec20315f56d206b47a38d3faec2f1
MD5 4cecda00c0398f293badf58e4bb058a8
BLAKE2b-256 f20a9b9c3ae9e8efd71aa28eca113c93b5bf3cdac95d059a9de64fb303497e49

See more details on using hashes here.

File details

Details for the file perfect_pixel-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: perfect_pixel-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for perfect_pixel-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 58271944f22493c2ca1bbbc38ea9dffb3d5b76e27c40768b4898a7a2f9f3d0cc
MD5 df4d497e6afc345663a5bf510179adf4
BLAKE2b-256 b9c46ba3b835605c5716ec9b8b27356947d18d6bf55ec2791703565d2ac4a454

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page