It’s been a while since I’ve posted one of my technical progress reports, so here goes.
This project has been through a few text renderers in its day. First, we had an entirely manual Windows-only renderer (easySUP), then a scriptable and mostly-but-not-quite cross-platform one (Pango). Currently, the project is using Chrome – or to be more accurate, Chromium, the open-source project behind Chrome and other Chrome-like web browsers. This has solved a lot of problems. It’s scriptable, it’s truly cross-platform, and it easily deals with the complicated technical requirements behind rendering some of our non-Latin scripts.
But there’s always something, and I’ll just come out and say it. I hate the way Chrome renders text on Windows. Firefox does way better at this. I hated Chrome’s text rendering even as I moved the project to Chrome, hoping it would someday get better. There are lots of bugs filed on this, all lumped under a single uber-bug here. The gist is this: Chrome’s text is too light, too thin, too spindly. Bold text looks more like semibold, semibold looks more like medium, medium looks more like regular, and so on. That doesn’t mean that text is bad or unreadable or even unpleasant (some people prefer it this way, and that’s okay), but it does mean that the appearance of the text differs from the intent of the person who chose that font and weight. And for subtitles, that’s important.
With subtitles, you want your text a little on the thick side, so they don’t get lost against a busy, moving background. Some people use bold subtitles, but that’s a little hardcore for my tastes – I prefer to ease it back one step. In my opinion, semibold is the ideal font weight for subtitles. Thick enough to really stand out, but not so thick it draws too much attention to itself. But, for the past few releases, Project Threepio’s subtitles have been a touch lighter than that, and I just tolerated it because Chrome solved so many other problems for me. And the difference is honestly subtle – most people couldn’t distinguish Medium from SemiBold, and I knew this was the sort of thing that was likely bothering only me. I could have switched everything to Bold, but the result was still slightly thicker than SemiBold on Windows, and it’d screw up non-Windows platforms, where Bold is Bold and SemiBold is SemiBold.
But if you follow that link to the Chromium bug report, you’ll see that progress has been glacial. This does not seem to be a Chromium project priority. Edge implemented a fix called enhanced-text-contrast and it works as advertised. But not only is that fix unavailable on other Chromium-based browsers, it’s still experimental on Edge and turned off by default. The default state is very important to me, because when running in headless scripted mode, you can’t always configure esoteric options – you mostly just run with the defaults.
So, while researching my options, I stumbled across an old fork of Chromium, called GDIChromium. The reasons for creating this fork were somewhat different than what I was looking for, but the resulting text is definitely what I wanted. The fork is old and doesn’t look maintained, so I would definitely not recommend it for day-to-day browsing, but it’s new enough that the headless scripting works. I’ve tried it out, and things look very good. Ideally Chromium will get around to fixing its text rendering on Windows, but until then, I think I’ve found a fine stopgap solution.
So, to make a long story short, I’m re-working the subtitle rendering script yet again, and the next release will likely have very slightly, perhaps imperceptibly to most, thicker subtitles.