Skip to content
Photo2Pattern

Free pixel art upscaler

A pixel art upscaler that keeps every pixel a perfect square

This upscaler multiplies pixel art by whole numbers and by nothing else, because a fractional scale has to make some original pixels wider than their neighbors and that puts a ripple along every diagonal in the picture. Before it enlarges anything it measures the file — most pixel art in circulation has already been scaled up by whoever posted it — so it finds the block size, recovers the artwork underneath and tells you how many pixels the sprite really is. Free to use without an account, reading files up to 2,048 px on the long side, and every step of it happens in this tab.

  • 100% free
  • No signup
  • 1x to 32x
  • Whole multiples only
  • Finds the native grid

Press Ctrl+V anywhere on the page to drop in a sprite you copied out of an editor — no need to click the field first.

How to enlarge a sprite without softening an edge

It opens with a measurement rather than a setting: what the artwork actually is, before you ask it for anything.

  1. Drop the file and read what the artwork actually is

    The first line the page prints is a measurement, not a result. It looks for the largest block that divides both sides of your file and leaves every block a single flat color, then tells you what it found: a 512 by 512 PNG carrying 16 px blocks is a 32 by 32 sprite somebody enlarged before posting it, and that is the picture everything after this works from. If the blocks turn out not to be flat, the drift figure beside them is how far a JPEG re-save pushed the colors inside one, on the 0 to 255 scale.

  2. Pick a multiple, or type the width you have to hit

    The slider runs from 1 to 32 in whole steps and 1 is the useful bottom end — it exports the recovered artwork at its native size, which is how a 32 by 32 sprite comes back out of a 512 px file. If a specific width is what you need, type it in and the page checks it: a width that is a whole multiple of the artwork is accepted, and one that is not is refused with the two multiples that sit either side of it offered as buttons.

  3. Take the exact-size PNG, or the marked grid if you are placing it by hand

    The PNG button carries the finished dimensions in its own label, because that number is the product — the file is written pixel by pixel at exactly that size rather than drawn through a canvas that scales itself by the screen's device pixel ratio. Transparent areas stay transparent. If the enlargement is going onto a pegboard or a baseplate rather than into an editor, take the marked grid instead: same picture, a symbol in every square and a numbered edge every ten.

Technical specifications

Scale factors1x to 32x, whole numbers only. 1x is the useful bottom end: it hands back the native artwork out of a file that had already been enlarged
Finding the original gridThe largest block size that divides both sides of the file and leaves every block one flat color. Tried at zero tolerance first, then at 12/255 for artwork that has been through a JPEG, and overridable by hand to any block size the file's dimensions permit
InterpolationNone of any kind. Every output pixel is a copy of one native pixel, so the exported PNG contains no color that was not already in the artwork and no edge that was not already sharp
File read at2,048 px on the long side. A power of two on purpose — artwork saved at 512, 1,024 or 2,048 px arrives with its block edges untouched, where a round 2,000 would resample the largest of those and smear the very edges being measured
Color ceiling256 distinct colors in the recovered artwork, which is the most an indexed PNG can address. Past that the file is a photograph, and the page says so rather than making a bigger photograph
Output ceiling4,000,000 pixels. Beyond roughly 16.7 million device pixels iOS Safari returns a blank canvas and raises nothing, so a larger PNG would simply download white
TransparencyPreserved. A block averaging under half alpha is written with an alpha of zero, so nothing is flattened onto a background you would then have to remove
What leaves this tabNothing — no upload, no account, no queue and no request beyond the page

Frequently asked questions

Why are only whole-number scales offered?

Because a fractional scale cannot give every original pixel the same size. At 2.5x some source pixels have to become two output pixels wide and their neighbors three, and which ones get which falls wherever the rounding lands rather than anywhere an artist chose. Across a flat area nobody notices. Along a diagonal or a one-pixel outline it shows up as a stagger that alternates thick and thin, and that stagger was not in the artwork. A whole multiple has no such decision to make: at 3x every pixel is three across and three down, everywhere. Type a width into the field and the page will name the two whole multiples that sit around it.

My pixel art is already 512 px wide. Do I enlarge that?

Almost certainly not, and this is the commonest mistake in the whole operation. Pixel art circulates at display size rather than at working size, so a 32 by 32 sprite reaches you as a 512 by 512 PNG in which every original pixel is already a 16 px block. Enlarging that by four gives you 64 px blocks in a 2,048 px file — larger, and not one pixel sharper. This page measures the block size before it does anything else and works from the artwork underneath, so the same file at 8x comes out as 256 px of genuine 32 by 32 art.

Can I get the original small sprite back out of an enlarged file?

Yes — set the multiplier to 1x. The page has already collapsed the file onto its native grid in order to measure it, so 1x simply exports that: a 640 by 640 PNG carrying 20 px blocks comes back as the 32 by 32 image somebody scaled up before they posted it. This works because pixel-art editors enlarge by whole numbers, which is what makes the enlargement reversible. A file that was resized to a percentage has had its block edges averaged into each other and there is no original left in it to recover.

