# RuView — WiFi DensePose sensing server, CasaOS-ready compose. # # Uses the prebuilt image (amd64) from Docker Hub, so the CasaOS host does NOT # need to compile the Rust workspace. (This server is amd64. For arm64 hosts the # published tag has no arm64 layer yet — build locally with the dev compose: # `docker compose -f docker/docker-compose.yml build`.) The server hosts the # REST API + web UI on one port, a WebSocket stream, and a UDP listener for # ESP32-S3 CSI nodes. # # Host ports were chosen to avoid clashes on this server (3000/3001 are already # in use): the UI is published on 3030, the WebSocket on 3031, ESP32 CSI on 5005/udp. # # Import into CasaOS: App Store → Custom Install → paste this file, OR # cd /DATA/AppData/ruview && docker compose -f docker-compose.casaos.yml up -d # # Open the dashboard at: http://192.168.1.177:3030/ui/index.html # (the bare http://:3030/ root is just an API index — the visual # dashboards live under /ui/: index.html, observatory.html, pose-fusion.html) # # Data source (CSI_SOURCE): # auto probe UDP 5005 for an ESP32, else fall back to simulation (default) # esp32 require real CSI frames from an ESP32-S3 node on UDP 5005 # simulated synthetic CSI, no hardware needed (good for first evaluation) name: ruview services: ruview: image: ruvnet/wifi-densepose:latest container_name: ruview hostname: ruview labels: icon: https://cdn.jsdelivr.net/gh/Aiacos/ruview@main/assets/ruview-icon.png ports: - mode: ingress target: 3000 published: "3030" protocol: tcp - mode: ingress target: 3001 published: "3031" protocol: tcp - mode: ingress target: 5005 published: "5005" protocol: udp environment: - RUST_LOG=info # auto | esp32 | wifi | simulated (see header) - CSI_SOURCE=${CSI_SOURCE:-auto} - MODELS_DIR=/app/models # Optional bearer-token auth on /api/v1/*. Leave empty for LAN-only use; # set a token to require `Authorization: Bearer `: # RUVIEW_API_TOKEN=$(openssl rand -hex 32) - RUVIEW_API_TOKEN=${RUVIEW_API_TOKEN:-} volumes: # Drop .rvf model files here to make them visible to the API. - ./data/models:/app/models restart: unless-stopped networks: default: null networks: default: name: ruview_default x-casaos: architectures: - amd64 main: ruview author: self developer: ruvnet category: HomeAutomation hostname: "" icon: https://cdn.jsdelivr.net/gh/Aiacos/ruview@main/assets/ruview-icon.png index: /ui/index.html is_uncontrolled: false port_map: "3030" webui_port: 3030 scheme: http tagline: en_us: See through walls with WiFi — contactless presence, breathing & pose sensing custom: Vedere attraverso i muri con il WiFi — presenza, respiro e posa senza contatto description: en_us: | RuView (WiFi DensePose) turns ordinary WiFi into a contactless spatial sensor. Using Channel State Information (CSI) from low-cost ESP32-S3 nodes, it detects people through walls, estimates breathing and heart rate, tracks motion and falls, and runs 17-keypoint pose estimation — no cameras, no wearables. This image runs the Rust sensing server with its web dashboard. With CSI_SOURCE=simulated it works with synthetic data and no hardware; point one or more ESP32-S3 CSI nodes at UDP 5005 for live sensing. custom: | RuView (WiFi DensePose) trasforma il normale WiFi in un sensore spaziale senza contatto. Usando le Channel State Information (CSI) di nodi ESP32-S3 a basso costo rileva le persone attraverso i muri, stima respiro e battito cardiaco, traccia movimento e cadute ed esegue la stima della posa a 17 punti — niente telecamere, niente dispositivi indossabili. Questa immagine avvia il server Rust con la dashboard web. Con CSI_SOURCE=simulated funziona con dati sintetici senza hardware; per il sensing dal vivo invia le CSI di uno o più nodi ESP32-S3 sulla porta UDP 5005. title: en_us: RuView custom: RuView thumbnail: https://cdn.jsdelivr.net/gh/Aiacos/ruview@main/assets/ruview-icon.png screenshot_link: - https://cdn.jsdelivr.net/gh/Aiacos/ruview@main/assets/ruview-icon.png envs: - container: CSI_SOURCE description: en_us: "Data source: auto (default) | esp32 | simulated. 'simulated' needs no hardware." - container: RUVIEW_API_TOKEN description: en_us: "(Optional) bearer token to protect /api/v1/*. Leave empty for LAN-only use." - container: MODELS_DIR description: en_us: "In-container path scanned for .rvf model files (default /app/models)." - container: RUST_LOG description: en_us: "Log level: info (default), debug, warn, error." ports: - container: "3000" description: en_us: "Web UI + REST API (HTTP). Published on host port 3030." - container: "3001" description: en_us: "WebSocket sensing stream. Published on host port 3031." - container: "5005" description: en_us: "ESP32-S3 CSI ingest (UDP). Published on host port 5005." volumes: - container: /app/models description: en_us: "Holds .rvf model files exposed via /api/v1/models."