Disable text anti-aliasing on all scoreboards for crisp scores - #273
Conversation
PIL anti-aliases PressStart2P/pixel-font glyphs by default, which blends edges into dim partial-lit pixels on a 1:1 LED matrix -- muddying score digits (a "6" could read as a "G"). Sets draw.fontmode = "1" in the outline-drawing text helper of every scoreboard plugin (football, hockey, basketball, soccer, nrl, lacrosse, afl, ufc, cricket, f1, plus baseball's odds overlay and march-madness), matching the fix baseball-scoreboard's main renderer already shipped. Regenerated the football and soccer golden images that captured the old anti-aliased text; f1's goldens and football's adaptive-mode goldens were already crisp and needed no change. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S4ZW42WDNcFpmEKaDEFwZ7
|
Warning Review limit reached
Next review available in: 54 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (12)
📝 WalkthroughWalkthroughThe PR disables Pillow font anti-aliasing across 12 scoreboard plugins by using 1-bit rendering. It updates each plugin’s patch version, release history, and the catalog metadata date and versions. ChangesScoreboard text rendering
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 0 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
The Plugin Safety CI gate (check_manifest_version_fields.py) requires the newest versions[] entry to declare a core-version floor. The version bumps in the previous commit didn't carry one forward, unlike every prior entry in these manifests. Add ledmatrix_min_version: "2.0.0", matching the floor every older entry already declares. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S4ZW42WDNcFpmEKaDEFwZ7
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/afl-scoreboard/manifest.json`:
- Around line 21-25: Add the ledmatrix_min_version field with value "2.0.0" to
the new 1.6.2 release record in the manifest, alongside its released date and
notes, using the current field name rather than deprecated ledmatrix_min.
In `@plugins/baseball-scoreboard/manifest.json`:
- Around line 33-37: Add the actual ledmatrix_min_version field to the new
versions[0] release entries in plugins/baseball-scoreboard/manifest.json lines
33-37, plugins/basketball-scoreboard/manifest.json lines 21-25,
plugins/cricket-scoreboard/manifest.json lines 25-29, and
plugins/football-scoreboard/manifest.json lines 27-31, preserving each release’s
existing version, date, and notes metadata.
In `@plugins/f1-scoreboard/manifest.json`:
- Around line 32-36: Add the required ledmatrix_min_version field to the 1.8.1
release record in manifest.json, using "2.0.0" or the actual supported minimum;
retain the existing version, released date, and notes fields.
In `@plugins/hockey-scoreboard/manifest.json`:
- Around line 57-61: Add the ledmatrix_min_version field with value "2.0.0" to
the 1.9.2 release object in the manifest, preserving its existing version,
released, and notes fields and using the current field name rather than
deprecated ledmatrix_min.
In `@plugins/lacrosse-scoreboard/manifest.json`:
- Around line 53-57: Update the new release records in
plugins/lacrosse-scoreboard/manifest.json lines 53-57,
plugins/march-madness/manifest.json lines 23-27,
plugins/nrl-scoreboard/manifest.json lines 21-25, and
plugins/soccer-scoreboard/manifest.json lines 29-33 to include
ledmatrix_min_version set to "2.0.0"; use this field instead of the deprecated
ledmatrix_min.
In `@plugins/ufc-scoreboard/manifest.json`:
- Around line 35-39: Add the missing ledmatrix_min_version field to the 1.3.5
entry in the manifest’s versions array, setting it to 2.0.0 to match the
previous release and using the non-deprecated field name.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: ad9e6e27-8674-40eb-9f7e-d9ea176e166c
⛔ Files ignored due to path filters (12)
plugins/football-scoreboard/test/golden/128x32/celebration_switch.pngis excluded by!**/*.pngplugins/football-scoreboard/test/golden/128x64/celebration_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x32/celebration_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x32/live_scroll.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x32/live_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x32/recent_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x32/upcoming_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x64/celebration_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x64/live_scroll.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x64/live_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x64/recent_switch.pngis excluded by!**/*.pngplugins/soccer-scoreboard/test/golden/128x64/upcoming_switch.pngis excluded by!**/*.png
📒 Files selected for processing (33)
plugins.jsonplugins/afl-scoreboard/game_renderer.pyplugins/afl-scoreboard/manifest.jsonplugins/afl-scoreboard/sports.pyplugins/baseball-scoreboard/manifest.jsonplugins/baseball-scoreboard/odds_manager.pyplugins/basketball-scoreboard/game_renderer.pyplugins/basketball-scoreboard/manifest.jsonplugins/basketball-scoreboard/sports.pyplugins/cricket-scoreboard/cricket_renderer.pyplugins/cricket-scoreboard/manifest.jsonplugins/f1-scoreboard/f1_renderer.pyplugins/f1-scoreboard/manifest.jsonplugins/football-scoreboard/game_renderer.pyplugins/football-scoreboard/manifest.jsonplugins/football-scoreboard/sports.pyplugins/hockey-scoreboard/game_renderer.pyplugins/hockey-scoreboard/manifest.jsonplugins/hockey-scoreboard/sports.pyplugins/lacrosse-scoreboard/game_renderer.pyplugins/lacrosse-scoreboard/manifest.jsonplugins/lacrosse-scoreboard/sports.pyplugins/march-madness/manager.pyplugins/march-madness/manifest.jsonplugins/nrl-scoreboard/game_renderer.pyplugins/nrl-scoreboard/manifest.jsonplugins/nrl-scoreboard/sports.pyplugins/soccer-scoreboard/game_renderer.pyplugins/soccer-scoreboard/manifest.jsonplugins/soccer-scoreboard/sports.pyplugins/ufc-scoreboard/fight_renderer.pyplugins/ufc-scoreboard/manifest.jsonplugins/ufc-scoreboard/sports.py
|
@coderabbitai The Generated by Claude Code |
|
Tip For best results, initiate chat on the files or code changes.
🧠 Learnings usedIf you found this review helpful, would you consider giving us a shout-out on X? Thank you for using CodeRabbit! You are interacting with an AI system. |
Summary
Score digits (and every other pixel-font glyph) rendered blurry on the LED matrix — most visibly reported on football-scoreboard's recent NFL scores. PIL anti-aliases PressStart2P glyphs by default, blending edges into dim partial-lit pixels on a 1:1 matrix, which muddies numbers (a "6" could read as a "G"). Every scoreboard's outline-drawing text helper now sets
draw.fontmode = "1"to force crisp 1-bit rendering, matching the fix baseball-scoreboard already shipped for its main renderer.Type of change
Plugin(s) affected
football-scoreboard, hockey-scoreboard, basketball-scoreboard, soccer-scoreboard, nrl-scoreboard, lacrosse-scoreboard, afl-scoreboard, ufc-scoreboard, cricket-scoreboard, f1-scoreboard, baseball-scoreboard (odds overlay only — the main renderer was already fixed), march-madness
Related issues
N/A
Test plan
scripts/check_plugin.pyfrom a core LEDMatrix checkout)Ran the core plugin-safety harness (
scripts/check_plugin.py) against all 12 affected plugins across every panel size — all render without crashes or bounds overflow. For the three plugins with committed golden images (football-scoreboard, soccer-scoreboard, f1-scoreboard), regenerated where the fix changed rendered pixels (football's celebration screen, soccer's celebration/live/recent/upcoming screens) and reviewed the diffs; f1's goldens and football's adaptive-layout goldens were already crisp (adaptive mode already picks pixel-perfect font sizes) and needed no update. Also verified with a small script that the fix eliminates all partial-lit (anti-aliased) pixels when drawing a glyph through each renderer's outline helper.Required for plugin changes
versioninplugins/<id>/manifest.jsonfor every affected plugin (patch bump)class_nameinmanifest.jsonmatches the actual class inmanager.pyexactly — unchangedentry_pointmatches the real file — unchangedREADME.mdif config keys changed — N/A, no config keys changedconfig_schema.jsonis the source of truth for the web UI form — unchangedplugins.json)Checklist
CONTRIBUTING.mdCONTRIBUTING.mdandCODE_OF_CONDUCT.mdNotes for reviewer
fontmode = "1"only affects how FreeType rasterizes glyphs, not layout, color, or timing.plugins.jsonis auto-updated by the pre-commit hook from the manifest version bumps.Generated by Claude Code
Summary by CodeRabbit
Bug Fixes
Chores