Font Table Improved!

john's Avatar

john

17 Sep, 2024 04:16 AM

MORE updates and a font_gallery node further down in this thread!

I have made several improvements to my font_table node, which lists all the fonts and font families in your operating system:

  • A new "One per family" checkbox lets you filter the table to only show one representative font for each family
  • A new "complexity" column in the table allows you sort fonts on a gradient from plain vanilla san serifs to fancy serifs

Showing one representative font for each family is great for making galleries that allow you to compare a character or phrase rendered in all the font families in your system. It was a tad tricky to pull off because the font variations (bold, thin, italics, etc.) are not listed in any particular order and are named differently for each font. I developed a method that tries to pick the most regular, middle-of-the-road font for each family.

My own system has over 1300 fonts in 456 families piled in an overwhelming, haphazard heap. It is painful searching through these fonts, so I wanted some way to filter or organize them better. At first I thought I could try to distinguish between serif, sans serif, and wacky fonts, but fonts refuse to fit into such tidy buckets - there are dozens of overlapping categories - and it would take some AI power to sort them in any event.

So I came up with a simpler measure that at least provides a kind of gradient you can use to arrange fonts in some kind of order: complexity. "Complexity" is simply the number of points used in the bezier paths of all the capital letters from A to Z. The more points used, the more complex the paths: the more expressive curves, subtle flaring, serifs, flourishes, etc. It's a crude measure but it does at least partly separate the plain vanilla sans serif from the more elaborate fonts. It's better than nothing.

The demo shows the letter A in 36 different fonts, ranging from very simple in the upper left to extra fancy in the lower right. Using this technique you can make a chart of all your fonts, sorted so that similar looking fonts tend to land near each other. I find it makes scanning much easier.

