A lightweight Windows tray app that automatically mutes selected games and apps when they lose focus.
English · 한국어 · 日本語 · 简体中文 · Español · Français · Português · हिन्दी · العربية
Fully local · No network access · No telemetry · No installation required
Download · Usage · Privacy · Apache-2.0
UnfocusMute is a small, lightweight Windows tray app that automatically mutes selected games and apps when they go into the background, then unmutes them when they return to the foreground.
- Built as a native Rust app, it runs without a separate runtime.
- The executable is about 600 KB.
- It is not limited to games; you can also register everyday apps such as browsers, messaging apps, launchers, and media players.
- Only apps muted by UnfocusMute are automatically unmuted; apps you muted yourself stay muted.
- You often Alt+Tab away from a game or app while leaving it open.
- You want to silence an app that does not have a built-in background mute option.
- You want to mute only a specific app's background audio while multitasking.
On Windows 10/11, download the ZIP package and extract it to run the app. The minimum supported version is Windows 10 version 1703.
| Latest package |
|---|
| UnfocusMute-windows-x64.zip |
| SHA-256 checksum · Release notes |
After extracting the ZIP, move the UnfocusMute-windows-x64 folder wherever you want to keep it, then run UnfocusMute-v<version>.exe inside. No installation, separate runtime, or development tools are required.
Note: Because code signing is costly, UnfocusMute is distributed without a Windows code signature. As a result, SmartScreen or an "unknown publisher" warning may appear the first time you run it. To verify the source and integrity of the file yourself, see Transparency and Release File Verification.
- Launch UnfocusMute. On first run, choose your language and startup options, then click
Start. - Start the game or app you want to register and play some audio so that it appears in the list.
- Return to UnfocusMute, select the app, and click
Register. Registering by.exename manages all audio sessions for that app and continues to work after the app restarts. - Use
Alt+Tabto switch to another window and back. The registered app is muted while it is in the background and unmuted when it returns to the foreground.
That's it. Monitoring starts as soon as you register the app, and by default UnfocusMute keeps running in the system tray when you close its window.
Can't find the app? Click
All processesor enter its exact.exename. To register only a particular PID that is currently running, usePID view. PIDs change whenever an app restarts, so registering by.exename is the better choice in most cases.
If you do not know the name of the app you want to register, use Task Manager to find its exact .exe name.
- Start the app you want to register.
- If it is running full-screen, use
Alt+TaborWindows+Tabto switch away from the game. - Press
Ctrl+Shift+Escto open Task Manager. - In the process list shown when Task Manager opens, click the
CPUcolumn to sort by highest usage. - Find the app you just started near the top of the list, right-click it, and choose
Properties. - Note the executable name ending in
.exe, such asgame.exe, and register it in UnfocusMute.
- Right-click a registered app to pause or resume it, edit its note, or unregister it.
- Click the
Monitoringstatus at the top to pause or resume all monitoring. - Use
Settingsto change auto-start and window-closing behavior. - To exit completely, right-click the tray icon and choose
Quit.
Right-click a registered app and choose Edit note to add an easy-to-recognize description above its process name. Notes only help you tell apps apart; they do not affect mute target matching.
htgame.exe→NTEgame.exe (PID 21976)→test server client
Notes are stored with the rest of your settings in %APPDATA%\UnfocusMute\config.json.
Tray behavior and automatic unmuting: UnfocusMute automatically unmutes a registered app when it returns to the foreground or when you quit UnfocusMute. If a registered app exits first, UnfocusMute also clears its mute state. However, if UnfocusMute exits unexpectedly, the app may remain muted in Windows. If an app has no sound the next time you launch it, check whether it is muted in the Windows Volume mixer.
PID registration: Windows may report different PIDs for an audio session and its foreground window. Because of this, even a PID registration is treated as foreground when a window with the same .exe name comes to the front, and the app is unmuted. This makes PID registration unsuitable for keeping one PID muted while you continue using another window from the same .exe. It can still be useful when you are working in another app and want to mute one of several PIDs from the same .exe while leaving the others audible.
Anti-cheat compatibility: UnfocusMute does not inject code into games, read game memory, hook input, or modify game files. It uses only Windows process and foreground-window information plus CoreAudio mute controls, so it is designed to avoid conflicts with most anti-cheat systems. Compatibility with every anti-cheat system cannot be guaranteed.
Start with these checks:
- App missing from the list: Play some audio in the target app, then open the list again. If it still does not appear, click
All processesor find the executable name manually. - App is not muted: Make sure the status at the top says
Monitoringand the registered app is notPaused. Muting may also fail if a driver, permission setting, or security tool limits access to Windows audio sessions. - App stays muted: If you still cannot hear a registered app after switching back to it, check its mute setting in the Windows
Volume mixer. - PID registration behaves unexpectedly: See PID registration.
- Status changes to
Needs attention: ClickDetailsnext to the status to view the error.
If the problem continues, open a GitHub issue.
If you suspect a security vulnerability, do not post details in a public issue. Report it privately instead; see SECURITY.md for instructions.
To inspect or back up the settings file directly, click Open settings folder in Settings. File Explorer opens the %APPDATA%\UnfocusMute folder where settings are stored.
You can also edit config.json directly. If its format is invalid and cannot be read, the original is backed up as config.invalid-<timestamp>.json, then a new settings file is created from either the defaults or the app's current settings.
UnfocusMute runs entirely locally. It works normally without an internet connection and does not require administrator rights. It also does not make automatic network requests, send telemetry, send crash reports, perform remote logging, or collect data.
The only exception is when you click the GitHub repository button in Settings; then this project's GitHub repository opens in your default browser.
Audio session detection and mute control use only Windows CoreAudio APIs. UnfocusMute does not inject code into target processes, read their memory, or hook input.
UnfocusMute stores only the settings it needs to operate in %APPDATA%\UnfocusMute\config.json.
- Registered process names
- PIDs you registered directly
- Last mute state of each registered app
- Notes you write
- Selected language and settings
- Window position and size
This information is not sent anywhere.
If you enable auto-start at Windows sign-in, the current executable path is also stored in the UnfocusMute value under HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
UnfocusMute does not store anything beyond the items listed under "What It Stores". It does not store usage history, activity logs, error logs, audio data, window titles, or keystrokes.
- If you enabled
Start automatically when I sign in to Windows, turn it off inSettingsfirst. - Right-click the tray icon and choose
Quitto close UnfocusMute. - Delete the
UnfocusMute-windows-x64folder and%APPDATA%\UnfocusMute.
If you deleted the executable before disabling auto-start, delete the UnfocusMute value under HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
UnfocusMute is designed to be safe to use in typical environments, so most users do not need to perform the verification steps below. If you do not want to rely solely on trust in the developer or place particular importance on software supply chain security, you can use this published procedure to verify the origin and integrity of downloaded files.
Even if you review the repository's source code and determine that it is safe, you cannot assume that files published in a GitHub release were actually built from that source. If a developer account is compromised or release permissions are abused, files unrelated to the published source code could be distributed.
Comparing SHA-256 hashes can confirm that a downloaded file matches the published checksum, but it does not prove which source code and build environment produced the file.
To address these supply chain risks transparently, UnfocusMute publishes a method for verifying that a file in a GitHub release is an official build artifact generated by GitHub Actions from the commit referenced by that release tag.
Show the release file verification steps
First install the GitHub CLI. Then change the $version value below to the release tag you want to verify and run the entire command block in PowerShell.
$version = "v1.5.0"
$sourceRef = "refs/tags/$version"
$workflow = "ilsd7/UnfocusMute/.github/workflows/release.yml"
gh attestation verify .\UnfocusMute-windows-x64.zip `
-R ilsd7/UnfocusMute `
--source-ref $sourceRef `
--signer-workflow $workflowThis command contacts GitHub's attestation service and checks that the local ZIP's SHA-256 matches the value recorded in its build provenance signed by GitHub Actions.
You can also compare the ZIP with the SHA-256 hash published in the release.
$expectedHash = ((Get-Content .\UnfocusMute-windows-x64.zip.sha256 -TotalCount 1) -split '\s+')[0]
$actualHash = (Get-FileHash .\UnfocusMute-windows-x64.zip -Algorithm SHA256).Hash
if ($actualHash -ne $expectedHash) {
throw "SHA-256 verification failed."
}
"SHA-256 verified: $actualHash"Successful verification confirms that the downloaded ZIP was generated for the specified release tag by the identified GitHub Actions workflow and matches the hash recorded in its attestation.
It does not prove that the source code itself is safe, that the entire GitHub environment is uncompromised, or that the build is reproducible byte for byte on another computer.
The recommended release target is x86_64-pc-windows-msvc.
Required tools:
- Rust stable
- Visual Studio Build Tools 2022 or Visual Studio 2022
- Windows 10/11 SDK
You also need cargo-about when updating THIRD_PARTY_NOTICES.md.
Show build and packaging commands
rustup target add x86_64-pc-windows-msvc
cargo build --release --target x86_64-pc-windows-msvc --lockedRelease builds are configured for a small binary size. The release profile in Cargo.toml strips symbols, enables LTO, uses one codegen unit, sets panic = "abort", and optimizes for size.
Executable:
target\x86_64-pc-windows-msvc\release\unfocusmute.exe
Distribution ZIP:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts\package-windows.ps1When you need to refresh the third-party license notices:
cargo about generate about.hbs -c about.toml --locked --offline -o THIRD_PARTY_NOTICES.mdThe output is created at dist\UnfocusMute-windows-x64.zip, with a SHA-256 verification file at dist\UnfocusMute-windows-x64.zip.sha256. The ZIP includes the versioned executable (UnfocusMute-v<version>.exe), LICENSE, and THIRD_PARTY_NOTICES.md.
Apache License 2.0. See LICENSE for details.
See THIRD_PARTY_NOTICES.md for third-party Rust crate license notices.
