SynapseCTRL
Programmatic control for Razer Synapse 4 software profiles on Windows.
SynapseCTRL discovers connected devices, lists their software profiles, reports the active profile, and switches profiles through Synapse itself — without UI automation or fake clicks.
The source project is developed, dependency-managed, and built with uv. It is intentionally uv-first while still publishing as a normal Python package and command-line tool.
Important: SynapseCTRL requires its Synapse inspector hook before device/profile control will work. Start with the Getting Started guide.
Install
SynapseCTRL is published on PyPI. Installing it exposes synapsectrl as a terminal command, so normal usage does not require cloning the repository or running the project through Python manually.
For the CLI, an isolated uv tool install is recommended:
uv tool install synapsectrl
synapsectrl hook install
Standard pip installation also works:
python -m pip install synapsectrl
synapsectrl hook install
After either install, commands are available directly from the terminal:
synapsectrl --version
synapsectrl devices
Windows will request administrator elevation for the hook installer. Fully exit and reopen Razer Synapse afterward.
Python projects can add the SDK with:
uv add synapsectrl
What it can do
synapsectrl devices
synapsectrl profiles "Naga"
synapsectrl switch "Naga" "Siege"
For other programs, every command also supports machine-readable JSON:
synapsectrl devices --json
Python applications can use SynapseClient directly instead of spawning the CLI.
Documentation
- Getting Started — install the package and required hook, verify SynapseCTRL works, and make your first switch
- Documentation home — find setup, CLI, SDK, architecture, troubleshooting, and developer references
- CLI & JSON — scripting and cross-language integrations
- Python SDK — use SynapseCTRL directly from Python
- API reference — models, errors, selectors, and exact behavior
- Troubleshooting —
doctor, update repair, and diagnostics
Quick Python example
from synapsectrl import SynapseClient
with SynapseClient() as synapse:
devices = synapse.list_devices()
for device in devices:
print(device.name, device.active_profile_id)
synapse.switch_profile("Naga", "Siege")
Use stable device IDs and profile GUIDs for unattended automation. Human-readable names are convenience selectors.
Attribution and license
SynapseCTRL is licensed under the Apache License 2.0 and ships with a NOTICE file so downstream distributions preserve project attribution as required by the license.
When integrating SynapseCTRL, it is also appreciated if your source or documentation mentions that Razer Synapse device/profile discovery and control is handled by SynapseCTRL. See Attribution.
Project status
SynapseCTRL targets Razer Synapse 4 on Windows and relies on private Synapse/Electron interfaces discovered at runtime. Synapse updates can change those interfaces, so compatibility is capability-checked rather than tied to one fixed Synapse version.
This is an independent community project and is not affiliated with or endorsed by Razer.
Release files for SynapseCTRL 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| synapsectrl-0.2.0.tar.gz | 87.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| synapsectrl-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 130.1 kB
Release files / synapsectrl-0.2.0.tar.gz
| Download URL | synapsectrl-0.2.0.tar.gz |
|---|---|
| Size | 87.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b08e92391342e05a8e8e4a9a8876ffb0a52b9a60d8e70b82d788b5eb8b54b353
|
|
BLAKE2b-256 checksum How to use checksums |
5d94a6a2365cf1ce2171ec5481ef0d02304081780612cbb4838817b06ee18b64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / synapsectrl-0.2.0-py3-none-any.whl
| Download URL | synapsectrl-0.2.0-py3-none-any.whl |
|---|---|
| Size | 42.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d2f99a50e7dd47b29e4dbdb7acab8ee94ae499bb1b5a8d2778f03f7c72354ecb
|
|
BLAKE2b-256 checksum How to use checksums |
bca46788c79ec911737c34568d5a430abc6c0672d3e0283f742ef046de6d4f02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency log