录像导出、Episodes、搜索、带视频片段的推送通知等功能需要 camera.ui Pro 订阅;Docker 用 --network host 启动,默认访问 https 的 3443 端口,初始账号密码为 admin/admin,务必尽快修改;GPU 加速需改用对应的 GPU 镜像,具体见安装文档。

camera.ui
camerauiMIT活跃维护本地优先的专业视频监控平台,把摄像头接入、目标检测和人脸识别整合到一个现代化界面里,适合自建 NVR 和家庭安防。
The modern, local-first platform for professional video surveillance.
docker run -d --name cameraui \
--restart unless-stopped --stop-timeout 30 \
--network host -e TZ=Europe/Berlin \
-v cameraui-data:/data \
ghcr.io/cameraui/camera.ui:latestREADME 未给出具体显存或内存要求;支持 Apple Silicon、Intel、NVIDIA、AMD、Coral、Hailo 硬件加速并自动选择。
本地优先的摄像头与 NVR 平台,把家里的 IP 摄像头统一成一个系统
本地优先的专业视频监控平台,把摄像头接入、目标检测和人脸识别整合到一个现代化界面里,适合自建 NVR 和家庭安防。
核心能力
- 通过 RTSP、ONVIF、HTTP 接入摄像头并自动发现设备
- 在自有硬件上做物体、人脸、声音检测,支持区域与越线
- 全天或事件触发录像,时间轴回看并导出 MP4
- 用自然语言搜索,或点选人物车辆定位出现时刻
- HomeKit、Home Assistant、MQTT 接入智能家居
容易踩的坑
- server-v2.4.9camera.ui v2.4.9最新正式版2026-11-07 · 2026-11-07 18:51 UTC
Added
-
Move and rename terminal tabs. Drag a tab to move it, on a phone hold it briefly first. A double click or double tap renames it.
-
Keep a terminal session running. The pin in the terminal's menu keeps a tab and its shell running on the server. After a reload or on another device, the tab opens the same shell with its output. Reconnect moved into the same menu.
Fixed
-
Buttons work over remote access through Cloudflare. Some of them failed with "Unsupported Media Type", such as turning on a plugin for a camera, restarting a plugin or the server, and signing out.
-
The terminal on phones leaves the keyboard as it is. The key bar, the tabs and the buttons no longer open the keyboard when it is closed, or close it when it is open.
-
Zoom on the camera page in landscape. A double tap zooms there too, not only pinching. A zoom started in landscape stays when you turn the phone upright, and the player grows taller with it.
-
Smaller fixes in the interface. The dots below the timeline hide while you export or delete, and the close button of a terminal tab no longer turns dark on hover in light mode.
Changes since 2.4.8
- release(server): v2.4.9 (ef87e1d) - @seydx
- chore: update changelog (1d7a30c) - @seydx
- feat: minor ui improvements (1bdf274) - @seydx
- chore: update typings (cb62f6d) - @seydx
- chore: update submodules (950927f) - @seydx
- chore: update deps (159479b) - @seydx
- chore: update deps (f70c59a) - @seydx
- fix: terminal tab close button hover in light mode (61d5fdf) - @seydx
- feat: reorder, rename and pin terminal tabs (e7b4f73) - @seydx
- feat: keep terminal sessions running on the server (c553984) - @seydx
- feat: minor ui improvements (3d42b9b) - @seydx
- fix: content type parser for chunked requests (ffa3de4) - @seydx
- chore: update submodules (31b3169) - @seydx
- chore: update submodules (7c6a5d2) - @seydx
Full Changelog: https://github.com/cameraui/camera.ui/compare/server-v2.4.8...server-v2.4.9
-
- server-v2.4.8camera.ui v2.4.82026-11-07 · 2026-11-07 01:23 UTC
查看更新说明
After the update
-
Update the Home Assistant plugin to 1.1.0. Until then no cameras from Home Assistant show up under Cameras → Discovered.
-
Update the Reolink plugin to 1.3.8. Until then the camera moves in jerks while you hold the joystick.
Added
-
Export from the Camview timeline. With one camera in the view or one tile expanded, the timeline has Export, as on the camera page.
-
Cameras from Home Assistant. The cameras of your other Home Assistant integrations show up under Cameras → Discovered. The stream comes through Home Assistant and records like any other camera, and the camera brings its own motion, person, vehicle and animal sensors, battery, light and siren along. Two-way audio works where Home Assistant offers it. See Import from Home Assistant.
-
Your cameras as an ONVIF device. Another NVR, an ONVIF client or the ONVIF integration of Home Assistant can add camera.ui as an ONVIF camera, each camera with its streams from high to low resolution. The answers follow the ONVIF specification, so clients that check them strictly accept it too. It stays off until you turn it on under Settings → Streaming, and single streams can be left out in a camera's Sources tab. Without host networking, publish port 2005 as well. See ONVIF export.
-
Choose the sounds per camera. Settings → Detection lists the sounds that count for a camera, all selected at first. A sound you deselect starts no event, push or automation on that camera. Automations can change the selection with Camera control. See Audio detection.
-
Apple TV: choose the cameras for the Top Shelf. Settings → Top Shelf picks the cameras whose events show there.
-
Apple TV: more filters for events. Filter in the Events tab narrows the list to cameras or rooms, favorites, events or episodes, single sounds, and vehicle type and color.
Changed
-
Camview has a control bar at the bottom. It replaces the button in the corner and holds the same controls. The microphone in its middle talks to all cameras right away, without a dialog. The arrow at its end folds the bar back into a button, in fullscreen a button at the top shows it.
-
The recordings below a camera follow its timeline filter. A camera that only reports motion lists its motion events once its timeline shows motion. Buttons at the bottom right replace the bar above the list: one filters by text, day, confidence, label, the camera's sensors and sounds and by vehicle, the one above it turns on the zone filter.
-
The camera page leaves more room for the recordings. The player takes up to half the height, a wide picture less.
-
RTSP clients without a query get one video and one audio track. They got every track of the stream before. A query in the URL still picks the tracks.
-
Settings pages replace the config editor. The new Streaming page holds RTSP, the ONVIF export, WebRTC with STUN and TURN and the other ports. System adds ports, address, local discovery and logging, Remote Access the reverse proxy, sign-in through a proxy and the tunnel protocol. Most changes apply without a restart, and the YAML files stay under Advanced on System and Streaming. See Streaming.
-
Recordings show when a filter is active. A dot on the filter button marks it, also while the filter sidebar is closed, and Reset filters at the bottom of the sidebar clears them all. On the desktop the filter button replaces the arrow beside the title.
-
The camera page on a phone in landscape shows the camera larger. The camera takes the width its picture needs at full height, and the timeline beside it gets the rest. On a narrow timeline, filter, export and delete sit behind a button with three dots, and the zoom buttons are hidden.
-
**Number fields have the same butto
-
- server-v2.4.7camera.ui v2.4.72026-11-04 · 2026-11-04 20:45 UTC
查看更新说明
After the update
- Update the NVR plugin to 1.7.0. Until then a deleted person's name can stay on someone still in front of a camera, picking a sound in Recordings still shows every sound, Metrics → Storage has no delete button, and the timeline marks only the first and last time a sound or sensor went off in an event.
Added
-
Delete a camera's recordings from Metrics → Storage. Once recording is off for a camera, its Mode shows off and the button at the end of its row deletes its recordings, and with Delete events too all its events, favorites included. The row shows the delete until it is done, also after a restart.
-
The timeline shows when motion, a sound, a sensor or a line crossing set in during an event. Each one is a small dot where it began, also in the middle of a running event, and dots close together become one with a count. Hover a dot for what it was and when, click it to jump there. A click on a full event bar plays from where it began.
-
The detection trace lists an event's triggers. Motion, sounds, sensors and line crossings, each with the times it went off.
-
STUN and TURN servers in Settings → Remote Access. The new WebRTC card sets them without the config editor, and the apps use them too. A TURN server helps live view and two-way audio from outside when no direct path works, on mobile networks for example, and a share link can pass it on to its viewers. See WebRTC.
-
Unknown faces show their marks. A face already filed under someone or only partly visible carries the exclamation mark in Faces, the tooltip names the reason. Groups and Ungrouped show how many of their faces are marked, so you see it before you assign. Ignored faces get the mark when they are only partly visible.
Changed
-
AI search starts at a 40 % match score. Min. Match Score starts lower and resets with each visit, like the search itself.
-
Logging starts in the Console. The record button at the bottom right starts and stops it, debug entries included. The two switches under Settings → Appearance are gone.
Fixed
-
The sound filter in Recordings works. Picking gunshot, doorbell or another sound under Audio shows only those events, and new or running events no longer slip into a filtered list they don't match.
-
Switching between servers keeps the right account. With a different username on each server, the app showed "User not exists" errors after the switch and recent events loaded late. This also happened after tapping a push from the other server or when returning from an instance.
-
Instances stay apart from your servers. A push opens on its own server even with an instance active, and each server remembers its own active instance. The instance menu keeps the right name after a reload. An instance no longer touches the saved Face ID login of your server.
-
Cameras with
/,#,?or%in their name work. Opening such a camera showed an error, its settings could not be saved and removing it said the camera does not exist. In Home Assistant this needs the camera.ui integration 0.5.3. -
The assistant's Usage counts every call. Missing were the call before an approval or before the assistant opened a page for you, answers that failed or were stopped, and the short call that picks out facts to remember. Gemini models that think were estimated too cheap.
-
A deleted person's name goes away at once. Someone still in front of a camera when you deleted them kept the name until they left. Events that started meanwhile and automations on the face sensor still saw it.
-
Dialogs fit the screen in the iPhone browser. In Safari the top or bottom of a dialog was cut off, with buttons out of reach, and the event dialog hid the bottom of its timeline. Suggestion lists, the names when you assign a face for example, opened with a gap below the field.
-
Long menus stay on the screen. A menu with many entri
- server-v2.4.6camera.ui v2.4.62026-11-01 · 2026-11-01 11:38 UTC
查看更新说明
Added
- Event dialogs have the detections view. The switch sits next to the filter, on phones the dots under the timeline lead to it.
Changed
- Each camera keeps its own timeline filter. A change on one camera no longer reaches the others, and the camera's event dialogs use the same filter. Camview over several cameras has a separate one. Cameras start at the default filter.
Fixed
- Smaller fixes on phones. The event dialog no longer cuts off the bottom of the timeline with the filter button and the view dots.
Changes since 2.4.5
- release(server): v2.4.6 (f7fad0a) - @seydx
- chore: update deps (b0dc754) - @seydx
- chore: update changelog (485b5e5) - @seydx
- feat: minor ui improvements (2e6a596) - @seydx
- feat: improve timeline preferences and filters for user settings (8404728) - @seydx
Full Changelog: https://github.com/cameraui/camera.ui/compare/server-v2.4.5...server-v2.4.6
- server-v2.4.5camera.ui v2.4.52026-11-01 · 2026-11-01 10:22 UTC
查看更新说明
Changed
-
Less detector load on cameras with object zones. Movement outside every object zone, like traffic on the street in front of a driveway, no longer gets zoomed looks of its own.
-
Camera cards show when a picture updates. A small spinner sits next to the picture's age while a new one is fetched or has just arrived.
Fixed
-
Fewer phantom objects at the edge of a zoomed view. Detection looks at cut-outs of the moving areas, and something cut off at the edge of one could be taken for a vehicle or a person and open an event. A cut-off view no longer starts an object, the first whole view does. The event trace marks such a box as cut off.
-
Leaving after standing still opens an event more reliably. A parked car that drove off or a person who had waited and walked away could go unnoticed when they paused or turned right after starting off.
-
Smaller fixes in the interface. The bottom bar fades with the page when a camera opens or closes, a scrolled Home no longer jumps after closing a camera, the floating buttons no longer flash up when you return to a scrolled page, a camera card no longer keeps an old picture after you come back from another page, cameras set to When viewed get new pictures while their card stays open, the picture age stays right when the server's clock differs from your device, camera cards get a new picture right after a lost connection comes back.
Changes since 2.4.4
- release(server): v2.4.5 (1990bbc) - @seydx
- chore: update deps (3e69b9d) - @seydx
- chore: update changelog (30654c6) - @seydx
- chore: update deps (c60968a) - @seydx
- feat: minor ui improvements (5bb9085) - @seydx
- chore: update deps (77127f9) - @seydx
- feat: minor ui improvements (411e444) - @seydx
- chore: update submodules (83b45b2) - @seydx
- chore: update submodules (de4ddb3) - @seydx
- chore: update deps (99ec1a0) - @seydx
- ui: minor ui improvements (d33de8b) - @seydx
- chore: update deps (8542b4c) - @seydx
- fix: mark boxes cut by a zoom window and skip duplicate or out-of-zone windows (ddc013e) - @seydx
Full Changelog: https://github.com/cameraui/camera.ui/compare/server-v2.4.4...server-v2.4.5
-
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
camera.ui is the local-first camera and NVR platform. It turns your IP cameras into one system on your own hardware: live view, detection, recordings and smart home. The server runs on macOS, Windows and Linux, in Docker, on Proxmox or as a Home Assistant app. You watch from the desktop app, the browser, your phone or your Apple TV.
What it does
- The cameras you have over RTSP, ONVIF, HTTP and more, with plugins for brands like Reolink, Eufy and Ring and automatic discovery on your network.
- Live view of every camera on desktop, phone and TV, in layouts you arrange yourself.
- Detection on your own hardware for objects, faces and sounds, with zones, privacy masks and line crossing.
- Recording around the clock or on events, with a timeline to scrub through and MP4 export.*
- Episodes turn related events into one story with an AI description.*
- Search in plain words, or tap a person or car to find every moment it appeared.*
- Push notifications with a video clip.*
- Smart home with HomeKit, Home Assistant and MQTT.
- Automations you draw instead of code, and plugins for everything else.
- Remote access without port forwarding, and sharing a camera by link.
- Hardware acceleration on Apple Silicon, Intel, NVIDIA, AMD, Coral and Hailo, picked automatically.
* Requires camera.ui Pro.
Get started
Desktop app for macOS, Windows and Linux, server and viewer in one: cameraui.com/download
Docker on Linux:
docker run -d --name cameraui \
--restart unless-stopped --stop-timeout 30 \
--network host -e TZ=Europe/Berlin \
-v cameraui-data:/data \
ghcr.io/cameraui/camera.ui:latest
Set TZ to your time zone. After a few minutes, open https://<your-server>:3443 and sign in with admin / admin.
Proxmox, bare-metal Linux, GPU images and the apps for iPhone, Android and Apple TV are covered in the installation guide. On Home Assistant OS, install the Home Assistant app.
Questions and issues
Questions and help: GitHub Discussions, Discord or Reddit. The issues of this repository are only for bug reports and feature requests, please follow the templates. Report security vulnerabilities privately as described in the Security Policy.
Contributing
This repository holds the server and the web interface. Plugins, SDKs, Docker images, the Home Assistant integration and the docs live in their own repositories in the cameraui organization.
Please read the Contributing Guide and the AI Policy before opening a pull request.
License
MIT, Copyright (c) 2020-present seydx
The core of camera.ui is free and open source. Pro is a subscription that funds ongoing development.