(formerly “MSI Profile Switcher” - renamed to keep the project clearly independent of MSI; see docs/ABOUT_THE_NAME.md)
A lightweight, independent Windows tray app to switch MSI laptop power profiles - Silent / Balanced / Extreme / Super Battery - instantly via global hotkeys, the tray menu, or auto-switch on AC/battery, with an on-screen overlay showing the active profile.
Built because MSI Center 2.0 removed the Silent profile. This app talks to the Embedded Controller (EC) through MSI's own WMI interface - no kernel driver, no disabling of Windows security - so it works regardless of the MSI Center version (even with MSI Center uninstalled).
⚠️ Hardware-specific. Developed and tested on MSI Raider GE78HX 13V (board MS-17S1, i9-13950HX, EC firmware17S1IMS1.114), and confirmed by an owner on the GE78 HX 14V (17S2IMS2, same board). EC registers are model/firmware-specific - read docs/TECHNICAL.md before trying it on another model. Use at your own risk.
📋 ~135 MSI models recognised - 13 models confirmed on real hardware by their owners (GE78HX/Vector boards, Crosshair A16 HX, Crosshair 16 HX AI, Sword 16 HX, GE67 HX, Cyborg 15, both GF63 Thins, Titan 18 HX Dragon, Bravo 15 B7ED, Bravo 17, Katana GF66 11U, Pulse/Katana 17 B13V), the rest are experimental (opt-in). See the full supported-models list, or browse it live in the app's Models tab.
- 🖥️ Tray icon (color = active profile) with a profile menu, plus a tabbed main window (Scenarios / Status / Fan curve / Models / Report / Updates) with a light / dark theme; Settings is organized into icon sub-tabs (a Start page with tiles + General / Power / Notifications / Gaming / Hotkeys / System) and reopens on the sub-tab you used last
- ⌨️ Global, rebindable hotkeys (default
Ctrl+Alt+F1–F4,Ctrl+Alt+P= cycle) - 🔔 On-screen overlay (OSD) on every profile change
- 🎮 Detachable gaming overlay (HUD) - a small always-on-top panel with FPS / frametime, temps / fan RPM / profile / load / GPU% / VRAM / clocks / RAM / battery, in a card or bar layout. Pick which metrics to show, drag it anywhere (position remembered) or snap to a corner, toggle with a hotkey (default
Ctrl+Shift+O). Rendered per-pixel with independent background & content opacity, smooth anti-aliased text, a readability shadow, optional click-through lock (Ctrl+Shift+L) - 🎯 FPS & frametime of any game - measured driver-free from Windows' own ETW
Presentevents (the same source Intel PresentMon uses): no DLL injection, nothing touches the game, anti-cheat-safe. Live FPS + frametime in the overlay, and a Status → Gaming tab with a 60 s frametime chart (stutter markers), 1% lows and a stutter counter. The monitor runs only while the overlay or the Gaming tab is open - zero idle cost - 🏁 Game-session report - when a game exits, GhostDeck pairs the FPS story with the EC story nobody else has: "1 h 42 min · avg 87 FPS · 1% low 54 · CPU max 91 °C" in a sleek borderless popup (frametime sparkline included) with one-click save as PNG and data export (JSON/CSV), plus a summary card on Status → Gaming and a change-history entry
- 🌍 8 languages - EN / PL / DE / FR / ES / 中文 / PT-BR / RU
- 🎨 Custom color per profile
- 📊 Status - live CPU/GPU temperature & fan rings, fan RPM, CPU usage & approx. clock, GPU load % / VRAM, RAM, battery %, plus a live EC profile-byte matrix (what each profile writes vs. the current values). Extra metrics are read driver-free (Windows PDH counters - no kernel driver, anti-cheat-safe)
- 🌀 Fan curve editor - drag a custom CPU/GPU curve and run it on Balanced / Extreme / Super Battery (MSI Center only allows one in Extreme); fully reversible. Silent is the exception: its power cap lives in the same EC byte the curve needs, so turning a curve on in Silent necessarily leaves Silent for Balanced - the app warns and switches for you. Single-fan-curve boards (where MSI Center shows one slider, e.g. Thin GF63 12VE) automatically get a single full-width curve editor, and the unused GPU tables are never written
- 🗂️ Fan-curve presets - save curves under a name, switch them from the editor or the tray menu, assign a preset per profile (auto-applied on every switch; Silent stays stock), and export / import / share presets as JSON - a Share button opens a prefilled GitHub Discussion with your model and curve
- 📈 History charts - local trend of CPU/GPU temperature, fan duty, fan RPM and game FPS over the last 5-60 minutes (Status → History) with a crosshair value readout; memory-only, nothing is stored or sent anywhere - unless you hit Export… to save the window as CSV/JSON for your own analysis
- ⌨️ Command line -
GhostDeck.exe --profile Silent,--fanboost on,--curve "<preset>",--panic,--status(JSON) for Task Scheduler, Stream Deck and scripts - same safety gates as the UI - 🌪️ Fan Boost - force both fans to full speed with one click, a tray entry or a global hotkey (default
Ctrl+Alt+F5), independent of the active profile; shown as a compact toggle "brick" on the Scenarios tab (equivalent of MSI's Cooler Boost) - 📜 Change-history log - a running log of recent profile switches and EC writes (time, source: hotkey / tray / auto-AC / fan curve / external sync, the bytes written, and a readback), with a full-log window - handy for model-support reports
- 🛡️ Firmware-change guard - after a BIOS/EC update the app detects the changed firmware, blocks automatic writes and asks you to re-verify the model before it touches the EC again
- 🌡️ Temperature alert (opt-in) - an OSD toast + tray notification when the CPU or GPU stays above a chosen threshold (70-100 °C) for a chosen time (5-60 s), with a cool-down between alerts and an entry in the change history; the OSD display time is adjustable (1-15 s, alerts stay up at least 5 s)
- 🆘 Panic reset hotkey (default
Ctrl+Alt+F10) - one press returns the machine to a safe stock state: Fan Boost off, Balanced profile, fans back on the automatic curve - 💾 Settings backup - export every preference (colors, hotkeys, rules, overlay, alerts) to a JSON file and import it after a reinstall or on another machine; machine-specific state (firmware guard, window position) stays local
- 🔌 Optional auto-switch on AC / battery (off by default, so it won't fight MSI software)
- 🖥️ Refresh-rate auto-switch (opt-in) - drop the panel to 60 Hz on battery and jump back to 144/240 Hz on AC, automatically; pickers list only the modes your panel reports. Pure Windows display API, so it works on every laptop - even unrecognised models
- 🔋 Battery charge limit (60 / 80 / 100 %)
- 🚀 Start with Windows (elevated scheduled task - no UAC nag at logon)
- 🔄 Syncs the UI if the profile is changed externally (e.g. by MSI Center)
- ⬇️ In-app updates - a daily update check (can be disabled) with a tray notification, plus one-click install from the Updates tab: it downloads the new release, shows a progress bar and restarts itself on the new version (the previous
.exeis kept as a.bakand cleaned up on next start); falls back to the download page if the download fails. The tab also lists the last 20 releases with download counts and full release notes readable inline (click an entry to expand), and recovers from a lost connection on its own (retry button + automatic re-check) - 🔏 Digitally signed releases - every
GhostDeck.exepublished since v1.24.0 carries a verified publisher signature ("WYGODA DAWID FENIX INSPIRE"), so Windows can confirm who built it and that nobody tampered with it - see Download for what that means in practice - 📣 Announcements & feedback - occasional in-app notices (tray balloon + a dismissible banner) fetched read-only from the repo on the same daily check; a Send feedback… tray entry opens GitHub Discussions. No data is collected by the app (a plain download, same privacy footprint as the update check); both can be turned off with the update-check toggle
GhostDeck is a small, focused tool - it deliberately does one thing (power/fan profiles) well, rather than replacing MSI Center. The table shows where it helps most: the Silent profile MSI removed, a fan curve outside just Extreme, no background services, and full transparency of what it writes to the EC.
| Feature | MSI Center 2.0 | GhostDeck |
|---|---|---|
| Silent profile | ❌ (removed in 2.0) | ✅ |
| Balanced / Extreme / Super Battery modes | ✅ | ✅ |
| Full fan speed (Fan Boost / MSI Cooler Boost) | ✅ | ✅ |
| Battery charge limit | ✅ (60/80/100) | ✅ (60/80/100) |
| Custom fan curve | Limited¹ | ✅ *(Balanced / Extreme / Super Battery)*¹ |
| Global rebindable hotkeys | Limited² | ✅ |
| Auto-switch profile on AC / battery | ❌ | ✅ |
| Auto refresh-rate switch on AC / battery | ❌ | ✅ (any model) |
| On-screen overlay (OSD) | ✅ (profile / Fn keys) | ✅ *(every function)*⁶ |
| Detachable gaming overlay (HUD) | ❌ | ✅ (FPS / frametime / temps / RPM / GPU% / VRAM / clocks / RAM / battery; card or bar) |
| FPS + frametime counter (any game, no injection) | ❌ | ✅ (ETW, anti-cheat-safe) |
| Game-session report (FPS + temps/fans together) | ❌ | ✅ (on game exit) |
| Live EC profile-byte view / transparency | ❌ | ✅ |
| Change & EC-write history log | ❌ | ✅ |
| Temperature alert (threshold + duration) | ❌ | ✅ (opt-in, OSD + tray) |
| Panic reset hotkey (back to a safe stock state) | ❌ | ✅ (Ctrl+Alt+F10) |
| Settings backup (export / import) | ❌ | ✅ |
| Fan-curve presets + per-profile auto-apply | ❌ | ✅ (share/import as JSON) |
| Local history charts (last 60 min) | ❌ | ✅ (temps + fans, memory-only) |
| Command-line interface (automation) | ❌ | ✅ |
| Hardware monitoring | ✅ | Limited³ |
| Works with any / no MSI Center version | ❌ | ✅ |
| Installed size | ~950 MB⁴ + background services | ~155 MB⁵ (single portable .exe, no services) |
| RGB / keyboard / other MSI-Center features | ✅ | ❌ |
| In-app self-update | ✅ | ✅ (one-click install + restart) |
| Open source | ❌ | ✅ |
- MSI Center only allows a custom fan curve in Extreme; this app runs one on Balanced / Extreme / Super Battery, fully reversible. Silent is a hardware exception: its power cap and the fan-curve mode share the same EC byte (
0xD4), so enabling a curve in Silent necessarily switches the profile to Balanced (the app warns first). - MSI Center's shortcuts are limited; here every hotkey is global and rebindable.
- Monitors CPU/GPU temperature, fan RPM, CPU & RAM usage via EC/WMI, plus GPU load %, VRAM, an approximate CPU clock and battery % via driver-free Windows PDH counters, and game FPS / frametime via Windows ETW
Presentevents - not MSI Center's full telemetry. - MSI Center 2.0.x as the UWP app plus the files it installs to
C:\Program Files (x86)\MSIon first launch. - Self-contained single
.exe- no installer, no background service, no separate .NET runtime. - MSI Center shows an overlay for profile / Fn-key changes; this app shows one for every action it performs - profile switch and Fan Boost (and future functions) - so you always get feedback on what changed.
The comparison is against MSI Center 2.0 (the version that dropped Silent). This app is an unofficial, independent project - not affiliated with, endorsed, sponsored or supported by MSI. "MSI", "MSI Center" and "Cooler Boost" are trademarks of Micro-Star International Co., Ltd.; they are used here only descriptively to state compatibility.
Grab the latest GhostDeck.exe from the Releases page.
It's a single, self-contained file - no install, no .NET runtime needed. Run it and approve the UAC prompt (EC access requires administrator).
Every release since v1.24.0 is digitally signed. In plain terms: before publishing, the exe gets a cryptographic seal tied to the developer's registered business, verified by Microsoft (Azure Artifact Signing). That gives you three guarantees:
- You know who made it - right-click the exe → Properties → Digital Signatures shows "WYGODA DAWID FENIX INSPIRE" (the developer's registered company). Windows shows the same name in the UAC prompt instead of "Unknown publisher".
- Nobody tampered with it - if even one byte of the file were modified after signing (by malware, a broken download, or a fake mirror), the signature check fails visibly.
- Fewer scary warnings over time - SmartScreen and antivirus tools treat consistently-signed software as increasingly trustworthy, so "Windows protected your PC" prompts fade away as the signature builds reputation.
A GhostDeck.exe v1.24.0+ without this signature is not an official build - don't run it.
Each model is ✅ tested (verified on real hardware) or ⚗️ experimental (built from the msi-ec register maps but not yet verified - the "Silent" power-cap behaviour is unconfirmed). On an unrecognized firmware the app runs read-only (Status works, writes disabled), so it never writes wrong registers on an untested machine.
Experimental models are opt-in: enable them in Settings → Power → "Enable experimental models". They write only documented MSI shift/fan registers (low risk), but switching may not give the same low-power "Silent" until an owner confirms it.
~134 models are recognised, grouped into two EC families taken from the msi-ec maps and cross-checked against MControlCenter:
| Tier | Models | EC firmware / registers | Fan curve |
|---|---|---|---|
| ✅ Tested | MSI Raider GE78HX / Vector GP78HX 13V, GE78 HX 14V / Vector 17 HX A14V, Crosshair A16 HX, Sword 16 HX B13V/B14V, Raider GE67 HX 12U, Cyborg 15 A12VF, Thin GF63 12VE, Titan 18 HX Dragon Edition, Bravo 15 B7ED, Bravo 17 C7VE/D7VFK, GF63 Thin 11UC/11SC, Katana GF66 11UE/11UG, Pulse/Katana 17 B13V/GK, Crosshair 16 HX AI D2XW | 17S1IMS1.*, 17S2IMS2.*, 15PLIMS1.*, 15P2EMS1.*, 1545IMS1.*, 15K1IMS1.*, 16R8IMS1.*, 1824EMS1.*, 158PIMS1.*, 17LNIMS1.*, 16R6EMS1.*, 1581EMS1.*, 17L5EMS1.*, 15P4EMS1.* - shift 0xD2 / fan 0xD4 |
✅ editable |
| ⚗️ G2 family (~93) | Raider / Vector / Titan HX (13V–14V), Stealth 16-18, Sword / Pulse / Crosshair 16, Katana, Cyborg, Bravo, Modern / Prestige / Summit | shift 0xD2 / fan 0xD4 / super-batt 0xEB |
◉ editable after opt-in (unverified) |
| ⚗️ G1 family (~33) | older GS / GF / GE / GP, Modern, Alpha, Bravo, Delta, Creator | shift 0xF2 / fan 0xF4 / charge 0xEF |
- profiles only |
The G2 fan-curve tables use the fixed addresses (CPU 0x6A/0x72, GPU 0x82/0x8A) that MControlCenter writes across the whole family, so they are practice-confirmed; on experimental models the curve is editable once you opt in, but stays flagged unverified until you compare it with MSI Center on your own model. See the full per-firmware list of all ~135 models (source of truth: Devices.cs). A handful of models whose msi-ec config documents no "Silent" fan value are deliberately left out (Silent is this app's core function - guessing it would be unsafe).
Got a different MSI - or own an experimental one and can confirm it works? The easiest way is right inside the app: tray menu → Report my model… (also a button in the Status window). It walks you through a read-only EC capture in each MSI Center scenario, builds the report, copies it to your clipboard, saves it to a file, and opens a pre-filled GitHub issue - just paste and submit. (Requires MSI Center installed as the scenario reference.)
Prefer to do it by hand? Open a Model support request with your EC firmware (shown in the app's Status window) and the output of the diagnostic scripts in scripts/diagnostics/. The procedure is in docs/TECHNICAL.md §11.
Every core action is scriptable - handy for Task Scheduler, Stream Deck, AutoHotkey or plain shortcuts. Run from an elevated prompt (EC access needs admin, same as the app):
GhostDeck.exe --profile Silent # or Balanced / Extreme / SuperBattery
GhostDeck.exe --cycle # next profile
GhostDeck.exe --fanboost on # full fan speed (off restores the profile's fans)
GhostDeck.exe --curve "My quiet" # apply a saved fan-curve preset ("auto" = stock fans)
GhostDeck.exe --overlay on # gaming overlay (needs the app running)
GhostDeck.exe --panic # safe state: Fan Boost off, Balanced, fans auto
GhostDeck.exe --status # current state as JSON (profile, temps, fans/RPM, refresh rate, game FPS)If the tray app is running, the command is executed by it (with the exact same safety gates as the UI - tier, experimental opt-in); otherwise a one-shot mode talks to the EC directly and exits. Exit codes: 0 OK, 1 failed, 2 bad usage.
Full reference - every command, the --status JSON schema and ready-made recipes (Task Scheduler, Stream Deck, AutoHotkey, game-launcher wrappers): docs/CLI.md.
Requires the .NET 8 SDK.
dotnet publish -c Release -r win-x64 --self-contained true ^
-p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o publishThe app icon is generated by tools/gen-icon.ps1 (already committed as app.ico).
Each profile is a small set of EC register writes sent through root\wmi → MSI_ACPI.Set_Data (a 32-byte Package_32 buffer: Bytes[0] = address, Bytes[1] = value). The key lever is the fan-mode register 0xD4 (Silent = 0x1D), which the EC firmware ties to the power cap - in testing it dropped package power from ~104 W to ~30 W under load.
Full reverse-engineering write-up, register map, measurements and the diagnostic scripts: docs/TECHNICAL.md.
Full per-firmware list of every recognised model: docs/SUPPORTED_MODELS.md (also shown live in the app's Models tab).
EC register map credit: BeardOverflow/msi-ec.
See docs/FAQ.md - fan control outside Extreme, exact-wattage / PL1-PL2 sliders (and the BIOS route), running alongside MSI Center (and why changes don't show in its UI), auto-clearing RAM, safety, and the admin/UAC prompt.
To preview the experimental / unsupported UI on any machine, set the MSIPS_FORCE_FIRMWARE environment variable to a firmware string before launching. The app then simulates that firmware and performs no EC writes (UI preview only):
# Run from an ADMIN PowerShell so the variable reaches the elevated app:
$env:MSIPS_FORCE_FIRMWARE = "16V1EMS1.100" # an experimental model
# or "ZZZZ" for an unsupported firmware
& .\GhostDeck.exe
# (close it, clear the variable, relaunch to return to normal)The Status window / tray show a (test) marker while simulating.
MIT © 2026 wygodad









