Skip to content

Releases: sethwv/game-thumbs

v1.8.1

02 May 16:40
45cf844

Choose a tag to compare

Added

  • AHL now uses HockeyTech as its data source

Changed

  • HockeyTech provider now skips playoff bracket seasons with TBD teams, selecting the first season with a complete roster instead
  • Fixed league thumb and cover layouts to prevent overlapping and clipping when combining logo, title/subtitle, and icon elements (#121 by @brheinfelder)

v1.8.0

27 Apr 20:14
3370453

Choose a tag to compare

Added

  • Generic league event cover and thumbnail support with optional title, subtitle, and iconurl query parameters for non-matchup events (e.g. motorsports races) - #116 by @brheinfelder
  • Custom font support with a font registry system and bundled Saira Stencil fonts (OFL v1.1)
  • Docker mount support for custom fonts
  • US Open Cup (usa.open) and USL Championship (usa.usl.1) leagues - #118 by @trevorswanson
  • ALLOW_EVENT_OVERLAYS environment flag to gate event overlay rendering
  • Filesystem-backed image caching replacing in-memory caches

Fixed

  • Critical fix for HockeyTech API key extraction - older versions of game-thumbs may fail to retrieve data without this update
  • Improved error handling and logging for team-not-found cases

Security

  • canvas updated to 3.2.3 (integer overflow fix in image data operations)
  • axios updated to 1.15.0 (proxy handling and header injection vulnerabilities)

v1.7.0: Bump path-to-regexp from 8.3.0 to 8.4.0 (#112)

28 Mar 17:25
6050478

Choose a tag to compare

Added

  • MLBStats provider - integrates the free MLB StatsAPI (no API key required), enabling support for MiLB, KBO, and other baseball leagues tracked by MLB without needing a third-party API key
  • Minor League Baseball (milb, milb-aaa, milb-aa, milb-high-a, milb-a, milb-winter, milb-independent) - all four MiLB levels plus winter and independent leagues, powered by the new MLBStats provider; milb automatically searches all sub-levels via feeder leagues
  • Korean Baseball Organization (kbo) via the new MLBStats provider
  • Formula 1 (F1), NASCAR (NASCAR), and IndyCar (INDY) - placeholder leagues that return a mood-colored background with the league logo for any matchup request (no team logos or team data required)
  • skipLogos league config property - when set on a league, all matchup requests automatically use fallback/league-logo mode regardless of team parameters; custom leagues can use this flag to opt in
  • Pinnable Docker image tags for dev branch pushes - in addition to the branch name tag, each push now also produces a branch-sha tag (e.g., dev-a1b2c3d4) for fully reproducible deployments

Changed

  • Container healthcheck command simplified to use curl in both the Dockerfile and docker-compose.yml, and now correctly respects the $PORT environment variable
  • 2026 Winter Olympics leagues now use skipLogos mode
  • Provider team and color caches migrated from in-memory Maps to the filesystem (.cache/ subdirectories), reducing memory footprint and persisting cache data across server restarts

Fixed

  • Image cache TTL is now enforced on every cache hit by checking file modification time - previously, cached images could persist indefinitely across server restarts even after the configured TTL had elapsed
  • Team matching: slug prefix matches in the ESPN provider no longer produce a perfect score, reducing incorrect matches for inputs that are ambiguous prefixes of multiple team slugs
  • TeamNotFoundError construction and available-team name extraction is now consistent across all providers, fixing cases where the error message omitted available teams depending on which provider handled the request

v1.6.0

26 Feb 20:59
2a0b4b2

Choose a tag to compare

Added

  • Added winner query parameter for matchup endpoints (/thumb, /cover, /logo) to visually highlight the winner by rendering the losing team in greyscale (35% opacity + greyed colors).
  • Added style 98: “3D embossed with league logo” (style 99 remains “3D embossed” without league logo).
  • Added optional root route behavior via ROOT_REDIRECT_URL:
    • When set, GET / returns a 301 redirect to the configured docs URL.
    • When not set, GET / returns a 444 with a docs suggestion (same overall “not found” semantics).
  • Added/expanded league definitions in leagues.json:
    • Soccer: Euros + qualifying, UEFA Nations League, CONCACAF Nations League, AFCON + qualifying, English National League (+ north/south), FA Community Shield, FA Trophy, Scottish League Cup, English Women’s Super League
    • Hockey: EIHL
    • Cricket: The Hundred (men/women), IPL, BBL, CPL, BPL, PSL, MLC, NZ Super Smash, SA20, Nepal Premier League, T20 Blast
    • Rugby: Six Nations (men/women), URC, Premiership Rugby, EPCR Challenge Cup, Rugby World Cup (men/women), Rugby League World Cup, Super League, MLR
    • International baseball: World Baseball Classic (with light/dark logo assets)
    • Added generic ncaa league definition with NCAA logo and fallbackLeague

Changed

  • Improved team matching priority in teamUtils:
    • Reduced exact city match score (700 → 500)
    • Increased partial name/shortDisplayName match scores (400/300 → 700/650) so team-name matches beat city-only matches.
  • NCAA route behavior: if the :sport segment isn’t a recognized NCAA shorthand, the route now calls next() so the generic ncaa league routes can handle it instead of returning a 400.
  • Docker compose now maps ${PORT} to ${PORT} (instead of host ${PORT} → container 3000), aligning container port with the configured app PORT.

v1.5.2 Hotfix

07 Feb 16:34
2856aa9

Choose a tag to compare

Fixed

  • Hardened FlagCDN country/team resolution to reduce incorrect matches by:
    • Rejecting empty/whitespace-only inputs as not-found
    • Rejecting very short normalized inputs (< 2 characters)
    • Enforcing a minimum match score (≥ 700) before accepting a country match

Full Changelog: v1.5.0...v1.5.2

v1.5.1 Hotfix

05 Feb 15:55
0f0df5a

Choose a tag to compare

Fixed

  • Improved FlagCDN country/team matching to better handle inputs without spaces (e.g., unitedstatesunited states) by:
    • Scoring exact “no-spaces” matches highly
    • Adding “no-spaces starts-with” matching for partial inputs

Full Changelog: v1.5.0...v1.5.1

v1.5.0

04 Feb 23:09
d68e6a1

Choose a tag to compare

Added

  • Added Custom Teams support via teams.json (custom: true) for teams not present in any provider data (e.g., conference teams, all-star teams, special events). Custom teams:
    • Bypass provider lookups entirely
    • Can auto-extract colors from the provided logo when colors are omitted
    • Support aliases and resolve with highest priority
  • Added Olympics league aliases (e.g., olymh, olywh, “winter olympics”, etc.).
  • Added initial custom team entries:
    • NFL: NFC and AFC (custom teams with official ESPN logo URLs)
    • Olympics: GB alias expansion (Great Britain / UK variations)

Changed

  • Improved rendering controls for fallback/placeholder scenarios with a skipLogos flag so generators can intentionally render no team logos (used for Olympics missing-team fallback behavior).
  • Updated thumbnail and logo split styles to hide the white divider line (set to transparent), while keeping the underlying geometry intact (easy to re-enable later).
  • Improved badge handling:
    • Rejects empty/whitespace-only badge values
    • Normalizes badge text (trim + collapse multiple spaces)
  • Standardized FlagCDN provider “not found” errors to TeamNotFoundError (instead of a country-specific error), aligning with the app’s fallback chain.
  • Dev script now enables ALLOW_CUSTOM_BADGES=true by default.
  • Dependency bumps: axios, canvas, cors.

Fixed

  • Prevented custom teams from being mis-logged as provider-resolved teams by ensuring “custom” resolution is identified consistently in fallback logging.

Full Changelog: v1.4.0...v1.5.0

v1.4.0

25 Jan 15:15
3c4b27d

Choose a tag to compare

Added

  • Added two new matchup image styles for thumbnails and covers:
    • Style 5: dark grid background
    • Style 6: grid background tinted with team colors
  • Added automatic support for many ESPN leagues that aren’t configured in leagues.json by detecting them and generating a temporary league configuration on the fly.
  • Added an NCAA provider to improve NCAA team logo coverage by fetching official NCAA SVG logos and converting them to PNG.
  • Added team aliases for Missouri State across NCAA men’s basketball and NCAA men’s volleyball.
  • Added ncaa as an additional provider option for several NCAA leagues, and changed many NCAA sports to fall back to NCAA men’s basketball for broader team coverage.
  • Added new matchup logo default behavior: styles 1, 5, and 6 include the league logo by default (unless logo=false).

Changed

  • Improved team matching robustness, including better handling of “State”/“St” variations and making aliases usable across fallback/related leagues.
  • Darkened extracted dominant colors slightly to improve contrast in generated images.
  • Unified and strengthened fallback=true behavior across endpoints, including a last-resort text placeholder if league logo processing fails.

Removed

  • Removed the ESPN Direct Lookup API routes and documentation (direct /espn/:sport/:league/... endpoints).

Fixed

  • Improved fallback performance and reliability by resolving matchup teams in parallel, searching feeder leagues in parallel, and reusing a single processed league-logo placeholder when both teams are missing.
  • (#86) Removed unsupported image types from accept header in imgUtils. This was preventing some NCAA logos from downloading and rendering correctly

Full Changelog: v1.3.0...v1.4.0

v1.3.1

19 Jan 14:50
fdf06d7

Choose a tag to compare

Fixed

  • Improved image download/processing reliability by validating downloaded image content and rejecting unsupported formats (including SVG or HTML error pages) instead of failing later during rendering.
  • Hardened fallback-team generation so invalid/empty league logo downloads are detected and handled cleanly.
  • Improved matchup fallback behavior by resolving teams in parallel and reusing a single processed league-logo placeholder when both teams need fallback.

Full Changelog: v1.3.0...v1.3.1

v1.3.0

18 Jan 23:20
28e9671

Choose a tag to compare

Added

  • Added tennis support (ATP/WTA) for matchup thumbnails/logos/covers, including doubles teams via + (e.g., djokovic+federer vs nadal+murray).
  • Added optional league feature flags to enable/disable high-cost athlete leagues (e.g., Tennis, MMA) via environment variables.
  • Added new supported leagues:
    • USHL (HockeyTech)
    • English FA Cup, EFL Cup, Copa del Rey
    • Scottish leagues and cups (Premiership, Cup, Championship, League One, League Two)
  • Added PWHL dark-mode league logo asset support.

Changed

  • Improved badge handling by allowing custom badge values when explicitly enabled via ALLOW_CUSTOM_BADGES.
  • Improved team logo fallback by allowing leagues to pull missing logos from configured feeder leagues.
  • Updated ESPN athlete provider behavior for athlete-based sports:
    • Uses sport-specific styling (e.g., tennis palettes) and better fallbacks (e.g., country flags when headshots are missing).
    • Improves cache behavior and startup performance by persisting provider cache to disk and refreshing in the background.
    • Adds rate limiting controls for ESPN athlete fetching to reduce the chance of provider throttling.

Fixed

  • Fixed split-style thumbnail generation so one missing/broken team logo no longer prevents the other team logo from rendering.
  • Reduced failures/noise when athlete headshots are missing by treating expected ESPN headshot 404s as normal and falling back when possible.

Full Changelog: v1.2.0...v1.3.0