Font Table Improved!
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.
- font_table_screenshot.png 612 KB
- font_table_demo.zip 7.23 KB
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
1 Posted by lastvector on 17 Sep, 2024 05:12 PM
thank you, John
I added the name of the font
gottfried
2 Posted by abdu on 18 Sep, 2024 11:22 AM
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.
Support Staff 3 Posted by john on 18 Sep, 2024 11:56 AM
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 Posted by abdu on 18 Sep, 2024 08:36 PM
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 ¦ )
Support Staff 5 Posted by john on 19 Sep, 2024 12:23 AM
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
Support Staff 6 Posted by john on 01 Oct, 2024 07:59 AM
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:
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:
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.