Skip to page content
SAVRN
Search Plan a project

Open-weight model · Other

wifi-densepose-pretrained

by rUv Consulting ruvnet/wifi-densepose-pretrained

wifi-densepose-pretrained is an open-weight model for other from rUv Consulting, released under MIT License. It has 11,842 parameters. At 16-bit it needs about 0 GB of GPU memory, which fits on 1x MI300X from $1.85 an hour, at the lowest prices in the SAVRN Index. It draws 420 downloads a month.

Turn WiFi signals into spatial intelligence. Detect people, measure breathing and heart rate, track movement, and monitor rooms — through walls, in the dark, with no cameras. Just radio physics. WiFi signals bounce off people.

Parameters11,842
Context—
Weights121.9 KB
Licensemit
AccessOpen weights
Monthly Downloads420

Runs On

What it takes to serve wifi-densepose-pretrained (11,842 parameters): the memory its weights need at each precision, and the cheapest way to rent enough data-center GPUs to hold them.

PrecisionWeightsMemory neededCheapest setupPer hourAlso fits
16-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
8-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00
4-bit 0.0 GB 0.0 GB 1x MI300X (192 GB)
Vultr
$1.85 1x H100 $1.99 · 1x MI325X $2.00

Memory is the weights at that precision plus 20% for the runtime and a short context; a long context needs more. Prices are the lowest on-demand hourly rates in the SAVRN Index, read Oct 18, 2026.

wifi-densepose-pretrained on every accelerator the SAVRN Index prices, at every precision

Model Card

By rUv Consulting, published under mit, revision 98b29a35f962.

