Install & first run
Download & run the installer
Chud_x.y.z_x64-setup.exe installs for your user only — no admin needed, no system-wide changes.
Launch Chud, start League
Chud finds the running League client by itself and connects over Riot's official local API. Nothing to configure.
Arm what you want
Auto-Accept and Auto-Range live on the Dashboard. Skins, Library, Studio, and Party each have their own tab.
Closing the main window doesn't quit Chud — it minimizes to the system tray so Auto-Accept keeps working while you play. Left-click the tray icon (or its "Show Dashboard" menu item) to bring the window back; use the tray's "Exit" or the in-app Exit button to actually quit.
There are no in-game hotkeys, by design — tools are armed and disarmed from the Dashboard only, and stay on while armed, so a stray keypress mid-game can never silently turn something off.
One-time skin setup
Skins need one extra file, once. For legal reasons Chud can't ship the skin-injection library, so you drop in your own copy:
Drop cslol-dll.dll into %LOCALAPPDATA%\Chud\cslol-tools\
The Skins tab shows a "One-time skin setup needed" card until the file is there, with Open folder and Re-check buttons so you never have to hunt for the path. The file survives every update — you do this exactly once.
- Chud verifies the DLL by SHA-256 hash. A known-good build is accepted immediately; an unknown build is trusted on first use and its hash is remembered — if the file ever changes after that, Chud refuses it as possible tampering. (Deliberately updating your DLL? Delete
%LOCALAPPDATA%\Chud\state\cslol_dll.trustto re-trust the new copy.) - First skin setup also downloads the game-hash table (
hashes.game.txt, ~200 MB) that the WAD tools need. It refreshes itself when League patches — you'll see a "League updated" toast when that happens.
Staying updated
Chud checks GitHub Releases for a newer signed build on startup and every 10 minutes after. When one exists, a ✨ update pill appears in the top bar. Nothing installs behind your back — click the pill, review the version and notes, hit Update & restart, and Chud downloads with a progress bar, installs silently, and relaunches itself. If an update fails you get a Retry button plus a pointer to grab the installer from GitHub manually.
The main window
| TAB | WHAT IT DOES |
|---|---|
| Dashboard | The core status ring (IDLE / STANDBY / ARMED), session and lifetime accepted-queue counters, uptime, arm/disarm cards for Auto-Accept and Auto-Range, Start All / Stop All, and featured Library packs. |
| Profile | An op.gg-style card built from your own client: name, level, ranked Solo/Duo & Flex (tier, LP, win-loss, streak), top champions with KDA and mastery, and recent-performance stats (win rate, KDA, kill participation, CS/min, vision). |
| Skins | The skin subsystem's control panel: setup gate, status card (client linked, skins downloaded, tools verified, injection gate open or the exact denial reason), injection settings, per-champion favorite skins picker, and Party Mode. |
| Library | The in-app community catalog — Browse / ★ Bundles / Installed / Favorites, with search and one-click, ModScan-gated installs. On by default; hide it under Settings → Beta features. |
| ModScan | The malware-scanner dashboard: sweep your whole mods folder, see a verdict badge on every installed mod, re-scan any of them, or scan any file by hand. |
| Studio | Announcer Studio — build your own announcer pack from clips or mic recordings. Details below. |
| Activity | A live session log: client connects, phase changes, ready checks accepted, tools armed/stopped, ranked blocks engaged. |
| Settings | Every knob — full reference below. |
| Diagnostics | App/system/client state, tool status, exact config & data paths on your machine, and a one-click Copy report for support. |
The champ-select overlay
The moment champ select opens (with Skins enabled), a small launcher pill appears tucked into the bottom-right of your League client — the app icon, a count of your active mods, colored dots per category, and a gold ⟲ when Historic mode is on. It's a normal always-on-top window: nothing is injected into or drawn inside Riot's client, and it hides itself the instant champ select ends. Only you see it.
Click the pill and it expands into the full picker with six tabs: Skins · Maps · Announcer · Fonts · Other · Party. Collapse it and the window physically shrinks back to the pill, so it never blocks clicks to the client underneath.
Skins, chromas & forms
- Any skin for your champion, owned or not. The Skins tab shows the full grid for your locked champion. Skins that haven't been downloaded yet appear dimmed with a "not downloaded" note.
- Chromas — tiles with a ◈ badge open a chroma row with live colour previews; pick one or the base look.
- Forms — special variants (Elementalist Lux, Sahn-Uzal Mordekaiser, Radiant Sett, K/DA Seraphine, Viego and friends) show as a ◆ row above the chromas, picked exactly like chromas. Re-tap the active form to go back to base.
- Your custom mods appear as pills under the grid with real preview images on hover (how to add them).
- Owned or downloaded picks live-preview on the champ-select 3D model. Clicking your current pick again clears it, and the footer's "Clear pick" falls back to your favorite or the base skin.
Favorites, random & historic
| FEATURE | HOW IT WORKS |
|---|---|
| ⭐ Favorites | Star a skin on its tile (or from the Skins tab's Favorites picker) and it's auto-applied every game you play that champion — set and forget, no overlay needed. A manual pick in a given game still wins for that game. |
| 🎲 Random roll | The dice button rolls a random skin (and chroma) from what you can actually inject — owned or downloaded — never the base skin. Roll again or hit Cancel to go back. |
| ⟲ Historic | Toggle the ⟲ pill and Chud remembers your last pick per champion and re-applies it automatically every future lock-in — custom mods included. A banner shows "Historic restored your last pick" with an Undo button; picking manually overrides it for that game only. |
Maps, announcers, fonts & more
The Maps, Announcer, and Fonts tabs are single-pick lists (with search, and "None — Riot default" always on top). The Other tab is a stacking multi-select for everything else: UI, VFX, SFX, voiceover, loading screens, and misc mods — tag as many as you like, "Clear all" resets.
These are set-once, they stick: your choices persist across app restarts and are re-applied every game until you change them.
Skin Library
The Library tab is an in-app browser for thousands of community skins, maps, announcers, and fonts. Search by champion, one-click install, and everything you install shows up in the right place — champion skins on the "Your mods" row in champ select, announcers in the Announcer tab, and so on. ★ Bundles install a curated top-skin pack for a champion in one go.
Every single download passes through ModScan before it touches your disk — see ModScan. Skin files themselves are hosted by RuneForge; Chud hosts the index and thumbnails.
Announcer Studio ONLY IN CHUD
Build a real League announcer pack from your own audio — no Wwise, no external tools. Drop a clip or record your mic for any call in the grid, name your pack, hit Build, and it's installed and ready to pick in the Announcer tab (and it party-syncs to friends who don't have the audio).
The 26 calls you can replace
| CATEGORY | CALLS |
|---|---|
| Game start | Welcome · Minions have spawned |
| Kills | First Blood* · You slay an enemy · An enemy is slain · Shutdown |
| Multikills | Double Kill · Triple Kill · Quadra Kill* · Pentakill* |
| Sprees | Killing Spree · Rampage · Unstoppable · Dominating · Godlike* · Legendary* |
| Team | Your team Aces* |
| Deaths | You are slain · An ally is slain |
| Objectives | Turret destroyed (yours & theirs) · Inhibitor destroyed (yours & theirs) · Nexus under attack |
| End | Victory* · Defeat* |
* Milestone lines (First Blood, Quadra, Penta, Godlike, Legendary, Ace, Victory, Defeat) are preloaded by the game engine and only accept Riot's own audio codec — custom audio there would just go silent. The Studio marks them with a MILESTONE tag and leaves them as the normal announcer, so your pack always sounds right.
Built packs land in your announcers folder as a standard .fantome and are automatically retargeted to work on Summoner's Rift, ARAM, and Nexus Blitz. Prefer a ready-made pack? Grab a 🥜 Chud Original like the BurntPeanut announcer from the Library.
ModScan ONLY IN CHUD
Chud is the only League mod tool that inspects mods for malware — in memory, before a single byte is written to disk. Every Library download and every party-shared file goes through it automatically.
- Three verdicts: Clean installs silently. Suspicious and Malicious both block the install and tell you exactly why, in plain English.
- You stay in control: a flagged mod you downloaded yourself has an explicit "install anyway" override. A flagged mod a lobbymate tried to push to you via party sync is hard-blocked with no override — nobody can force a file onto your machine.
- Reputation layer: a VirusTotal check backs the structural scan — hash-only (a SHA-256 fingerprint is looked up; your files are never uploaded) and advisory-only in the safe direction: it can escalate a verdict, never soften one. If VirusTotal is down, clean mods still install.
- The panel: the ModScan tab sweeps your whole mods folder on demand (structural checks, kept fast), shows a verdict badge on every installed mod, re-scans any single mod, and scans arbitrary files you point it at.
- Fails closed: if the scanner itself ever errors on a download, the file is treated as malicious and blocked — never silently waved through.
Making mods yourself? See the full rule list to keep your pack Clean.
Auto-Accept & Auto-Range
✅ Auto-Accept — the safe core
Arm it once and every ready check is accepted the instant it pops, even while you're alt-tabbed. It only talks to the official local client API — no game memory, no injection, no input synthesis. It stays armed across restarts and quietly reconnects (with backoff) if the client goes away.
🎯 Auto-Range — the indicator that never blinks
Holds your attack-range key (default c, configurable) whenever a live game is focused, and re-presses it every few seconds so the circle never disappears after respawns. Because it synthesizes keyboard input it requires running Chud as Administrator and accepting the risk acknowledgement in Settings. It automatically stands down in ranked and pauses while you're typing in chat.
Runes, offline & profile
- 🎵 Runes & builds — opt-in. The moment you lock a champion, Chud imports a recommended rune page (sorted by win-rate or popularity, your choice), and there's a manual "Import build" button too. It never runs unless you've turned it on.
- 🕵️ Appear offline — hides you on friends lists while you play, and keeps re-asserting it when the client tries to flip you back online.
- 📊 Live profile — the Profile tab reads rank, form, champion pool, and match history straight from your own client. Nothing is fetched from third-party sites.
Party sync
Friends in your lobby who run Chud see each other's skins and announcers — auto-detected, zero setup, no codes to paste. Everyone in a League lobby already shares a lobby id, so Chud derives the party room from it and members converge automatically. (A manual invite-token flow exists too, for syncing outside a shared lobby.)
- Off by default. Party mode never connects anywhere until you read and accept a plain-English data disclosure (Skins → Party Mode). The disclosure is versioned — if it ever materially changes, party mode switches itself off until you review the new one.
- What syncs: your skin/chroma pick, and — if selected — your announcer pack (by public catalog id) or custom mod (by a short content fingerprint; the file itself is never uploaded).
- Peer downloads are gated: a peer's custom mod is fetched by hash, verified, and ModScanned — anything not Clean is dropped with no override. Auto-downloading peers' announcer packs is off until you enable it, and even then only packs that exist in the public catalog are fetched.
- Spoof-proof: every selection is cryptographically signed by an ephemeral per-session key and cross-checked against your live champ-select roster — someone outside your lobby can't influence what you see.
- Leaving is instant: disabling party (or closing Chud) disconnects immediately and clears the session. The relay keeps no database — disconnecting is deletion.
Privacy & telemetry
Party mode: what's shared, and what never is
| SHARED (WITH YOUR ROOM ONLY) | NEVER TRANSMITTED |
|---|---|
| Your Riot game name (what lobbymates already see) · a fresh random session key each time party is enabled · champion / skin / chroma ids · a 16-character content fingerprint for a custom mod · a public catalog id for an announcer | Summoner ID, PUUID, account id, rank, region, match history, your files, your IP (peers never talk to each other directly — only to the relay) |
Telemetry
Chud sends an anonymous heartbeat so the developer can see how many people the app serves: a random id that rotates every UTC day (so days can't be linked together) plus a coarse version number. No accounts, no summoner data, no game data — and it's a single toggle under Settings → Privacy, honored within a minute of switching it off.
Ranked kill-switch & the injection gate
Every skin-injection side effect — building the overlay, touching the game process, starting the hook — passes through one policy check immediately before it runs. The policy reads live state only and fails closed: if anything can't be verified, injection is denied, not allowed. A background safety monitor runs the entire time Chud is open, independent of which tools you've armed.
- Ranked is blocked by default. With "Block in ranked" on (Settings → Safety, on out of the box), injection is refused in Ranked Solo/Duo and Ranked Flex — and in any game whose queue can't be identified, which is treated exactly like ranked.
- Consent is versioned. Skin injection stays locked until you accept the risk acknowledgement; if the disclosure materially changes, everyone is re-prompted.
- The game can never be left frozen. If injection needs to briefly suspend the game process, an unconditional 25-second auto-resume backstop guarantees it resumes even if everything else hangs.
When the gate denies, the Skins tab and a toast show you the exact reason:
| CODE | WHAT IT MEANS |
|---|---|
DISABLED | Skins are turned off. Enable Skins to allow injection. |
CONSENT_MISSING | The skin-injection risk acknowledgement hasn't been accepted (or was revoked / is outdated). |
HELPER_UNAVAILABLE | The cslol mod-tools helper is missing — redo the one-time setup. |
INTEGRITY_FAILED | The safety monitor isn't running or its data is stale — injection fails closed rather than guessing. |
LEAGUE_UNAVAILABLE | The League client isn't reachable, so the game state can't be verified. |
WRONG_PHASE | Not in a game phase where injection is allowed (champ select through in-game only). |
RANKED_QUEUE | Ranked game detected — injection is disabled to protect your account. |
UNKNOWN_QUEUE | The queue type couldn't be determined — blocked to be safe. |
ACTIVE_JOB | Another injection is already in progress. |
Settings reference
| SETTING | DEFAULT | WHAT IT DOES |
|---|---|---|
| Auto-Accept · check interval | 1s | How often the queue state is polled (0.2–10s). |
| Auto-Accept · retry delay / max backoff | 5s / 30s | Reconnect pacing when the client is unreachable. |
| Auto-Range · range key | c | The League "show attack range" key Chud holds for you. |
| Auto-Range · refresh interval | 7.5s | How often the key is re-pressed so the ring stays drawn. |
| Safety · block in ranked | on | The ranked kill-switch — refuses injection in ranked or unidentifiable games. |
| Safety · risk acknowledgements | not accepted | Versioned consents gating Auto-Range and skin injection. |
| Skins · master switch | off | Turns the whole skin subsystem (and overlay) on. |
| Skins · auto-download | on | Fetches new skins & game hashes automatically after patches. |
| Skins · injection threshold | 300ms | How close to the loadout deadline the overlay is applied. |
| Runes · rune import | off | Master switch for build import; with auto-import on, fires the moment you lock in. |
| Runes · build source | winrate | Sort recommended builds by win-rate or popularity. |
| Presence · appear offline | off | Hides you on friends lists while you play. |
| Library · Skin Library | on | Shows/hides the Library tab (listed under Beta features). |
| Party · party mode | off | Lobby skin/announcer sync; requires accepting the data disclosure first. |
| Party · auto-download peer announcers | off | Fetch a lobbymate's announcer pack (catalog-verified) so you hear it too. |
| Party · auto-download peer custom mods | on | Fetch a lobbymate's custom skin by content hash — ModScan-gated, Clean-only. |
| Privacy · anonymous usage stats | on | The daily-rotating anonymous heartbeat described above. |
File locations
Almost everything lives under %LOCALAPPDATA%\Chud\. The Diagnostics tab shows the exact paths on your machine.
| PATH | WHAT'S IN IT |
|---|---|
cslol-tools\ | The WAD/overlay tools, your cslol-dll.dll, and the game-hash table. |
mods\ | Your persistent mod library, organized as skins\, maps\, announcers\, fonts\, ui\, vfx\, sfx\, voiceover\, loading_screen\, others\. |
skins\ & resources\ | The downloaded community skin catalog and its preview resources. |
injection\ | Chud's working area — staged mods, the built overlay, and an extraction cache. Safe to ignore. |
state\ | Small state files: historic picks, the DLL trust record, updater bookkeeping. |
thumbs\ & logs\ | Cached mod thumbnails and app logs. |
config.json | All settings — stored separately under %APPDATA%; Diagnostics → Paths shows the exact file. |
What Chud talks to
Everything that leaves your machine goes through a hardened HTTPS client with a strict allowlist (checked on every redirect, too). The complete list:
| HOST | WHY |
|---|---|
chud-skins.jivy26.workers.dev | The Library catalog, thumbnails, and the hash-only reputation lookups. |
chud-runes.jivy26.workers.dev | Recommended builds for rune import. |
chud-party-relay.jivy26.workers.dev | The party-sync relay (a dumb pipe with no database). |
chud-telemetry.jivy26.workers.dev | The optional anonymous heartbeat. |
github.com + GitHub CDN hosts | Self-updates, the community skin repository, and game-hash data. |
runeforge.dev / r2-prod.runeforge.dev | Library skin files — RuneForge hosts the artifacts; Chud only hosts the index. |
The League client itself is only ever reached on 127.0.0.1 — the local API Riot exposes for companion tools.
Troubleshooting
| SYMPTOM | WHAT'S HAPPENING / WHAT TO DO |
|---|---|
| "CLIENT OFFLINE" on the Dashboard | League isn't running or hasn't finished starting. Chud reconnects by itself — armed tools show "RECONNECTING" until it does. |
| "One-time skin setup needed" won't clear | The card tells you which it is: the DLL is missing, isn't a recognized version, or couldn't be read (may be locked). Use Open folder, drop the file, hit Re-check. |
| Skin didn't apply in a game | Check the Injection gate row on the Skins tab — it shows the exact denial code. Most common: a ranked game (by design) or the risk acknowledgement not accepted yet. |
| "RANKED — BLOCKED" on a tool card | Working as intended: the kill-switch stands tools down in ranked and clears automatically afterwards. |
| "Couldn't import" from rune import | Rune import must be enabled in Settings, and you need to be in champ select with a champion picked (and a build must exist for it). |
| A custom skin broke after a League patch | Chud refreshes its game data automatically ("League updated" toast), but the mod itself may need an update from its author. |
| Update failed | Hit Retry, or grab the latest installer from GitHub — settings and mods survive a reinstall. |
| Anything else | Diagnostics → Copy report puts a full status snapshot on your clipboard — paste it in the Discord and we'll take a look. |
Custom mods (.fantome)
A .fantome is a renamed .zip with a META/ folder and a WAD/ tree (loose WAD-folder entries or packed .wad.client files). Chud accepts both .fantome and .zip, as files or as unpacked folders.
Installing your own mod
Drop it in %LOCALAPPDATA%\Chud\mods\<category>\
Champion skins go one level deeper: mods\skins\<skinId>\ — and the folder name is not just organization. Chud reads the mod's target skin from it. Everything else goes straight into its category folder: maps, announcers, fonts, ui, vfx, sfx, voiceover, loading_screen, others.
File it under the skin it edits — not the champion's base folder
- Skin ids are numeric: a champion's base skin is its champion id × 1000 (Yasuo =
157000), and each of their skins counts up from there. Mod pages usually say which skin a mod was made for. - A mod built on a particular skin goes in that skin's id folder. An edit of, say, a Primordian or Elderwood skin belongs in
mods\skins\<that-skin's-id>\. Chud uses the folder to pick the right base: if you don't own that skin, it automatically injects the skin's own assets underneath your mod so it shows up complete in game. - Only true base-skin retextures go in the champion's ×1000 folder. File a skin-edit there instead and it's applied over the wrong base — missing textures, broken look.
- Whatever folder it's in, the mod shows on that champion's "Your mods" row in champ select.
- Preview image: for a mod file, put an image with the same name beside it (
MyMod.fantome+MyMod.png— png/jpg/jpeg/webp all work). For a folder mod, addpreview.png(or any image at the folder root). This is what shows on hover in champ select. - Description: a
description.txtinside a folder mod — orMyMod.txtbeside a mod file — is shown as the mod's description. - Automatic scoping: on startup and each champ select, Chud sweeps champion-skin mods and strips entries that appear in more than 5 game WADs (shared/global assets). This turns "one skin accidentally rebuilds 22 GB of overlay" into a sub-second build — see the standalone tool if you want to pre-scope yourself.
- Announcer packs get retargeted automatically to cover Summoner's Rift, ARAM, and Nexus Blitz (details).
- Scan your own drops: mods you place by hand aren't force-scanned — run ModScan → Scan all mods to get verdict badges on everything, especially files you got from a third party.
Passing ModScan
If you distribute mods, this is the contract. ModScan parses the archive structurally; anything not Clean blocks the install (users can override their own downloads; party-pushed files can't be overridden at all).
Instant Malicious (blocked)
- Executable content, however disguised: extensions like
exe dll sys scr bat cmd ps1 vbs js jar msi lnk reg(and ~20 more) — plus magic-byte sniffing of decompressed content, so a PE/ELF/script renamed to.ddsis still caught, and a scan for executables embedded behind a benign image header (polyglots). - Path tricks: zip-slip (
..), absolute paths, drive letters, alternate data streams (:), reserved device names (CON,NUL,COM1…), trailing dots/spaces. - Encrypted or opaque members: password/AES-protected entries, RAR/7z content (including disguised ones), archives nested more than 4 deep, or >50,000 entries. Symlinks too.
Suspicious (blocked, user can override)
- Zip-bomb signals: a member compressed better than 200:1 (at ≥1 KiB compressed), any single member declaring >2 GiB, a whole archive declaring >4 GiB, or decompressed size not matching what the zip claimed.
- Nested archives — even benign ones. A cosmetic mod never needs a zip inside a zip; nested zips are also scanned recursively and any inner finding escalates the whole verdict.
- Off-contract files: anything outside the cosmetic allowlist —
wad client dds tex png jpg jpeg tga skn skl scb sco anm mapgeo bin troybin wpk bnk wem ogg preload luaobj json txt subchunktoc dat. - An empty archive, or a file that isn't a parseable zip at all.
Rule of thumb: one flat archive, only cosmetic file types, sane compression, no nesting, no surprises — and your mod sails through with a green badge. A META/ + WAD/ structure is also sanity-checked (its absence is only an informational note, not a block).
Announcer pack internals
For creators who want to build or adapt announcer packs outside the Studio:
- A pack is a
.fantomewhoseWAD/tree delivers the global announcer audio bank pair —announcer_global_female1_vo_audio.wpk+..._vo_events.bnk— underassets/sounds/wwise2016/vo/en_us/shared/inside a map WAD. - Map coverage: Chud retargets any announcer pack it installs (Library, Studio, or hand-dropped) to deliver that pair into
Map11.en_US.wad(Summoner's Rift),Map12.en_US.wad(ARAM — including the "Bloom" map-skin's variant bank), andMap21.en_US.wad(Nexus Blitz). The ARAM "Crepe" variant is deliberately left vanilla — its audio events are disjoint, and replacing the bank would mute it. - Ship loose WAD-folder entries, not prebuilt
.wad.clientfiles — a prebuilt member trips the overlay builder into a multi-gigabyte full-map rebuild. Chud's retargeting drops such members automatically. - Audio codec reality: the Studio writes standard 16-bit mono PCM into Wwise
.wemcontainers and patches the events bank's codec fields to match. That works for every common line; the eight milestone lines are preloaded by the game and require real Wwise Vorbis — packs that want custom milestone audio must encode those lines with Wwise proper. - Studio-built packs carry an auto-generated
META/info.json(Name, Author, Version, Description).
Creator tools
Two standalone Python scripts ship in the repo's tools/ folder — offline versions of what the app does automatically, for prepping packs before you distribute them:
retarget-announcer.py
Converts an SR-only announcer pack to all supported maps (SR / ARAM+Bloom / Nexus Blitz), drops rebuild-triggering prebuilt WAD members, keeps META and previews, and writes a .bak beside the original. Usage: python retarget-announcer.py "Pack.fantome" [more…]
scope-champion-mod.py
Pre-scopes a champion skin: drops entries whose path-hash appears in more than 5 game WADs, so a single-champion mod can't trigger a full-game overlay rebuild (a real case went from 205 WADs / 22 GB / 164s to 6 WADs / 423 MB / 1s). Needs pip install xxhash, a League install (or LEAGUE_GAME_DIR), and Chud's cslol-tools folder for the WAD utilities. Usage: python scope-champion-mod.py "Skin.fantome" [more…]
Publishing skins for the Library? The catalog indexes community skin repositories — hop in the Discord to get your work in front of Chud users.