A library for auto grid detection and pixel art refinement.
Project description
Perfect Pixel
Auto detect and Get perfect Pixel art
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.
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:
- Detect grid size from FFT magnitude of the original image and generate grids.
- Detect edges using Sobel and refine the grids by aligning them to edges.
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bd8e39df7d16df87135a391ac2fcd74e7aec20315f56d206b47a38d3faec2f1
|
|
| MD5 |
4cecda00c0398f293badf58e4bb058a8
|
|
| BLAKE2b-256 |
f20a9b9c3ae9e8efd71aa28eca113c93b5bf3cdac95d059a9de64fb303497e49
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58271944f22493c2ca1bbbc38ea9dffb3d5b76e27c40768b4898a7a2f9f3d0cc
|
|
| MD5 |
df4d497e6afc345663a5bf510179adf4
|
|
| BLAKE2b-256 |
b9c46ba3b835605c5716ec9b8b27356947d18d6bf55ec2791703565d2ac4a454
|