How is this different from an AI upscaler?

It is the opposite operation. A neural upscaler invents detail that was not in the file, which is its entire purpose and genuinely useful on a photograph or a scan. On a sprite it produces a smooth painting of a sprite: an artist placed each of the 1,024 pixels in a 32 by 32 piece deliberately, and a model asked for 4x has to invent the other 15,360 — that is painting over the work rather than enlarging it. Nothing is added here. The output holds the colors the input held, in the arrangement the input had, at a larger size — which is why the color list below an enlargement is identical to the color list above it.

Why not scale2x, hq2x or xBRZ?

Because those algorithms change the artwork, and this page exists for the cases where it must not be changed. They are very good at what they were written for, which is smoothing an emulator's output on a modern screen, and they do it by reading each pixel's neighbors and rounding staircases into diagonals. That introduces colors the palette never held and moves edges the artist placed. If the enlargement is going to become beads, bricks or stitches, a rounded corner is a unit you cannot buy; if it is going back into a game, the sprite no longer matches the rest of its sheet.

The page says the blocks are not flat. What does that mean?

Your file has been through a lossy encoder, in practice always JPEG. JPEG stores 8 by 8 tiles as frequency coefficients and rebuilds hard edges with an overshoot, so a block that left the editor as one flat color comes back with a gradient across it and a halo at its border. The number reported beside the block size is the widest channel drift found inside any single block: 0 means the file is untouched, and anything past roughly 20 out of 255 means the colors listed underneath have been reconstructed rather than read. Each block is still averaged back to one color, which is the best answer available, but the result is a repair.

Does a transparent background survive the enlargement?

Yes, and it stays transparent rather than turning white. Any block whose mean alpha falls below half is treated as a hole and written into the PNG with an alpha of zero, so a sprite cut out against nothing comes back cut out against nothing. This is worth checking on whatever tool you use, because a great many online resizers composite onto a white background before they scale — which leaves a white fringe one block deep around every edge of the artwork for you to key out afterwards.

About enlarging by substitution rather than by resampling

Enlarging pixel art is not a resize, it is a substitution: every original pixel is replaced by a square block of copies of itself, and the only thing to decide is how big that square is. Image editors will do something else entirely if you let them — Photoshop resamples with Bicubic by default and GIMP with Cubic, both of which mix each new pixel out of several old ones — which is why the setting people hunt for is called Nearest Neighbor in one program and None in the other. There is no such setting here because nothing else is on offer, and fractional multipliers are refused for the same reason: at 2.5x the arithmetic has to hand some source pixels three output pixels and their neighbors two. Deciding which colors a picture is made of, rather than how large they are drawn, is what the converter is for.

The measurement that runs before the enlargement matters more than the enlargement does. Pixel art travels at display size rather than at working size, so the file in your downloads folder is usually an enlargement already: a 32 by 32 sprite saved out at 512 by 512, a tile posted at four times its real width. Scaling that again multiplies the block size and sharpens nothing. So the page looks for the largest block that divides both sides of the file and leaves every block a single flat color, and reports the artwork it found underneath — which is a strict test rather than a guess, because a whole-number enlargement multiplies both sides by the same integer and a block that fails to divide both was not produced by one. Two things fall out of that reading for free: a multiplier of 1 exports the recovered original, and blocks that turn out not to be flat give you a number for what a JPEG re-save cost the file. Going the other way, down onto fewer cells than the artwork has and finding out what that costs, is the resizer.

A craft site owns this page rather than a graphics site because an enlarged sprite here is usually on its way to becoming an object. Somebody counting a design out in Perler beads or laying it onto a LEGO baseplate needs every block to survive as a block with a countable edge, because the enlargement is going to be printed and worked from over an afternoon at arm's length. That is a stricter requirement than looking good: the classic pixel-art filters and every neural model are in the business of adding what the artist did not draw, which is precisely wrong when the next step is a shopping list and a rounded corner is a unit nobody sells. The opposite job — destroying detail in a photograph on purpose until it reads as blocks — belongs to the pixelate page, where the coarseness is the point rather than the price.

Product and company names shown here are the trademarks of their respective owners. Photo2Pattern is an independent tool and is not affiliated with, sponsored by or endorsed by any of them.

Where the enlargement happens

Your picture is opened by JavaScript running in the tab you are reading this in. It is never uploaded, never sent to a server and never stored anywhere — there is no upload step to undo, because there is no upload. Close the tab and nothing of it remains.

The measurements are part of that. The block size, the color list and the drift figure are computed from the pixels held in memory here and none of them is recorded or sent anywhere. It is also why the page can promise an exact output size: the PNG is written by the same tab that read the original, so nothing passes through a re-encoder that might round the dimensions on the way.