A self-hosted, real-time baby monitor for your IP cameras.
Stream audio and video from any RTSP camera or Google Nest device with near-zero latency — no cloud, no subscriptions.
Quick Start • Features • Screenshots • Mobile App • Tech Stack • Contributing
Most baby monitors are expensive proprietary hardware, cloud-dependent apps with monthly fees, or laggy phone-based solutions. If you already have an IP camera (or a Google Nest), you shouldn't need any of that.
BabyMonitarr turns your existing cameras into a low-latency, privacy-first baby monitor. It uses WebRTC for near-instant streaming — the same technology behind video calls — so audio reaches you in milliseconds, not seconds.
No data leaves your network. No accounts required. No subscriptions.
- Multi-Room Monitoring — Set up as many rooms as you need with individual camera and audio settings
- Low-Latency Audio & Video — WebRTC streaming with Opus audio and video codec passthrough (H264, H265, VP8)
- Sound Detection & Alerts — Configurable audio threshold alerts with cooldown
- RTSP & Google Nest Support — Works with any RTSP camera or Google Nest device via the Smart Device Management API
- Google Cast — Cast any room, RTSP or Google Nest, to one or more Chromecast displays and Google/Nest speakers at once
- Docker Ready — One container, one volume, up and running in under a minute
- Privacy First — Fully self-hosted with a local SQLite database
| Dashboard | Room Configuration | App Pairing |
|---|---|---|
![]() |
![]() |
![]() |
Create an appsettings.json with your WebRTC settings:
{
"WebRtc": {
"AdvertisedAddress": "192.168.0.100",
"RtpPortRange": { "Start": 40000, "End": 40099, "Shuffle": true }
}
}Replace
192.168.0.100with the IP/hostname your clients will reach the server at.
docker run -d \
--name babymonitarr \
-p 8080:8080 \
-p 40000-40099:40000-40099/udp \
-v babymonitarr-data:/app/data \
-v ./appsettings.json:/app/appsettings.Production.json:ro \
ghcr.io/inrego/babymonitarr:latestThen open http://localhost:8080 in your browser.
services:
babymonitarr:
image: ghcr.io/inrego/babymonitarr:latest
container_name: babymonitarr
ports:
- "8080:8080"
- "40000-40099:40000-40099/udp" # WebRTC media
environment:
- WebRtc__AdvertisedAddress=192.168.0.100 # IP/hostname clients reach the server at
- WebRtc__RtpPortRange__Start=40000
- WebRtc__RtpPortRange__End=40099
- WebRtc__RtpPortRange__Shuffle=true
volumes:
- babymonitarr-data:/app/data
restart: unless-stopped
volumes:
babymonitarr-data:Replace
192.168.0.100with the IP/hostname your clients will reach the server at. If running behind a reverse proxy, see Reverse Proxy Setup and consider usingWebRtc__InferAdvertisedAddressFromForwardedHost=trueinstead.
All monitor settings are managed through the web UI — no config files to edit beyond the WebRTC basics above.
BabyMonitarr is designed to be used with the companion mobile app:
BabyMonitarr.App — A mobile client that connects to your BabyMonitarr server for on-the-go monitoring with push notifications.
Pair the app by generating an API key in the web UI (API Keys page) and scanning the QR code.
| Component | Technology |
|---|---|
| Backend | ASP.NET Core 9 |
| Streaming | WebRTC (near-zero latency via peer-to-peer) |
| Signaling | SignalR (WebSocket) |
| Media | FFmpeg, SIPSorcery |
| Database | SQLite |
| Topic | Description |
|---|---|
| Configuration | Environment variables, appsettings, WebRTC tuning, FFmpeg diagnostics |
| Reverse Proxy Setup | Running behind Caddy, Nginx, or Traefik with WebRTC |
| Google Nest Setup | OAuth setup for the Smart Device Management API |
| Nest Talkback Setup | Google Home credential for push-to-talk on Nest cameras |
| Authentication | Local auth, proxy header auth (Authelia, Authentik), and OIDC |
| Client Integration | SignalR hub protocol for building custom clients |
Contributions are welcome! Whether it's bug reports, feature requests, or pull requests — all help is appreciated.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is 100% AI-written code. However, the author is an experienced developer — prompts were crafted with deliberate architectural decisions, not blind copy-paste.


