I was a rotogravure printer in another life, and this post made me a bit nostalgic. In intaglio printing you usually don't see these patterns because the electrostatic assist pulls the ink out of the cells, and the colors blend together more. It's more akin to a developed photo. I mainly remember them from having to do offset printing for the intermediate exam during my apprenticeship.
Our paper was about 3.5 meters wide, and a single roll length was 2–3 kilometers which ran for 20-30 minutes. The process delivered high quality at high speed, so we printed titles like Playboy and the IKEA catalogue in every language (for a language change we only had to swap the black cylinders, since the data was optimized so the text was mostly single color black). A print run of the IKEA catalogue, around 40 million copies, took about two months. It was brain numbing but also really zen. I miss it sometimes.
I can imagine that feeling of "being a cog in a beautiful machine" gets a lot less people these days because so many cogs are automated and so many machines are no longer beautiful.
It aims to 'knock out' some areas of the image: make them transparent in the digital image so those areas are not part of the final film. This means less of the surface of the t shirt has film on it, allowing it to be breathable and flexible.
I got some DTF prints made before I knew you were meant to do this. The tutorials online required a lot of steps so I made the above for next time. Not tested for real yet.
Bravo! One of my canary projects for LLMs has been a spot color / dithering tool; very much an amateur screen printer, and it seemed a way to spark my own interest to do some multicolor prints. Suffice to say the models couldn’t handle it, but I haven’t checked in a generation or two, so this is great motivation to try again!
Yeah, if you're using lossless compression like PNG or GIF, adding a lossy step to reduce the number of colors in the palette can help.
If you're compressing photos, you should use JPEG or WebP.
Anecdotally, JPEG usually beats dithering, and WebP always does.
It's fine to dither images but please please admit that you're doing it for the aesthetic. WebP has very broad browser support and absolutely blows dithering out of the water for compression. You are not going to beat years of research and tuning with "use fewer colors".
I remember a YouTube video about "How we did the impossible and got full-motion video for this Sonic game on a system that couldn't do FMVs", and the answer was like, "Well, we used a low resolution, and then we reduced the color palette, and then we cut the frame rate, and then we did interlacing." None of that's impossible! That's like saying you built the Pyramid at Giza using only a bucket of Lego bricks! It's not the same pyramid! Anyone can use a lower resolution! It takes effort and teamwork to come up with a codec that actually compresses data without artifacts!
> Yeah, if you're using lossless compression like PNG or GIF, adding a lossy step to reduce the number of colors in the palette can help.
Depending on the image context it can also backfire, though not so much for photos, but rather screenshots. E.g. sometimes a 2 color dithered image results in a much bigger PNG than, say 16 colors without dithering, because bigger areas of uniform color compress much more efficiently. So I usually just try "everything", to find some sweet spot between file size and quality.
Is there a tool that allows you to select which area of the image to use what dithering parameters and color count for, with a live preview? I know I'll vibecode one myself just to see what it looks like, but maybe this already exists in a "real" application? Then you could e.g. use dithering on the faces, but for the background just a few colors without dithering.
.. What do you mean by "beats" here? Is the article trying to hide the fact that they're doing dithering for, among other things, artistic reasons?
A dithered image almost certainly beats a non-dithered JPEG compressed image in terms of file size, because you can JPEG compress the dithered image. Thus, if you like the look of a dithered image, you get file size reduction as a bonus.
I swear, some people on HN intentionally misinterpret and misrepresent the text of an article just to argue against it in bad faith with these smarmy "um actually" type arguments. For some reason I do not understand, Hacker News tends to surface these comments near the top of its comment sections.
> A dithered image almost certainly beats a non-dithered JPEG compressed image in terms of file size, because you can JPEG compress the dithered image. Thus, if you like the look of a dithered image, you get file size reduction as a bonus.
That's backwards. Dithering (and simulated halftoning, as in this case) adds detail/noise, making images harder to compress efficiently.
Which, more often than not, causes weird titles I’m more likely to click due to sounding curious and interesting, undoing the entire point of the feature.
I would not have clicked on “How My Images Are Dithered” but this truncated version made it sound more like an interesting bug story.
Yeah this is important when you print images, since printers can reveal banding artifacts you can’t see on a monitor. I learned this the expensive way printing a batch of large format images that had gradients in them, without dithering. This is also how I learned one way that Photoshop was for professionals and GIMP & ImageMagick weren’t; At the time (and this was years ago, to be fair), Photoshop dithered by default when going from 16 to 8 bits, while those popular open source tools did not and also did not even have good ways to do it manually by adding the right amount of noise before changing the bit depth. I don’t know what the open source tools do today, maybe they’ve fixed it, I haven’t checked.
"This is also how I learned one way that Photoshop was for professionals and GIMP & ImageMagick weren’t; At the time (and this was years ago, to be fair), Photoshop dithered by default when going from 16 to 8 bits, while those popular open source tools did not and also did not even have good ways to do it manually by adding the right amount of noise before changing the bit depth."
Yes. Photoshop does the correct thing when going 8bit via the "Mode" menu. On the other hand, if you do "Export As → PNG" and check the "Smaller file (8-bit)" checkbox, it does NOT dither, and it produces banding artifacts.
Yeah. But even if you stay in the digital realm, dithering is necessary at 8bits per component. Consider that a grayscale gradient can only have 256 distinct levels.
The counterpoint is that you should just keep your images at 10 bit minimum or 12+ bit until the OS/monitor can dither for you. Lossy compression will do much better with a 10/12 bit image than a dithered 8 bit one.
Cool effect! It feels a bit like a deep-fried meme to me, but that might just be me!
I tried doing something similar a couple of years ago and gave up after running into the exact same issues in the post. It's really difficult to replicate proper halftoning on a computer screen without getting moiré patterns and weird artifacts because of PPI, aliasing, and other stuff. Beyond that, print and screens are just fundamentally different ways of rendering things.
Very nice results, I really like the way it looks like a printed page. Image processing is addictive - once you start playing around it is hard to stop.
That one does not seem to be an undither project, it appears to be a special way to encode chroma information within a monochrome dithered image. NTSC television also encodes chroma within a grayscale signal, but that's different than black and white only.
Dither loses information, so perfectly reversible might be an unreasonable goal. But I bet you could train or fine-tune a denoiser to do a really good job. This might make a cool paper, if there’s anything at all non-standard or surprising you discover along the way.
When I mentioned "perfectly reversible", I meant the FFT itself. You run the FFT. You run the inverse FFT. Because the FFT was quantized to 0-255, you end up with a lot of stuff that doesn't belong in the image.
I vaguely recall stumbling across a site years ago that could do something like this in the browser, with various bits 'n bobs you could poke at. Can't find it now.
Why is this not a typical data augmentation method for training deep networks? It would allow the networks to learn invariants that's align with humans. Currently, I suppose none of these dithered images would be correctly classified.
Perhaps because inference on dithered images is pretty rare, not a common or popular thing to do? Otherwise, people would train on dithered images. NNs are trained on noisy images. Training with dither would not learn any other invariants besides how to see through dither, it doesn’t automatically generalize to anything else.
> This image is a halftone/thermal print styled photograph. The photo features a group of four people posing closely together indoors or in front of a windowed backdrop:
A few years ago I made this fun little app https://dithering-sigma.vercel.app/. May be interesting for someone. Source code https://github.com/zeraye/dithering.
I was a rotogravure printer in another life, and this post made me a bit nostalgic. In intaglio printing you usually don't see these patterns because the electrostatic assist pulls the ink out of the cells, and the colors blend together more. It's more akin to a developed photo. I mainly remember them from having to do offset printing for the intermediate exam during my apprenticeship.
Our paper was about 3.5 meters wide, and a single roll length was 2–3 kilometers which ran for 20-30 minutes. The process delivered high quality at high speed, so we printed titles like Playboy and the IKEA catalogue in every language (for a language change we only had to swap the black cylinders, since the data was optimized so the text was mostly single color black). A print run of the IKEA catalogue, around 40 million copies, took about two months. It was brain numbing but also really zen. I miss it sometimes.
I can imagine that feeling of "being a cog in a beautiful machine" gets a lot less people these days because so many cogs are automated and so many machines are no longer beautiful.
If you're doing halftoning with the intent to get custom DTF (direct to film) prints for t shirts, you might find this tool helpful:
https://tools.encona.com/dtf
It aims to 'knock out' some areas of the image: make them transparent in the digital image so those areas are not part of the final film. This means less of the surface of the t shirt has film on it, allowing it to be breathable and flexible.
I got some DTF prints made before I knew you were meant to do this. The tutorials online required a lot of steps so I made the above for next time. Not tested for real yet.
Bravo! One of my canary projects for LLMs has been a spot color / dithering tool; very much an amateur screen printer, and it seemed a way to spark my own interest to do some multicolor prints. Suffice to say the models couldn’t handle it, but I haven’t checked in a generation or two, so this is great motivation to try again!
> Dithering can reduce file size
Yeah, if you're using lossless compression like PNG or GIF, adding a lossy step to reduce the number of colors in the palette can help.
If you're compressing photos, you should use JPEG or WebP.
Anecdotally, JPEG usually beats dithering, and WebP always does.
It's fine to dither images but please please admit that you're doing it for the aesthetic. WebP has very broad browser support and absolutely blows dithering out of the water for compression. You are not going to beat years of research and tuning with "use fewer colors".
I remember a YouTube video about "How we did the impossible and got full-motion video for this Sonic game on a system that couldn't do FMVs", and the answer was like, "Well, we used a low resolution, and then we reduced the color palette, and then we cut the frame rate, and then we did interlacing." None of that's impossible! That's like saying you built the Pyramid at Giza using only a bucket of Lego bricks! It's not the same pyramid! Anyone can use a lower resolution! It takes effort and teamwork to come up with a codec that actually compresses data without artifacts!
> It's fine to dither images but please please admit that you're doing it for the aesthetic
They did in the article.
> My goal was to immitate a printed image.
> Yeah, if you're using lossless compression like PNG or GIF, adding a lossy step to reduce the number of colors in the palette can help.
Depending on the image context it can also backfire, though not so much for photos, but rather screenshots. E.g. sometimes a 2 color dithered image results in a much bigger PNG than, say 16 colors without dithering, because bigger areas of uniform color compress much more efficiently. So I usually just try "everything", to find some sweet spot between file size and quality.
Is there a tool that allows you to select which area of the image to use what dithering parameters and color count for, with a live preview? I know I'll vibecode one myself just to see what it looks like, but maybe this already exists in a "real" application? Then you could e.g. use dithering on the faces, but for the background just a few colors without dithering.
.. What do you mean by "beats" here? Is the article trying to hide the fact that they're doing dithering for, among other things, artistic reasons?
A dithered image almost certainly beats a non-dithered JPEG compressed image in terms of file size, because you can JPEG compress the dithered image. Thus, if you like the look of a dithered image, you get file size reduction as a bonus.
I swear, some people on HN intentionally misinterpret and misrepresent the text of an article just to argue against it in bad faith with these smarmy "um actually" type arguments. For some reason I do not understand, Hacker News tends to surface these comments near the top of its comment sections.
> A dithered image almost certainly beats a non-dithered JPEG compressed image in terms of file size, because you can JPEG compress the dithered image. Thus, if you like the look of a dithered image, you get file size reduction as a bonus.
That's backwards. Dithering (and simulated halftoning, as in this case) adds detail/noise, making images harder to compress efficiently.
Up! Very cool site, creative, slopless and with that 90/00s vibe I miss :)
Is nobody going to mention anything about the fact that one of the friends at the restaurant has no _head_ ?
Title here is missing "How" as in "How My Images Are Dithered"
That’s a hn filter to avoid clickbait titles I think
Which, more often than not, causes weird titles I’m more likely to click due to sounding curious and interesting, undoing the entire point of the feature.
I would not have clicked on “How My Images Are Dithered” but this truncated version made it sound more like an interesting bug story.
My Title Was Dithered
2 replies →
Reminded me of how Safari removes the first word from tab titles
I suppose it is a type of dithering, but really this is Halftoning
Yes, which of course is still cool. Probably the main point.
slowly. then all at once.
Ohhhh that is so cool, but I agree with the others its more halftoning. When you want to dither/pixelate an image you can use Image-to-Pixel [0].
[0]https://tezumie.github.io/Image-to-Pixel/
Didder[0] is a good tool for dithering. I use it to pre-process images for the 6-color e-ink displays.
You can go down a rabbit hole of dithering algorithms too, like Floyd Steinberg[1]
[0] https://github.com/makew0rld/didder [1] https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dither...
Every image should be dithered below 10 bits/component to prevent banding artifacts.
Yeah this is important when you print images, since printers can reveal banding artifacts you can’t see on a monitor. I learned this the expensive way printing a batch of large format images that had gradients in them, without dithering. This is also how I learned one way that Photoshop was for professionals and GIMP & ImageMagick weren’t; At the time (and this was years ago, to be fair), Photoshop dithered by default when going from 16 to 8 bits, while those popular open source tools did not and also did not even have good ways to do it manually by adding the right amount of noise before changing the bit depth. I don’t know what the open source tools do today, maybe they’ve fixed it, I haven’t checked.
"This is also how I learned one way that Photoshop was for professionals and GIMP & ImageMagick weren’t; At the time (and this was years ago, to be fair), Photoshop dithered by default when going from 16 to 8 bits, while those popular open source tools did not and also did not even have good ways to do it manually by adding the right amount of noise before changing the bit depth."
Yes. Photoshop does the correct thing when going 8bit via the "Mode" menu. On the other hand, if you do "Export As → PNG" and check the "Smaller file (8-bit)" checkbox, it does NOT dither, and it produces banding artifacts.
Yeah. But even if you stay in the digital realm, dithering is necessary at 8bits per component. Consider that a grayscale gradient can only have 256 distinct levels.
3 replies →
The counterpoint is that you should just keep your images at 10 bit minimum or 12+ bit until the OS/monitor can dither for you. Lossy compression will do much better with a 10/12 bit image than a dithered 8 bit one.
Absolutely! Higher precision is always better. But if you must go as low as 8bits, you should dither.
I'm only vaguely familiar with dithering/half-toning. What does "component" refer to here?
8 bit per component = 0-255 red, 0-255 green, 0-255 blue
Like ~99% of images you encounter on the Web.
red/green/blue
Cool effect! It feels a bit like a deep-fried meme to me, but that might just be me!
I tried doing something similar a couple of years ago and gave up after running into the exact same issues in the post. It's really difficult to replicate proper halftoning on a computer screen without getting moiré patterns and weird artifacts because of PPI, aliasing, and other stuff. Beyond that, print and screens are just fundamentally different ways of rendering things.
Recommended: https://doodad.dev/dither-me-this/
??? This is halftoning, not dithering
I’d say halftoning is a specific type of dithering. Wikipedia mentions that for print, some people consider the terms synonymous.
https://en.wikipedia.org/wiki/Dither#Applications
See also,
Surface-stable fractal dithering:
https://www.youtube.com/watch?v=EzjWBmhO_1E
And the technical deep dive:
https://www.youtube.com/watch?v=HPqGaIMVuLs
Thanks, that looks cool. This is dithering in principle, but using dynamic spot functions.
To learn more about halftones, I'd recommend PDF specification, pages 303-307.
https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/p...
>Is this even dithering?
>But if you care about the method this is not dithering.
> I looked it up, the translation in this case is, in fact, simply "half tones" :^)
Very nice results, I really like the way it looks like a printed page. Image processing is addictive - once you start playing around it is hard to stop.
Speaking of which, are there any good ways to undither images? Things like GIMP FFT are not perfectly reversible.
It's a somewhat active inverse problems research subfield https://github.com/MenghanXia/ReversibleHalftoning
That one does not seem to be an undither project, it appears to be a special way to encode chroma information within a monochrome dithered image. NTSC television also encodes chroma within a grayscale signal, but that's different than black and white only.
Dither loses information, so perfectly reversible might be an unreasonable goal. But I bet you could train or fine-tune a denoiser to do a really good job. This might make a cool paper, if there’s anything at all non-standard or surprising you discover along the way.
When I mentioned "perfectly reversible", I meant the FFT itself. You run the FFT. You run the inverse FFT. Because the FFT was quantized to 0-255, you end up with a lot of stuff that doesn't belong in the image.
1 reply →
No, although AI gets really close. Dithering represents adding noise to an image and also represents doing a lossy type of compression.
Do you want to undither, or un-half-tone, like the images in TFA?
Unhalftoning is called descreening.
I use this:
https://descreen.net/
Hmm, that gives me an idea: dithering (of generally "mogrifying") my images might make them less palatable for those pesky AIs roaming my web server …
If you like this, you might also like:
https://news.ycombinator.com/item?id=48009879
Counterpoint: https://news.ycombinator.com/item?id=29227606
It's an aesthetic choice. What counters taste?
That only says to not expect compression from dither, it’s not a counterpoint to using dither for any other reason.
I vaguely recall stumbling across a site years ago that could do something like this in the browser, with various bits 'n bobs you could poke at. Can't find it now.
This framing is spot on
It tickles me greatly how much HN’ers are fascinated by dithering. It seems like a few times per year a post about dithering makes the front page.
Why is this not a typical data augmentation method for training deep networks? It would allow the networks to learn invariants that's align with humans. Currently, I suppose none of these dithered images would be correctly classified.
Perhaps because inference on dithered images is pretty rare, not a common or popular thing to do? Otherwise, people would train on dithered images. NNs are trained on noisy images. Training with dither would not learn any other invariants besides how to see through dither, it doesn’t automatically generalize to anything else.
When someone says AI can't do something, I like to try it:
> This image features a close-up abstract scene styled with a classic halftone (Ben-Day dot) pop-art filter ...
https://share.gemini.google/O5eqZOKxwzw3
> This image is a halftone/thermal print styled photograph. The photo features a group of four people posing closely together indoors or in front of a windowed backdrop:
https://share.gemini.google/KJOxBDXYsFT4
I’m sorry, but I can’t understand what you’re saying at all. Explain?
[flagged]