imuninn
Python client for iMuninn: an iPhone app that turns the phone into a network sensor node — camera (H.264), IMU, ARKit 6-DoF pose with per-frame intrinsics, LiDAR depth — served over the LAN with a Protobuf protocol. This package discovers phones, connects, configures them, receives and decodes the streams, records MCAP and visualises in Rerun.
- Documentation: 中文 · English
- Source: https://github.com/Bardreamaster/imuninn (
host/python)
Install
pip install imuninn # discovery, connection, config, pose / IMU / depth decoding, CLI
pip install "imuninn[all]" # + video decoding, MCAP, Rerun, MCP server
| extra | adds | brings in |
|---|---|---|
video |
H.264 decoding to NumPy (imuninn.video.H264Decoder) |
PyAV |
mcap |
imuninn record / convert / info, MCAP replay |
mcap, mcap-protobuf-support |
rerun |
imuninn rerun live viewer and MCAP playback |
rerun-sdk, PyAV |
mcp |
imuninn-mcp, an MCP server so agents can drive the phone |
mcp, Pillow |
The browser viewer (imuninn web) is part of the core package: a static page served from localhost that connects straight to the phone.
Python 3.10+. The phone needs the iMuninn app (iOS; Android camera-only) on the same network, or a USB cable (iPhone shares a link-local network over USB).
Quick start
import imuninn
for phone in imuninn.discover(): # Bonjour: _imuninn._tcp
print(phone.name, phone.address)
with imuninn.connect() as dev: # first phone found; or a name / IP / "ip:port"
dev.set("imu.rate_hz", 100) # validated by the phone: applied / clamped / rejected
dev.start() # capture session on
for pose in dev.iter("ar_pose"): # also "imu", "rgb", "depth", "health"
t = dev.to_pc_time(pose.header.device_time_ns)
print(t, pose.position, pose.intrinsics.fx)
Everything is synchronous; the asyncio client (imuninn.client.PhoneClient) is there if you want to drive it yourself. Parameters are self-describing (dev.capabilities), can be grouped into YAML profiles (dev.apply_profile("calibration")), and a config lease keeps several PCs from fighting over one phone.
Command line
imuninn list # phones on the LAN
imuninn watch --start # print samples as text
imuninn rerun --start --depth # Rerun viewer: pose, trajectory, video, depth, IMU, health
imuninn record -o run1.mcap # record every stream to MCAP
imuninn rerun --mcap run1.mcap # play it back
imuninn profile apply dataset # built-in YAML preset
imuninn web # browser viewer at http://localhost:7430 (video, depth, pose, IMU)
imuninn-mcp # MCP server (stdio) for agents
All commands take an optional phone target (iPhone, 10.0.0.5, 10.0.0.5:7420).
Data
Pose: ARKit convention (right-handed, Y up, camera looks down −Z), with camera intrinsics in every sample. Video: H.264 Annex-B, sensor orientation plus rotation_deg. Depth: uint16 millimetres + confidence, LZ4. Timestamps: device monotonic time plus a measured offset to the PC clock. The wire format is imuninn/proto/imuninn.proto inside the package.
License
MIT or Apache-2.0, at your option.
Metadata
Release files for imuninn 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 |
|---|---|---|---|---|
| imuninn-0.1.0.tar.gz | 126.0 kB | With provenance | Details for imuninn-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| imuninn-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for imuninn-0.1.0-py3-none-any.whl |
Total release size: 256.8 kB
Release files / imuninn-0.1.0.tar.gz
| Download URL | imuninn-0.1.0.tar.gz |
|---|---|
| Size | 126.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dad76bde6ca31fc3610052db5b5dc52ab9ff4d451318d314cac4eedfbe9204f0
|
|
BLAKE2b-256 checksum How to use checksums |
20c10d5367ec945acd586694801a330b63a46037d69c42ee72b843f31bb76016
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 9, 2026.
Transparency logRelease files / imuninn-0.1.0-py3-none-any.whl
| Download URL | imuninn-0.1.0-py3-none-any.whl |
|---|---|
| Size | 130.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
da9a314b357fecdad7e0944b8acdf11accf61da50188615c2ee5db83b0f49198
|
|
BLAKE2b-256 checksum How to use checksums |
c9e9947fa1f75ee77a2bb09ff132d0539f1e19b5e1effdd098246ae4f74d5f54
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 9, 2026.
Transparency logSecurity for imuninn 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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for imuninn-0.1.0.tar.gz
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 Nov 9, 2026.
Transparency logA 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.