I see that you use euclidean distance of perceptual color and named your color function bad_color_distance. My only input here would be to try something like the CIEDE2000 color difference formula to see if the result can be further improved.
Nice! I made a doom renderer with emojis some time ago, but I decided to keep the emojis bigger, so you could identify them. But I like your approach, will definitely try in my doom renderer too: <a href="https://github.com/CrociDB/doomoji" rel="nofollow">https://github.com/CrociDB/doomoji</a>
I wonder if you could use this for some kind of "secret" message.<p>Or perhaps like a parity system like RAR files had back in the day to rebuild any of the other images if one were to get lost.
So ... like <a href="https://github.com/schani/metapixel" rel="nofollow">https://github.com/schani/metapixel</a> or any other photomosaic program, but only one tile per pixel?<p>*photomosaic is a trademark of Rob Silvers.
Feels like a good match for rust's 'fearless concurrency'.<p>With the large number of emojis available, do you still get decent results if you don't use any single emoji twice?
Or encode any data into emojis: <a href="https://github.com/tejado/BaseEmoji" rel="nofollow">https://github.com/tejado/BaseEmoji</a>