Turn WiFi signals into spatial intelligence. Detect people, measure breathing and heart rate, track movement, and monitor rooms — through walls, in the dark, with no cameras. Just radio physics. WiFi signals bounce off people. When someone breathes, their chest moves the air, which subtly changes the WiFi signal. When they walk, the changes are bigger. This model learned to read those changes from a $9 ESP32 chip. The v1 contrastive encoder shipped with a flat training loss (every epoch logged the same 0.13517 — the optimizer was not actually learning), and its headline "100% presence accuracy" was measured on a single-class recording (an overnight capture of one sleeping person: 6,062 of…

Read rUv Consulting's full model card

RuView — WiFi Sensing Models

Turn WiFi signals into spatial intelligence. Detect people, measure breathing and heart rate, track movement, and monitor rooms — through walls, in the dark, with no cameras. Just radio physics.

What This Does

WiFi signals bounce off people. When someone breathes, their chest moves the air, which subtly changes the WiFi signal. When they walk, the changes are bigger. This model learned to read those changes from a $9 ESP32 chip.

What it senses How well Without
Is someone there? presence detection (v1 "100%" retracted — single-class) No camera needed
Are they moving? Detects typing vs walking vs standing No wearable needed
Breathing rate 6-30 BPM, contactless No chest strap
Heart rate 40-120 BPM, through clothes No smartwatch
How many people? 1-4, via subcarrier graph analysis No headcount camera
Through walls Works through drywall, wood, fabric No line of sight
Sleep quality Deep/Light/REM/Awake classification No mattress sensor
Fall detection <2 second alert No pendant

v2 update — honest re-benchmark + properly-converged encoder (2026-05-31)

The v1 contrastive encoder shipped with a flat training loss (every epoch logged the same 0.13517 — the optimizer was not actually learning), and its headline "100% presence accuracy" was measured on a single-class recording (an overnight capture of one sleeping person: 6,062 of 6,063 frames are labelled "present", 1 is "absent"). A constant "yes" predictor scores 99.98% on that split — so the number is real but says nothing about generalization. We are correcting that publicly rather than leaving it to stand.

v2 retrains the same 8 -> 64 -> 128 encoder with a working InfoNCE objective and reports an honest, label-free, time-disjoint metric: held-out temporal-triplet accuracy = P( d(anchor, temporal-positive) < d(anchor, temporal-negative) ), evaluated on the last 20% of the recording by time (no leakage into training).

Encoder Held-out temporal-triplet accuracy Notes
Raw 8-dim features (no encoder) 66.4% baseline
Random-init encoder 69.6% untrained
v2 trained encoder 82.3% +15.9 pts over raw, properly converged

Plain language: the embedding now reliably places two CSI snapshots taken moments apart closer together than two taken far apart — i.e. it has learned the temporal structure of the radio environment, which is exactly what a useful self-supervised sensing embedding should do. v1, with its flat loss, was barely better than random on this same test.

Technical: 2-layer FC (BatchNorm + GELU) -> L2-normalized 128-dim embedding, 9,280 params, trained with InfoNCE (temperature 0.1, in-batch + temporal-far negatives), AdamW, 60 epochs. Temporal positives within 2 s; negatives >30 s apart. Time-disjoint 80/20 split.

EWC (catastrophic-forgetting protection): measured forgetting rate on the 4 protected tasks is 32.97% -- real and non-trivial, disclosed here rather than only in the raw training-metrics.json. Fisher information is computed and applied (protection strength 2000), but this is not "solved forgetting" -- a user fine-tuning per-room LoRA adapters should expect some drift on earlier tasks, not none.

Fixed v2.0.1 -- fixed the published training-metrics.json itself (2026-09-09)

Separately from the v1-to-v2 accuracy retraction above, an unrelated bug was found and fixed in the export code (scripts/train-ruvllm.js) that produces config.json and training-metrics.json for this file set (model.safetensors, model-q2/q4/q8.bin, presence-head.json, node-1/2.json) -- separate from the csi-embed-v2* files, which come from a different script.

The exported lossHistory and contrastive.durationMs were being read from a disconnected baseline pass (ContrastiveTrainer.train(), which computes loss but never updates the encoder) instead of from the loop that actually performs gradient updates on the encoder weights. Concretely: lossHistory published a flat, non-decreasing curve around 0.1352 for all 20 epochs, and durationMs reported ~12.4s -- both measuring the wrong computation.

This did not affect finalLoss/improvement/the 82.3% held-out temporal-triplet accuracy above -- those were already computed from the real training loop and are unchanged by this fix. It only affected the exported diagnostic curve and duration, which anyone auditing convergence from the published JSON would have been misled by. Re-run against the same real capture (data/recordings/overnight-1775217646.csi.jsonl) with the fix applied: lossHistory now shows a genuine decreasing curve (0.1037 -> 0.0654 across 20 epochs) and durationMs reports the real ~40s gradient-loop time. config.json's training.steps field (12212300 -- epochs x triplets, arithmetically consistent but read like optimizer-step count) is now reported as separate epochs/tripletUpdatesPerEpoch fields instead.

Repro: node scripts/train-ruvllm.js --data data/recordings/overnight-1775217646.csi.jsonl --output <dir> --epochs 20 in github.com/ruvnet/RuView (the aether-arena/staging/train_csi_embed.py path cited above is for the separate csi-embed-v2* files and was not touched by this fix). Full fix: ruvnet/RuView#1879.

v2 files & proof

File Size Use
csi-embed-v2.safetensors ~40 KB fp32 trained encoder
csi-embed-v2-int4.bin 4.56 KB 4-bit packed encoder + fp16 standardizer — fits the 8 KB ESP32 SRAM budget
csi-embed-v2.py <1 KB Enc definition + loader
csi-embed-v2-metrics.json — full honest metrics + quantization scales
  • Encoder weights SHA-256: 3b37bca66e6050c50ccbc0f6e0501824f258bfdd8675dc0f4541b1e2e96feecd
  • Repro: python aether-arena/staging/train_csi_embed.py in github.com/ruvnet/RuView
  • Trained on the same local capture (data/recordings/overnight-1775217646.csi.jsonl, 6,063 feature frames).

What v2 does not claim. This is one room, one capture, two nodes. The triplet metric measures embedding quality, not downstream presence/vitals accuracy (which needs multi-class, multi-room labelled data we don't yet have for this 2.4 GHz feature). For pose SOTA on a public benchmark, see the separate 5 GHz model ruvnet/wifi-densepose-mmfi-pose (82.69% torso-PCK@20 on MM-Fi).

Benchmarks

Validated on real hardware (Apple M4 Pro + 2x ESP32-S3):

Metric Result Context
CSI embedding quality 82.3% held-out Honest temporal-triplet metric; v1 single-class "100% presence" retracted (#882)
Inference speed 0.008 ms 125,000x faster than real-time
Throughput 164,183 emb/sec One laptop handles 1,600+ sensors
Contrastive learning 51.6% improvement Trained on 8 hours of overnight data
Model size 8 KB (4-bit quantized) Fits in ESP32 SRAM
Training time 12 minutes On Mac Mini M4 Pro, no GPU needed
Camera required No Trained from 10 sensor signals

Models in This Repo

File Size Use
model.safetensors 48 KB Full contrastive encoder (128-dim embeddings)
model-q4.bin 8 KB Recommended — 4-bit quantized, 8x compression
model-q2.bin 4 KB Ultra-compact for ESP32 edge inference
model-q8.bin 16 KB High quality 8-bit
presence-head.json 2.6 KB Presence detection head (v1 "100%" retracted — single-class; #882)
node-1.json 21 KB LoRA adapter for room/node 1
node-2.json 21 KB LoRA adapter for room/node 2
config.json 586 B Model configuration
training-metrics.json 3.1 KB Loss curves and training history

Quick Start

# Download models
pip install huggingface_hub
huggingface-cli download ruv/ruview --local-dir models/

# Use with RuView sensing pipeline
git clone https://github.com/ruvnet/RuView.git
cd RuView

# Flash an ESP32-S3 ($9 on Amazon/AliExpress)
python -m esptool --chip esp32s3 --port COM9 --baud 460800 \
  write_flash 0x0 bootloader.bin 0x8000 partition-table.bin \
  0xf000 ota_data_initial.bin 0x20000 esp32-csi-node.bin

# Provision WiFi
python firmware/esp32-csi-node/provision.py --port COM9 \
  --ssid "YourWiFi" --password "secret" --target-ip YOUR_IP

# See what WiFi reveals about your room
node scripts/deep-scan.js --bind YOUR_IP --duration 10

Architecture

WiFi signals → ESP32-S3 ($9) → 8-dim features @ 1 Hz → Encoder → 128-dim embedding
                                                                    ↓
                                         ┌──────────────────────────┼──────────────────┐
                                         ↓                          ↓                  ↓
                                    Presence head            Activity head         Vitals head
                                    (v1 "100%" retracted)          (still/walk/talk)     (BR, HR)

The encoder converts 8 WiFi Channel State Information (CSI) features into a 128-dimensional embedding:

Dim Feature What it captures
0 Presence How much the WiFi signal is disturbed
1 Motion Rate of signal change (walking > typing > still)
2 Breathing Chest movement modulates subcarrier phase at 6-30 BPM
3 Heart rate Blood pulse creates micro-Doppler at 40-120 BPM
4 Phase variance Signal quality — higher = more movement
5 Person count Independent motion clusters via min-cut graph
6 Fall detected Sudden phase acceleration followed by stillness
7 RSSI Signal strength — indicates distance from sensor

Training Details

No camera was used. Trained using self-supervised contrastive learning:

  • Data: 60,630 samples from 2 ESP32-S3 nodes over 8 hours
  • Method: Triplet loss + InfoNCE (nearby frames = similar, distant = different)
  • Augmentation: 10x via temporal interpolation, noise, cross-node blending
  • Supervision: PIR sensor, BME280, RSSI triangulation, subcarrier asymmetry
  • Quantization: TurboQuant 2/4/8-bit with <0.5% quality loss
  • Adaptation: LoRA rank-4 per room, EWC to prevent forgetting

17 Sensing Applications

Built on these embeddings (RuView):

Core: Presence, person counting, RF scanning, SNN learning, CNN fingerprinting

Health: Sleep monitoring, apnea screening, stress detection, gait analysis

Environment: Room fingerprinting, material detection, device fingerprinting

Multi-frequency: RF tomography, passive radar, material classification, through-wall motion

Hardware

Component Cost Purpose
ESP32-S3 (8MB) ~$9 WiFi CSI sensing
Cognitum Seed (optional) $131 Persistent storage, kNN, witness chain, AI proxy

Limitations

  • Room-specific (use LoRA adapters for new rooms)
  • Camera-free pose: 2.5% PCK@20 (camera labels improve significantly)
  • Health features are for screening only, not medical diagnosis
  • Breathing/HR less accurate during active movement

Citation

@software{ruview2026,
  title={RuView: WiFi Sensing with Self-Supervised Contrastive Learning},
  author={rUv},
  year={2026},
  url={https://github.com/ruvnet/RuView},
  note={Models: https://huggingface.co/ruv/ruview}
}

Links

  • GitHub: https://github.com/ruvnet/RuView
  • Cognitum Seed: https://cognitum.one
  • RuVector: https://github.com/ruvnet/ruvector
  • License: MIT

Configuration

Model type
sona-lora

Identity and Version

Repository
ruvnet/wifi-densepose-pretrained
Publisher
rUv Consulting
Task
Other
Modality
Other
Library
onnxruntime
Parameters
11,842 parameters
Languages
en
Revision
98b29a35f962996d6e8207e4f46818dedb5764d5
First published
2026-04-03
Last updated
2026-10-13

Files and Weights

16 files, 188.4 KB in total. The weights are 6 files totalling 121.9 KB in bin, safetensors.

Weights6 files · 121.9 KB
Configuration7 files · 51.6 KB
Documentation1 file · 12.7 KB
Other1 file · 718 B
Repository1 file · 1.5 KB
Every file
FileTypeSizeSHA-256
csi-embed-v2-int4.binWeights4.7 KB 59b7f030fac2
csi-embed-v2.safetensorsWeights39.7 KB 183c988b918a
model-q2.binWeights4.1 KB d8aa8d964af6
model-q4.binWeights8.2 KB 05ad76b948c5
model-q8.binWeights16.4 KB 34b9ec42e3b6
model.safetensorsWeights48.8 KB 17c9acc12d05
config.jsonConfiguration619 B —
csi-embed-v2-metrics.jsonConfiguration763 B —
csi-embed-v2.pyConfiguration1.1 KB —
node-1.jsonConfiguration21.7 KB —
node-2.jsonConfiguration21.7 KB —
presence-head.jsonConfiguration2.6 KB —
training-metrics.jsonConfiguration3.2 KB —
README.mdDocumentation12.7 KB —
model.rvf.jsonlOther718 B —
.gitattributesRepository1.5 KB —

License and Download

License
mit
Access
Open weights, no gate
Download size
121.9 KB
Download from rUv Consulting

Released by rUv Consulting through its official repository on Hugging Face. Read the license.

Memory Requirements

PrecisionWeights in memory
As published121.9 KB
16-bit0.0 GB
8-bit0.0 GB
4-bit0.0 GB

Weights only, from the published parameter count; the key-value cache and runtime add to this.

Questions About wifi-densepose-pretrained

How much GPU memory does wifi-densepose-pretrained need?

About 0 GB at 16-bit and 0 GB at 4-bit: the weights (11,842 parameters) plus a working margin. A long context needs more.

What is the cheapest GPU to run wifi-densepose-pretrained on?

At 16-bit, 1x MI300X from $1.85 an hour; at 4-bit, 1x MI300X from $1.85 an hour, at the lowest on-demand prices the SAVRN Index lists.

Can I use wifi-densepose-pretrained commercially?

Yes. wifi-densepose-pretrained is released under MIT License. The MIT License is a short permissive license. It permits commercial use, modification and redistribution, provided the copyright notice and permission notice are included.

Similar Models

Model · Other

JLD

Shreshth

Official fitted Jacobian lens for JLD and JLD-fast, by Shreshth Saini, Balu Adsumilli, and Alan C. Bovik. JLD measures the perceptual distance between an aligned reference image and a distorted image. Lower scores mean more similar images. It projects early DINOv2 patch features onto directions selected by the encoder's output sensitivity. The lens is fitted from unlabeled images without human quality ratings. This installs the versioned release wheel and records it in uv.lock. The distribution is named jacobian-lens-distance; the Python import remains jld. The package already includes this lens. The encoder weights are downloaded separately through timm on first use. Python 3.10 or newer…

Open weights mit jld

ONNX conversion of cua-ai/cua-s1-forms, prepared for lightweight local inference experiments with ONNX Runtime, ONNX Runtime Web, WebAssembly (WASM), and WebGPU. Please read the original model card before using this conversion. It contains the authoritative description of the model's architecture, training setup, evaluation, limitations, and intended scope. CUA-S1 Forms is a small specialist "System One" model for form-oriented computer-use tasks. Unlike an autoregressive LLM, it does not generate text token-by-token. For each UI element, it receives: 1. a short structured context describing the task, form, and element, and 2. a set of candidate options such as extracted document values…

Open weights mit

Model · Other

weather-sculpt

Z

Sculpt real ECMWF ERA5 atmospheric state into publish-ready video, GIF, and sound. Not animation. Not simulation. Real observed weather, rendered through 4 tuned presets. - Global 0.25 deg x 7 days (5 variables: t2m, u10, v10, tp, msl) - China region 0.25 deg x 30 days (5 variables) - 4 presets: temperature waves / wind streamlines / rain curtain / pressure vortex - Weather sonification (WAV) - "hear" the atmosphere - Pre-downloaded, zstd-compressed, SHA-256 checksummed https://roblitz-spec.github.io/weather-sculpt/ - Full dataset + commercial license: https://robloxer31.gumroad.com/l/Weather-Sculpt ECMWF ERA5 reanalysis (CC-BY 4.0). The same dataset used by meteorologists worldwide.

Open weights mit custom

Model · Other

fly-instinct

Z

A frozen, non-learning recursive network built on the real fruit-fly MaleCNS connectome (Janelia 2024). Feed any stimulus, get an organic, structured "instinctive" signal that is more alive than noise, less predictable than a script. Not AI. Not a brain. Not learning. Just real neural wiring, frozen. - Real MaleCNS connectome subset (1,587,930 edges, ~25 MB) - 4 tuned presets: escape / sugar / startle / explore - Zero training. Weight-frozen. Deterministic per seed. https://roblitz-spec.github.io/fly-instinct/ - Full 1.05GB connectome + commercial license: https://robloxer31.gumroad.com/l/Fly-Instinct

Open weights mit custom

Pretrained DiT decoders for TT-VidT (Decoupling the Temporal Axis for Efficient Motion-Centric Video Pretraining, NeurIPS 2026). Paper · Each TT-VidT encoder pretraining run initialises its decoder from one of these; the training code downloads them automatically through DECODERPRETRAINED, e.g. "KBlueLeaf/TTVidT-decoders/pretrainvideoSqknorm". The decoders work in the 32x32x4 latent space of the frozen f8 frame VAE KBlueLeaf/latentmaid-vae and are conditioned on DINOv3 ViT-B/16 features (768-d). - ImageNet decoders reconstruct an ImageNet image from its DINOv3 class token. - Video decoders reconstruct a later video frame from its class token plus, through cross-attention, the spatial…

Open weights apache-2.0

Model · Other

nys-sft-public

Dakuwon Moody

NYS is not a transformer. It is a coupled-oscillator organism: phases \(\thetai\), amplitudes, natural frequencies \(\omegai\), and a sparse coupling graph \(K\). Language, compiler bits, and speech-frame IDs live on one graph (\(N = 5{,}000{,}000\) nodes, \(k = 512\) edges per node). The native graph trains by Equilibrium Propagation (free RK4, then same-moment free/nudged branches, then a contrastive \(K\) update), without backprop or a cross-entropy objective. A separate sparse context head now provides retrieved language inputs. The GPU Qwen teacher uses PyTorch/Transformers; that does not make the native graph a transformer. Dakuwon Moody (YNSScarSaiyan) · Saiyan Corp The…

Open weights mit nys-thermodynamic