ruview @ v0.7.0
integrity
- size
- 41.2 MiB
- downloaded
- last checked
release notes
WiFlow v1 — Camera-Supervised WiFi Pose Estimation
First WiFlow model trained on real ESP32 CSI + real camera ground truth.
Headline Result
| Metric | Value |
|---|---|
| PCK@20 | 92.9% |
| Eval loss | 0.082 |
| Bone constraint | 0.008 |
| Parameters | 186,946 |
| Model size | 974 KB |
| Training time | 19 minutes |
What's New
Camera Ground-Truth Pipeline (ADR-079)
collect-ground-truth.py— MediaPipe webcam capture synced with CSIalign-ground-truth.js— Nanosecond time alignmenttrain-wiflow-supervised.js— 3-phase curriculum trainingeval-wiflow.js— PCK/MPJPE evaluationrecord-csi-udp.py— Lightweight ESP32 CSI recorder
ruvector Optimizations
- O6: Subcarrier selection (70→35, 50% reduction)
- O7: Attention-weighted subcarriers
- O8: Stoer-Wagner min-cut person separation
- O9: Multi-SPSA gradient estimation
- O10: Scalable model (lite/small/medium/full)
Data Collection
- ESP32-S3 CSI: 7,000 frames at 23fps (5 min)
- Mac Mini M4 Pro camera: 6,470 frames via MediaPipe (5 min)
- 345 time-aligned paired samples
Model Archive Contents
wiflow-v1.json— Trained model weights (974 KB)training-log.json— Loss curves per phasebaseline-report.json— Pre-training baseline metricsMODEL_CARD.md— Model documentation
How to Use
# Collect your own ground truth
python scripts/collect-ground-truth.py --duration 300 --preview
python scripts/record-csi-udp.py --duration 300
# Train
node scripts/train-wiflow-supervised.js --data data/paired/your-data.jsonl --scale lite
# Evaluate
node scripts/eval-wiflow.js --model models/wiflow-real/wiflow-v1.json --data data/paired/your-data.jsonl
Related
- PR #363: Camera ground-truth training pipeline
- ADR-079: Camera Ground-Truth Training Pipeline
- ADR-072: WiFlow Architecture
download
unix · zip
curl -fL -o v0.7.0.zip https://ratatoskr.space/pkg/ruview/v0.7.0.zip
printf '%s %s\n' '05d9732dfbdac7f686b0c01e8c02e3f7105903e6c1357a611010a1139c5e2a6b' 'v0.7.0.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.7.0.zip"
$out = "v0.7.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "05d9732dfbdac7f686b0c01e8c02e3f7105903e6c1357a611010a1139c5e2a6b") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.7.0.tar.gz https://ratatoskr.space/pkg/ruview/v0.7.0.tar.gz
printf '%s %s\n' '060285c190cc866fd777314d4a947b646b5e1831a55580f64ddb282d65ec4791' 'v0.7.0.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.7.0.tar.gz"
$out = "v0.7.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "060285c190cc866fd777314d4a947b646b5e1831a55580f64ddb282d65ec4791") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.7.0.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.7.0.zip
printf '%s %s\n' '05d9732dfbdac7f686b0c01e8c02e3f7105903e6c1357a611010a1139c5e2a6b' 'v0.7.0.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.7.0.zip"
$out = "v0.7.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "05d9732dfbdac7f686b0c01e8c02e3f7105903e6c1357a611010a1139c5e2a6b") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.7.0.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.7.0.tar.gz
printf '%s %s\n' '060285c190cc866fd777314d4a947b646b5e1831a55580f64ddb282d65ec4791' 'v0.7.0.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.7.0.tar.gz"
$out = "v0.7.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "060285c190cc866fd777314d4a947b646b5e1831a55580f64ddb282d65ec4791") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.7.0.zip | zip | 40.9 MiB |
blake3-24 84d035ef94a0065a361e915c875a7bf86d45c636a014fae2
sha256 05d9732dfbdac7f686b0c01e8c02e3f7105903e6c1357a611010a1139c5e2a6b
sha1 77f595bc033b3778a196927e86af2f3988bdd94d
|
| v0.7.0.tar.gz | tar.gz | 39.8 MiB |
blake3-24 d9264a6b520daa68f94dfbd5ac478c58e40e6bda2d0e2c56
sha256 060285c190cc866fd777314d4a947b646b5e1831a55580f64ddb282d65ec4791
sha1 d5ddca7c87f1291ce76026cbce2e2ccfab0dd1de
|
install
bazel
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v0.7.0.tar.gz"],
integrity = "sha256-BgKFwZDMhm/XdzFNSpR7ZGteGDGlVYD2TdsoLWXsR5E=",
strip_prefix = "ruview-v0.7.0",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.7.0.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.7.0.tar.gz"],
integrity = "sha256-BgKFwZDMhm/XdzFNSpR7ZGteGDGlVYD2TdsoLWXsR5E=",
strip_prefix = "ruview-v0.7.0",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.7.0.tar.gz",