BENCHLAB PyTools
BENCHLAB PyTools is the Python-based control suite for BENCHLAB telemetry devices. It provides a shared telemetry pipeline — device discovery, data sourcing, and process management — plus a set of consumer tools built on top of it:
- TUI — interactive terminal dashboard for live monitoring
- CSV Logger — fleet-wide telemetry logging for offline analysis
- FastAPI Server — REST API for telemetry, exposed for other tools/integrations
- Graph — DearPyGui-based real-time sensor graphing
- HWiNFO Export — exposes sensors as HWiNFO64 custom sensors
- MQTT Publisher — publishes telemetry to a local or remote MQTT broker
- Link — publishes telemetry to the BENCHLAB cloud (SaaS) MQTT broker
- VU Dials — analog-style VU meter dial display and configuration
- WigiDash — telemetry/graph display on a G.SKILL WigiDash panel
- Config Tool — import/export device configuration (fan curves, RGB, etc.) via JSON
All tools share a common data-source layer, so the same telemetry can be read directly from a device, through a FastAPI server, over MQTT, or via the Windows BENCHLAB service — locally or remotely — without changing the consumer tool.
Installation
Requires Python 3.10+.
From PyPI
pip install benchlab-pytools
This installs a benchlab console command on your PATH (see Command-Line Flags below). Install with extras for the tools you need, e.g. pip install "benchlab-pytools[tui]".
From source
pip install -r benchlab/requirements.txt
Each tool has its own requirements.txt (e.g. benchlab/graph/requirements.txt, benchlab/vu/requirements.txt). The launcher installs a tool's requirements automatically the first time it's run — you generally don't need to install them by hand.
Usage
Interactive Menu
Run with no arguments to enter the interactive launcher:
python benchlab.py
or equivalently:
python -m benchlab
If installed from PyPI, use the benchlab command instead:
benchlab
The interactive menu (prompt_toolkit-based, with a plain-input fallback if prompt_toolkit isn't installed) lets you pick a data source and one or more tools, then launches them — installing any missing per-tool dependencies along the way.
Command-Line Flags
Each tool can also be launched directly with a flag. If installed from PyPI, replace python -m benchlab with benchlab in the examples below (e.g. benchlab -tui).
python -m benchlab -tui # Interactive terminal dashboard
python -m benchlab -logfleet # CSV logger (no TUI)
python -m benchlab -fastapi # FastAPI telemetry server
python -m benchlab -graph # DearPyGui graph
python -m benchlab -hwinfo # HWiNFO custom sensor export
python -m benchlab -mqtt [broker] # MQTT publisher (default broker: localhost)
python -m benchlab -link # Publish telemetry to BENCHLAB cloud (Link)
python -m benchlab -vu # VU analog dials
python -m benchlab -vuconfig # VU dial configuration UI
python -m benchlab -wigidash # WigiDash display
python -m benchlab -config ... # Device configuration import/export
Running with no flags is equivalent to launching the interactive menu.
Data Sources
Most tools accept --source to choose where telemetry comes from:
| Source | Description |
|---|---|
direct (default) |
Direct USB-serial connection via benchlab-pycore |
fastapi |
Local FastAPI server, started automatically if not already running |
fastapi_custom |
Remote FastAPI server — requires --api-url |
mqtt |
Local MQTT broker + publisher, started automatically if needed |
mqtt_custom |
Remote/existing MQTT broker — requires --mqtt-broker/--mqtt-port |
named_pipe |
Windows BENCHLAB service (BL_Service) via named pipes — Windows only |
service_http |
Windows BENCHLAB service HTTP API — requires --service-url (default http://localhost:8585) |
Common connection flags:
--source SOURCE direct | fastapi | fastapi_custom | mqtt | mqtt_custom | named_pipe | service_http
--api-url URL FastAPI base URL (default: http://127.0.0.1:8000)
--api-port PORT FastAPI port (default: 8000)
--mqtt-broker HOST MQTT broker host (default: localhost)
--mqtt-port PORT MQTT broker port (default: 1883)
--service-url URL BENCHLAB Windows service HTTP API URL (default: http://localhost:8585)
-i, --interval SECONDS Refresh interval (default: 1.0)
When a source needs a background service (fastapi, mqtt), the launcher starts and health-checks it automatically, and tears it down on exit. Not every tool supports every source — the config tool, for example, only supports direct and named_pipe. See each tool's README for specifics.
Launch Profiles
A named profile can bundle a data source and a set of tools to start together:
python -m benchlab --profile gskill_ctex26
Profiles are defined in benchlab/tools.py (LAUNCH_PROFILES). Each spawns its tools in separate terminal windows and manages them as a group.
Architecture
benchlab/main.py— CLI argument parsing and mode dispatch (launch_mode())benchlab/launcher.py— in-process and multi-terminal tool launching, process lifecyclebenchlab/sources.py— data-source detection, startup, and teardown for all supported sourcesbenchlab/tools.py— theCONSUMER_TOOLSregistry (tool metadata, module/function to invoke, dependencies) andLAUNCH_PROFILESbenchlab/menu.py/benchlab/menu_classic.py— interactive terminal menu (prompt_toolkit, with a plain-input fallback)benchlab/core/— shared internals used by every tool: device discovery, the data-source abstraction, process management, retry logic. See benchlab/core/README.md.
Each consumer tool lives in its own subpackage under benchlab/ with its own README, and (where needed) its own requirements.txt.
Adding a New Tool
- Add an entry to
CONSUMER_TOOLSinbenchlab/tools.pywithname,flag,module,function, andrequirements. - Implement the tool's entry function in its module, accepting an
argsnamespace (seebenchlab/launcher.py::_build_args_namespace). - Add a CLI flag for it in
benchlab/main.py::get_parser()and dispatch it inlaunch_mode(). - Add a
requirements.txtin the tool's directory if it has extra dependencies. - Write a
README.mdin the tool's directory following the style of the existing ones.
Tool Documentation
- Config Tool — device configuration import/export
- Core — shared internals (data sources, process management, discovery)
- CSV Logger
- FastAPI Server
- Graph
- HWiNFO Export
- Link — publish telemetry to BENCHLAB cloud
- MQTT Publisher
- TUI
- VU Dials
- WigiDash
License
Part of BENCHLAB PyTools. See main project license for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file benchlab_pytools-3.0.2.tar.gz.
File metadata
- Download URL: benchlab_pytools-3.0.2.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6363ecaf2765901ca39a6263d44fbc921b5df078444cecc8474a43d262069639
|
|
| MD5 |
e4fabda99c6fae4d635060a291444fd2
|
|
| BLAKE2b-256 |
cca1707f8968abf12339ddf2ee9262bde487511d8b9397d5dd5ec48868a006c5
|
Provenance
The following attestation bundles were made for benchlab_pytools-3.0.2.tar.gz:
Publisher:
release.yml on BenchLab-io/benchlab-pytools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
benchlab_pytools-3.0.2.tar.gz -
Subject digest:
6363ecaf2765901ca39a6263d44fbc921b5df078444cecc8474a43d262069639 - Sigstore transparency entry: 2500330006
- Sigstore integration time:
-
Permalink:
BenchLab-io/benchlab-pytools@693e18f48bb4e9bb2a566d271d2d4921c1f9590c -
Branch / Tag:
refs/tags/v3.0.2 - Owner: https://github.com/BenchLab-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@693e18f48bb4e9bb2a566d271d2d4921c1f9590c -
Trigger Event:
push
-
Statement type:
File details
Details for the file benchlab_pytools-3.0.2-py3-none-any.whl.
File metadata
- Download URL: benchlab_pytools-3.0.2-py3-none-any.whl
- Upload date:
- Size: 1.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe0d366aafdddc4fa7dd8717f443ad187a5f9ffa17f1494096b8d4567809788a
|
|
| MD5 |
307057a2a71d631e0d83c18e6cae4f4a
|
|
| BLAKE2b-256 |
6ef7affacc6c8f802a9737c466eb086b4cfdc8fa4539d968e8f86f00038a17c3
|
Provenance
The following attestation bundles were made for benchlab_pytools-3.0.2-py3-none-any.whl:
Publisher:
release.yml on BenchLab-io/benchlab-pytools
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
benchlab_pytools-3.0.2-py3-none-any.whl -
Subject digest:
fe0d366aafdddc4fa7dd8717f443ad187a5f9ffa17f1494096b8d4567809788a - Sigstore transparency entry: 2500330030
- Sigstore integration time:
-
Permalink:
BenchLab-io/benchlab-pytools@693e18f48bb4e9bb2a566d271d2d4921c1f9590c -
Branch / Tag:
refs/tags/v3.0.2 - Owner: https://github.com/BenchLab-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@693e18f48bb4e9bb2a566d271d2d4921c1f9590c -
Trigger Event:
push
-
Statement type: