camera

Quick setup

Before starting

Install Git, Docker Desktop or Python 3.10+, Node 20+, and current Chrome or Edge. Copy .env.example to .env, then set CAMMY_SECRET_KEY, CAMMY_ADMIN_USER, and CAMMY_ADMIN_PASSWORD. Production use requires HTTPS.

Windows

git clone https://github.com/<owner>/cammycam.git
cd cammycam
Copy-Item .env.example .env
docker compose up --build

Open https://localhost, sign in, then open Image Device. Connect the XIAO ESP32-S3 by USB and select Connect and install.

Linux

git clone https://github.com/<owner>/cammycam.git
cd cammycam
cp .env.example .env
./install-deps.sh
docker compose up --build

If Web Serial cannot open the device, run sudo usermod -aG dialout "$USER", then sign out and back in. Open the HTTPS hub in Chrome/Chromium.

macOS

xcode-select --install
git clone https://github.com/<owner>/cammycam.git
cd cammycam
cp .env.example .env
docker compose up --build

Open the HTTPS hub in Chrome or Edge. Safari lacks Web Serial. Use Image Device, select the connected XIAO ESP32-S3, flash, then configure Wi-Fi.

Verify

  1. Hub shows the camera online and receives frames.
  2. Battery percentage appears after the first 60-second report.
  3. Motion inside a configured zone creates an active smart-motion event.
  4. Browser installs the PWA and opens it standalone.

Never disconnect power during flashing. OTA rollback requires two OTA app slots. ESP Web Tools requires a merged factory image staged with kind=factory; device OTA uses the app-only image staged with kind=ota.