DOCS · PLAYERS & MOD MAKERS

Everything Chud does,
documented.

Setup, the champ-select overlay, Announcer Studio, ModScan, party sync, every setting and file path — plus a full reference for people who make custom skins, mods, and announcer packs. Written from the app's actual source.

GETTING STARTED

Install & first run

01

Download & run the installer

Chud_x.y.z_x64-setup.exe installs for your user only — no admin needed, no system-wide changes.

02

Launch Chud, start League

Chud finds the running League client by itself and connects over Riot's official local API. Nothing to configure.

03

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.trust to 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.

USING CHUD

The main window

TABWHAT IT DOES
DashboardThe 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.
ProfileAn 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).
SkinsThe 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.
LibraryThe 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.
ModScanThe 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.
StudioAnnouncer Studio — build your own announcer pack from clips or mic recordings. Details below.
ActivityA live session log: client connects, phase changes, ready checks accepted, tools armed/stopped, ranked blocks engaged.
SettingsEvery knob — full reference below.
DiagnosticsApp/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

FEATUREHOW IT WORKS
⭐ FavoritesStar 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 rollThe 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.
⟲ HistoricToggle 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

CATEGORYCALLS
Game startWelcome · Minions have spawned
KillsFirst Blood* · You slay an enemy · An enemy is slain · Shutdown
MultikillsDouble Kill · Triple Kill · Quadra Kill* · Pentakill*
SpreesKilling Spree · Rampage · Unstoppable · Dominating · Godlike* · Legendary*
TeamYour team Aces*
DeathsYou are slain · An ally is slain
ObjectivesTurret destroyed (yours & theirs) · Inhibitor destroyed (yours & theirs) · Nexus under attack
EndVictory* · 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.

SAFETY

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:

CODEWHAT IT MEANS
DISABLEDSkins are turned off. Enable Skins to allow injection.
CONSENT_MISSINGThe skin-injection risk acknowledgement hasn't been accepted (or was revoked / is outdated).
HELPER_UNAVAILABLEThe cslol mod-tools helper is missing — redo the one-time setup.
INTEGRITY_FAILEDThe safety monitor isn't running or its data is stale — injection fails closed rather than guessing.
LEAGUE_UNAVAILABLEThe League client isn't reachable, so the game state can't be verified.
WRONG_PHASENot in a game phase where injection is allowed (champ select through in-game only).
RANKED_QUEUERanked game detected — injection is disabled to protect your account.
UNKNOWN_QUEUEThe queue type couldn't be determined — blocked to be safe.
ACTIVE_JOBAnother injection is already in progress.
REFERENCE

Settings reference

SETTINGDEFAULTWHAT IT DOES
Auto-Accept · check interval1sHow often the queue state is polled (0.2–10s).
Auto-Accept · retry delay / max backoff5s / 30sReconnect pacing when the client is unreachable.
Auto-Range · range keycThe League "show attack range" key Chud holds for you.
Auto-Range · refresh interval7.5sHow often the key is re-pressed so the ring stays drawn.
Safety · block in rankedonThe ranked kill-switch — refuses injection in ranked or unidentifiable games.
Safety · risk acknowledgementsnot acceptedVersioned consents gating Auto-Range and skin injection.
Skins · master switchoffTurns the whole skin subsystem (and overlay) on.
Skins · auto-downloadonFetches new skins & game hashes automatically after patches.
Skins · injection threshold300msHow close to the loadout deadline the overlay is applied.
Runes · rune importoffMaster switch for build import; with auto-import on, fires the moment you lock in.
Runes · build sourcewinrateSort recommended builds by win-rate or popularity.
Presence · appear offlineoffHides you on friends lists while you play.
Library · Skin LibraryonShows/hides the Library tab (listed under Beta features).
Party · party modeoffLobby skin/announcer sync; requires accepting the data disclosure first.
Party · auto-download peer announcersoffFetch a lobbymate's announcer pack (catalog-verified) so you hear it too.
Party · auto-download peer custom modsonFetch a lobbymate's custom skin by content hash — ModScan-gated, Clean-only.
Privacy · anonymous usage statsonThe daily-rotating anonymous heartbeat described above.

File locations

Almost everything lives under %LOCALAPPDATA%\Chud\. The Diagnostics tab shows the exact paths on your machine.

PATHWHAT'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.jsonAll 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:

HOSTWHY
chud-skins.jivy26.workers.devThe Library catalog, thumbnails, and the hash-only reputation lookups.
chud-runes.jivy26.workers.devRecommended builds for rune import.
chud-party-relay.jivy26.workers.devThe party-sync relay (a dumb pipe with no database).
chud-telemetry.jivy26.workers.devThe optional anonymous heartbeat.
github.com + GitHub CDN hostsSelf-updates, the community skin repository, and game-hash data.
runeforge.dev / r2-prod.runeforge.devLibrary 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

SYMPTOMWHAT'S HAPPENING / WHAT TO DO
"CLIENT OFFLINE" on the DashboardLeague 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 clearThe 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 gameCheck 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 cardWorking as intended: the kill-switch stands tools down in ranked and clears automatically afterwards.
"Couldn't import" from rune importRune 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 patchChud refreshes its game data automatically ("League updated" toast), but the mod itself may need an update from its author.
Update failedHit Retry, or grab the latest installer from GitHub — settings and mods survive a reinstall.
Anything elseDiagnostics → Copy report puts a full status snapshot on your clipboard — paste it in the Discord and we'll take a look.
MODDERS & CREATORS

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, add preview.png (or any image at the folder root). This is what shows on hover in champ select.
  • Description: a description.txt inside a folder mod — or MyMod.txt beside 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 .dds is 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 .fantome whose WAD/ tree delivers the global announcer audio bank pair — announcer_global_female1_vo_audio.wpk + ..._vo_events.bnk — under assets/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), and Map21.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.client files — 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 .wem containers 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.

Still stuck? The Discord isn't.

Setup help, mod-making questions, and update news — straight from the source.

Join the Chud Discord