Unscii - a bitmapped Unicode font for blocky graphics

Unscii is a set of bitmapped Unicode fonts based on classic system fonts. Unscii attempts to support character cell art well while also being suitable for terminal and programming use.

The two main variants are unscii-8 (8×8 pixels per glyph) and unscii-16 (8×16). There are also several alternative styles for unscii-8, as well as an 8x16 "full" variant that incorporates missing Unicode glyphs from Fixedsys Excelsior and GNU Unifont. "unscii-16-full" falls under GPL because of how Unifont is licensed; the other variants are in the Public Domain.

Unscii was created by Viznut.

# UNSCII 2.0

In 2020-03-10, the new Unicode version 13.0 added 214 graphics characters for "legacy computing" (including, among all, the missing PETSCII characters, and a majority of missing Teletext/Videotex characters). Most of these were already included in Unscii 1.x, but now I have been able to give them proper Unicode mappings as well. This is the main reason for the Unscii 2.0 release.

Additionally, Unscii 2.0 fixes errors in some characters, legibility in some others and adds a bunch of new ones.

A test picture representing what is currently available in Unicode (feel free to copy-paste it to your editor to see what it looks like in other fonts):

              ╎┆┊  ╱🭽▔🭾╲    🮲🮳       🮸🮀🮵🮶🮀🮁🮁🮀🮼🯁🯂🯃      ▵        ↑        ◬
     ╶─╴╺━╸ ═ ╎┆┊ ⎹ ⎸▣⎹ ⎸  ▝▛▀▜▘ 🯲🯷🯶                   △    ▴   ╽       ◭⬘◮
    ╷┌┬┐┍┯┑╒╤╕╏┇┋ 🮷 🭼▁🭿 ⎸  ▚▌█▐▞ 🯹🯵🯱 🯰     ▁▂▃▄▅▆▇█ ◃◅◁╳▷▻▹ ▲ ←╼╋╾→     ◩⬒⬔
    │├┼┤┝┿┥╞╪╡╏┇┋ ⎹╱ ╳ ╲⎸  ▗▙▄▟▖ 🯴🯳🯸      █🮆🮅🮄▀🮃🮂▔⎹    ▽ ◂◄◀🮽▶►▸╿  ⮝   ⬖◧◫◨⬗
    ╵└┴┘┕┷┙╘╧╛┞╀┦  ▔▔▔▔▔   🬑🬜🬰🬪🬟      🮞🮟 ▕▉ ◞◡◯◡ ◎🭵    ▿    ▼   ↓ ⮜◈⮞   ⬕⬓◪
    ╻┎┰┒┏┳┓  ┭╆╈╅┮╍╍╌╌  🬥🬦🬍🬲🬵🬹🬱🬷🬌🬓🬙   🮝🮜 🮇▊◝◠◯◉◯◡◟🭴         ▾      ⮟   ◕ ⬙ ◔
    ┃┠╂┨┣╋┫ ╺┽╊◙╉┾┅┅┄┄  🬔🬡🬖🬻🬞🬭🬏🬺🬢🬒🬧      🮈▋◍ ◠◯◠◜ 🭳  ◿◺
    ╹┖┸┚┗┻┛ ━┵╄╇╃┶┉┉┈┈  🬃🬤🬫🬴🬠🬋🬐🬸🬛🬗🬇   🭇🬼 ▐▌ ◌🮣🮢 🮦 🭲  ◹◸ 🭯 🮀⚞⚟🮀  🯊     ◙◛◶─◵
     ╓╥╖   ╔╦╗┢╁┪ ┟┱┲┧  🬣🬯🬈🬬🬁🬂🬀🬝🬅🬮🬘   🭢🭗 🮉▍ 🮤🮪🮫🮥🮧 🭱  🭯 🭮◙🭬╭──╮⎫🮻⎧    ◘◙│◲┼◱╭◒╮
    ║╟╫╢🮐🮒🮐╠╬╣ ╹┃ ┡┹┺┩  🬳🬉🬩🬕🬊🬎🬆🬨🬚🬄🬶   🭊🬿 🮊▎ 🮩🮬🮭🮨  🭰 ◢🭫◣ 🮚 │ ▢ ⎮🏎⎪    ◙◚◷┼◴│◑╋◐
     ╙╨╜🮔 🮓╚╩╝   🯆 🯅  🯇     🮣🮢   🯉  🯈 🭥🭚 🮋▏🮮 🮡🮠   ⎸🭮🭪◆🭨🮛🮿🭬╰─🮯─╯⎬⎯⎨       ◳─◰╰◓╯
      ░░🮐🮑🮐▓▓██🮗🮗▤▤▥▥▦▦▩▩▧▧🮘🮘🮙🮙▨▨🮕🮕🮖🮖 🭋🭀 █▁🭻🭺🭹🭸🭷🭶▔  ◥🭩◤ 🭭      ⎮⯊⎪ ▱▰    ▭▬
      ░░▒🮎▒▓▓██🮗🮗▤▤▥▥▦▦▩▩▧▧🮘🮘🮙🮙▨▨🮕🮕🮖🮖 🭦🭛         🮰 🭇🬼🭭 🭊🬿 🭋🭀   ⎭⯋⎩ ▯▮  ▫◻□■◼▪⬝·
        🮌█🮍                 ╲╱  🭇🬼🭈🬽🭉🬾◢◣🭇🭃🭎🬼🭈🭆🭂🭍🭑🬽🭉🭁🭌🬾🭈🭄🭏🬽🭅🭐 ◦○◯⬤◖◗ ⬫⬦⬨♢◊◇◆♦⬧⬥⬩⬪
        ▒🮏▒                     🭢🭗🭣🭘🭤🭙◥◤🭢🭔🭟🭗🭣🭧🭓🭞🭜🭘🭤🭒🭝🭙🭣🭕🭠🭘🭖🭡  ∘⭘●
                                                   🭢🭗  🭥🭚 🭦🭛    •

