frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Mapping to the PICO-8 palette, perceptually

https://30fps.net/pages/perceptual-pico8-pixel-mapping/
46•ibobev•3d ago

Comments

Marazan•3h ago
The main issue with any pixel-to-pixel colour mapping approach is that we don't perceive individual pixels so you will not get a good overall effect from pixel-to-pixel mapping (the article touches on this by talking about structure but you don;t have to go that far to see massively improved results).

Any serious attempt would involve higher level dithering to better reproduce the colours of the original image and dithering is one of those topics that goes unexpectedly crazy deep if you are not familiar with the literature.

aquova•3h ago
An interesting article, but it seems like quite an oversight to not even mention dithering techniques, which in my opinion give much better results.

I've done some development work in Pico-8, and some time ago I wrote a plugin for the Aseprite pixel art editor to convert an arbitrary image into the Pico-8 palette using Floyd-Steinberg dithering[0]

I ran their example image through it, and personally I think the results it gives were the best of the bunch https://imgur.com/a/O6YN8S2

[0] https://github.com/aquova/aseprite-scripts/blob/master/pico-...

lugarlugarlugar•2h ago
I too thought about dithering while reading the article, but couldn't have imagined the result would be this much better. Thanks for sharing!
kibwen•2h ago
Dithering is sort of like having the ability to "blend" any two colors of your palette (possibly even more than any two, if you use it well), so instead of being a 16-color pallete, it's like working with a 16+15+14+13+12+...=136-color pallete. It's a drastic difference (at the cost of graininess, of course).
smusamashah•2h ago
Tried this online tool https://onlinetools.com/image/apply-dithering-to-image and Floyd and Atkinson both look great, Atkinson a bit better.
chrismorgan•2h ago
Direct link to the image, though you may have to fetch it through a non-browser to avoid it redirecting back to the stupid HTML: https://i.imgur.com/y93naNw.png

(I don’t know how it works for others, but it has always been atrocious for me. Their server is over 200ms away, and even with uBlock Origin blocking ten different trackers it takes fully 35 seconds before it even begins to load the actual image, and the experience once it’s finished is significantly worse than just navigating directly to the image anyway. Tried it in Chromium a couple of times, 55 and 45 seconds. Seriously, imgur is so bad. Maybe it ain’t so bad in the USA, I don’t know, but in Australia and in India it’s appallingly bad. You used to be able to open the image URLs directly, but some years ago they started redirecting to the HTML in general if not loading as a subresource or maybe something about accept headers; curl will still get it directly.)

wizzwizz4•1h ago
https://addons.mozilla.org/firefox/addon/fucking-jpeg/
greysonp•1h ago
They don't explicitly state it in the article that I can see, but the PICO-8 is 128x128, and it appears that their output images were constrained to that. Your dithered images appear to be much higher resolution. I'd be curious what dithering would look like at 128x128!
WithinReason•3h ago
I was looking forward to seeing a dithered [0] version but it was missing. In addition, shouldn't OKLAB already be perceptually uniform and not require luma weighting?

[0]: https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dither...

Fraterkes•2h ago
Kinda off-topic but for a while I’ve had an idea for a photography app where you’d take a picture, and then you could select a color in the picture and adjust it till it matched the color you see in reality. You could do that for a few colors and then eventually just map all the colors in the picture to be much closer to the perceived colors without having to do coarser post-processing.

Even if you got something very posterized like in the article I think it could at least be a great reference for a more traditional processing step afterwards. Always wonder why that doesn’t seem to exist yet.

latexr•2h ago
Sounds like a lot of work for something which wouldn’t produce that good of a result. If you ever tried to take a colour from a picture with the eyedropper tool, you quickly realise what you see as one colour is in fact disparate number of pixels and it can be quite hard to get the exact thing you want. So right there you find the initial hurdle of finding and mapping the colour to change. Finding the edges would also be a problem.

Not to mention every screen is different, so whatever changes you’re doing, even if they looked right to you in the moment, would be useless when you sent your image to your computer for further processing.

Oh, and our eyes can perceive it differently too. So now you’re doing a ton of work to badly change the colours of an image so they look maybe a bit closer to reality for a single person on a single device.

a_shovel•2h ago
Something I've noticed from automatic palette mappings is that they tend to produce large blocks of gray that a human artist would never consider. You can see it in the water for most mappings in this sample, and even some grayish-brown grass for sRGB. It makes sense mathematically, since gray is the "average" color, and pixel art palettes are typically much more saturated than the average colors in a 24-bit RGB image. It looks ugly regardless.

CAM16-UCS looks the best because it avoids this. It gives us peach-and-pink water that matches the "feel" of the original image better. I wonder if it's designed to saturate the image to match the palette?

growingkittens•2h ago
I notice that many palettes tend to follow the "traditional" color wheel strictly, without defining pink as a separate color on the main wheel.

GrapheneOS and Forensic Extraction of Data (2024)

