The concept is simple! Each minute (by default), a new word appears. Leave the app running in the background while you work. If an unfamiliar word appears, return to the app for more info.
Offline use is supported! An install button will appear in/by the address bar, allowing you to save the app to your desktop and use it offline.
Support for LED Matrix Modules with the following firmware: sigroot/FW_LED_Matrix_Firmware. This firmware performs favorably on grayscale mode (though the default firmware also works perfectly fine on grayscale mode). Firmware type detected automatically.
The above change was a brief tangent from the main functionality, which I will now return to.
Thank you for checking out the project! And thanks for your work on the modules. It’s been a lot of fun working with them.
I was fortunate to find a font that looked good even with anti-aliasing. I’m simply rendering it to an OffscreenCanvas, then ignoring pixels below 75% brightness. It’s a bitmap font, but the browser is clearly ignoring the bitmap strikes. Chrome’s Skia and/or DirectWrite (on Windows) are likely to blame, as DirectWrite ignores embedded bitmaps outside of very specific scenarios (source 1, source 2). Very few fonts actually fulfill the requirements to use bitmap strikes (MS Gothic is an example, and it looked perfect on the matrices). For text rendering, the browser has no option to disable anti-aliasing, which is absolutely detrimental for small CJK fonts.
I did end up converting the TrueType font to WOFF2, since the bitmaps weren’t being used. Sure enough, this dropped the EBDT/EBLC (embedded bitmap) tables. And sure enough, the final appearance was unchanged. Size reduced drastically.
To be truly cross platform, I should’ve sidestepped the browser’s font engine entirely and used sprite sheets. Something like Font To Bitmap Converter 🛠️ by stmn should’ve helped. (or, just render at double size and then downsample.)
Oooh a 9x9 bitmap font. Those are some incredibly compact characters
I like how the official firmware abstracts away the two dimming mechanisms. For the others, I did have to learn why PWM is generally preferred for controlling brightness. On the other hand, the USB HID firmware is definitely less finicky than both serial ones. Web Serial’s underlying streams clearly have multiple optimizations and can break up and/or coalesce payloads on both reads and writes, and ironically, it costs so much more performance to deal with it. I totally blame it on Web Serial.
Oh I see, I guess we are kind of using serial not the way the API expects it.
I chose serial over HID because the bandwidth is much higher and theoretically allows users to render much faster animations.
I also just noticed your touchpad spacer looks 3d printed - nice!
Oh wow yeah I wasn’t even aware of the bandwidth limitation until I looked it up just now. Seems like there’s some other gotchas I didn’t encounter personally.
Yep, I purchased the spacer from a member of the community! (Still hoping we get an official full-width touchpad module some day, haha)