As before, font_table does require an external module, font_table.py. I am curious to hear how people use this node and if they have any other feature requests.

  1. 1 Posted by lastvector on 17 Sep, 2024 05:12 PM

    lastvector's Avatar

    thank you, John
    I added the name of the font

    gottfried

  2. 2 Posted by abdu on 18 Sep, 2024 11:22 AM

    abdu's Avatar

    John, thank you for this.

    It is currently little over 15000 font installed over here... so,
    nodebox crashes immediately after I open this node.

    I dig the term "haphazard heap" though.

  3. Support Staff 3 Posted by john on 18 Sep, 2024 11:56 AM

    john's Avatar

    Abdu,

    15,000? Yikes!

    What exactly do you mean by "crashes"? Does it freeze or do you get an error message of some kind?

    Was the previous version of font_table able to list your 15,000 fonts?

    I would think it would be hard even using the textpath node with that many fonts to scroll through. Is there anything you can do to even temporarily lower the number of fonts in your system?

  4. 4 Posted by abdu on 18 Sep, 2024 08:36 PM

    abdu's Avatar

    Nodebox simply shuts itself down while processing.

    Nope, managed to open previous font_table couple of times by reducing font list via take_every node, in my case "n" was 200-ish. Tried the same thing with this one.
    It worked but when I tried to go lower (n-wise) again shuts immediately.

    Scrolling is not hard as you think when you know exactly which one to use. Scrolling takes no time. textpath is my go-to node.

    Yes there is, I am using a font manager called FontExplorer. Will do, when I decide to retire ¦ )

  5. Support Staff 5 Posted by john on 19 Sep, 2024 12:23 AM

    john's Avatar

    Interesting.

    When you say you used a take_every node, do you mean that you opened up the font_table subnetwork and inserted it just below the inner font_table node at the top?

    A clever fix.

    And you say it works when you take every 200? Does that mean the new features (the one per family option and the complexity column) both work?

    My first guess would be that this is some sort of memory limitation error. But it would probably take a little while (30 seconds?) to trigger that error. If lowering the value from 200 causes an immediate shutdown (No error? Nodebox just quits?) it might be that, by chance, changing the take_every setting causes you to include a particular font that is causing some mischief.

    Taking every 200 out of 15,000 fonts would only give you about 75 fonts. My system swallows 1300 fonts with no difficultly, so it seems strange that lowering much below 200 (which would raise the total fonts returned to still probably less than 100) would trigger the crash. This causes me to suspect a particular font or fonts is causing the issue.

    If so, you could find that font by using a slice instead of a take_every to maybe try 1000 fonts at a time until you hit the section containing the naughty font, and then slicing that slice, narrowing the window, until you find it exactly. I realize this may not be how you want to spend your spare time, but that is what I would do to get to the bottom of things and maybe find a fix. It could be that removing a single font would solve your problem.

    If the problem has to do with the sheer number of fonts, then using a slice and slowly raising the total amount until it crashes would suggest a possible upper limit. If that could be established I could look for ways around that or, at worse, set a maximum number of fonts internally to prevent crashes.

    Any more information you could provide would be greatly appreciated!

    IS ANYONE ELSE HAVING THIS PROBLEM? If so, please raise your hand.. If there is something I could do to make a non-exploding node, I would like to do that.

    John

  6. Support Staff 6 Posted by john on 01 Oct, 2024 07:59 AM

    john's Avatar

    MORE FONT TABLE UPDATES!

    First, I have added one more column to font_table: variants.

    Variants shows how many fonts are included with each family (or typeface if you prefer). This turns out to be quite useful.

    My haphazard pile of fonts divides into two basic categories: fully crafted typefaces with multiple fonts (bold, italics, etc.) and one-offs, which have only a single font. This latter category includes dingbats and other ornamental fonts, as well as just plain wacky fonts that somehow found their way into my pile.

    Having a variants column means you can filter out - or focus exclusively on - these one-offs. You can also sort and filter to find the real heavy duty typefaces - like Arno Pro which, I discovered, has a whopping 32 different fonts.

    My second addition is font_gallery, a handy node for quickly turning filtered and sorted font data into scannable, sharable charts. It takes the following parameters:

    • Font Data. Input from the font_table node.
    • Sample Text. The character or short phrase you wish to compare.
    • Columns. The number of columns in your chart. If you choose 1 column you will get a left-justified list of samples with the labels in front. If you choose more than 1 column you will get a gallery style layout with captions beneath each sample.
    • Font Size. The font size of the sample text. This is the only number you need to enter. It will affect the overall size of the chart, but not its layout.
    • Sample Color. The color of the sample text.
    • Label Color. The color of the font labels. These two colors are particularly useful if you are displaying against colored backgrounds.

    I designed font_gallery to be as easy to use as possible. Just hook up your list of fonts and go. It will do its best to choose the sizes and spacings to make the chart as readable as possible, even with short samples and long font names. Samples will be displayed in the specified font size unless they are unusually large, in which case they will be proportionally reduced in size.

    If you check the "One per family" box in font_table or filter the data so that it contains only one font per typeface, font_gallery will automatically display the family name as a label instead of the font name; otherwise, it will use the font name.

    Being able to sort and filter my fonts by both complexity and variants, and having an automatic gallery that can produce readable charts with little fiddling required, has made it much easier for me to get a handle on my font pile. I've been having fun today quickly generating charts.

    The attached demo (see screenshot) shows a simple chart with a sample of 16 one-off fonts sorted by increasing complexity. Of course the results you see on your system will be completely different. Try changing the settings on all the nodes in this demo to create charts for yourself!

    I have also attached three more charts:

    • All the multi-font typefaces in my system
    • The whopping 32 fonts in my Arno Pro typeface
    • A sample of 16 particularly complex "Oddball" fonts

    Each took only a few minutes to create and helped me see my old fonts through fresh eyes.

    Note: I will probably not include font_gallery as a separate node in v 3.5 of my library, but will instead tuck it away inside the demo. Just copy paste the whole demo and modify it whenever you need to compare font choices.

Reply to this discussion

Internal reply

Formatting help / Preview (switch to plain text) No formatting (switch to Markdown)

Attaching KB article:

»

Already uploaded files

  • font_table_screenshot.png 612 KB
  • font_table_demo.zip 7.23 KB

Attached Files

You can attach files up to 10MB

If you don't have an account yet, we need to confirm you're human and not a machine trying to post spam.

Keyboard shortcuts

Generic

? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac

Recent Discussions

01 Oct, 2024 07:59 AM
30 Sep, 2024 11:37 PM
30 Sep, 2024 11:11 AM
30 Sep, 2024 02:37 AM
28 Sep, 2024 10:33 AM

 

26 Sep, 2024 06:41 AM
24 Sep, 2024 12:32 AM
24 Sep, 2024 12:27 AM
13 Sep, 2024 12:07 AM
12 Sep, 2024 11:54 PM
07 Sep, 2024 05:16 AM