• v4.5.0 cd67018246

    v4.5.0 — Enemy summoner-spell cooldowns
    All checks were successful
    CI / build-and-test (push) Successful in 1m32s
    Stable

    joeyr released this 2026-09-05 21:49:40 -05:00 | 22 commits to main since this release

    Added

    • Enemy summoner-spell cooldowns in the in-game overlay, driven by the chat
      lines your team's scoreboard pings post. Holding Tab and clicking an enemy's
      summoner spell writes 02:19 Name (Champ): Pantheon Flash to team chat; the
      overlay now reads that off the HUD and counts the spell down.

      Chat is the only signal available. Riot's Live Client Data API publishes no
      summoner-cast events and no champion positions, and the Tab scoreboard shows
      no enemy cooldowns, so nothing can detect a Flash automatically — a teammate
      still has to ping it. What is automated is the duration, which is the part
      every manual tracker gets wrong.

      Three properties of the chat line carry the design. It timestamps itself
      with the game clock, so OCR latency is irrelevant — a line read eight seconds
      late still yields an exact remaining cooldown, and there is deliberately no
      freshness gate (unlike the CS/clock fusion, which has one). That timestamp
      also dedupes: the same line is re-read every poll while it sits on screen,
      and champion|spell|time is stable across those reads. And both fields come
      from closed vocabularies — five enemy champions, nine spell names — so
      every parse is validated against a known set rather than trusting raw OCR,
      which is what makes fuzzy matching safe (Panlheon Fiash resolves; noise
      does not).

    • Haste-aware durations. Two sources are folded in, and they are not equally
      knowable. Ionian Boots of Lucidity (+10) is observed — items is
      published for every player on both teams, across the base, Arena and Classic
      Rift id blocks. Cosmic Insight (+18) is assumed: the live API exposes
      only the keystone and the two tree names for other players and never the minor
      runes, so the rune is inferred whenever Inspiration appears in either tree.
      The assumption is deliberately pessimistic — a timer that expires early is
      safe, one that expires late gets you killed — and the overlay marks those rows
      with a ° and a footnote so an assumed number is never mistaken for a
      measured one. Flash therefore reads 5:00, 4:33, 4:14 or 3:54 depending on what
      they have: a 66-second spread.

      Remaining time is derived per snapshot from current haste rather than stored
      as a deadline, so an enemy who buys Ionian Boots while Flash is down has the
      running countdown shorten itself the moment the boots appear in their
      inventory — which is what the game actually does.

    Changed

    • LivePlayerSchema now carries the payload's runes and summonerSpells
      blocks (both optional, matching the schema's deliberately lenient posture).
    • The chat OCR reader thresholds on the value channel (max(R,G,B)) rather
      than the CS reader's luminance. Pure red has a luminance of 76, below the
      existing threshold of 130, so a luma pass would have erased exactly the field
      that names the champion.
    • regions.json gains a chat box, calibrated on 3440x1440. It is optional in
      the schema, so an older calibration file still loads and simply leaves the
      tracker idle.
    Downloads