diff --git a/.gitignore b/.gitignore index d49aaab6..2a13ea2c 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,9 @@ debug_cropped.png # them next to itself (plugins/stock-news/assets/logos), so without this a # local run leaves third-party logo files sitting untracked in the plugin tree. plugins/stock-news/assets/logos/ + +# nfl-draft copies its bundled logo into assets/sports/nfl_logos at start-up, +# using a path relative to the working directory. On a real install that is the +# LEDMatrix root; running the docs renderer or the harness from this repo drops +# it here instead, where it does not belong. +/assets/ diff --git a/README.md b/README.md index a7d53702..84c05e9a 100644 --- a/README.md +++ b/README.md @@ -95,8 +95,8 @@ curl -X POST http://your-pi-ip:5000/api/v3/plugins/install \ | [F1 Scoreboard](./plugins/f1-scoreboard/) | Formula 1 race results, schedules, and standings | | | [UFC Scoreboard](./plugins/ufc-scoreboard/) | UFC/MMA live fights, fighter headshots, records, odds & results — *by [LegoGuy1000](https://github.com/legoguy1000)* | | | [Masters Tournament](./plugins/masters-tournament/) | Live Masters golf leaderboard, hole tracking, player cards | | +| [NFL Draft](./plugins/nfl-draft/) | Projected & live NFL draft picks from ESPN | nfl-draft on an LED panel | | [March Madness](./plugins/march-madness/) | NCAA tournament bracket tracker with round branding and live scores | march-madness on an LED panel | -| [NFL Draft](./plugins/nfl-draft/) | Projected & live NFL draft picks from ESPN | | | [Odds Ticker](./plugins/odds-ticker/) | Betting odds & lines across NFL, NBA, MLB, NHL, NCAA | | | [Sports Leaderboard](./plugins/ledmatrix-leaderboard/) | League standings, rankings, conference records | | | [Olympics Countdown](./plugins/olympics/) | Countdown to next Olympics with live medal counts | olympics on an LED panel | diff --git a/docs/assets/nfl-draft/detail-line.png b/docs/assets/nfl-draft/detail-line.png new file mode 100644 index 00000000..3218f5d8 Binary files /dev/null and b/docs/assets/nfl-draft/detail-line.png differ diff --git a/docs/assets/nfl-draft/fonts.png b/docs/assets/nfl-draft/fonts.png new file mode 100644 index 00000000..54a1b4e2 Binary files /dev/null and b/docs/assets/nfl-draft/fonts.png differ diff --git a/docs/assets/nfl-draft/hero.png b/docs/assets/nfl-draft/hero.png new file mode 100644 index 00000000..08652000 Binary files /dev/null and b/docs/assets/nfl-draft/hero.png differ diff --git a/docs/assets/nfl-draft/panel-sizes.png b/docs/assets/nfl-draft/panel-sizes.png new file mode 100644 index 00000000..0590b36e Binary files /dev/null and b/docs/assets/nfl-draft/panel-sizes.png differ diff --git a/docs/assets/nfl-draft/shots.json b/docs/assets/nfl-draft/shots.json new file mode 100644 index 00000000..19040b59 --- /dev/null +++ b/docs/assets/nfl-draft/shots.json @@ -0,0 +1,216 @@ +{ + "plugin": "nfl-draft", + "_comment": "Picks are seeded onto the plugin instance rather than fetched from ESPN. The ticker scrolls, so shots step frames. Players and teams are the real 2025 first round, which is public record; nothing is downloaded at render time.", + "defaults": { + "width": 128, + "height": 32, + "scale": 6, + "freeze_time": "2026-04-24T20:00:00+00:00", + "skip_update": true, + "frames": 40, + "config": { + "enabled": true + }, + "attrs": { + "draft_picks": [ + { + "pick_number": 1, + "round": 1, + "round_pick": 1, + "team_abbr": "TEN", + "team_name": "Tennessee Titans", + "player_name": "Cam Ward", + "position": "QB", + "college": "Miami", + "on_clock": false + }, + { + "pick_number": 2, + "round": 1, + "round_pick": 2, + "team_abbr": "CLE", + "team_name": "Cleveland Browns", + "player_name": "Travis Hunter", + "position": "WR", + "college": "Colorado", + "on_clock": false + }, + { + "pick_number": 3, + "round": 1, + "round_pick": 3, + "team_abbr": "NYG", + "team_name": "New York Giants", + "player_name": "Abdul Carter", + "position": "EDGE", + "college": "Penn State", + "on_clock": false + }, + { + "pick_number": 4, + "round": 1, + "round_pick": 4, + "team_abbr": "NE", + "team_name": "New England Patriots", + "player_name": "Will Campbell", + "position": "OT", + "college": "LSU", + "on_clock": true + }, + { + "pick_number": 33, + "round": 2, + "round_pick": 1, + "team_abbr": "BUF", + "team_name": "Buffalo Bills", + "player_name": "Nick Emmanwori", + "position": "S", + "college": "South Carolina", + "on_clock": false + } + ], + "draft_status": "live", + "current_round": 1, + "is_draft_live": true + } + }, + "shots": [ + { + "name": "hero", + "frames": 300, + "width": 256 + }, + { + "name": "pos-on", + "frames": 300, + "width": 256, + "standalone": false, + "config": { + "show_position": true, + "show_college": true + } + }, + { + "name": "pos-off", + "frames": 300, + "width": 256, + "standalone": false, + "config": { + "show_position": false, + "show_college": true + } + }, + { + "name": "col-off", + "frames": 300, + "width": 256, + "standalone": false, + "config": { + "show_position": true, + "show_college": false + } + }, + { + "name": "font-press", + "frames": 300, + "width": 256, + "standalone": false, + "config": { + "font": "PressStart2P-Regular.ttf" + } + }, + { + "name": "font-4x6", + "frames": 300, + "width": 256, + "standalone": false, + "config": { + "font": "4x6-font.ttf" + } + }, + { + "name": "size-64x32", + "width": 64, + "frames": 300, + "standalone": false + }, + { + "name": "size-128x32", + "width": 128, + "frames": 300, + "standalone": false + }, + { + "name": "size-128x64", + "width": 128, + "height": 64, + "frames": 300, + "standalone": false + }, + { + "name": "size-256x32", + "width": 256, + "frames": 300, + "standalone": false + } + ], + "composites": [ + { + "name": "detail-line", + "columns": 1, + "cells": [ + { + "shot": "pos-on", + "label": "position and college on", + "sublabel": "#1 QB (Miami)" + }, + { + "shot": "pos-off", + "label": "show_position: false" + }, + { + "shot": "col-off", + "label": "show_college: false" + } + ] + }, + { + "name": "fonts", + "columns": 1, + "cells": [ + { + "shot": "font-press", + "label": "font: PressStart2P-Regular.ttf", + "sublabel": "the default" + }, + { + "shot": "font-4x6", + "label": "font: 4x6-font.ttf", + "sublabel": "narrower, so more fits per card" + } + ] + }, + { + "name": "panel-sizes", + "columns": 2, + "cells": [ + { + "shot": "size-64x32", + "label": "64 x 32" + }, + { + "shot": "size-128x32", + "label": "128 x 32" + }, + { + "shot": "size-128x64", + "label": "128 x 64" + }, + { + "shot": "size-256x32", + "label": "256 x 32" + } + ] + } + ] +} diff --git a/plugins.json b/plugins.json index fd2a7779..77fd7256 100644 --- a/plugins.json +++ b/plugins.json @@ -602,10 +602,10 @@ "plugin_path": "plugins/nfl-draft", "stars": 0, "downloads": 0, - "last_updated": "2026-08-05", + "last_updated": "2026-09-03", "verified": true, "screenshot": "", - "latest_version": "1.4.2", + "latest_version": "1.4.3", "icon": "fas fa-football-ball" }, { diff --git a/plugins/nfl-draft/README.md b/plugins/nfl-draft/README.md index e4f8917e..a2dca328 100644 --- a/plugins/nfl-draft/README.md +++ b/plugins/nfl-draft/README.md @@ -1,5 +1,12 @@ # NFL Draft Plugin for LEDMatrix +![A first-round pick on a 256x32 panel: the team helmet, the player name, and a +detail line reading #1 QB (Miami)](../../docs/assets/nfl-draft/hero.png) + +*Every image in this README is real plugin output, rendered at the true panel +size from seeded picks so it reproduces exactly. The picks are the real 2025 +first round; the team marks are the logo assets the plugin already ships.* + Displays projected and live NFL draft picks from ESPN on your LED matrix display. [![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-sarjent-FFDD00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/sarjent) @@ -34,8 +41,8 @@ Plugin path: plugins/nfl-draft | `font` | string | `"PressStart2P-Regular.ttf"` | Font file from assets/fonts/ | | `player_name_font_size` | integer | `12` | Font size for player names | | `detail_font_size` | integer | `8` | Font size for pick number / position / college | -| `player_name_color` | object | `{r:255,g:255,b:255}` | RGB color for player names | -| `pick_number_color` | object | `{r:255,g:255,b:255}` | RGB color for detail line | +| `player_name_color` | object | `{r:255,g:255,b:255}` | Player-name colour, as separate `player_name_color.r`, `player_name_color.g` and `player_name_color.b` values (0–255) | +| `pick_number_color` | object | `{r:255,g:255,b:255}` | Detail-line colour, as separate `pick_number_color.r`, `pick_number_color.g` and `pick_number_color.b` values (0–255) | | `scroll_speed` | number | `30` | Scroll speed in pixels per second | | `live_refresh_interval` | integer | `600` | Refresh interval during live draft (seconds) | | `projection_refresh_interval` | integer | `86400` | Refresh interval for projections (seconds) | @@ -49,6 +56,38 @@ Plugin path: plugins/nfl-draft | `simulate_live` | boolean | `false` | Replay a completed draft year as if it were live | | `simulate_year` | integer | `2025` | Draft year to use when `simulate_live` is enabled | +### After the draft ends + +| Key | Default | Notes | +|---|---|---| +| `post_draft_show` | `"both"` | What to display during the post-draft window. 'favorites' = only picks for your favorite teams, 'rounds' = per-round results for all teams, 'both' = favorite team picks followed by per-round results — one of `favorites`, `rounds`, `both`. | +| `post_draft_days` | `7` | Number of days after the draft ends to keep showing results. After this window the plugin goes silent until the following February (1–30). | +| `display_rounds` | `3` | Number of rounds to display during the post-draft window (1 = first round only, 7 = all rounds). Only applies when post_draft_show is 'rounds' or 'both' (1–7). | + +### Duration and rotation + +| Key | Default | Notes | +|---|---|---| +| `dynamic_duration.enabled` | `true` | . | +| `dynamic_duration.min_duration` | `30` | Minimum display duration in seconds. | +| `dynamic_duration.max_duration` | `300` | Maximum display duration in seconds. | +| `vegas_mode` | `"scroll"` | Override how this plugin appears in Vegas scroll mode. 'scroll' = individual picks scroll through the stream (default), 'fixed' = entire display scrolls by as one block, 'static' = scroll pauses while plugin displays for its duration — one of `scroll`, `fixed`, `static`. | + +### Settings that do nothing + +`transition.type` and `transition.speed` are in the schema and the web UI form, +and nothing reads them — not this plugin and not the LEDMatrix core, which +implements no display transitions. Four other plugins carry the same dead +block, tracked in +[issue #381](https://github.com/ChuckBuilds/ledmatrix-plugins/issues/381). + +| Key | Default | Notes | +|---|---|---| +| `transition.type` | `"redraw"` | one of `redraw`, `fade`, `slide`, `wipe`. Not implemented. | +| `transition.speed` | `2` | Transition speed (1-10). Not implemented. | +| `transition.enabled` | `true` | Enable transitions. Not implemented. | + + ## Display Layout ```text @@ -58,6 +97,21 @@ Plugin path: plugins/nfl-draft Each pick card scrolls horizontally. During live draft, a **ROUND X** label precedes the picks and the next pick shows **On the Clock** in green. +`show_position` and `show_college` each drop a piece of the detail line: + +![the detail line with and without position and college](../../docs/assets/nfl-draft/detail-line.png) + +`font` changes the face for both rows. The 4x6 face is narrower, so more of a +long player name fits before the card scrolls past: + +![PressStart2P against 4x6](../../docs/assets/nfl-draft/fonts.png) + +![The same pick on four panel sizes](../../docs/assets/nfl-draft/panel-sizes.png) + +On first run the plugin copies its bundled `nfl_draft_logo.png` into the +LEDMatrix `assets/sports/nfl_logos/` folder, so the shared sports renderer can +find it alongside the team logos. + ## Live Draft Mode The plugin detects the draft automatically — **no config change is required**. When ESPN reports `state: in`, the plugin switches to live picks, shows the current round, and marks the next pick on the clock. diff --git a/plugins/nfl-draft/manifest.json b/plugins/nfl-draft/manifest.json index 7a78d61f..b3b80fc3 100644 --- a/plugins/nfl-draft/manifest.json +++ b/plugins/nfl-draft/manifest.json @@ -1,7 +1,7 @@ { "id": "nfl-draft", "name": "NFL Draft", - "version": "1.4.2", + "version": "1.4.3", "author": "ChuckBuilds", "description": "Displays projected NFL draft picks from ESPN with live draft tracking support during the annual NFL Draft event. Includes simulate_live mode to replay a completed draft using real ESPN core API data. Shows team logos, player names, positions, and pick numbers in a scrolling display.", "entry_point": "manager.py", @@ -24,6 +24,12 @@ ], "icon": "fas fa-football-ball", "versions": [ + { + "version": "1.4.3", + "released": "2026-09-03", + "notes": "Documentation. The configuration table covered 21 of the 33 settings; the twelve it missed include the three that decide what the panel shows once the draft is over (post_draft_show, post_draft_days, display_rounds), the dynamic-duration block and vegas_mode. All 33 are now documented, with transition.type, .speed and .enabled marked as read by nothing (#381). Adds real rendered screenshots of a pick card, the show_position and show_college toggles, two of the offered fonts, and four panel sizes.", + "ledmatrix_min_version": "2.0.0" + }, { "version": "1.4.2", "released": "2026-08-19", @@ -124,5 +130,5 @@ "nfl_logos": "assets/sports/nfl_logos/" }, "license": "GPL-3.0", - "last_updated": "2026-08-05" + "last_updated": "2026-09-03" }