ruview @ v0.5.3-esp32
integrity
- size
- 26.4 MiB
- downloaded
- last checked
release notes
What's Changed
Cross-Node Mesh Fusion
- RSSI-weighted feature fusion across multiple ESP32 nodes — closer node gets higher weight
- DynamicMinCut person separation via
ruvector_mincuton subcarrier temporal correlation graph - RSSI-based skeleton position tracking — walk between nodes and the skeleton follows
- Motion-responsive skeleton — arm swing (0-80px), leg kick (0-50px), walking bob, head nod all driven by real CSI data
Per-Node State (ADR-068)
- Each ESP32 gets independent classification, vitals, person count
- Stale node eviction after 60s inactivity
- Multi-node aggregation: max(per_node_counts)
RuVector Signal Processing (Phases 1-3)
- Subcarrier importance weighting via mincut partition
- Temporal EMA keypoint smoothing with coherence gating
- Skeleton kinematic constraints (Jakobsen relaxation, 12-bone COCO-17 tree)
- Compressed pose history for trajectory matching
Smoothing & Quality
- Client-side lerp interpolation (alpha=0.15) for fluid skeleton
- Server EMA (alpha=0.15) for temporal blending
- Dampened procedural animation, recalibrated for real ESP32 data
- Vital sign filtering: larger median window (31), faster EMA, looser jump filter
Hardware Benchmarks (2 ESP32 nodes, 30s)
| Metric | v0.5.2 (baseline) | v0.5.3 (fusion) | Improvement |
|---|---|---|---|
| Keypoint jitter | std=4.5px | std=1.3px | -72% |
| Feature noise | 109.4 | 77.6 | -29% |
| Feature stability | std=154.1 | std=105.4 | -32% |
| Confidence | 0.643 | 0.686 | +7% |
| Presence accuracy | 93.4% | 94.6% | +1.3pp |
Bug Fixes
- RSSI byte offset (#332), stack overflow, stale node leak, unsafe pointer removed
- Person count: sum→max aggregation, recalibrated thresholds
- Firmware CI: IDF v5.4, xxd→od
Binaries
| File | Flash Size | Description |
|---|---|---|
esp32-csi-node.bin |
8MB | Main firmware |
esp32-csi-node-4mb.bin |
4MB | For 4MB flash boards |
bootloader.bin |
— | Bootloader |
partition-table.bin |
8MB | Partition table |
partition-table-4mb.bin |
4MB | Partition table (4MB) |
ota_data_initial.bin |
— | OTA data |
Full Changelog: https://github.com/ruvnet/RuView/compare/v0.5.2-esp32...v0.5.3-esp32
download
unix · zip
curl -fL -o v0.5.3-esp32.zip https://ratatoskr.space/pkg/ruview/v0.5.3-esp32.zip
printf '%s %s\n' 'd703c7aa90387b6c8c45c388725f6cc8b74820bc64e0c98a7c62e58a66225282' 'v0.5.3-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.5.3-esp32.zip"
$out = "v0.5.3-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "d703c7aa90387b6c8c45c388725f6cc8b74820bc64e0c98a7c62e58a66225282") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.5.3-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.5.3-esp32.tar.gz
printf '%s %s\n' '2efd4b518cba65ebc03f5428430b101d4e85f747076004990dcf75c38f567afb' 'v0.5.3-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.5.3-esp32.tar.gz"
$out = "v0.5.3-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2efd4b518cba65ebc03f5428430b101d4e85f747076004990dcf75c38f567afb") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.5.3-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.3-esp32.zip
printf '%s %s\n' 'd703c7aa90387b6c8c45c388725f6cc8b74820bc64e0c98a7c62e58a66225282' 'v0.5.3-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.3-esp32.zip"
$out = "v0.5.3-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "d703c7aa90387b6c8c45c388725f6cc8b74820bc64e0c98a7c62e58a66225282") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.5.3-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.3-esp32.tar.gz
printf '%s %s\n' '2efd4b518cba65ebc03f5428430b101d4e85f747076004990dcf75c38f567afb' 'v0.5.3-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.3-esp32.tar.gz"
$out = "v0.5.3-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "2efd4b518cba65ebc03f5428430b101d4e85f747076004990dcf75c38f567afb") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.5.3-esp32.zip | zip | 26.4 MiB |
blake3-24 4254067a84efd5e771b96fdea3f2f1f5ae856ac23cf091c8
sha256 d703c7aa90387b6c8c45c388725f6cc8b74820bc64e0c98a7c62e58a66225282
sha1 b2a28d0bcbbd72ae320bb9b80bc55df0035b39c4
|
| v0.5.3-esp32.tar.gz | tar.gz | 25.5 MiB |
blake3-24 fb2c8df70c5f46501b17c28a5bd909fccdca95ec56ff7122
sha256 2efd4b518cba65ebc03f5428430b101d4e85f747076004990dcf75c38f567afb
sha1 deae691f15bfe2841c2cf961bad47824a3fb4b2b
|
install
bazel
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.5.3-esp32.tar.gz"],
integrity = "sha256-Lv1LUYy6ZevAP1QoQwsQHU6F90cHYASZDc91w49Wevs=",
strip_prefix = "ruview-v0.5.3-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.5.3-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.3-esp32.tar.gz"],
integrity = "sha256-Lv1LUYy6ZevAP1QoQwsQHU6F90cHYASZDc91w49Wevs=",
strip_prefix = "ruview-v0.5.3-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.5.3-esp32.tar.gz",