Build a pet camera with Thingino firmware
Short answer: flash a supported pan/tilt camera with Thingino, rent a small Ubuntu 24.04 server (an AWS Lightsail nano is about $5 a month), and run OpenPetCam's ./setup. The camera connects out to your server over WireGuard; your phone opens the app from the server. About 30 minutes, no coding.
What Thingino is, and why Thingino suits a pet camera
Thingino is open-source firmware for cameras built on Ingenic chips. Thingino replaces the vendor firmware, so the camera stops talking to the vendor's cloud and gives you RTSP video, a web page, motor control and WireGuard. OpenPetCam uses all four: video for live view and detection, the motors to go looking for your pet, and WireGuard so nothing at home has to be opened to the internet.
What you need
| Part | What works |
|---|---|
| Camera | A Thingino-supported pan/tilt camera. Reference: Cinnado D1 (Ingenic T23N). Fixed cameras give live view and alerts but can't search. |
| Server | Ubuntu 24.04 with a public IP. 512 MB RAM is enough; OpenPetCam uses about 5% of one CPU core. |
| Computer | Mac or Linux with git, ssh and rsync, for the installer. |
| Phone | Any iPhone or Android browser. The app installs to the Home Screen. |
Step 1: flash the camera
Follow the instructions for your model on thingino.com. Join the camera to your Wi-Fi and set its root password in the setup portal. Keep that password; you'll type that password on the server later.
Step 2: create the server
Create the server and open these ports in its cloud firewall: TCP 22, 80, 443, and UDP 51820 (WireGuard) and UDP 8189 (WebRTC video). Note its public IP and SSH key.
Step 3: run the installer
git clone https://github.com/crimeacs/OpenPetCam.git && cd OpenPetCam
git checkout "$(git describe --tags --abbrev=0)"
./setup
./setup asks for the server's IP, SSH key, time zone and your pet's name, installs MediaMTX, Caddy, WireGuard and the detector, and prints the values for the next step.
Step 4: connect the camera with WireGuard
In the camera's Thingino web page, open WireGuard and enter what ./setup printed:
| Field | Value |
|---|---|
| Address | 10.77.0.2/24 |
| Endpoint | <server IP>:51820 |
| Peer public key | the server key ./setup printed |
| Allowed IPs | 10.77.0.1/32 |
| Keepalive | 25 |
Paste the camera's own public key back into ./setup. Because the camera dials out, your router needs no port forwarding.
Step 5: open the app on your phone
Set the app password when ./setup asks (you type the password on the server, and your computer never stores it), then open the address ./setup prints. In Safari choose Share → Add to Home Screen. The app then runs full screen and can send alerts.
Another camera model?
Most Thingino pan/tilt cameras work. Motor ranges differ, so run tools/calibrate.py once. If yours works (or doesn't), tell us in an issue. Camera reports are the most useful thing you can share.