Skip to content

About

Always-on-top Windows bar showing CPU, CPU temp, RAM, disk, network and NVIDIA GPU stats as coloured chips with live sparklines. Python + PySide6.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

System Monitor Bar

Python Platform Qt License

A small always-on-top readout for CPU, GPU, memory, disk and network — a floating bar of coloured chips, each with a live sparkline behind the value.

The bar showing CPU, CPU temperature, RAM, swap, disk, network and GPU chips with live sparklines

Requirements

  • Windows 10 or 11
  • Python 3.10 or newer on PATH (python.org)
  • Optional: an NVIDIA GPU for the GPU chips, and LibreHardwareMonitor for CPU temperature (see below)

Running it

git clone https://github.com/viruztt/SysMonitorBar.git
cd SysMonitorBar
run.bat

Or download the ZIP from GitHub, extract it, and double-click run.bat. The first run creates a .venv beside the script, installs the dependencies, and then launches the bar with pythonw (no console window). Later runs start immediately.

Manually, if you prefer:

py -3 -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
.venv\Scripts\pythonw main.py

selftest.bat prints one reading from every sensor and exits — the quickest way to see what your machine actually exposes.

Using it

  • Drag the bar anywhere; the position is remembered.
  • Right-click for the menu: pick which metrics to show, toggle per-core bars and sparklines, set opacity, text size and refresh rate.
  • Hover a chip for detail (GPU model, VRAM in MiB, exact GB, fan, watts).
  • A tray icon shows/hides the bar and quits it.
  • Window layer (right-click menu) sets how the bar stacks: Always on top, Normal (other windows can cover it), or Always at the bottom (it sits on the wallpaper, below everything). The bar has no taskbar button, so if you lose it in the stack use Bring to front on the tray icon.
  • Click-through (right-click menu) makes the bar ignore the mouse entirely, so it can sit over a game or editor without stealing clicks. Re-enable it from the tray icon, since the bar itself won't accept a right-click while click-through is on.

Metrics

Chip Source
CPU, RAM, SWAP, DISK Space, DISK Read/Write, NET Up/Down psutil
GPU Util / VRAM / Temp / Power NVML (nvidia-ml-py), falling back to nvidia-smi
CPU Temp LibreHardwareMonitor → OpenHardwareMonitor → LHM web server → ACPI

About CPU temperature

Windows exposes no CPU temperature through any normal API — psutil returns nothing there, which is why most Python monitors skip it. The app tries four sources in order and uses the first that answers:

  1. LibreHardwareMonitor's WMI provider (root\LibreHardwareMonitor) — the reliable one. Download LibreHardwareMonitor, run it as administrator, and in its options enable Run in background plus the WMI provider. Leave it running (it can start minimised with Windows) and the chip populates.
  2. OpenHardwareMonitor's WMI provider, if you use that instead.
  3. LibreHardwareMonitor's built-in web server on http://localhost:8085.
  4. The ACPI thermal zone — present on some boards, and often reports the chipset rather than the CPU, so it is the last resort.

Until one of those is available the chip reads n/a; everything else works regardless. The tooltip tells you which source is in use.

Configuration

config.json is written next to main.py on first use and updated whenever you change something from the menu.

Key Meaning
interval Seconds between samples (default 1.0)
chips Which metrics to show, in order
opacity Window opacity, 0.0–1.0
font_size Point size; chip height scales with it
window_layer top, normal, or bottom
click_through Ignore mouse input entirely
show_per_core Thin per-core utilisation bars under the chips
show_sparklines History fill behind each value
history Sparkline length in samples
disk_path Drive to report for DISK Space (default: system drive)

Deleting config.json restores the defaults.

Starting with Windows

Run install_startup.bat once. It puts a shortcut in your Startup folder pointing straight at .venv\Scripts\pythonw.exe main.py, so the bar appears at sign-in with no console window flashing up. remove_startup.bat undoes it.

Run run.bat at least once first — the shortcut points into .venv, which that creates. If you move or rename the folder, run install_startup.bat again so the shortcut picks up the new path.

Prefer to do it by hand? Press Win+R, run shell:startup, and drop a shortcut to run.bat in the folder that opens.

Layout

main.py              entry point (--selftest for a headless sensor dump)
run.bat              first-run installer + launcher
install_startup.bat  add/remove the Windows startup shortcut
remove_startup.bat
selftest.bat         sensor dump
tools/
  make_screenshot.py renders docs/screenshot.png from made-up readings
sysmonitor/
  config.py          JSON settings load/save
  sensors.py         sampling thread → Snapshot
  cputemp.py         CPU temperature providers
  gpu.py             NVML / nvidia-smi
  widget.py          the floating bar

Notes

  • Sampling runs on its own thread, so the UI never blocks on a slow WMI call. Typical CPU cost is well under 1% at a 1-second interval.
  • Disk I/O and network figures are deltas between samples, in MB/s.
  • Multiple NVIDIA GPUs each get their own chip set (GPU0 Util, GPU1 Util, …).
  • Chips wrap onto extra rows rather than running off the screen edge.

Your settings (config.json) are git-ignored, so they never end up in the repository.

License

MIT

About

Always-on-top Windows bar showing CPU, CPU temp, RAM, disk, network and NVIDIA GPU stats as coloured chips with live sparklines. Python + PySide6.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages