yggvault ratatoskr-space connected via regular web
Color theme
also available via yggdrasil mesh http://[203:b338:2a84:a18f:986:47ae:1a4:d8d3]/pkg/ruview/v0.8.8-esp32
vault / ruview / v0.8.8-esp32

ruview @ v0.8.8-esp32

integrity

size
53.6 MiB
downloaded
last checked
source https://github.com/ruvnet/RuView · available · github

release notes

RuView ESP32 firmware 0.8.8

Firmware 0.8.8 is a reliability and correctness release for ESP32-S3 and ESP32-C6 RuView nodes. It makes the timing used by signal processing explicit, prevents contradictory occupancy output, and improves update diagnostics.

What changed

Empty means zero people

Older firmware could report presence=false and a nonzero person count in the same edge packet. That was internally contradictory and could contaminate an empty-room calibration. Firmware 0.8.8 clears the count whenever the presence gate is closed. The sensing server repeats the same check when it receives data from older nodes.

This is a consistency fix, not proof that the heuristic can count multiple people accurately. See ADR 346.

Stable time scale on ESP32-C6

Raw CSI and on-device signal processing now have separate clocks. The C6 keeps raw CSI moving over the network while its Tier 2 filters process a stable 8 Hz sample stream. The S3 retains its 20 Hz DSP default. A phase-preserving sampler keeps callback jitter from shifting those clocks.

The result is a correct time base for motion and vital-band features. It does not by itself prove that heartbeat, respiration, gesture, or pose estimates are more accurate. See ADR 347.

Better diagnostics and safer updates

The one-second controller log now shows both raw callback yield and DSP rate. The OTA status endpoint reports the actual selected application partition size instead of a fixed 900 KB assumption. Firmware upload remains fail closed when the node has no provisioned OTA signing secret.

Measured hardware validation

All results below are physical measurements from 2026-08-31. They are not simulator claims.

Board Duration Raw CSI mean DSP clock Live coverage Steady-state transport errors
ESP32-C6 node 4 300.64 s 34.92 pps 8.00 Hz 97.62% 0
ESP32-C6 node 7 300.70 s 36.32 pps 8.00 Hz 97.40% 0
ESP32-S3 node 1 300 s 28.03 pps Tier 0 100.00% 0

The first C6 empty-room qualification observed 61 absent packets with zero nonzero counts. The second C6 was transport-qualified in an occupied room and still needs its own controlled empty-room sequence. Full evidence is recorded in:

  1. C6 timing and transport
  2. C6 occupancy integrity
  3. Second C6 timing and transport
  4. S3 transport

Choose the correct download

Release file Target
esp32-csi-node-v0.8.8-s3-8mb-flash-bundle.zip ESP32-S3 with 8 MB flash
esp32-csi-node-v0.8.8-s3-4mb-flash-bundle.zip ESP32-S3 with 4 MB flash
esp32-csi-node-v0.8.8-c6-4mb-flash-bundle.zip ESP32-C6 using the supported 4 MB partition layout
esp32-csi-node-v0.8.8-s3-8mb.bin S3 8 MB application only
esp32-csi-node-v0.8.8-s3-4mb.bin S3 4 MB application only
esp32-csi-node-v0.8.8-c6-4mb.bin C6 application only

Never mix S3 and C6 images. Confirm the chip and physical flash before writing.

Install or update

For a fresh installation, extract the matching bundle and follow its included FLASHING.md. The standard offsets are:

Image Offset
Bootloader 0x0000
Partition table 0x8000
OTA metadata 0xf000
Application 0x20000

For an existing provisioned node:

  1. Back up the current application partition.
  2. Confirm the exact chip, flash layout, logical node, and serial port.
  3. Read http://DEVICE_IP:8032/ota/status.
  4. Use an application-only serial update at 0x20000 only when the running partition is ota_0 and the image matches the board.
  5. Reboot and confirm version 0.8.8, the preserved node identity, channel, and sensing-server target.
  6. Run a five-minute burn-in before returning the node to calibration duty.

The full bundle does not contain an NVS image. A four-offset install therefore preserves the existing WiFi and node settings, but operators should still keep a backup before changing firmware.

What this release does not prove

Firmware 0.8.8 does not prove medical-grade vital signs, accurate person counting, identity, dense pose, through-wall video, or room separation. Those claims require synchronized references and leakage-free held-out sequences.

The practical next acceptance test is a controlled empty-room capture with at least 30 absent edge packets per updated node, zero absent packets carrying a nonzero count, and zero transport or parser errors. Accuracy evaluation then needs held-out occupied, movement, heartbeat-reference, and adjacent-room sequences.

