lametric-py
Async Python client for LaMetric devices and the LaMetric cloud API.
The package wraps the documented local device API, notification models, and the LaMetric Streaming Protocol (LMSP) used by LaMetric SKY devices.
Features
- Async local device client for display, audio, Bluetooth, apps, notifications, and streaming
- Async cloud client for account and device lookup
- Typed dataclass models for API payloads and responses
- Notification builders for text, goal, and chart frames
- LMSP helpers for starting a stream and sending RGB888 UDP frames
Requirements
- Python 3.14+
- A LaMetric device on the local network for device API features
- A LaMetric developer token for cloud API features
Installation
This repository is currently set up as a source install.
git clone https://github.com/ElectroAttacks/lametric-py.git
cd lametric-py
uv sync --dev
If you prefer pip:
pip install -e .
Quick Start
Local Device Client
import asyncio
from lametric import LaMetricDevice
async def main() -> None:
async with LaMetricDevice(host="192.168.1.42", api_key="device-api-key") as device:
state = await device.state
print(state.name)
asyncio.run(main())
Send a Notification
import asyncio
from lametric import (
BuiltinSound,
LaMetricDevice,
Notification,
NotificationData,
NotificationPriority,
NotificationSound,
SimpleFrame,
)
async def main() -> None:
notification = Notification(
priority=NotificationPriority.INFO,
model=NotificationData(
frames=[SimpleFrame(text="Deploy finished")],
sound=BuiltinSound(id=NotificationSound.POSITIVE1),
),
)
async with LaMetricDevice(host="192.168.1.42", api_key="device-api-key") as device:
notification_id = await device.send_notification(notification)
print(notification_id)
asyncio.run(main())
Query the Cloud API
import asyncio
from lametric import LaMetricCloud
async def main() -> None:
async with LaMetricCloud(token="developer-token") as cloud:
user = await cloud.current_user
devices = await cloud.devices
print(user.email, len(devices))
asyncio.run(main())
Streaming Example
import asyncio
from lametric import (
CanvasFillType,
CanvasPostProcess,
CanvasPostProcessType,
CanvasRenderMode,
LaMetricDevice,
StreamConfig,
)
async def main() -> None:
config = StreamConfig(
fill_type=CanvasFillType.SCALE,
render_mode=CanvasRenderMode.PIXEL,
post_process=CanvasPostProcess(type=CanvasPostProcessType.NONE),
)
async with LaMetricDevice(host="192.168.1.42", api_key="device-api-key") as device:
session_id = await device.start_stream(config)
if session_id is None:
return
stream_state = await device.stream_state
frame = bytes(
[255, 0, 0]
* (stream_state.canvas.pixel.size.width * stream_state.canvas.pixel.size.height)
)
await device.send_stream_data(session_id, frame)
await device.stop_stream()
asyncio.run(main())
Public API
The package re-exports its public surface from lametric.
- Clients:
LaMetricDevice,LaMetricCloud - Exceptions:
LaMetricApiError,LaMetricConnectionError,LaMetricAuthenticationError,LaMetricUnsupportedError - Models: apps, notifications, state payloads, stream config/state types
- Enums: notification, screensaver, display, and streaming constants
Documentation
Full documentation is available at electroattacks.github.io/lametric-py.
Source pages:
docs/usage.md— local device and cloud clientsdocs/streaming.md— LMSP details and packet formatdocs/development.md— linting, typing, and tests
Development
Useful commands:
uv run ruff check .
uv run ruff format .
uv run mypy .
uv run pytest
The CI workflow runs Ruff, mypy, pytest, coverage export, and semantic-release.
Support
If this package is useful to you, consider sponsoring the project. ❤️
Release files for lametric-py 1.3.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lametric_py-1.3.10.tar.gz | 94.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lametric_py-1.3.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 110.2 kB
Release files / lametric_py-1.3.10.tar.gz
| Download URL | lametric_py-1.3.10.tar.gz |
|---|---|
| Size | 94.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f0a6fcd4c08016bf91f4d88211f438b151993872b58a230a04f88cdbd3a06e3
|
|
BLAKE2b-256 checksum How to use checksums |
65f04d824a169466f1be292f55e789d48cf02d720f4036a953d0efed4913ceb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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 Jul 22, 2026.
Transparency logRelease files / lametric_py-1.3.10-py3-none-any.whl
| Download URL | lametric_py-1.3.10-py3-none-any.whl |
|---|---|
| Size | 16.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
faee8b37448e83079c100560d1b782e3d8e409c9f275a29caa4376549c8a5326
|
|
BLAKE2b-256 checksum How to use checksums |
be344214ee9ce7b499df04fab065a941126ca0fc03737d74cf32abbc22b01a44
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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 Jul 22, 2026.
Transparency log