Automatic Discord Rich Presence for any Windows app or game.
Real 256×256 icons, contextual activity lines, and a timer that ticks — with nothing to configure inside Discord.
Discord AutoRPC lives in the system tray and watches your foreground window. When the active app changes it extracts the application's own icon, composes a short contextual line for it, and publishes both to your Discord profile — at most one update every 15 seconds, so the timer on your profile keeps ticking smoothly.
Note
Open beta (v0.1.0-beta). Rough edges are expected. Bugs, questions and
tagline requests are welcome in
Issues.
- Any app or game, automatically. Whatever executable has focus gets broadcast — there is no per-game setup in Discord.
- Native 256×256 icons. Extracted from the binary itself with Windows'
PrivateExtractIconsW, not scaled up from a thumbnail. - Contextual taglines. The second line is built from the window title — browsers get Surfing the internet, documents Working on a document, editors Working on a project.
- A timer that keeps ticking. The presence is sent once and left alone, so the counter on your profile advances every second instead of resetting with each update.
- Private browsing stays private. Incognito and private windows across Chrome, Edge, Firefox, Brave, Zen and friends are masked, never broadcast.
- Lifecycle aware. When the Discord client exits, AutoRPC stops
broadcasting and hides its tray icon, then restores both when Discord is
back (configurable via
auto_close_with_discord). - Settings, not JSON. A first-run wizard opens the Discord Developer Portal and validates your Application ID; after that everything — taglines, overrides, the ignore list, timing — is a few clicks in the settings window.
No Python required.
- Download
DiscordAutoRPC-v0.1.0-beta-windows-x64.zip(or the bareDiscordAutoRPC.exe) from Releases. - Run
DiscordAutoRPC.exe. The setup wizard starts on first launch:- Click Open Discord Developer Portal, create a new application (any name), and copy its Application ID.
- Paste it into the wizard and choose Save & Launch AutoRPC.
- That's it — AutoRPC waits in the tray. Open any app and check your Discord profile.
Windows 10/11 (64-bit), Python 3.11+, and the Discord desktop client running.
git clone https://github.com/yashkthakor/Discord-AutoRPC.git
cd Discord-AutoRPC
pip install -r requirements.txt
python main.py # run it
pythonw main.py --startup # or, without a console windowTo build the standalone executable:
pip install pyinstaller
python -m PyInstaller --noconsole --onefile --icon="assets/icon.ico" --name="DiscordAutoRPC" main.pyThe result lands in dist/. Releases are built by CI from a v* tag.
config.json sits next to the executable in portable mode (a portable.txt
or an existing config.json beside it) and in %APPDATA%\DiscordAutoRPC\
otherwise. Everything in it is editable from Settings; a ready-to-edit
template ships as config.example.json.
| Key | Default | Purpose |
|---|---|---|
application_id |
"" |
Your Discord application ID. Required. |
poll_interval |
5 |
Seconds between foreground checks. |
debounce_seconds |
10 |
Focus time an app needs before it is broadcast. |
idle_timeout_seconds |
60 |
Clear the presence after this much inactivity. |
default_icon_url |
Discord's default avatar | Fallback icon when extraction fails. |
auto_close_with_discord |
true |
Go dormant while the Discord client is closed. |
mask_private_browsing |
true |
Never broadcast incognito/private windows. |
whitelist_only |
false |
Broadcast only what is in whitelist. |
whitelist |
[] |
Executable names, used when whitelist_only is on. |
ignored_exes |
system shells and Explorer | Executable names that are never broadcast. |
taglines |
built-in table | Static second line per executable. |
overrides |
{} |
Per-executable name / tagline / icon_url that wins over everything. |
steamgriddb_api_key |
"" |
Optional SteamGridDB key for game icons. |
upload_host |
"freeimage" |
Icon upload host: freeimage or catbox. |
enable_dynamic_taglines |
true |
Build the second line from the window title. |
For example, giving one game a custom name, line and icon:
Icons are extracted locally and uploaded to the chosen host over HTTPS, because
Discord needs a URL for them; the results are cached in icon_cache.json. No
raw window titles or file paths are uploaded anywhere.
| Item | Action |
|---|---|
Discord AutoRPC v0.1.0-beta |
Version marker; becomes an update notice (opens the release page) when a newer release exists. |
Settings |
The configuration window. |
Rename Active App… |
Rename / re-tag whatever is focused right now. |
Pause / Resume |
Stop broadcasting for a while. |
Ignore current app |
Add the focused app to ignored_exes. |
Open log |
Open autorpc.log. |
Quit |
Clear the presence and exit. |
- The foreground window is polled every
poll_intervalseconds, then filtered through the ignore list, the whitelist, private-browsing detection and a debounce window. - Display names come from the executable's version information; the tagline
comes from parsing the window title (
context.py). - Icons are extracted at 256×256, cached to disk, and uploaded once per app.
- The presence payload is deduplicated and rate-limited to one update every 15 seconds — which is what keeps the timer on your profile honest.
This engine is also driven headlessly by the next-generation UI under
desktop/ (Tauri 2 + React, in development); see
GUI_HANDOFF_TAURI_REACT.md.
Bug reports, feature requests and pull requests are all welcome.
- Fork the repository.
- Create a branch (
git checkout -b feature/my-change). - Commit and push it.
- Open a pull request.
MIT — see LICENSE.