{"slug": "unfake-js", "name": "unfake.js", "category": "media", "category_name": "Media and creative", "description": "", "recommenders": 3, "commenters": 3, "warners": 0, "score": 2.628, "rising": -0.98, "first": "2025-11-30", "latest": "2026-06-17", "why": "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])", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 6, "neutral": 1, "compare": 0, "warn": 0}, "spark": [1, 0, 2, 0, 2, 0, 0, 1, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "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])", "kind": "", "icon": false, "domain": null, "github_repo": "github.com/jenissimo/unfake.js", "official_url": "https://github.com/jenissimo/unfake.js", "pricing": "", "aliases": ["unfake.js", "Unfake", "unfake"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 777175633, "item_id": 48573477, "url": "https://news.ycombinator.com/item?id=48573477", "by": "vunderba", "date": "2026-06-17", "version": null, "stance": "recommend", "quote": "This is a decent start as a post-processing tool for this stuff.", "excerpt": "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 pale", "context": "", "use_case": "Pixel art post-processing", "switched_from": "", "story": "Show HN: An 8-bit live gamecast for baseball"}, {"id": 761470336, "item_id": 47591896, "url": "https://news.ycombinator.com/item?id=47591896", "by": "AJSturrock", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "that looks super useful to clean up the existing assets", "excerpt": "Thanks for all of this, really appreciate the detailed feedback and the links, will check those out. Apologies about the drum hit at the start! Appreciate that is probably way too loud, especially on headphones. Cutting the first second out now and also adding a fade in for music track on the menu music to ease you in! The tileset/isometric mismatch and the pixel grid fringing are both great calls. I am by no means a", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Shards of Stone \u2013 A Warcraft 2-inspired RTS that runs in the browser"}, {"id": 761460976, "item_id": 47591311, "url": "https://news.ycombinator.com/item?id=47591311", "by": "vunderba", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "I\u2019d highly recommend using something like Unfake [1] to clean this up, aligning pixels and reducing the palette", "excerpt": "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/", "context": "", "use_case": "clean up AI pixel art", "switched_from": "", "story": "Show HN: Shards of Stone \u2013 A Warcraft 2-inspired RTS that runs in the browser"}, {"id": 756421105, "item_id": 47276319, "url": "https://news.ycombinator.com/item?id=47276319", "by": "vunderba", "date": "2026-03-06", "version": null, "stance": "recommend", "quote": "reduce the palette using something like unfake.js", "excerpt": "You still have to do some post-processing work around NB, since you\u2019ll 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\u00d732 cells on a 1024\u00d71024 image, you can get it to flood-fill in each square, so you end ", "context": "", "use_case": "Palette reduction for pixel art", "switched_from": "", "story": "LibreSprite \u2013 open-source pixel art editor"}, {"id": 747697648, "item_id": 46731103, "url": "https://news.ycombinator.com/item?id=46731103", "by": "skerit", "date": "2026-01-23", "version": null, "stance": "recommend", "quote": "Did you ever consider using something like https://github.com/jenissimo/unfake.js/", "excerpt": "Did you ever consider using something like https://github.com/jenissimo/unfake.js/ in your process, to make it more proper-pixel-art? Maybe to process the Nano-Banana generated dataset before fine-tuning, and then also to fix the generated Qwen output?", "context": "", "use_case": "pixel art cleanup", "switched_from": "", "story": "Show HN: isometric.nyc \u2013 giant isometric pixel art map of NYC"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["pixel art post-processing", "clean up ai pixel art", "palette reduction for pixel art", "pixel art cleanup", "pixel art grid quantizing"], "compared": [{"slug": "nano-banana", "name": "Nano Banana", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47590952", "title": "Show HN: Shards of Stone \u2013 A Warcraft 2-inspired RTS that runs in the browser", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=48573012", "title": "Show HN: An 8-bit live gamecast for baseball", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47852835", "title": "OpenAI Livestream", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47272799", "title": "LibreSprite \u2013 open-source pixel art editor", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46721802", "title": "Show HN: isometric.nyc \u2013 giant isometric pixel art map of NYC", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46537268", "title": "Show HN: How I generate animated pixel art with AI and Python", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {}, "2026-01": {"recommend": 2}, "2026-02": {}, "2026-03": {"recommend": 2}, "2026-04": {"neutral": 1}, "2026-05": {}, "2026-06": {"recommend": 1}, "2026-07": {}, "2026-08": {}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "family_ref": null, "runs_on": null, "lines": [], "quotes": [{"id": 777175633, "item_id": 48573477, "url": "https://news.ycombinator.com/item?id=48573477", "by": "vunderba", "date": "2026-06-17", "version": null, "stance": "recommend", "quote": "This is a decent start as a post-processing tool for this stuff.", "excerpt": "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 pale", "context": "", "use_case": "Pixel art post-processing", "switched_from": "", "story": "Show HN: An 8-bit live gamecast for baseball"}, {"id": 765705313, "item_id": 47856582, "url": "https://news.ycombinator.com/item?id=47856582", "by": "vunderba", "date": "2026-04-21", "version": null, "stance": "neutral", "quote": "There are plenty of ways to post-process generative images to make them look more like real pixel art", "excerpt": "> Seems good enough to generate 2D sprites. It\u2019s 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", "context": "", "use_case": "", "switched_from": "", "story": "OpenAI Livestream"}, {"id": 761470336, "item_id": 47591896, "url": "https://news.ycombinator.com/item?id=47591896", "by": "AJSturrock", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "that looks super useful to clean up the existing assets", "excerpt": "Thanks for all of this, really appreciate the detailed feedback and the links, will check those out. Apologies about the drum hit at the start! Appreciate that is probably way too loud, especially on headphones. Cutting the first second out now and also adding a fade in for music track on the menu music to ease you in! The tileset/isometric mismatch and the pixel grid fringing are both great calls. I am by no means a", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Shards of Stone \u2013 A Warcraft 2-inspired RTS that runs in the browser"}, {"id": 761460976, "item_id": 47591311, "url": "https://news.ycombinator.com/item?id=47591311", "by": "vunderba", "date": "2026-03-31", "version": null, "stance": "recommend", "quote": "I\u2019d highly recommend using something like Unfake [1] to clean this up, aligning pixels and reducing the palette", "excerpt": "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/", "context": "", "use_case": "clean up AI pixel art", "switched_from": "", "story": "Show HN: Shards of Stone \u2013 A Warcraft 2-inspired RTS that runs in the browser"}, {"id": 756421105, "item_id": 47276319, "url": "https://news.ycombinator.com/item?id=47276319", "by": "vunderba", "date": "2026-03-06", "version": null, "stance": "recommend", "quote": "reduce the palette using something like unfake.js", "excerpt": "You still have to do some post-processing work around NB, since you\u2019ll 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\u00d732 cells on a 1024\u00d71024 image, you can get it to flood-fill in each square, so you end ", "context": "", "use_case": "Palette reduction for pixel art", "switched_from": "", "story": "LibreSprite \u2013 open-source pixel art editor"}, {"id": 747697648, "item_id": 46731103, "url": "https://news.ycombinator.com/item?id=46731103", "by": "skerit", "date": "2026-01-23", "version": null, "stance": "recommend", "quote": "Did you ever consider using something like https://github.com/jenissimo/unfake.js/", "excerpt": "Did you ever consider using something like https://github.com/jenissimo/unfake.js/ in your process, to make it more proper-pixel-art? Maybe to process the Nano-Banana generated dataset before fine-tuning, and then also to fix the generated Qwen output?", "context": "", "use_case": "pixel art cleanup", "switched_from": "", "story": "Show HN: isometric.nyc \u2013 giant isometric pixel art map of NYC"}, {"id": 744603904, "item_id": 46537744, "url": "https://news.ycombinator.com/item?id=46537744", "by": "vunderba", "date": "2026-01-07", "version": null, "stance": "recommend", "quote": "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])", "excerpt": "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.j", "context": "", "use_case": "pixel art grid quantizing", "switched_from": "", "story": "Show HN: How I generate animated pixel art with AI and Python"}, {"id": 737579312, "item_id": 46098707, "url": "https://news.ycombinator.com/item?id=46098707", "by": "vunderba", "date": "2025-11-30", "version": null, "stance": "recommend", "quote": "that I've used in the past in a Stable Diffusion -> Pixel Art pipeline", "excerpt": "Nice. There's a couple of these (unfake which uses pixel snapping/palette reduction, sd-palettize which uses k-means to palette reduce, etc.) that I've used in the past in a Stable Diffusion -> Pixel Art pipeline. I think it'd be worth calling out the differences. [1] - https://github.com/jenissimo/unfake.js [2] - https://github.com/Astropulse/sd-palettize", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: Fixing Google Nano Banana Pixel Art with Rust"}]}