[HN Gopher] Nanofont3x4: Smallest readable 3x4 font with lowercase
       ___________________________________________________________________
        
       Nanofont3x4: Smallest readable 3x4 font with lowercase
        
       Author : lsferreira42
       Score  : 185 points
       Date   : 2024-03-17 16:39 UTC (6 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | msarchet wrote:
       | Just this morning I have been working on a font rasterizer for an
       | eink screen project. So it's really interesting to see one this
       | small.
        
         | tripflag wrote:
         | if you're in the market for something slightly bigger, I've
         | found this font to be useful on lowish-res (640x480) displays:
         | https://github.com/josuah/miniwi
        
           | tomcam wrote:
           | The size of the characters in pixels is not given in their
           | readme, nor could I find it easily in the config files. Can
           | you tell me how big the characters in its readme are?
        
             | LukeShu wrote:
             | looks like 3x5, or 4x8 if you include the whitespace
        
               | medstrom wrote:
               | The lowercase "s" is only 4 px tall. The "f" and "y" add
               | 2 px above and below, so the total reserved height must
               | be 8px. Then 2 more px for whitespace, so 10.
        
       | FergusArgyll wrote:
       | Readable is a very strong word
        
         | ocrow wrote:
         | They're really stretching the definition of readable.
        
           | BolexNOLA wrote:
           | Yes but their bar is "readable" not "very readable by all
           | without effort," so I'm not sure why y'all find this so usage
           | so objectionable. Yeah it wasn't easy but I was definitely
           | able to read the example text on my phone as-is/without
           | zooming or anything.
        
             | wkat4242 wrote:
             | Meh in that case even a barcode is 'readable'.
        
             | lolinder wrote:
             | The upper case letters are fine (impressive, considering
             | the resolution), but there's no way I could read the lower
             | case if I didn't already know the text.
        
       | baking wrote:
       | This brings back some memories, but my eyesight is worse than it
       | was 50 years ago, so no.
        
       | nickdothutton wrote:
       | Like some in-game text/graphic from my 8-bit days. I was a big
       | Tau Ceti/Academy player.
        
       | johnklos wrote:
       | I can finally have 85 characters by 48 characters on my Sinclair
       | ZX81, and it'd be printable, too, on my T/S 2040 printer.
       | 
       | (starts thinking in Z80...)
        
         | chx wrote:
         | Which leads to the question: what is the smallest Z80 assembly
         | function which takes an ASCII code as an input and returns one
         | of these characters some way? 3x4 is 12 bits so with a little
         | waste one can fit it into a 16 bit register pair. You could
         | thus encode it into a 96*2=192 byte lookup table but isn't
         | there some procedural generation to shrink that?
        
           | volemo wrote:
           | I believe a table and a lookup function would be smaller than
           | a function for generating bitmaps: just for a single pixel
           | I've got this expression [1].                 [1]: not(c0)
           | and not(c2) and c3 and not(c4) and c5 and not(c6) or not(c0)
           | and c2 and c3 and not(c4) and c5 and c6 or c0 and c2 and
           | not(c3) and c4 and not(c5) and c6 or c0 and not(c1) and c2
           | and c3 and c4 and c6 or c0 and c1 and not(c2) and c3 and c4
           | and c6 or not(c1) and not(c3) and not(c4) and c5 and c6 or
           | not(c2) and c3 and c4 and not(c5) and not(c6) or not(c0) and
           | c1 and not(c3) and c5 and not(c6) or not(c0) and c1 and
           | not(c2) and not(c3) and c4 or not(c0) and c1 and c3 and
           | not(c4) and c5 or c1 and c3 and not(c4) and c5 and c6 or c1
           | and c2 and c4 and not(c5) and not(c6) or c0 and not(c1) and
           | not(c4) and c5 and not(c6) or c0 and not(c2) and not(c4) and
           | c5 and c6 or c0 and c1 and not(c3) and c5 and c6 or not(c0)
           | and not(c1) and c4 and not(c5)
        
         | johnklos wrote:
         | Oops. It's 3x4 inside of a 4x5 box, meaning a Sinclair ZX81 can
         | only do 64 x 38 :(
        
       | sxp wrote:
       | If you're interested in other tiny fonts:
       | 
       | - PICO-8's 3x5 font with support for programming characters:
       | https://www.lexaloffle.com/pico-8.php?page=faq
       | 
       | - Ken Perlin has an RGB stripe subpixel font. Unfortunately, the
       | original page uses Java so I can't access it, but
       | https://www.fastcompany.com/1662778/the-worlds-smallest-legi...
       | has more info.
       | 
       | - Dotsies if you're willing to try very strange encodings:
       | https://dotsies.org/
       | 
       | - https://news.ycombinator.com/item?id=33127419 has more
       | examples.
        
         | accrual wrote:
         | A favorite of mine is the MonteCarlo Programmer Font [0]. I
         | used it as my terminal font for a couple years.
         | 
         | [0] https://www.bok.net/MonteCarlo/
        
         | dheera wrote:
         | 3x4 = 12 bits
         | 
         | 52 upper/lower case letters + 10 numerals [?] 64 = 6 bits
         | 
         | It's kind of amazing that the overhead is only a factor of 2 to
         | literally read BINARY data with my eyes.
        
         | Avshalom wrote:
         | obviously 8x8 is comparably enormous but
         | https://damieng.com/typography/zx-origins/ has a great
         | collection of fonts
        
       | gitgud wrote:
       | Uppercase is impressive for 3x4 pixels. Lowercase is pretty much
       | unreadable...
        
         | skygazer wrote:
         | You learn to read it, or at least I did as a child trying to
         | use a small font on the c64 when connected to BBSs, so I could
         | see ascii art without wrapping. It takes reminders like this to
         | realize how awash in high density pixels we are now.
        
       | snowpid wrote:
       | Does anyone know the size of the font from the first Pokemon
       | games? They had similar constraints.
        
         | msk-lywenn wrote:
         | It's 7 pixels high, like most games on that platform, because
         | it fits with the 8x8 tiling system (if you had the space
         | between lines)
         | 
         | https://github.com/pret/pokered/blob/master/gfx/font/font.pn...
        
         | LukeShu wrote:
         | 8x8 tiles; most characters fit in 7x7 to allow for 1px between
         | characters
        
       | wkat4242 wrote:
       | I see I have a slightly different interpretation of the word
       | 'readable' lol.
        
       | Anotheroneagain wrote:
       | Minuscule gets down to 2; 3 and above don't even look that weird.
       | Maybe that pixel fonts are not the optimal choice.
        
       | hulitu wrote:
       | > Nanofont3x4: Smallest readable 3x4 font with lowercase
       | 
       | Readable by who ?
        
       | neverokay wrote:
       | Don't let the lawyers find this font.
        
       | mgaunard wrote:
       | Not that readable.
        
       | pavl wrote:
       | Is this downloadable somewhere as TTF?
        
       | 3rd3 wrote:
       | A nano font but huge images. The large image is a 4873 KB bitmap
       | which can be losslessly compressed to 47 KB using PNG.
        
         | vardump wrote:
         | Nowadays it's often hard to even notice a 4 MB file, especially
         | when you're on a gigabit connection or better.
         | 
         | Of course unfortunately not everyone has a connection like
         | that. But can understand how someone might have missed it.
        
           | andenacitelli wrote:
           | This is sometimes so hard to remember. There's so much
           | content on optimizing for page size -- and admittedly, it
           | does matter a lot in some industries like e-commerce and/or
           | if you have users in less developed countries -- but quite a
           | lot of situations kind of just let you ignore it.
           | 
           | I work in B2B and we frankly put way more effort in than we
           | should have to optimize bundle size before just making the
           | assumption that everyone has a good connection and we didn't
           | really need to worry about it.
        
         | dheera wrote:
         | Github also loads something like 4.6MB of JavaScripts and other
         | crap, according to chrome dev tools, so ...
        
       | samatman wrote:
       | I propose that this sort of font be called "decipherable" rather
       | than "readable".
       | 
       | I could learn to read this. I can kinda-sorta make out the
       | example, because I already know the Declaration of Independence.
       | Is it readable the way, say, this text is? Or the PICO-8 font?
       | No.
        
         | kuboble wrote:
         | I think any font which is decipherable becomes readable with
         | practice.
         | 
         | The characters in the font are unique and clear so learning to
         | read it should be easier that say reading using some completely
         | unknown alphabet.
         | 
         | This font should be easier to read than most people's hand
         | writing.
        
           | semi-extrinsic wrote:
           | The lowercase characters are non-unique, which may be what GP
           | was referring to. For instance "ox" and "co" can only be
           | distinguished by context.
        
             | vpribish wrote:
             | if more than one bit of color was allowed you could make
             | different levels of grey/opacity hint at where the opening
             | in the symbol should be. just as learnable and now it's
             | unique.
             | 
             | taken to a silly extreme, you could compress 26 letters
             | into 2 pixels, 3 colors, and 3 levels of opacity. before
             | even considering a time-dimension.
             | 
             | a mantis shrimp just needs one pixel with color.
        
           | samatman wrote:
           | Many people's handwriting is best described as "decipherable"
           | as well, yes.
           | 
           | A readable font takes no practice to read, presuming you
           | already read the script of the font and the language of the
           | text. A decipherable one can be sort of limped through at
           | first and probably picked up to fluency with experience.
           | Although, as the article notes, this font has homonymous
           | glyphs, there are only a few words where that creates
           | ambiguity, and as few as none where it would be ambiguous in
           | context.
        
       | hinkley wrote:
       | I worked on project planning software years ago. We got caught in
       | a loop arguing about fonts and data density.
       | 
       | We were getting lots of clipping of text and I asserted that even
       | a couple more characters on the screen would improve people's
       | abilities to guess what the entire phrase was. You can derail
       | momentum in project management meetings by having people ask what
       | something says repeatedly. Seen it happen, it's dumb and we can
       | fix it.
       | 
       | So it came down to a shootout. We put five fonts on a projector
       | screen, at multiple font sizes, stood everyone against the back
       | wall of the fairly average sized meeting room (maybe 70th
       | percentile), and had them vote.
       | 
       | Verdana 13pt won for legibility, even over some of the 14 pt
       | fonts. It also got more characters per inch, so win win.
       | Something in the range of 5-10%.
       | 
       | Then corporate made us change it back because their flagship app
       | used a different font and they wanted them to match. Which made
       | no goddamned sense because they weren't even used together.
        
       | dsp_person wrote:
       | > In case you are interested, there are a total of 65,536 4x4
       | monochrome glyphs. Here is a uber texture atlas that shows all of
       | them with our glyphs highlighted (red) where they are in the
       | table.
       | 
       | So did this font exist all along and was simply discovered?
       | 
       | And same goes for everything we create, but just in higher
       | dimensions??
        
         | rcxdude wrote:
         | https://en.m.wikipedia.org/wiki/The_Library_of_Babel
        
           | dsp_person wrote:
           | https://en.wikipedia.org/wiki/Permutation_City
        
       | junon wrote:
       | Unlike the flagrant dismissal in other comments I actually find
       | use for projects like these. On some electronics that I write
       | firmware for the OLED screen space real estate is incredibly
       | limited, and when they need to output logs or debug info for
       | developers it can be a pain to fit everything in a way that is
       | usable, especially when there is no input to allow for scrolling
       | or whatever.
        
         | fnordpiglet wrote:
         | This. As soon as I saw this I thought "oh neat that'll come in
         | use for my electronics displays"
        
         | volemo wrote:
         | I'd argue that character count advantage of this 3x4 versus say
         | PICO-8's 3x5 is overshadowed by the loss of readability.
        
         | gillesjacobs wrote:
         | The lowercase is nigh unreadable but the all uppercase example
         | is not too bad.
         | 
         | Would be cool to integrate in my split keyboard OLED screens in
         | ZMK firmware.
        
         | lynndotpy wrote:
         | Yes!
         | 
         | For all the discussion here, I feel like the README answers it.
         | It was a fun project with a few use cases.
         | 
         | > Once the novelty wears off a "practical" example would be
         | rendering "in-game book pages" that don't look like complete
         | gibberish, or an "accurate print preview" with real text
         | instead of blurry placeholder pixels that don't even look close
         | to being the glyphs scaled down.
         | 
         | This seems very reasonable. They put it out there in case
         | someone found it usefuo.
        
         | gillesjacobs wrote:
         | > Once the novelty wears off a "practical" example would be
         | rendering "in-game book pages" that don't look like complete
         | gibberish, or an "accurate print preview" with real text
         | instead of blurry placeholder pixels that don't even look close
         | to being the glyphs scaled down.
         | 
         | Low-res or LoD video game textures are a bit of a stretch but
         | could be cool.
        
       | dougmwne wrote:
       | Whe I was in high school I had plenty of dull classes to sit
       | through. I'm old enough that there were no phones and laptops to
       | keep entertained.
       | 
       | My parents had a laser printer for their business. I realized
       | that it had a very high DPI and also very little ink bleed. I
       | started printing whole books I downloaded at the smallest font
       | size that I could managed to still read, just a few point. I
       | removed line breaks and printed out whole books on a page or two.
       | I found it incredible how much tiny text I could fit on a page.
       | 
       | In class I would read with a little half folded sheet of paper
       | hidden in a notebook. Sci-fi, Russian lit, biographies, classics.
       | I was never caught, but it's bizarre to think back that I was
       | reading Crime and Punishment while the rest of the class was
       | learning fake American history propaganda.
        
         | arketyp wrote:
         | > Sci-fi, Russian lit, biographies, classics. I was never
         | caught, but it's bizarre to think back that I was reading Crime
         | and Punishment while the rest of the class was learning fake
         | American history propaganda.
         | 
         | Sounds possible your teachers figured as much and let it slide.
        
           | dougmwne wrote:
           | I did eventually show a teacher and they were shocked. Their
           | older eyes had no way of focusing on the text and they could
           | barely tell it was anything but a sheet with grey lines.
        
         | pvg wrote:
         | _I was reading Crime and Punishment while the rest of the class
         | was learning fake American history propaganda._
         | 
         | You were simply unaware of the classmates who were secretly
         | mastering the tiny 3d printed blade.
        
       | userbinator wrote:
       | I think 5x7 is the smallest size where characters are still fully
       | recognisable, which is why it's used on all common character
       | LCDs. Beyond that, with things like this font, reading becomes
       | more of a "recognise vaguely evocative custom glyphs" exercise.
        
         | klabb3 wrote:
         | English speaker detected! Half kidding, but in my language that
         | would be difficult. AAO
        
           | kiicia wrote:
           | ACELNOSZZ
        
         | tom_ wrote:
         | The Atari ST had a 6x6 font (5x5 for most glyphs, 5x6 including
         | descenders) that took surprisingly few liberties with the lower
         | case chars. I'm going by memory, but this looks like an
         | accurate rendition:
         | https://fontstruct.com/fontstructions/show/876150/atari_st_6
         | 
         | Lower case "a", "e" and "i" are not ideal, but the rest look
         | pretty good to my eyes! (The OS used this for icon titles, so
         | there was only ever 1 row at a time. Probably recommended.)
        
         | grumbel wrote:
         | DSLinux[1] used a 4x6 font for the terminal, I found that
         | surprisingly usable.
         | 
         | [1] https://www.dslinux.org/dslinux-cpuinfo.jpg
        
       | hammock wrote:
       | >Smallest readable 3x4 font with lowercase*
       | 
       | *Roman alphabet
        
       | ramijames wrote:
       | "Readable."
        
       ___________________________________________________________________
       (page generated 2024-03-17 23:00 UTC)