MLB Statcast widget
The day’s longest home run, replayed on your wall as the ball flies its own arc over the wall — the single most striking thing a baseball sign can show.
The baseball.statcast widget (type = "baseball.statcast", from the baseball plugin) renders MLB’s daily Statcast superlatives — longest home run, hardest-hit ball, fastest and slowest pitch — as a hero card on a wide sign or a scrolling line on a narrow one. On a long sign the batted-ball cards draw an animated trajectory: the ball takes off from the plate and traces the exact curve of the real hit. Data comes from public MLB and Baseball Savant feeds — no API key, no account, it just works.

That trajectory arc is the wide-sign look; a shorter sign draws a more compact arc card, and the narrowest shows a scrolling line — same widget, no config change.
Requires led-ticker-core >= 4.9. The demo = true mode used for the GIF on this page needs led-ticker-baseball >= 1.6.0.
Install the plugin first (steps just below this snippet), then drop it into a section:
[[playlist.section]]mode = "slideshow"hold_time = 6
[[playlist.section.widget]]type = "baseball.statcast"There are no required fields — with nothing set the widget shows league-wide superlatives. Add team = "PHI" to scope every superlative to one team’s own players.
To install the plugin on a Docker deploy, add its line to the plugin manifest and restart:
# First plugin? Create your manifest from the example:cp -n config/requirements-plugins.example.txt config/requirements-plugins.txt# Add the package (one name per line), then restart:echo "led-ticker-baseball==1.6.0" >> config/requirements-plugins.txtdocker compose restartOther install paths (web UI Store tab, dev checkout) are on the Plugins page.
Try it in demo mode
Section titled “Try it in demo mode”Set demo = true to render a fixed set of superlatives — including the 452 ft home run and its arc — with no network:
[[playlist.section]]mode = "slideshow"hold_time = 5
[[playlist.section.widget]]type = "baseball.statcast"demo = trueThis is the exact widget block that rendered the hero GIF above (its full render config is baseball-statcast.toml, a [display] at default_scale = 4 with this one section). It’s the fastest way to watch the trajectory arc without waiting for a real game to produce a superlative.
The trajectory arc
Section titled “The trajectory arc”On a long sign (layout = "long", or "auto" on a longboi ≥ 400px wide), the batted-ball cards — longest_hr and hardest_hit — draw an animated arc in the card’s DISTANCE slot: the ball takes off from the plate and flies the curve over about 1.5 seconds. This is a real replay, not a canned animation. The arc’s shape — how high it peaks, where, and how steeply it drops — is computed from the hit’s real launch angle, exit velo, and distance, so a lofted moonshot and a flat liner curve differently, and the same ball always redraws the exact same arc. Re-entering the section always flies the ball again from a standing start — it never resumes mid-flight.
Each flight rests at one of five landing poses, driven by the play’s actual result, never guessed:
- clears — a home run: the ball flies past a white wall tick at the panel’s far edge.
- fair — a non-homer hit: it comes to rest on the ground mid-panel.
- track — a deep out at or past the warning track: caught in front of a dotted amber warning-track line.
- caught — a shallower out: it rests inside a small grey glove ring.
- grounder — a ground ball, or a launch angle at or below zero: a low skip along the ground, no arc.
Pitch superlatives (fastest_pitch, slowest_pitch) have no launch angle or distance, so the card skips the arc and shows the pitch type large in that slot instead.
One widget, every sign
Section titled “One widget, every sign”On a narrow sign you get a scrolling line; on a wider or taller sign you get the trajectory-arc hero card from the GIF above — both wider builds draw the arc, more compact on a mid-width sign and full-width on the longest. You don’t pick: layout (omit it — the default "auto") resolves at draw time from your sign’s real physical width.
Not sure which you have? Most short DIY builds are smallsign (scale-1); the 256- and 512-pixel-wide panels are bigsign and longboi — see the hardware guides. New here? Get a sign running first.
| Your sign | What you see |
|---|---|
| smallsign (~160×16, scale-1) | a scrolling line (Today · Longest HR 463 ft — Butler OAK) |
| bigsign (~256px, scale>1) | the big hero card — draws the arc in a compact trajectory panel |
| longboi (~512px, scale>1) | the long hero card with the full-width trajectory panel |
Pin a shape explicitly with layout = "big" or layout = "long" (both force a hero card regardless of width). Both scale>1 cards draw the arc and show the player, the result in its outcome color (green home run, red out, amber otherwise), exit velo, and the launch-angle / distance / pitch columns; the wide long card gets the full DISTANCE panel for it.
Options
Section titled “Options”There are no required fields; everything is optional.
| Field | Type | Default | Notes |
|---|---|---|---|
team | str | unset | Scope superlatives to this team’s own players (a batter for longest_hr, a pitcher for fastest_pitch). Omit for league-wide. Case-insensitive. |
layout | "auto" / "big" / "long" | "auto" | Explicit override; omit to auto-select from real panel width — see One widget, every sign. |
stats | list of str | all four | Which lines to show, in display order: "longest_hr", "hardest_hit", "fastest_pitch", "slowest_pitch". Omit for all four. |
title | str | "Statcast" | Section title override. |
timezone | str (IANA) | system local | Timezone governing the “Today” label and the day rollover. See Scheduling. |
font_color | color / "rainbow" / "color_cycle" / "shimmer" / table | callout colors | RGB list tints the stat label and name; the day label, amber value, and team abbreviation keep their callout colors. Scale-1 only. See Color providers. |
font | str | "6x12" | Display font. A hires name needs font_size. Scale-1 only. |
bg_color | [r, g, b] | none | Background fill behind the messages. Scale-1 only. |
padding | int, px | 6 | Horizontal spacing after each line when scrolling. |
update_interval | int, seconds | 1800 (30 min) | How often to re-derive the day’s superlatives from Baseball Savant — see Data source. |
demo | bool | false | Render the fixed superlative set instead of fetching — see Try it in demo mode. |
schedule | table | none | Core visibility window — only show this widget during set hours. See Scheduling. |
Data source
Section titled “Data source”Superlatives are derived from Baseball Savant’s day CSV (via MLB’s public data) and re-derived through the day as games progress. It’s an undocumented endpoint, so the widget polls at a polite default cadence — update_interval is 1800 seconds (30 minutes) — and a small (~10 KB) schedule check skips the larger (~3 MB) data pull entirely when nothing is live or newly final. Mornings fall back to yesterday’s finals, labeled with the short date (6/12 · …). The slowest-pitch line appends the pitch name when known (69.6 mph (Slow Curve)) — where the eephus lives. With no data for today or yesterday it shows Next games: Mar 26 (offseason) or No games soon; a fetch failure shows No Data.
If it doesn’t work
Section titled “If it doesn’t work”- Nothing shows up at all — a blank panel. Most likely the widget block isn’t nested inside a
[[playlist.section]]— a bare[[playlist.section.widget]]yields zero sections and a blank sign. Every snippet on this page shows the wrapper. Also rule out that thebaseballplugin isn’t installed (see the install step above), which usually surfaces asunknown widget type 'baseball.statcast'at config-load. - The trajectory arc isn’t drawing — I only get a scrolling line. The animated arc is on the scale>1 hero cards; a smallsign always scrolls, and even a bigsign draws a compact panel rather than the full one. To watch the full arc without the hardware, set
demo = trueand render on adefault_scale = 4config. - It says “No Data” or a stale date. Early in the day there may be no completed games yet, so the widget shows yesterday’s finals (short-date labeled);
No Dataspecifically means the fetch failed — check the Pi’s internet access. Between seasons it showsNext games: <date>. - A pitch superlative has no arc. Expected —
fastest_pitchandslowest_pitchhave no launch angle or distance, so the card shows the pitch type in that slot instead of a trajectory.
Haven’t tried it yet? Try it in demo mode above takes about two minutes, no key and no network. Implementation notes live in the baseball package README.
The rest of the baseball family
Section titled “The rest of the baseball family”The baseball plugin ships four more widgets that share this data and design. Put the arc in a game-day rotation next to baseball.scores for the live game, baseball.standings for the division race, baseball.promotions so you never miss bobblehead night, and baseball.attendance for last night’s crowd. It also brings the baseball.roll* rolling-ball sprite transition and the :baseball.ball: emoji.