Annotate faster. See deeper. Sound smarter.
Project description
auvux
Annotate faster. See deeper. Sound smarter.
Push inference runs from a Python notebook to a browser viewer over WebRTC.
Bytes flow peer-to-peer over a DataChannel; identical bytes across runs
and viewers are deduplicated via per-viewer SHA-256 content addressing.
Auth is GitHub OAuth (user:email scope) verified by an HMAC-signed
JWT — your tokens never leave your machine.
Install
pip install --pre auvux
(--pre while we're on the 0.1.0a1 alpha release.)
Use
auvux login # GitHub Device Flow, caches a JWT in ~/.auvux/
auvux whoami # confirm
import auvux
from auvux import lanes, markers
# Same as `auvux login`, but inline. Idempotent — no-op if already
# signed in.
auvux.login()
canvas = auvux.Canvas("Beat Detection")
canvas.add(
lanes.Waveform.from_path("demo.wav", size=160, label="mix"),
markers=[markers.vlines(beats, color="#FFFF00")],
)
canvas.add(lanes.Heatmap(spect, yaxis="mel", fmin=30, fmax=11000, size=256))
canvas.add(lanes.line(t, beat_logits, color="#4CAF50", label="beats", fill=True))
canvas.minimap(from_lane=0)
canvas.clicks(beats, freq=800)
canvas.show() # opens at https://inference.auvux.com
Open https://inference.auvux.com in your browser before running
canvas.show() — the publisher waits up to 60 seconds for at least
one viewer to be present.
Waveform.from_path() accepts both local paths and http(s):// URLs;
remote files are fetched once into memory and reused without a second
round-trip on emit.
What gets sent
Each call to canvas.show() packages:
- A
manifest.jsondescribing the lanes and their layout - Sidecar files: WAV / NPY / NPZ / CSV / JSON, per lane type
- Click-track time lists (if any)
The viewer pre-announces which file hashes it already has, so unchanged audio across iterations is sent once — subsequent runs reuse the cached blob.
Auth flow
auvux.login() runs the GitHub Device Flow with scope user:email:
- Asks GitHub for a short user code (
XXXX-XXXX) - Opens the browser to the verification URL
- Polls until you authorise
- Swaps the GitHub access token for an auvux JWT at
https://inference.auvux.com/api/auth/cli-exchange - Caches the JWT in
~/.auvux/credentials.json(chmod 600)
Subsequent auvux.login() calls are no-ops if the cached token is
still valid; pass force=True to re-authenticate.
Environment
| Var | Default | Purpose |
|---|---|---|
AUVUX_SIGNALLING_URL |
from ~/.auvux/credentials.json, otherwise wss://signalling.auvux.com/signalling/me |
Override the signalling endpoint (escape hatch for local dev) |
AUVUX_API_BASE |
https://inference.auvux.com |
Auvux API host used for cli-exchange |
AUVUX_GH_CLIENT_ID |
built-in | GitHub OAuth App client id |
AUVUX_PEER_WAIT |
60 |
Seconds to wait for a viewer before erroring |
AUVUX_ACK_WAIT |
30 |
Seconds to wait per-viewer for delivery ack |
Development
git clone https://github.com/auvux/auvux-py
cd auvux-py
pip install -e .
Release a new version: bump version in pyproject.toml, then
git tag v0.1.0a2
git push --tags
The release.yml workflow builds the wheel + sdist and publishes to
PyPI via OIDC (Trusted Publisher) — no API token in the repo.
License
MIT — see LICENSE.
Project details
Release history Release notifications | RSS feed
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 auvux-0.1.0a6.tar.gz.
File metadata
- Download URL: auvux-0.1.0a6.tar.gz
- Upload date:
- Size: 29.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d31836ca7fa5be3d6656b9857ab24e6907424c0fe9333908958a9b9555df4df2
|
|
| MD5 |
7a726aa39d3b93b0bbcd4a4ac59fe9f0
|
|
| BLAKE2b-256 |
5a21ae2559b6f40da06d74014a69be5dcdd155cdcce06be20a29d67b3246d235
|
File details
Details for the file auvux-0.1.0a6-py3-none-any.whl.
File metadata
- Download URL: auvux-0.1.0a6-py3-none-any.whl
- Upload date:
- Size: 31.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81bc7d5c541fceccdf5a2eecbb9b7d4b3ed0197c97f1e3f70d98964138fb8df1
|
|
| MD5 |
124af32bcc129f844aae4a8c0f5ab2c3
|
|
| BLAKE2b-256 |
774da6edc277a803ec07291bda19a55945948548cc9cad1df5ade8761aca65a3
|