Self‑hosted. Private. Minimal. Bring your own cameras and keep your video on your network.
Built to be simple, private, and reliable
Point Simpleye at your camera’s IP and HTTP port; give it a name, done. Admin‑only for safety.
See what’s happening right now with low‑latency MJPEG streams in your browser.
Validate connectivity, port open status, and record last online time with a single click.
Your video never leaves your network. No cloud, no vendor lock‑in, no tracking.
Flask + MongoDB with MJPEG streaming. Runs well on modest hardware and in containers.
Admin‑only management operations with a clear first‑run signup gate.
Container health checks via GET /health so your orchestrator knows when it’s ready.
MIT‑licensed and built for the community. Contributions welcome!
Simple architecture: Browser ↔ Flask (Gunicorn) ↔ MongoDB; Flask ↔ IP Cameras (MJPEG)
Start Simpleye using Docker Compose with MongoDB, or a single Docker run command.
On first boot, if no users exist, sign up the first admin account to enter the app.
Provide camera name, IP, port, and MJPEG endpoint. Management is admin‑only.
Open the dashboard or use the per‑camera viewer to see MJPEG in your browser.
Use one‑click connectivity checks and the /health endpoint for orchestration.