HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
jenissimo
unfake.js
JavaScript2025–2026
jenissimo / unfake.js

unfake.js

Fix AI pixel art and vector images right in your browser

3Distinct people
8Mentions
0Explicit recommenders
991GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Fix AI pixel art and vector images right in your browser

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month8 dated mentions

Observed mentions: 2025-08-12 09:57:50 UTC to 2026-06-17 17:16:49 UTC.

0122025-08-01 00:00:00 UTC to 2025-09-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsAug 20252025-09-01 00:00:00 UTC to 2025-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-10-01 00:00:00 UTC to 2025-11-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-11-01 00:00:00 UTC to 2025-12-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025-12-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-01-01 00:00:00 UTC to 2026-02-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsJan 20262026-02-01 00:00:00 UTC to 2026-03-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-03-01 00:00:00 UTC to 2026-04-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2026-04-01 00:00:00 UTC to 2026-05-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-05-01 00:00:00 UTC to 2026-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-06-01 00:00:00 UTC to 2026-07-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsJun 2026

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Aug 20252025-08-01 00:00:00 UTC2025-09-01 00:00:00 UTC101
Sep 20252025-09-01 00:00:00 UTC2025-10-01 00:00:00 UTC000
Oct 20252025-10-01 00:00:00 UTC2025-11-01 00:00:00 UTC000
Nov 20252025-11-01 00:00:00 UTC2025-12-01 00:00:00 UTC101
Dec 20252025-12-01 00:00:00 UTC2026-01-01 00:00:00 UTC000
Jan 20262026-01-01 00:00:00 UTC2026-02-01 00:00:00 UTC202
Feb 20262026-02-01 00:00:00 UTC2026-03-01 00:00:00 UTC000
Mar 20262026-03-01 00:00:00 UTC2026-04-01 00:00:00 UTC202
Apr 20262026-04-01 00:00:00 UTC2026-05-01 00:00:00 UTC101
May 20262026-05-01 00:00:00 UTC2026-06-01 00:00:00 UTC000
Jun 20262026-06-01 00:00:00 UTC2026-07-01 00:00:00 UTC101

What Hacker News says

8 sources
This is a classic problem for people who didn't grow up making 8-bit pixel art. Typing "pixel art" into Nano-Banana only creates the illusion of pixel art, which quickly breaks down under modest scrutiny, particularly at larger resolutions. That's why you can see "smeared edges," "fringing," etc. Even a basic nearest neighbor downscale/upscale would have squashed some of the higher frequency noise. OP: Look into palette reduction and pixel grids. This is a decent start as a post-processing tool for this stuff. https://github.com/jenissimo/unfake.js
In Show HN: An 8-bit live gamecast for baseball
> Seems good enough to generate 2D sprites. It’s really not. That's actually a pet peeve of mine as someone who used to spent a lot of time messing with pixel art in Aseprite. Nobody takes the time to understand that the style of pixel art is not the same thing as actual pixel art. So you end up with these high-definition, high-resolution images that people try to pass off as pixel art, but if you zoom in even a tiny bit, you see all this terrible fringing and fraying. That happens because the palette is way outside the bounds of what pixel art should use, where proper pixel art is generally limited to maybe 8 to 32 colors, usually. There are plenty of ways to post-process generative images to make them look more like real pixel art (square grid alignment, palette reduction, etc.), but it does require a bit more manual finesse [1], and un
Read the rest
fortunately most people just can’t be bothered. [1] - https://github.com/jenissimo/unfake.js
In ChatGPT Images 2.0
Nice job. FYI there have been a couple of attempts at an RTS LLM Arena with varying degrees of success. Show HN: A real-time strategy game that AI agents can play https://news.ycombinator.com/item?id=47149586 Show HN: RTS for Agents https://news.ycombinator.com/item?id=46649853 And of course there's a ton of research into more traditional forms of AI playing RTS games such as Alphastar. https://en.wikipedia.org/wiki/AlphaStar_(software) Feedback: That percussive sound that starts the song at the beginning of Play is SUPER jarringly loud. I'd trim it out of the track entirely. I know you've mentioned tileset improvements but just to put it out there you've generated isometric buildings, but the tile set you're using appears to be square based. This creates a very incongruous style where the buildings don't feel like they're actually attach
Read the rest
ed to the ground. Finally, about the pixel art you’re using: you’re asking Nano Banana to generate it, but there are a couple of issues with prompting pixel art from GenAI models. The most obvious one is that the pixels aren’t aligned to a traditional grid which leads to really noticeable fringing. This is especially obvious when I use the scroll wheel to zoom in on some of the art assets. I’d highly recommend using something like Unfake [1] to clean this up, aligning pixels and reducing the palette to something more consistent. It’s a bit more manual work, but it will make your assets look dramatically better. https://github.com/jenissimo/unfake.js Here's an example of where I demonstrate generating better sprite sheets with NB: https://mordenstar.com/other/nb-sprites
In Show HN: Shards of Stone – A Warcraft 2-inspired RTS that runs in the browser
You still have to do some post-processing work around NB, since you’ll often end up with non-aligned pixel blocks, much higher color depth, and so on. I actually did some testing of spritesheeting with Nano Banana Pro a while back: https://mordenstar.com/other/nb-sprites If you use the editing capabilities and send in a grid of 32×32 cells on a 1024×1024 image, you can get it to flood-fill in each square, so you end up with properly aligned 32×32 tiles. Then you can squash it via nearest neighbor to pull the lines back out, and reduce the palette using something like unfake.js: https://github.com/jenissimo/unfake.js
In LibreSprite – open-source pixel art editor
Nice job! I also did some pixel art experiments several weeks ago with grid-based constraints via Img2Img with Gemini 3.0 Pro that might be of some interest: https://mordenstar.com/other/nb-sprites FYI there are several nice tools for quantizing to a grid as well as reducing to a smaller discrete color palette that I recommend using as well (unfake [1] and pixel-snapper [2]). [1] https://github.com/jenissimo/unfake.js [2] https://github.com/Hugo-Dz/spritefusion-pixel-snapper
In Show HN: How I generate animated pixel art with AI and Python

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.