# EXAMPLES

Here are some conversions of legacy character set art into Unscii.

Amiga ansi: Divine Stylers by Hellbeard, as rendered with unscii-16. Source

PC ansi: Ansi Love by Rad Man, as rendered with unscii-16. Source

Commodore 64 petscii pictures as rendered with unscii-8, using the 256-color xterm palette: I Has Floppy by Redcrab; The First Ball by Dr.TerrorZ; Gary by Mermaid.

The source code package includes a generic bitmap-to-unscii converter. Here's an example of a conversion to unscii-8 using the 256-color xterm palette, without dithering:

# DOWNLOADS

HEX and PCF are the only actual bitmapped formats here. HEX is the same simple hexdump format as used by the Unifont project. TTF, OTF and WOFF are vectorized.

NOTE: Due to format limitations, the PCF versions lack all the characters above U+FFFF! However, all the new graphics characters are provided in the good old PUA range as well. A mapping is in the file uns2uni.tr.

| unscii-16: hex pcf ttf otf woff unscii-16-full: hex pcf ttf otf woff 8x16. The latter is recommended for serious terminal use where a large Unicode coverage is needed. (Warning: unscii16-full files range from 2 to 12 megabytes in size; the others range from 40 to 400 kilobytes.)
| unscii-8: hex pcf ttf otf woff
| unscii-8-tall: hex pcf ttf otf woff Double-height version of unscii8.
| unscii-8-thin: hex pcf ttf otf woff Based on system fonts with 1-pixel-wide lines.
| unscii-8-alt: hex pcf ttf otf woff Based on the more peculiar glyph forms of the reference fonts.
| unscii-8-mcr: hex pcf ttf otf woff Based on retrofuturistic MCR-like 8×8 fonts used in various games, demos, etc.
| unscii-8-fantasy: hex pcf ttf otf woff Based on fonts used in fantasy games.
| Source code for current Unscii version (2.1) Source code for Unscii 2.0 Source code for Unscii 1.1

# BACKSTORY

Years ago, I noticed that Unicode had a bunch of pseudographic characters that could be used to enrichen Ansi art. However, no one seemed to use them. Even MUDs that used the 256-color Xterm palette and had no issues with Unicode still preferred to stick to the blocks available in the MS-DOS codepage 437.

After looking into existing Unicode fonts, the reason became obvious: the implementation of non-CP437 graphics characters was shaky at best. Unicode Consortium doesn't even care how pseudographics are implemented. It was a kind of chicken-and-egg problem: No commonly accepted Unicode graphics font, no Unicode art scene; no art scene, no font support. The idea of an art-compatible Unicode font was born.

For Unscii, I studied a bunch of classic system fonts and how their characters had been used in Ascii and "extended-Ascii" art.

8×8 system fonts can be divided in two major categories according to their line thickness: 1-pixel and 2-pixel. 2-pixel-wide lines are used in more prominent classic systems, so I chose it. Also, 2-pixel 8×8 system fonts are surprisingly similar to one another which made it easier to choose neutral shapes.

The basic look of the 8×8 variant of Unscii is based on the following systems:

- Amiga (Topaz-8)
- Amstrad CPC
- Atari 8-bit (as in 800, XL etc.)
- Atari Arcade (the iconic ROM font)
- Atari 32-bit (as in ST etc.)
- BBC Micro (graphics mode font)
- Commodore 64
- IBM PC (the 8×8 ROM font as in CGA, or VGA 80×50)

The 8×16 variant of Unscii has been mostly derived from the 8×8 variant by using a set of transformation principles. When in doubt, the following fonts have been looked at for additional reference:

- Windows Fixedsys 8×15 (and its modern successor Fixedsys Excelsior)
- IBM PC VGA ROM font(s) (and their modern successor U_VGA)
- X Window System fonts 8x13(B) and 9x15(B)
- Classic Macintosh 12-point Monaco
- Digital VT420 10×16 font (used in the 80×24 mode)
- Modern monospaced vector fonts: DejaVu Sans Mono, Lucida Console, Inconsolata

In general, neutral shapes are preferred, unless art, legibility or readability require otherwise: The characters /\XY are connective because of their connetive use in ascii art, and the serifs in iIl are longer than in most classic systems.

Whenever a 8×16 shape has not been defined, Unscii falls back to height-doubled 8×8.

I also studied game fonts and thin-line system fonts. This resulted in the variants unscii-8-thin, unscii-8-mcr and unscii-8-fantasy.

When studying legacy character sets, I found literally hundreds of characters without proper Unicode codepoints. These are mapped in the PUA range as follows:

- U+E080..E0FF: Teletext/Videotex block mosaics.
- U+E100..: The most prominent and useful non-Unicode pseudographics: everything found in PETSCII, Videotex smooth mosaics, extra shades, round corners, X/Y doublers.
- U+E800..: Somewhat stranger but still potentially useful: junctions with border-aligned lines, diagonal line junctions, non-straight lines, weirder fill patterns, etc.
- U+EC00..: Total oddities. Mostly game-oriented bitmaps and other depictive characters from Sharp MZ, Aquarius, etc.

Since Unicode 13.0, many of these are also available in Unicode, but the PUA mappings are retained for compatibility.