- Show support on Youtube: https://www.youtube.com/@ChuckBuilds
- Stay in touch on Instagram: https://www.instagram.com/ChuckBuilds/
- Want to chat or need support? Reach out on the ChuckBuilds Discord: https://discord.com/invite/uW36dVAtcT
- Feeling Generous? Support the project:
- Github Sponsorship: https://github.com/sponsors/ChuckBuilds
- Buy Me a Coffee: https://buymeacoffee.com/chuckbuilds
- Ko-fi: https://ko-fi.com/chuckbuilds/
Display custom scrolling or static text messages on your LED matrix with configurable fonts, colors, and animations.
- Scrolling Text: Smooth horizontal scrolling animation
- Static Text: Centered text display
- Custom Fonts: Support for TTF and BDF fonts
- Custom Colors: Configurable text and background colors
- Adjustable Speed: Control scroll speed
- Auto-sizing: Automatic text width calculation
- Gap Control: Configurable gap between scroll loops
{
"enabled": true,
"text": "Subscribe to ChuckBuilds!",
"font_path": "assets/fonts/PressStart2P-Regular.ttf",
"font_size": 8,
"scroll": true,
"scroll_speed": 1,
"scroll_delay": 0.01,
"scroll_loop": true,
"scroll_gap_width": 32,
"target_fps": 120,
"text_color": [255, 0, 0],
"background_color": [0, 0, 0],
"display_duration": 10
}The full schema lives in
config_schema.json — the web UI form is generated
from it. Key options:
| Key | Default | Notes |
|---|---|---|
enabled |
false |
Master switch |
text |
"Subscribe to ChuckBuilds" |
The message to display |
font_path |
assets/fonts/PressStart2P-Regular.ttf |
Path to TTF or BDF font file |
font_size |
8 |
Font size in pixels |
scroll |
true |
Enable horizontal scrolling animation |
scroll_speed |
1 |
Speed multiplier (≈ pixels per frame). Higher = faster. |
scroll_delay |
0.01 |
Sleep between scroll steps in seconds. Lower = smoother but more CPU |
scroll_loop |
true |
Loop the text instead of stopping after one pass |
scroll_gap_width |
32 |
Pixels of space between scroll loops |
target_fps |
120 |
Target frames per second cap for scroll rendering |
text_color |
[255, 255, 255] |
RGB text color |
background_color |
[0, 0, 0] |
RGB background color |
display_duration |
10 |
Seconds the plugin holds the screen |
update_interval |
60 |
Seconds between plugin update ticks |
For text that fits on screen:
{
"text": "HELLO",
"scroll": false,
"font_size": 12
}For longer messages:
{
"text": "This is a long message that will scroll across the display",
"scroll": true,
"scroll_speed": 40
}{
"text": "ALERT!",
"text_color": [255, 0, 0],
"background_color": [0, 0, 0],
"font_path": "assets/fonts/PressStart2P-Regular.ttf",
"font_size": 10
}Most common, widely available:
{
"font_path": "assets/fonts/PressStart2P-Regular.ttf",
"font_size": 8
}Optimized for LED matrices:
{
"font_path": "assets/fonts/4x6.bdf",
"font_size": 6
}- Adjust speed for readability:
scroll_speedis a multiplier, not px/s. Values around1–2are typical; higher values scroll faster. - Tune smoothness with
scroll_delay: lower (0.005) = smoother but more CPU; higher (0.05) = choppier but lighter. - Set appropriate gap: a
scroll_gap_widthequal to your display width produces clean loops. - Test message length: very long messages benefit from a higher
target_fpscap and lowerscroll_delay.
- Center short messages: Disable scroll for text that fits
- Choose appropriate font size: Match display height
- Use contrasting colors: Ensure good visibility
- For LED matrices: Pixel fonts (BDF) work best
- For clarity: Use fonts designed for small sizes
- For style: TrueType fonts offer more options
{
"text": "WELCOME!",
"scroll": false,
"font_size": 12,
"text_color": [0, 255, 0]
}{
"text": "Breaking News: LED matrices are awesome! Stay tuned for more...",
"scroll": true,
"scroll_speed": 1.5
}{
"text": "Subscribe to ChuckBuilds on YouTube!",
"scroll": true,
"scroll_speed": 2,
"text_color": [255, 0, 0]
}Text not visible:
- Check text_color is different from background_color
- Verify text string is not empty
- Check font_path points to valid font file
Scrolling too fast/slow:
- Adjust
scroll_speed(multiplier, default1). Try values between0.5and3. - For finer control, also tune
scroll_delayandtarget_fps.
Font not loading:
- Verify font_path is correct
- Check font file exists
- Ensure font file permissions are correct
- For BDF fonts, ensure freetype-py is installed
Text appears cut off:
- Reduce font_size
- For static text, ensure text fits display width
- For scrolling, text should extend beyond display
- Scrolling text uses a pre-rendered cache for smooth animation
- The render loop targets
target_fps(default 120) and sleepsscroll_delaybetween steps - Text cache is created once at first render and reused
- Font loading happens once at initialization
GPL-3.0 License - see main LEDMatrix repository for details.