wifi-densepose/python/ruview-meta
ruv b71d243b42 feat(adr-117): publish wifi-densepose 2.0.0a1 + ruview 2.0.0a1 to PyPI
Three PyPI artifacts now live (published from .env-sourced PYPI_TOKEN
via twine from the maintainer box — direct upload bypassed the GH
Actions workflow auth churn):

1. wifi-densepose==1.99.0 — tombstone (raises ImportError with migration URL)
   https://pypi.org/project/wifi-densepose/1.99.0/

2. wifi-densepose==2.0.0a1 — PyO3 wheel (win_amd64 cp310-abi3) + sdist
   https://pypi.org/project/wifi-densepose/2.0.0a1/

3. ruview==2.0.0a1 — meta-package re-exporting wifi_densepose
   https://pypi.org/project/ruview/2.0.0a1/

New `python/ruview-meta/` subdirectory:
- pyproject.toml — name="ruview", version="2.0.0a1", setuptools backend,
  dependencies = ["wifi-densepose==2.0.0a1"]
- src/ruview/__init__.py — re-exports every name from
  `wifi_densepose.__all__` so `from ruview import BreathingExtractor`
  is equivalent to `from wifi_densepose import BreathingExtractor`.
  Also re-exports `__version__`, `__rust_version__`,
  `__rust_build_tag__`, `__build_features__`. Aliases the `client`
  sub-package transparently when wifi-densepose[client] extras are
  installed.
- README.md — explains why two PyPI names ship the same code (brand
  vs technical name) and shows install commands for both.

End-to-end verified: fresh venv, `pip install ruview`,
`import ruview` + `import wifi_densepose` both succeed,
`ruview.BreathingExtractor is wifi_densepose.BreathingExtractor` → True.

Multi-platform wheels (manylinux x86_64+aarch64, macos x86_64+arm64)
still pending — the cibuildwheel workflow path remains for that.
Linux/macOS users today install via the sdist (requires rustup +
maturin locally).

Refs: docs/adr/ADR-117-pip-wifi-densepose-modernization.md
Refs: #785

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-24 12:46:22 -04:00
..
src/ruview feat(adr-117): publish wifi-densepose 2.0.0a1 + ruview 2.0.0a1 to PyPI 2026-05-24 12:46:22 -04:00
README.md feat(adr-117): publish wifi-densepose 2.0.0a1 + ruview 2.0.0a1 to PyPI 2026-05-24 12:46:22 -04:00
pyproject.toml feat(adr-117): publish wifi-densepose 2.0.0a1 + ruview 2.0.0a1 to PyPI 2026-05-24 12:46:22 -04:00

README.md

ruview

Ambient intelligence from WiFi CSI. Detect human presence, count people, read breathing and heart rate, and estimate skeletal pose — using only the WiFi signal already in your home. No cameras. No wearables. Works through walls and in the dark.

ruview is the brand-facing meta-package for the RuView sensing stack. It installs the compiled PyO3 wheel published as wifi-densepose and re-exports its full API under the ruview namespace — so you can write either of these and they do the same thing:

from ruview import BreathingExtractor, SensingClient
from wifi_densepose import BreathingExtractor, SensingClient

Install

pip install ruview                 # core DSP
pip install "ruview[client]"       # + WebSocket/MQTT clients

Usage

from ruview import BreathingExtractor

br = BreathingExtractor.esp32_default()  # 56 subcarriers @ 100 Hz, 30s window
for residuals, weights in csi_source:
    est = br.extract(residuals=residuals, weights=weights)
    if est is not None:
        print(f"{est.value_bpm:.1f} BPM  (confidence={est.confidence:.2f})")

Full API + WebSocket / MQTT / Home Assistant integration docs: wifi-densepose on PyPI.

Why two PyPI names?

Historic: wifi-densepose is the technical / academic name (the project started as a WiFi-based DensePose implementation). ruview is the brand the v2 ambient-intelligence platform ships under. Both are the same code. You pick the import that reads better in your project.

License

MIT.