Native desktop companion app for League of Legends custom-game casters.
See DESIGN.md for the current product and architecture direction.
LeagueCastAssist is not endorsed by Riot Games and does not reflect the views or opinions of Riot Games or anyone officially involved in producing or managing Riot Games properties. Riot Games and League of Legends are trademarks or registered trademarks of Riot Games, Inc.
Requirements:
- Python 3.11+
- Windows for League Client integration testing
Create a virtual environment and install the project:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .[dev]Run the app:
league-cast-assistRun tests:
ruff check .
python -m pytestValidate cached static-data rendering before a release:
python -m league_cast_assist.tools.validate_static_dataThe validator scans all champions, all abilities, and currently filtered Summoner's Rift item data. It exits non-zero for release-blocking errors such as empty tooltips, unresolved raw Riot markup, malformed rich text, or duplicate/overlapping ability text inside a champion kit. Visible ? values are warnings by default because some Riot formulas depend on runtime stacks or current game state. Use --strict-placeholders to make those warnings fail the command while working down the backlog.
Audit rendered champion ability text for exact and near-duplicate skills:
python -m league_cast_assist.tools.audit_ability_textAudit selected item descriptions against available Riot item tooltip candidates:
python -m league_cast_assist.tools.audit_item_textBuild a single-file Windows executable:
python -m pip install -e .[dev,packaging]
.\build.ps1Use .\build.ps1 -DebugBuild if you need a console window while troubleshooting local Riot API or asset-cache issues.
When Download assets locally is enabled, downloaded CommunityDragon data and images are stored in an assets folder beside the running executable.
Packaged Windows builds check GitHub Releases for newer versions at startup. Users can also run File > Check for Updates. The updater compares the local league_cast_assist.__version__ value against the latest GitHub release tag, downloads the release exe asset, verifies the SHA-256 checksum when GitHub or the release asset provides one, and swaps the exe after the app exits.
Release process:
- Update the version in
pyproject.tomlandsrc/league_cast_assist/__init__.py. - Run
ruff check .andpython -m pytest. - Tag the release as
vX.Y.Zand push the tag. - The
ReleaseGitHub Actions workflow buildsdist/LeagueCastAssist.exe, publishes it to GitHub Releases, and uploadsLeagueCastAssist.exe.sha256for updater verification.
- CS is read from Live Client Data API
allPlayers[].scores.creepScore. In spectator mode this is the closest official local value currently exposed to the app. It can lag or disagree slightly with the in-game scoreboard during live updates, especially around jungle camps, pets/summons, scoreboard refresh timing, or replay/spectator delay. The unsupported spectatoractivePlayerendpoint does not provide a better direct CS value. - Exact player gold is not exposed to spectators. Graphs labeled
Item Valueuse visible inventory item total values, not live gold. Player Valuegraph mode supports selecting multiple player cards or checkboxes to compare visible item value over time.- Objective graph mode is hidden from normal use because current spectator APIs can omit epic monster events. It can be enabled from
File > Debug > Show Objectives Graphwhile testing Riot event payloads.