From 1cc5646fcea94a1b28a3d82d140b634dc1c42608 Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Thu, 3 Sep 2026 17:05:17 -0400 Subject: [PATCH] fix(march-madness): stop the final-game date landing inside the score A finished game drew its date at height - 6 with a 6px font, while the 10px score started at height - 13. The score therefore occupied rows height-13 to height-3 and the date rows height-6 to height: three shared rows, with the date sitting inside the score digits. Both are offsets from height, so this happened at every panel size rather than only on short ones, and the safety harness cannot see it -- nothing overflows and nothing crashes. The score now lifts by six rows when a date is coming. Verified at 256x32 and 256x48, the two harness shapes where a final card fits. README: real rendered screenshots of the three game states, the show_seeds, show_round_logos and highlight_upsets toggles (each hash-compared to confirm it changes the render), and four panel sizes. All 17 settings were already documented and their defaults were correct. Two corrections. show_bracket_progress is marked not implemented -- it is assigned in __init__ and never read again, so nothing on the panel changes, and the README had described it as showing which teams are still alive (#406). The highlight_upsets wording said "higher seed beating lower seed", which is ambiguous; it now says a bigger seed number beating a smaller one. Also drops three unused imports (datetime.timedelta, datetime.timezone and numpy) that pyflakes flags -- the timezone work goes through pytz. check_plugin.py: 8/8 pass. Co-Authored-By: Claude Opus 5 --- README.md | 2 +- docs/assets/march-madness/game-states.png | Bin 0 -> 23867 bytes docs/assets/march-madness/hero.png | Bin 0 -> 3426 bytes .../assets/march-madness/highlight-upsets.png | Bin 0 -> 18778 bytes docs/assets/march-madness/panel-sizes.png | Bin 0 -> 15380 bytes docs/assets/march-madness/shots.json | 301 ++++++++++++++++++ .../assets/march-madness/show-round-logos.png | Bin 0 -> 13718 bytes docs/assets/march-madness/show-seeds.png | Bin 0 -> 13426 bytes docs/assets/march-madness/smoke.png | Bin 0 -> 1411 bytes plugins.json | 4 +- plugins/march-madness/README.md | 28 +- plugins/march-madness/manager.py | 9 +- plugins/march-madness/manifest.json | 10 +- 13 files changed, 344 insertions(+), 10 deletions(-) create mode 100644 docs/assets/march-madness/game-states.png create mode 100644 docs/assets/march-madness/hero.png create mode 100644 docs/assets/march-madness/highlight-upsets.png create mode 100644 docs/assets/march-madness/panel-sizes.png create mode 100644 docs/assets/march-madness/shots.json create mode 100644 docs/assets/march-madness/show-round-logos.png create mode 100644 docs/assets/march-madness/show-seeds.png create mode 100644 docs/assets/march-madness/smoke.png diff --git a/README.md b/README.md index 812a069d..7677c729 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ 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 | | -| [March Madness](./plugins/march-madness/) | NCAA tournament bracket tracker with round branding and live scores | | +| [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 | | diff --git a/docs/assets/march-madness/game-states.png b/docs/assets/march-madness/game-states.png new file mode 100644 index 0000000000000000000000000000000000000000..96275bee9fdcd3289e80c80aeaf3f6830d955d29 GIT binary patch literal 23867 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 U@1OuW9g6pg%tnG{8%&M0}U+73>r8gdHC>Q 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 HTMzsJ4Zmp^ literal 0 HcmV?d00001 diff --git a/docs/assets/march-madness/hero.png b/docs/assets/march-madness/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..1b02e94a28fe95d81baf6a0f35d1ff420fbdbf00 GIT binary patch literal 3426 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 literal 0 HcmV?d00001 diff --git a/docs/assets/march-madness/highlight-upsets.png b/docs/assets/march-madness/highlight-upsets.png new file mode 100644 index 0000000000000000000000000000000000000000..ce82029fc84dc1ffc56a5c33450ea2ef27453664 GIT binary patch literal 18778 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 literal 0 HcmV?d00001 diff --git a/docs/assets/march-madness/panel-sizes.png b/docs/assets/march-madness/panel-sizes.png new file mode 100644 index 0000000000000000000000000000000000000000..ae91338f735162cd1331ba093114c4bc039ec851 GIT binary patch literal 15380 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 Ba@7C; literal 0 HcmV?d00001 diff --git a/docs/assets/march-madness/shots.json b/docs/assets/march-madness/shots.json new file mode 100644 index 00000000..dcfba5cc --- /dev/null +++ b/docs/assets/march-madness/shots.json @@ -0,0 +1,301 @@ +{ + "plugin": "march-madness", + "_comment": "Games are seeded onto the plugin instance rather than fetched from ESPN. Scrolling is frame-based here, so shots step frames; teams, seeds and scores are invented.", + "defaults": { + "width": 128, + "height": 32, + "scale": 6, + "freeze_time": "2026-03-21T19:10:00+00:00", + "skip_update": true, + "frames": 20, + "config": { + "enabled": true + }, + "attrs": { + "games_data": [ + { + "tournament_round": "Sweet 16", + "tournament_region": "East", + "away_abbr": "DUKE", + "away_seed": 2, + "home_abbr": "UCONN", + "home_seed": 1, + "away_score": 58, + "home_score": 61, + "is_live": true, + "is_final": false, + "is_halftime": false, + "is_upset": false, + "winner_side": "", + "period_text": "2nd", + "clock": "4:12", + "game_date": "3/21", + "game_time": "7:10 PM" + }, + { + "tournament_round": "Sweet 16", + "tournament_region": "West", + "away_abbr": "FLA", + "away_seed": 11, + "home_abbr": "HOU", + "home_seed": 1, + "away_score": 74, + "home_score": 71, + "is_live": false, + "is_final": true, + "is_halftime": false, + "is_upset": true, + "winner_side": "away", + "period_text": "Final", + "clock": "", + "game_date": "3/21", + "game_time": "7:10 PM" + }, + { + "tournament_round": "Sweet 16", + "tournament_region": "South", + "away_abbr": "PUR", + "away_seed": 3, + "home_abbr": "TENN", + "home_seed": 2, + "away_score": 0, + "home_score": 0, + "is_live": false, + "is_final": false, + "is_halftime": false, + "is_upset": false, + "winner_side": "", + "period_text": "", + "clock": "", + "game_date": "3/21", + "game_time": "7:10 PM" + }, + { + "tournament_round": "Elite 8", + "tournament_region": "Midwest", + "away_abbr": "ILL", + "away_seed": 4, + "home_abbr": "IOWA", + "home_seed": 8, + "away_score": 68, + "home_score": 80, + "is_live": false, + "is_final": true, + "is_halftime": false, + "is_upset": false, + "winner_side": "home", + "period_text": "Final", + "clock": "", + "game_date": "3/21", + "game_time": "7:10 PM" + } + ] + } + }, + "shots": [ + { + "name": "hero", + "frames": 190, + "width": 256 + }, + { + "name": "state-live", + "frames": 190, + "width": 256, + "standalone": false + }, + { + "name": "state-upset", + "frames": 310, + "width": 256, + "standalone": false + }, + { + "name": "state-upcoming", + "frames": 395, + "width": 256, + "standalone": false + }, + { + "name": "seeds-on", + "frames": 190, + "width": 256, + "standalone": false, + "config": { + "display_options": { + "show_seeds": true + } + } + }, + { + "name": "seeds-off", + "frames": 190, + "width": 256, + "standalone": false, + "config": { + "display_options": { + "show_seeds": false + } + } + }, + { + "name": "roundlogo-on", + "frames": 110, + "width": 256, + "standalone": false, + "config": { + "display_options": { + "show_round_logos": true + } + } + }, + { + "name": "roundlogo-off", + "frames": 110, + "width": 256, + "standalone": false, + "config": { + "display_options": { + "show_round_logos": false + } + } + }, + { + "name": "upset-on", + "frames": 310, + "width": 256, + "standalone": false, + "config": { + "display_options": { + "highlight_upsets": true + } + } + }, + { + "name": "upset-off", + "frames": 310, + "width": 256, + "standalone": false, + "config": { + "display_options": { + "highlight_upsets": false + } + } + }, + { + "name": "size-64x32", + "width": 64, + "frames": 190, + "standalone": false + }, + { + "name": "size-128x32", + "width": 128, + "frames": 190, + "standalone": false + }, + { + "name": "size-128x64", + "width": 128, + "height": 64, + "frames": 190, + "standalone": false + }, + { + "name": "size-256x32", + "width": 256, + "frames": 190, + "standalone": false + } + ], + "composites": [ + { + "name": "game-states", + "columns": 1, + "cells": [ + { + "shot": "state-live", + "label": "Live", + "sublabel": "period, clock and the running score" + }, + { + "shot": "state-upset", + "label": "Final, an upset", + "sublabel": "an 11 seed past a 1 seed" + }, + { + "shot": "state-upcoming", + "label": "Not started", + "sublabel": "tip-off date and time" + } + ] + }, + { + "name": "show-seeds", + "columns": 1, + "cells": [ + { + "shot": "seeds-on", + "label": "show_seeds: true", + "sublabel": "(2)DUKE and UCONN(1)" + }, + { + "shot": "seeds-off", + "label": "show_seeds: false" + } + ] + }, + { + "name": "show-round-logos", + "columns": 1, + "cells": [ + { + "shot": "roundlogo-on", + "label": "show_round_logos: true", + "sublabel": "the round header carries the tournament mark" + }, + { + "shot": "roundlogo-off", + "label": "show_round_logos: false" + } + ] + }, + { + "name": "highlight-upsets", + "columns": 1, + "cells": [ + { + "shot": "upset-on", + "label": "highlight_upsets: true", + "sublabel": "the upset score is picked out" + }, + { + "shot": "upset-off", + "label": "highlight_upsets: false" + } + ] + }, + { + "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/docs/assets/march-madness/show-round-logos.png b/docs/assets/march-madness/show-round-logos.png new file mode 100644 index 0000000000000000000000000000000000000000..f91242cc84250fb0e31995d0875e6771ead277bf GIT binary patch literal 13718 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 literal 0 HcmV?d00001 diff --git a/docs/assets/march-madness/show-seeds.png b/docs/assets/march-madness/show-seeds.png new file mode 100644 index 0000000000000000000000000000000000000000..bf5d3fbf052faeafcf08bfcb2ed5eb55e8d53b94 GIT binary patch literal 13426 zcmdUWcT^MD_AU;i%#4L$97L%jD2yVYA|NHiLQ!cW2uRJSAksUbC2_`vA|N6nH6sWC z1R|YK5)~8>A#@~^NDVask`O{j@=h#wU1s_7H+S8))?1H%($CpvpS{1c&-ZO^|7LEy z^#{oxgoK2)o<3z@DI~OMzmU)d)_324ck=7+fe(&opEfvtE|fGs6cK98OjqL(&A&T- zs_JI+Hybv7yZcw`Z;Q{@%33&Jtz!#A3aqBPVHR#>g)+16k}(+itlm7`Du)-zFjdal z=;5;VzmefDH#E9rEG zmNF+@d-Bm6V2se!-m@;>3!Z$pxLxqD8!52y>W|P3;NiznCBb_q*1i=yeEjH_1`EN9 z>nk6A_3@))QE0(?pN9DO(fT3Qjs9tfb)$b8;;W-~{gDwqlQ%Onqa8RIl%1Gz@WP2; z!5=fx)_J;GVDNWvXz(#e#Bwd8(*(6#icUu?_uB}6G)-l8Ji&t3h+1p3K&^HSRR@D-7w?EG?>KPYuYRkRba3}sF@M$&+}73>%9$(0B{})M*ocdBs2;y>B7bq= z{R!pw`mcgq6A)tZbcvd;Z+G*{0z9;zGSBI;it> zSe&(`WdImc&91~{@@?`oZYX@VkiVqHzaOC&u{;O7VPyf)*tU{e;EAnUW>e7ojyU8w zd;1jKF4W2`R8t*KjW?PynS@2)Qu>s9WZ{@SSI+*KFlDPFWFR4UbT+V2^^n>T%DennAp2_Z(?F%>E+gH z;I3*o4IjEV8nyG_@6X@AxTbLN&4Yb7r-@9o<5Gz)8SmQiP^L3d6~8iCL#>{Dl3>1H zMMXtfIrY$`*R^5vO&HelL!6$=3U1ni%8o=A`T{+B|o~Iov zdG25loZd=&Po*!pv$L~S&F3NstVpQCbrhrCb~LM?;DCG)m}8$+jw6c8l#5(AUSG=P zu=wCN8s4O`y(SM08Xg_GbaR`Gy^YOs9SxzD(Cjr>|n;sO;ejyBv*f+53H zk$0lL->zuTFy5R1rwz-9B`BKRi7LL-Xw(39e0i?FYmLpA>!(kq`nI_orcbt}>IBd9 zyP@ks=1Ka9RY(6<;%0i*U=}781(DbE84R7yPHKB}NFhEeYDkoYj?S z7`@G1f2(#!k1Y(r?6Ga!0GCP+c(YF=Vg}4g?Z`4Vc$=!_+nS;w=1)n7Pqt-F2NIS^ zo|_%sibB`?+S0W9y+RseWz5JzJq@2$5tLnn&Ip@KHkLyik-xcBYIz>4|F%-bQT`fT zDr2a^+kyI`$f+hk^vszvo3`w{7g3Akt`1&9aF!8E%}Qb&7z?zQW@?SK$J)vwj!+vx z#ZiVMXmy#HnYXtqO~#-l(}~aj5SBvtySuw@x6pVSI8Q3aiQrCa(g!y`^BJo4(i}*$ z)jZ@aaRm7EN2h(rd@PnQos+6cSX<&yYkXPMA&?x>IR?#=Y}Ql zR`Z45rf599jj8bJzaNpGnJLfu9enXt7**s9p`@asVq}rW<;>2`D#){L&xxINb{<~v z+TIm%TmWMoiKCbn)tb2!&!Yb7;8_8XHOfXDkbl$CQUijtK@n_X3nHM)7Qd7T_9H1V zaR>m@t5>hY78zX@jp#AV2H{O<07QXx;Q&;U)L^n=l(ax|#RR+BQ2*_f-)ZQe`R zi;7g`@$6RL48ND(0|#7cj7^6`gcuZ@FCP8fqR_5XQ9{TG#6bNmQRwPa7GW{QcN}7a zb*@Xff{zxaewPY-arW%l?b`NcW@ZKg$N*qbe{*ZiRA#hfhWDqeP1NV))z+@Pmh!Cy z;V)&hL)EbgtU^()`86#@7LpOkk^>Nq9y!VXcLrx6sun%4pbb z;TYUwExc*V`Dec$_pwV+|A?h$7Q5agD#OAi631e7i$HuxX?mTn@*7Fh4qWnKJ{K0P zH%eQ%i-V^^QQJaUR=W8`MdqUBAZj?v^Y~oB`ym($9@mhV+NkPhU-EEksup1tt)>RUA4zRBYJlT8brF0f1^mXJnt1ZoR>F8^ z3$=C(gDd1MG`xflBbDXb^k&n<6pV)XEx7XX@~sikQ2>_SQ_({``N};FTNExX+}n+2 zzqLzLFxnw5UdN*9ZkFW^#mWpQjII=q<)rH)n(k#Olz8>nf zG6PkoD-RAp#&axn02kN@+`(jTR;~6Ou0usqlkHGURG~eav^+l$fFV`Qf^j zTU(!kwFKVUCdC^t=G7%P>P$beh>?kSIS5a8chAh^kX1fIq?7i4jE?$9I0sGBXL_{DhosnmCb1U|( z%VFEd>HKn99jB|mQh%}GW&Uj?+0Gx%#qNx6HaNK)^nN7+QX^G@N#m~(lSIy)V^D{b zSVS3JxE{OVB?zM@xw%K{D2f^0LH(lL4JCpT#J~;5$*Zbz@b|9-yC{A1Xk_TbF7>wX zg+3OA$8J_aKS*Nfzmo-(hcl=lS;xA-E)4kAS(kG&UYWF{KJv3i4gtO28cNwYSm{dxQ5hlKb7`Q$VwC@_rLy8Vvo!`oJz)E(D~x`lB*^1wR}o-#l(`s` zIn{BAhT3}EJUxK4^1U@-bz-p4q4LNUDw#ld^2CMD<4!{uvt<4doE#ffU0n_KUu4gL zS0Z?xsKo(2dO@I)MMjBNf3%3tFvAU+eh~Sx;kJ_Xxh->Dl|)@%!q7oHm)Jq14%L8K zV|96&vuG@*p;r^Zq8eRGz1HeS9EQZ;k;Dv09fx7IC4>h2V_zNE*d{C@m(Cv;G}h1v z-!bjh)iRu`_)vgwzv#S@BhL@jRB|@3RMUf(al#_oYJI5?k;@ih9d!|7yPFn960dFA z`i2`uQgW!=CVk}BZ7ZHNg$@1)>i65uNMZUGJ(I*c{=i@pTh)Tr7PDd+w)9CN-4-dB_^S4%h~?_k~2-KbsYz;U(&R-{3wvbe>|6nEHc)*ILkf#Em!1W27Zy44r!qctLXDbEKWoN=rMuLSw!>A$Ams|lVm}v>8NOvcvq3Uu^6tg8P=HZ~B z3x!XuL751|`T>8O%`f6KdRc$SC#ESqbE`0=No8-~lj@0nBmA7|eq_k?84+s40AAJa( z(eH4a4}?HwqJFqEh<>3=rhfR^iodnZkKn~$EfJT3gUf8`PE2LB)o+e%@bK_BARrpj zUnaYuRM!?ilmsKC{}GL_o?-YzQn(Kt*dTOF>JjfH!-hnsV<5g^qVDN6Gk3&8Vq~=Y zEF7GrhH3vQUOo^TpDBQUCpNCOM;f<~^qwlxJbg^W9V0QjTqT7m=gvC|MHTfFCk_XO z8)!ZBG^PCRP!z|~Jy!K$@#_s*Pk9_6ixm!f^x=*BVnt$_gI;R8>Gp=XS~kAvt$B7d zv+SINwMjX=+;#JL6OBm!l_3w~rTmHskD#)@5B|y6b%O(ACG6+R#*PPF-+`N2@J946 z>tVfmUBB(HQL$C&sqV3i37(FBsnZlYzNxO)0S&$qH%#l@1=tb+Y4XJ(KM_DFv=c<9 zq@!@BPy>mXYc0}r_PEKLIFs0Js#)yMt|Xr}CbK#IzH@V_J%6Cvb5)V0yYhD2bD4H3 z-S+HmL>RNY*}I}HBhsujvpaUy>96aCE`Bi)mE%*imBpr=|`Ke$|ilzwup<*+opR4C_l`+uRYG+VY+q2r}qD z=WDMhUPBAj)n0lr)*Qc^ve($7(s=k7G*#tEsv6`0$s%MPtKjSA$W>}C?1iN1br!?S zeXJ{=?xKjdPGJV(rKiv{F9#OQ1IFu>=%~69W?@M29-@3g^Uu$$6<{6RNYc{z8|m&G ze9pmEZPrvK*RJDxsq#*BQ*?w$;imMbg;)ex*SlZ*-6EN$!bIRzP?_c379$mrX0u%L zPD}b9>(=!prcLNEd)s$Tp?NvDIgw^wxhZ*jf>baKO``MG3ccN#!5{WBKE*J;QoSht zQg$0-Y@#`yhfy>RmqSbEnFWuCi)&p?M=Pq)iL(@+D(1m{H46;RHvac z_sbwxKy-c)4?gC@u`77tsNUI^CIj>f9$DuU9L@%Q!#(%ZM6rii;p-6K!mqH=DSXE{ z8}P)(c1FaIxJE&K%Xho^Fu5J|?bRK)b|aC`*QT!_Pakt=xmH`)>`jno%TnUnd}x35 z4jmi+VGsQjDz>8|BsT_XvqcDcVfROSznnB5C%A&2y^B|e*guIVVlH=CV%=NltBW4C zJDg5eY!yv(ug`KjX*@6zOnp-6(V}1Va=9yw9aP54dWp{wDqAMLX{$mPE$W`WKqP>rcQ?n6X0%QX(P0ulR@ZNv z=XgCWZ*nj2OvMH?!g?m({-!It{%Bo4`6sQSJraHp@NB2=G5}#>SdpK1TC-PNLPEl? zAQSEK!;~L;ab`mp%kkY72j5q}=v*c`Rf}L8>;h7E^Hta>tB5?Uz?^$oeVFixYL>ZA zAj2)e3Q6OwLE!N^Skonf^x>0grs;+=loQ_GyWLWpdl-CpH?^4{c}&DJMY+Iiu4x)G zdu7NYTxi3m^YoLhvF?ce48$q4%w1g1r#6LW?nG-vm=Ew)(a^qt8-{20Dex3<)BJN|Tn z;tf^3OoiU#*~9yp0NCmGvHRxH()|R;lE`ZCji8Yp>Z#Z*E9U~n$FiH_=Y7Ya=U#P> zpX&F&k!GvF4N6|4I1j4h7SOep#~fg*vm1kYD)2Au$5TqJXPGbD8KpOcuGjo~Y4$~t zi0;&A3qyMu%#aDF4XrZMIXEqHr24kH#4*4Zo82`{J9_9)N$_m%QHD)TP!_DxXXuAV z7XZ~f%;<^=H<|^k{9si`N>gb_PER4`_3efQvpXB5y+Gi>s96Iq`hpgcl zHd(jMNbyz$K217rAQjnCPO%G`O_rVxGo6w8jW*sC3%{>Wu1kk+G}1&tot(S_Qe}Lf z;LQ$rzs~rh*CW1bZqsL5zL>Wkb+_+Y;o63V&BwfFdkb&J-??+AmIKJ-U;#Q@GnpNz z^c{v^SP2=#6b(;%m#q#SuR39yuZXhAn0}Uo>^{%p38>SLe%DXI---9$=nJR2lP{Ii zJgPJqD&KtC&aeAH#;m#}3wVKq6)k!O!8+m&(~v-JT8i!N?%rdR|MV%HiqlpO*`w9e z&UWq8(A#)qs+^uy%4~g?o7>a&bXT2WYx3^)7f8>}CZonRGc0q`>RpDD%6c&T;$hn! z+1H;vK+gQDE&8P-W0^)qvoru@7sk>i?5Wx*noF@uHwWmnqnc zWmfF>f);Ak2R(IagdGAu{RH7(J`w)CMEF{id=zfePgK?q;%6H6?GOV4U%e){kSqb5au}`#{%xVy7P?Lql1qD3sYUa`bHV6m&OGg9gD{2 z(fA9uptY+rPk{tBD^_(M82DT)J9Y1sOMt}UN6zG7>;;4m2+gvpiwU> zXb5XCkU~Tgf~GrhffRw9bpcS#c~Cx^C;_#wi)$jr4G;EN1=PGTgaTnDIts86Dh?HM_a*}uUrCUI`Okex zy3+nv4tkZ;hYz8*YT4S@Jbds#@JUXp&zp#Xvsp%FshWl0h>Ce_A)*eFG{HhYto^U! zfUhAIz9#eL$rVikYC*^V6N_#;I(E0Dq$H{e$ig|M$pKtu9}378TZtg$`3~gO-ZJ;D zhX?F_5(DGx(h0f(j9}qeb*74?{$sC`)!i~eNbW%IiHQPYpEHs@fm_)p4}`cM#S)Y( z0Ivu)FiknKPyThRjFgzNO~JcTHw!wY3#i+vzIg3~W`S4<0>KT9SSFQwav0Nruf%PS zES>|i^bvT>sCQNVW7$d0I$&~x$)2fV5U+(mL7p4L(I4NEJ!3(8=-`6``bGT{&hr5i+000xI92RsVYZ)JJpVl=G4zI?yDphZC$TU!Ds&sD~> zsNTZ!hbj($1=IrA2;dn|WNtuFeXCBC*6;vpv7=HkhS58K0555o`V@-?nTPcWT?A`0 z*PeKA4H67=RMu37f;`yU%FC@OQC0Ld-9Wbv1`ZZ6Uw*6luA!l!AnGR`SQ!B^4#;Xz zQ@w=)_jaGu^m^xa)QvJKP>eE5$y^4QQxB+tVut_?FOab<^cEXHLjrkW4(NFSqCgl= zjQ9-*&LHpx#{g|fk)0c;q=5jr9R(C~phXQ9T8=fw5xEmXfgn&p%!`YQn}NE)cddIW zQc{0j_iyEBo2%dJF8VU@$o`fwaFcQXi+kI^`QVCKVRf^VAlrm_m~bW^@=EH-M~?i#uy`uaNf>vfJYS}6*j2)vj96A=GrFr*&W0fCZP0hSYyay@mwF zbRHCRiVRZxd_mg<5aWT0qhNHmDQ0{WGYHGpSWJS8q!K|i1G${jgGB~|c9h!|-;x0k zyvQH{W;rWPKOA(-#L7Z+l9+pVD@7fbfQsuyDsvY*1OU$niqM+}^=3>Ikl)sTrr9D> znccSSlb6dtv2E)dHc>Se3rea1p#K8N`KVi4TCD?Q;khu4z~^c7IjVz10zD`oK#6E5 zKO=(LJmmeeShR#%Q9;4osBDuYqlV97?Y*yxwY$&!Ct__X?k14)(NtiZ8c24~HDC{P z&xibZLK~fH@WF*g!*i7=yEF`UTi{AY2bg2n5^Dw?e>FfLB+q zV4-+jq+_DEfZ3Q@8b0qNGtca|=)u-bZ5G;?o0nHCxLF7N;FiI~Ei}TxbD`_Rf4^q` z$6Z<xX66gmSa#&n-ib!QJ+c&y?;Q5lqO7itpE`{lw=3j(&uAbL zI5Lr!mozx=Cv8u2@8N4#N#mLW&KCHb%V#|rnX12?poyom?|7J7U9k0@r6WZ?$IMsS z_)=&>qo?-aqvtBDn`2`2q0G!`&9tC=(W2ZV+9jSRJzTs4o~&ezpPF!Oj(1i_@z1#t zwC1{+o+dp5Q4Pz5PfmKbd)m-sAG7wKXc1RI?7fopkLCr0n(a;5SqgdGgStQHF;w5I zAj6p$w+XIE@ptaHi>#Ju{)3mNS}Q}_W2_%}nBS-DKt7RV#KVFnn0>!Prwd6ejT`Q5 zIOC)#;vMsMxrrGURtFtCG^QNA5%Zj3_m-mPv3#U&9&N^(O@FG*nZ5#LerA)u(gp#@ zv0q3zo7H-bByoS~Cp?^vxEPQ{9Zc(!}CaM$0uzFhFroo4&>p1zhZTanzBW_7`C>Rt(3cg#}8yPqXz z;S)5Ml;AK=mSRhdT0(qY<+v@Hw~KcY`r#I1UXD zzc~~>4z)oPR%F%BJ@YhA`pwO&QTRE_?;qTI1WfDl%-@(+EwlfbX{AEdPbmB(gnV

$HBp-Y23H5rMJAj_zvBM-VtAOy^OTsJw|vv4Y&@gKD+S< zxjcqu8n%ztMq8Ei-fAht#-POesnwCD6HO>p$QmAG2fs2;BdZLaJNO_)z{cDz4Y+U1TR^ zn{kGz1f=?*{Lui;d;5GV+9|58askEsr1a<9__`CNUpR%jlckcp8aZu@iqs3M=cgxY zl@^q^7^e|Mrgf_P37VndB z1}-I|u}9l-uoSe*@Mgau73mf*?Z=PwmbcpC#;_iNmvd!A|B(T+BtcW+&S^k`M0;6V zC3qEpYm4gp^M=sopW6-SV?Dx4RNS*&6~lLq2ffXx2}-r7EE(54$#YoJU~(*dCrx() z4=~>Z)6xegr-+J}wP7whf+`>EoIH-wcDd>NNGH0Rc!NYb(RQRRf0|Fr9ZEoH{B^S8 zs-cu-o{Tm(NT$%iO!Sw(QDa}?EuxA@kx5jTL%E0b#qpJ~IARStQQ20}=yjZ&9DCKy z8Fc?PG=V#gJS_SRxY%r05Z<)MVICBpW;Ea6k0*XZTJ40X{lXnEyr2@$+Mmx{eSc)t?&Rn2UBC4o z&)v^#9H7+C{)^3djLe@j{mGi5C%M1w%Jm+q);MGd zu4Zs3xYo4QSYJT+xdY0hwT8k#cGB%iFPlXdTrep-zv{VRem9?Ugu{EO;HpxwhS~hh zXuIy*53?@?!X~Yl1lMqsTHWy(zt@v~>jO50W`FV{o&3KMsjT+`BGvW8--*^YgD>$~FV}C2)U-yt=7YZ#FBvu?d-<#7mHL-+?;HUq<8|(h5VP~LSV$xR{IkrN rr-G-)R>lO)fB(<^Bj&0?FJJVMrn>mj>J9;aEOgq?+@R>h?|=RuVs-jt literal 0 HcmV?d00001 diff --git a/docs/assets/march-madness/smoke.png b/docs/assets/march-madness/smoke.png new file mode 100644 index 0000000000000000000000000000000000000000..112169eb3cedfcfd2f5193e4760e64eef2ec9bcf GIT binary patch literal 1411 zcmeAS@N?(olHy`uVBq!ia0y~yU->o4?*v{22=e14n!#VFx!9h)XcE%-(;8Ps|VK zV5p~9Cg{T1n7$Wy$Hd%FuvzrKQOZ-Z#J_inv;Lkj`oHdVpamm1cpDftvEmPEhaKEJ4A<^H%$>Z(M{oJIr?aai zkUfJhq7KC-FbL#r>pGgpzI&&4_&U8)_MeOE-qqf^`$rUN22x~m1Sc>Y_;h8~ic|A9 z%e@!Iv;?HUVa=Vl3Hx7{=l|n^#xqh7uGyv=&ETNxd-+C-{iFE&sHe-;)>N&&R=m!= zS6Bf(ZE=)0G9FlVDt*m5_luAGHg@bUZ4ZYA3Q~epxWmfE@KA4qR@&ysO_$!5t**(k z@?E~&YOY`R{jZ-sO3e;SnS4^kOE~W5k{e2!>)zfgF!5TiZEb0( z`ET9t-@j9y{`q6$Rh$S6n1&Cc63DTp-~;qa+Rq<9Ji@+x|GwBnT9o_F`LBQe$Skc~ zcjxe7=S@XrWz*K|*|+c5b@e@;UT&K^cdl5zg#=I6`I+aRAASDj-McoV0Aftx1_u^6 z(TiTrGg~#c=Gp4YFI`@mt-E~ra!RVzT({nxJ8P8mv3L}i)e Image.Image: # Score (bottom center of center block, for live/final) if score_text: score_x = center_mid - score_w // 2 - score_y = height - 13 + # A final game also draws its date at height - 6. The score font is + # 10px tall starting at height - 13, so the two used to share three + # rows -- and because both are offsets from height, they collided at + # every panel size. Lift the score clear when a date is coming. + score_y = height - (19 if (game["is_final"] and game.get("game_date")) else 13) # Upset highlighting if game["is_final"] and game["is_upset"] and self.highlight_upsets: score_color = COLOR_GOLD diff --git a/plugins/march-madness/manifest.json b/plugins/march-madness/manifest.json index 11a9b0f9..14b91e86 100644 --- a/plugins/march-madness/manifest.json +++ b/plugins/march-madness/manifest.json @@ -1,7 +1,7 @@ { "id": "march-madness", "name": "March Madness", - "version": "1.0.6", + "version": "1.1.0", "description": "NCAA March Madness tournament bracket tracker with round branding, seeded matchups, live scores, and upset highlighting", "author": "ChuckBuilds", "category": "sports", @@ -20,6 +20,12 @@ ">=2.0.0" ], "versions": [ + { + "version": "1.1.0", + "released": "2026-09-03", + "notes": "Final-game layout, and documentation. A finished game drew its date at height - 6 while the 10px score started at height - 13, so the two shared three rows and the date sat inside the score digits -- and because both were offsets from height, they collided at every panel size. The score now lifts clear when a date is coming. Adds real rendered screenshots of the three game states, three of the display toggles and four panel sizes. Marks show_bracket_progress as not implemented: it is read once and never used (#406). Drops three unused imports.", + "ledmatrix_min_version": "2.0.0" + }, { "version": "1.0.6", "released": "2026-08-19", @@ -63,7 +69,7 @@ ], "stars": 0, "downloads": 0, - "last_updated": "2026-08-05", + "last_updated": "2026-09-03", "verified": true, "screenshot": "", "display_modes": [