Download integrity

The attached SHA256SUMS.txt is the canonical checksum manifest for the six downloadable firmware files:

7bbb97d26f53b9d9beb420cd4ebf5b3913f51da31e09d4161c0a3245b69ac529  esp32-csi-node-v0.8.8-c6-4mb.bin
26fce74fada920be9e8c46c4d0d3046be4a90254200372563873f85b96843ea4  esp32-csi-node-v0.8.8-s3-4mb.bin
baf6f86dc593156a19f837c56a1a1b235123d2edacf5f582363302097e3ae8f2  esp32-csi-node-v0.8.8-s3-8mb.bin
cbcaa1564d9fe71f0eda1d6a1fad0e63fe5cb54a8cc5cf97b24f82af786d55d5  esp32-csi-node-v0.8.8-c6-4mb-flash-bundle.zip
3862ece2fa83c0ec4bb62b718c85d4f613e0221667577b3daf164e46a39d1c8b  esp32-csi-node-v0.8.8-s3-4mb-flash-bundle.zip
132d3d4fe3f23625eccbf6b4c2f404b31cb94f754bb2638d98cf2d0f65f8de46  esp32-csi-node-v0.8.8-s3-8mb-flash-bundle.zip

download

unix · zip
curl -fL -o v0.8.8-esp32.zip https://ratatoskr.space/pkg/ruview/v0.8.8-esp32.zip
                    printf '%s  %s\n' '1060e7762b968923ec70719a697b523c242524011e2e7c7aaa4aae099fdf5e0c' 'v0.8.8-esp32.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/ruview/v0.8.8-esp32.zip"
$out = "v0.8.8-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1060e7762b968923ec70719a697b523c242524011e2e7c7aaa4aae099fdf5e0c") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.8.8-esp32.tar.gz https://ratatoskr.space/pkg/ruview/v0.8.8-esp32.tar.gz
                    printf '%s  %s\n' '8dca352b343ac192be9cb7023071dd2c635a7f4ac11aeedbb8726349d79497ea' 'v0.8.8-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/ruview/v0.8.8-esp32.tar.gz"
$out = "v0.8.8-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8dca352b343ac192be9cb7023071dd2c635a7f4ac11aeedbb8726349d79497ea") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.8.8-esp32.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.8-esp32.zip
                    printf '%s  %s\n' '1060e7762b968923ec70719a697b523c242524011e2e7c7aaa4aae099fdf5e0c' 'v0.8.8-esp32.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.8-esp32.zip"
$out = "v0.8.8-esp32.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "1060e7762b968923ec70719a697b523c242524011e2e7c7aaa4aae099fdf5e0c") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.8.8-esp32.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.8-esp32.tar.gz
                    printf '%s  %s\n' '8dca352b343ac192be9cb7023071dd2c635a7f4ac11aeedbb8726349d79497ea' 'v0.8.8-esp32.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.8-esp32.tar.gz"
$out = "v0.8.8-esp32.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8dca352b343ac192be9cb7023071dd2c635a7f4ac11aeedbb8726349d79497ea") { throw "sha256 mismatch" }
artifact format size hashes
v0.8.8-esp32.zip zip 53.8 MiB
blake3-24 f4791ec7416c403c15e77749997b15f77a34a2d3c57a8c49
sha256 1060e7762b968923ec70719a697b523c242524011e2e7c7aaa4aae099fdf5e0c
sha1 84a6d233e1070dc0595d6043d3ebf8413ba9f1a9
v0.8.8-esp32.tar.gz tar.gz 51.7 MiB
blake3-24 79ad3ecd16ca5d67387b82e516b3f1ffe1a87723c81070fb
sha256 8dca352b343ac192be9cb7023071dd2c635a7f4ac11aeedbb8726349d79497ea
sha1 720815d9cf42f0ef8063e9eee1e0c477a4589835

install

bazel
http_archive(
    name = "ruview",
    urls = ["https://ratatoskr.space/pkg/ruview/v0.8.8-esp32.tar.gz"],
    integrity = "sha256-jco1KzQ6wZK+nLcCMHHdLGNaf0rBGu7buHJjSdeUl+o=",
    strip_prefix = "ruview-v0.8.8-esp32",
)
zig
.url = "https://ratatoskr.space/pkg/ruview/v0.8.8-esp32.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
    name = "ruview",
    urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.8-esp32.tar.gz"],
    integrity = "sha256-jco1KzQ6wZK+nLcCMHHdLGNaf0rBGu7buHJjSdeUl+o=",
    strip_prefix = "ruview-v0.8.8-esp32",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v0.8.8-esp32.tar.gz",
← v2428v2403 →