https://discuss.grapheneos.org/d/13107-grapheneos-and-forensic-extraction-of-data
195•SoKamil•3h ago•62 comments

Gregg Kellogg has passed away

https://lists.w3.org/Archives/Public/public-json-ld-wg/2025Sep/0012.html
195•daenney•4h ago•28 comments

Behind the Scenes of Bun Install

https://bun.com/blog/behind-the-scenes-of-bun-install
141•Bogdanp•3h ago•50 comments

Conway's Game of Life, but Musical

https://www.hudsong.dev/digital-darwin
57•hudsongr•2h ago•14 comments

Spiral

https://spiraldb.com/post/announcing-spiral
6•jorangreef•27m ago•0 comments

Reshaped is now open source

https://reshaped.so/blog/reshaped-oss
175•michaelmior•6h ago•40 comments

An Engineering History of the Manhattan Project

https://www.construction-physics.com/p/an-engineering-history-of-the-manhattan
42•rbanffy•3h ago•18 comments

The US is now the largest investor in commercial spyware

https://arstechnica.com/security/2025/09/the-us-is-now-the-largest-investor-in-commercial-spyware/
51•furcyd•1h ago•14 comments

The Rise of Async Programming

https://www.braintrust.dev/blog/async-programming
36•mooreds•3h ago•22 comments

Health Insurance Costs for Businesses to Rise by Most in 15 Years

https://www.wsj.com/health/healthcare/health-insurance-costs-rise-6cc1b934
22•johntfella•26m ago•36 comments

I Solved PyTorch's Cross-Platform Nightmare

https://svana.name/2025/09/how-i-solved-pytorchs-cross-platform-nightmare/
37•msvana•3d ago•6 comments

Strong Eventual Consistency – The Big Idea Behind CRDTs

https://lewiscampbell.tech/blog/250908.html
7•todsacerdoti•3d ago•1 comments

Mapping to the PICO-8 palette, perceptually

https://30fps.net/pages/perceptual-pico8-pixel-mapping/
46•ibobev•3d ago•13 comments

Piramidal (YC W24) Is Hiring Back End Engineer

https://www.ycombinator.com/companies/piramidal/jobs/1HvdaXs-full-stack-engineer-platform
1•dsacellarius•4h ago

DeepCodeBench: Real-World Codebase Understanding by Q&A Benchmarking

https://www.qodo.ai/blog/deepcodebench-real-world-codebase-understanding-by-qa-benchmarking/
63•blazercohen•6h ago•4 comments

GrapheneOS accessed Android security patches but not allowed to publish sources

https://grapheneos.social/@GrapheneOS/115164133992525834
109•uneven9434•8h ago•21 comments

KDE launches its own distribution

https://lwn.net/SubscriberLink/1037166/caa6979c16a99c9e/
624•Bogdanp•18h ago•423 comments

PgEdge Goes Open Source

https://www.pgedge.com/blog/pgedge-goes-open-source
68•Bogdanp•8h ago•13 comments

NearToilets – Airbnb of toilets, earn from toilets for rent

https://neartoilets.com/
27•kevin11111•1h ago•39 comments

Show HN: Term.everything – Run any GUI app in the terminal

https://github.com/mmulet/term.everything
1001•mmulet•2d ago•135 comments

Show HN: I built a minimal Forth-like stack interpreter library in C

18•Forgret•3h ago•8 comments

DOOMscrolling: The Game

https://ironicsans.ghost.io/doomscrolling-the-game/
376•jfil•17h ago•88 comments

Hashed sorting is typically faster than hash tables

https://reiner.org/hashed-sorting
152•Bogdanp•3d ago•32 comments

ChatGPT Developer Mode: Full MCP client access

https://platform.openai.com/docs/guides/developer-mode
487•meetpateltech•1d ago•268 comments

CRISPR Offers New Hope for Treating Diabetes

https://www.wired.com/story/no-more-injections-crispr-offers-new-hope-for-treating-diabetes/
33•manveerc•2h ago•9 comments

How the tz database works (2020)

https://yatsushi.com/blog/tz-database/
55•jumbosushi•3d ago•10 comments

Germany is not supporting ChatControl – blocking minority secured

https://digitalcourage.social/@echo_pbreyer/115184350819592476
911•xyzal•7h ago•287 comments

Where did the Smurfs get their hats (2018)

https://www.pipelinecomics.com/beginning-bd-smurfs-hats-origin/
120•andsoitis•15h ago•50 comments

C++20 Modules: Practical Insights, Status and TODOs

https://chuanqixu9.github.io/c++/2025/08/14/C++20-Modules.en.html
51•ashvardanian•3d ago•47 comments

Court rejects Verizon claim that selling location data without consent is legal

https://arstechnica.com/tech-policy/2025/09/court-rejects-verizon-claim-that-selling-location-dat...
580•nobody9999•14h ago•69 comments