GitHub: https://github.com/daya0576/nightwatcher

Background

As a first-time parent, to reduce anxiety, I set up two cameras for quick glances:

  • A room overview camera (Tplink IPC45AW)
  • A dedicated baby monitor (Aqara G100)

Both cameras have been integrated into HomeKit and shared with my family (through Home Assistant ONVIF)

Constraints

The user experience was frustrating for several reasons:

  1. Performance Issues: High latency and frequent freezing, taking 2-3 seconds to load screenshots and stream video. And the image quality is limited to low resolution.
  2. Cross Platform Support: HomeKit only works within Apple ecosystem, so it’s impossible to view all the cameras at the same time on my Android tablet.
  3. Privacy & Extensibility: Both of the montors provide advanced AI detection features, but the streaming must be processed through the cloud with unknown algorithms.
  4. Simplicity: Tried several existing open source solutions, but they are a bit too complex and put me off.

Fortunately, both cameras support RTSP (Real Time Streaming Protocol) for video stream consuming.

The Solution: Night Watcher

Nightwatchers? The name comes from the lateest DLC of my favorate game “Against the Storm”.

Due to these limitations, I decided to create a micro web-based IP camera viewer: https://github.com/daya0576/nightwatcher

  1. Performance: Blazing fast without any delay.
  2. Cross Platform Support: Works on any device with a browser.
  3. Privacy & Extensibility: Local models and custom detection support.
  4. Simplicity: Minimal navigations and css styles.

Demo

2025-08-27 19-19-26.2025-08-27 19_24_27

Interesting story

My sweet got recognized as an apple by YOLO 🤣🤣🤣:

Next…

  • PWA web app
  • Dockerlization
  • User friendly custom detection
  • Refine camera configuration
  • Train a YOLO11 model on my custom dataset

Final words

This project is made with love for families, tested by my wife :p

Hoping you can enjoy this project and feel free to contribute!

4DD287FD-24AB-4564-ADD5-1E4D1D0AD86D_1_102_o