A live camera tile. Streams any Home Assistant camera (HLS, WebRTC, MJPEG or polled snapshots) or an Apple Home camera through HomeKit, with a tap-to-expand full-screen viewer, optional pan/tilt/zoom, clip recording, and motion or doorbell alerts that pop up on your dashboard.
The camera widget fills its tile with a live feed. Tap the tile to open a full-screen viewer; tap the feed again to shrink it back down. Flux picks the best stream method automatically, and every state — loading spinner, live image, or error — fills the same frame so the tile never jumps size when the feed connects.
ahk_) streams through HomeKit's own APIs instead — tiles poll snapshots and full screen starts the live HomeKit stream. Apple Home cameras have no recording or PTZ APIs, so those controls don't appear for them.The Stream setting controls how the feed is delivered:
hls or web_rtc frontend stream type (this covers WebRTC cameras like UniFi Protect, which still serve HLS through Home Assistant's stream API), otherwise falls back to MJPEG.AVPlayer.Tapping a tile opens the camera full screen on a black background. The viewer shows a Record button (HA cameras only), a close button, and — when enabled — on-screen PTZ controls. Tapping the feed itself closes the viewer. The same viewer is what opens when you tap a motion pop-up.
A camera can watch a trigger entity and surface an in-app pop-up and/or a local notification when it fires. Flux polls the configured cameras once a second from the main screen.
binary_sensor with a matching device class (motion/occupancy for motion; doorbell/sound/occupancy for doorbell). You can override it by picking any entity yourself.binary_sensor fires on its off→on transition. An event.* entity (e.g. a doorbell-press event) fires when its state timestamp changes.The pop-up shows the camera name, a live preview of the feed, and an Open button; tapping the preview or Open expands it to the full-screen viewer. Only one pop-up shows at a time.
Enable Pan / tilt / zoom controls to overlay a directional pad and zoom buttons in the full-screen viewer. Each press calls your camera's PTZ service (default onvif.ptz) with ONVIF-style directions — pan LEFT/RIGHT, tilt UP/DOWN, zoom ZOOM_IN/ZOOM_OUT — targeted at the camera entity.
The Record button in the full-screen viewer (and the "Record a clip" tap action) calls Home Assistant's camera.record service. The clip records for the set duration, stops automatically, and saves into your Home Assistant's /media/recordings.
/media/recordings/{{ entity_id }}.mp4. Use a timestamped path so repeating clips don't overwrite each other.Play saved clips with the View recordings tap action, or from Settings › Media.
| Option | What it does |
|---|---|
| Stream | Delivery method: Auto (best available), HLS (smooth), WebRTC (low latency), MJPEG, or Snapshot (still). |
| Fit | Fill crops the feed to fill the tile; Fit shows the whole frame letterboxed. |
| Trigger | Motion or Doorbell — sets the alert wording/icon and which sensor is auto-wired. |
| Motion sensor / Doorbell entity | The trigger entity. Leave unset to auto-detect a matching binary_sensor on the camera's device. |
| Notify on trigger | Send a local notification (with sound) when the camera triggers. |
| Pop-up | In-app alert scope: Off, Only on this dashboard, or Any screen. |
| Pan / tilt / zoom controls | Show PTZ controls in full screen. |
| PTZ service | The domain.service called for PTZ moves (default onvif.ptz). Shown only when PTZ is enabled. |
| Record duration | Clip length in seconds (5–600) for camera.record. |
| Recording file path | Templated destination for clips (default /media/recordings/{{ entity_id }}.mp4). |