motionEye

Web frontend for the Motion video surveillance program

Video Surveillance ★ 4.7k stars Easy setup GPL-3.0

motionEye is a web-based frontend for the Motion surveillance daemon, making it easy to manage cameras and recordings. It is popular for building DIY surveillance systems on Raspberry Pi hardware.

Key features

  • Web frontend for Motion
  • Motion detection recording
  • Raspberry Pi friendly
  • Multiple camera support

Pros & cons

Strengths

  • Easy to set up
  • Great for DIY builds

Trade-offs

  • Aging codebase
  • Limited modern AI detection

motionEye replaces

Last reviewed Sep 13, 2026 · 763 words

A Raspberry Pi 4 running motionEye will comfortably watch 2 cameras at 720p and 5 frames per second, record on motion, and email you a snapshot, all for the price of the Pi. Push it to 4 cameras at 1080p and it falls over, because motionEye is a web front-end for Motion, a daemon from the early 2000s that decodes every frame in software and looks for changed pixels. That single fact explains both why motionEye is the friendliest DIY surveillance tool on this site and why anyone with more than a couple of cameras, or with a hunger for "person detected" rather than "something moved", should read the Frigate section below before buying hardware.

What motionEye is and is not

Motion does the work: it pulls a video stream, compares frames, and when enough pixels change it writes a clip, fires a webhook or runs a script. motionEye wraps that in a Python web app: add cameras, draw a detection mask, set thresholds and schedules, view live feeds and browse recordings, all from a browser on port 8765. It supports USB and Pi camera modules, network cameras over RTSP or MJPEG, and other motionEye instances as remote cameras, which is the trick for building a hub out of several Pis.

What it is not: an NVR with object detection. Motion sees a tree waving as motion. There is no person, car or animal classification, no hardware-accelerated inference, no timeline scrubbing across cameras. The project dates from 2013 and the codebase shows it; the Python 3 port took years, and the separate Pi OS image, motionEyeOS, is no longer maintained.

Docker on a Pi or a mini PC is the sane install

The old ccrisan/motioneye image is stale; use the project's own (the tag tracks a branch, so check the README for the current one):

services:
  motioneye:
    image: ghcr.io/motioneye-project/motioneye:dev
    ports:
      - "8765:8765"
    volumes:
      - ./config:/etc/motioneye
      - ./media:/var/lib/motioneye
      - /etc/localtime:/etc/localtime:ro
    devices:
      - /dev/video0:/dev/video0   # only for a USB camera on the host
    restart: unless-stopped

Log in as admin with an empty password and set one immediately; the login screen is there but the default is open. Recordings land in /var/lib/motioneye, so point that volume at your largest disk, and set a retention (Preserve Movies: 7 or 14 days) before the first weekend of false triggers fills it.

Three settings stop the false alarms

Frame Change Threshold, the percentage of pixels that must change, defaults low; on outdoor cameras I start at 3 to 5 percent. Minimum Motion Frames, how many consecutive changed frames count, at 3 or more filters out a bird. And the mask: paint out the road, the tree and the flag. Combined with a modest frame rate (5 fps is plenty for a doorbell view and a quarter of the CPU of 20 fps), a Pi 4 with 512 MB set aside for motionEye is a stable little recorder rather than a machine that spends its life transcoding.

For network cameras, ask the camera for its low-resolution substream rather than the main 1080p stream. Detection does not need 1080p; the recording might, and motionEye records the stream it detects on, so you are trading clip quality for CPU. For a driveway camera that is usually the right trade.

Where Frigate takes over

Frigate is the project that made motionEye a legacy pick for anyone with a spare 100 dollars. It does object detection, uses a Coral TPU or a GPU for inference, records 24/7 with event markers, and integrates natively with Home Assistant. It needs more RAM, a more capable box, and about an evening of YAML. ZoneMinder sits in between: older, heavier, more traditional NVR features, also without modern detection out of the box. The video surveillance category has the full field; my short version is that motionEye wins for 1 to 3 cameras on a Pi with zero appetite for configuration, and loses everywhere else.

What I'd do

Two cameras or fewer, a Pi 4 or an old thin client, motionEye in Docker with a mask drawn on each camera and 14-day retention, reachable over Tailscale rather than a port forward. Set the admin password before adding a camera. If you already own a Coral or a box with an Intel iGPU, or you want alerts that say "person", skip motionEye entirely and set up Frigate; the extra evening pays for itself the first windy night.

Compare motionEye

10 head-to-head comparisons.

Similar video surveillance apps