neewerd
Thin, library-backed control daemon for Neewer TL90C / TL120C ("NEEWER Infinity") RGB tube lights.
neewerd is built on the
neewer library and is based on
the research documented in the
neewer-hardware reference.
This package is the daemon shell only. All the byte-wise protocol knowledge,
the Fleet BLE client, animation effects, the device book and the BlueZ
self-heal live in the neewer
library — neewerd depends on it (pinned neewer>=0.1.0,<0.2.0) and just wires
pluggable I/O front-ends (socket / MQTT / OSC / HTTP+web UI / Art-Net / sACN)
and an MCP server onto the library's Fleet.
python -m neewerd [config.toml]
New protocol verbs (rgbcw / xy / gel by-MAC colour, …) arrive for free the
moment the library gains them: the daemon adds no per-verb code, only HTTP
field-maps and MCP tool wrappers. On startup the config is validated — unknown
top-level / [core] / [modules.*] keys are warned (a typo won't silently drop
a setting).
Console scripts
neewerd— the daemon itself.neewerctl— a thin client of the daemon's command socket.neewer-mcp— a stdio MCP server; a client of a running daemon's HTTP API (installed bypip install 'neewerd[mcp]').
Layout
neewerd/__main__.py— entrypoint: load + validate config → startneewer.Fleet→ start modules.neewerd/modules/— I/O front-ends (socket,mqtt,osc,http,artnet,sacn) + the bundled web UIs. Theartnetmodule drives tubes from DMX-over-IP with four personalities (hsi/cct/rgb/rgbw), so RGB/RGBW sources such as LedFx work directly; it paces BLE writes with a per-connection governor (auto-tuning, zero-config) so a fast source can't back up the Bluetooth transmit queue, and reports per-tube pacing telemetry (rate / bandwidth / latency / deferred).neewerd/client.py—DaemonClient: the shared async client of the daemon's/api/v1HTTP layer (nobleak, noneewerBLE code). Consumed byneewer-mcp.neewerd/mcp_server.py— the MCP tools, built onDaemonClient.neewerd/socketpath.py— shared command-socket path resolver.
HTTP API
The http module serves a REST layer at /api/v1, a legacy line transport, a
Server-Sent-Events stream that pushes on change (/api/v1/events), and the
bundled web UIs (/, /console). The /console page shows full per-light detail
(model / firmware / battery / temperature / RSSI / network id / last command) plus
a write-pacing (governor) block and a system panel with a backpressure indicator;
the state API and SSE stream carry the same per-tube pacing stats under a gov
key. Full reference: docs/HTTP-API.md.
Bind loopback — there is no auth/TLS.
Runtime signals
Tune a running daemon without a restart (a restart drops every BLE link):
SIGUSR1— toggle DEBUG logging on/off (watch the notify/GATT stream live).SIGUSR2— reset the log level to the configured one.SIGHUP— re-read the config and hot-apply the safe subset:[presets]and[core.positions]. Roster keys and module knobs are read at startup only; the reload logs exactly what it ignored.
kill -USR1 $(pgrep -f 'python -m neewerd')
Install (local dev)
uv venv .venv
.venv/bin/pip install -e '.[all]'
(Or, with a sibling checkout of
neewer-python to develop both at
once: .venv/bin/pip install -e ../neewer-python -e '.[all]'.)
See CHANGELOG.md for notable changes.
Metadata
Release files for neewerd 0.1.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 | Provenance | Actions |
|---|---|---|---|---|
| neewerd-0.1.0.tar.gz | 91.1 kB | Without provenance | Details for neewerd-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| neewerd-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for neewerd-0.1.0-py3-none-any.whl |
Total release size: 158.7 kB
Release files / neewerd-0.1.0.tar.gz
| Download URL | neewerd-0.1.0.tar.gz |
|---|---|
| Size | 91.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6d1dca72113cbd0964e2ea8cf439ee270587641e5a73a5eb5bd7073882b6a928
|
|
BLAKE2b-256 checksum How to use checksums |
f6e9200983a6586f7da89520b2bd64679c368322cecd61a96fee3239f2b685a6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Release files / neewerd-0.1.0-py3-none-any.whl
| Download URL | neewerd-0.1.0-py3-none-any.whl |
|---|---|
| Size | 67.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17942935199a4befd44d2b8f6c2ef04da2d743200ff8c757e18a5622aab30c38
|
|
BLAKE2b-256 checksum How to use checksums |
28c244962d54b36224df99d96f0d8ed2961e42948bb8cb3e8fc1e23fb50f017d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Security for neewerd 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.