Browse documentation
All documentation
Getting started
Screens & scenes
Widgets
Integrations
The assistant
Household & presence
Reception & visitors
Menus, art & broadcast
Account, plans & data
API & self-hosting
Troubleshooting

Cameras

How to add a camera to Mirra by address or through Home Assistant, write an alert that puts it on chosen mirrors when the doorbell rings, and work out why a camera rectangle is blank.

Adding cameras and writing camera alerts works on every plan. The Camera widget, which puts a camera permanently on a scene, needs the Home plan or above and belongs to the Home Assistant integration — so it only appears in the scene editor's palette when Home Assistant is switched on for your household, even for a camera you added by address.

What a camera on a mirror is for

Somebody rings the doorbell and a mirror shows them the door for half a minute, then goes back to what it was doing. That is the feature. Nearly everything else in Mirra's camera support exists to stop that happening when it should not — not twice for one press, not for a cat, not at three in the morning on a bedroom wall, and not because a cloud service came back from the dead.

There is a second, quieter use: the Camera widget, which puts a still from a camera on a scene and refreshes it every ten seconds by default. The widget is for a camera you want to glance at. An alert is for a camera you want to be shown.

Doorbell pressedan entity changes stateThe screen sees itstraight off your networkfor a Home Assistant trig…Camera fills the glassfor the seconds you choseBack to the scenenothing underneath moved
What happens between the doorbell and the glass.

Two ways a camera gets here

A camera reaches Mirra by one of two routes, and after that nothing downstream can tell them apart. Both appear in the same picker, both can be pointed at by the same alert rule, and a camera you add by address is given an identifier of the form camera.mirra_front_door so a rule written before it existed can still find it.

  • By address. You type the camera's own URL into Mirra. No Home Assistant, no account, no cloud — a screen fetches the picture straight off your network.
  • Through Home Assistant. Anything Home Assistant can see, a mirror can show. This is the route for a camera that only talks to its vendor's cloud.
  • There are two kinds of address: a snapshot address, which is an HTTP or HTTPS URL returning a JPEG, and an RTSP stream, which needs a converter on the screen because no browser can play RTSP.

Mirra has no camera-vendor integrations. Those cameras reach a mirror through Home Assistant, which is maintained by people who follow each vendor's changes for a living — so when a vendor breaks something, the fix arrives there rather than waiting on us.

Adding a camera by address

Most IP cameras publish a snapshot address in their own settings, usually under a heading like ONVIF or HTTP. It looks like http://192.168.1.20/snapshot.jpg. If the camera needs a login, that login almost always goes inside the address itself — user:password@host is what every camera's own settings page prints.

Integrations → Camera alertsYour camerasAdd one by address, or use anything already in Home AssistantAdd a cameraFront door · snapshothttp://192.168.1.20/snapshot.jpgEdit · Remove2 alertsAdd an alertFront doorSomebody rings → front_door · 2 screens · quiet 22:00–07:00
The Camera alerts page: cameras at the top, rules beneath them.
  1. Open Integrations, then Camera alerts

    The page is at /integrations/cameras, listed on the Integrations page just under Light rules. Cameras come first on it and alerts second, because you cannot write a rule about a camera the mirror has never heard of.

  2. Press Add a camera

  3. Fill in the name, kind and address

    The name is what you will see in every picker afterwards, so Front door rather than Cam 1. Names are kept to 60 characters.

  4. Press Save camera

    Mirra checks the shape of the address and refuses one that cannot work — an RTSP camera whose address does not start with rtsp://, or a snapshot camera pointed at something that is not HTTP. It does not try to fetch a picture, so a saved camera is not yet a proven camera.

  5. Check it on a screen

    Put the Camera widget on a scene and pick it, or write an alert and ring the bell. This is the step where a wrong password or a wrong path shows itself.

Name
What the camera is called everywhere else in Mirra — in the widget picker and in the list of cameras an alert rule can point at.
Kind
Snapshot (an image address) for an HTTP or HTTPS URL that returns a JPEG, or RTSP stream for a camera that only speaks RTSP.Default: Snapshot (an image address)
Address
The full URL, credentials and all. Include the username and password if the camera needs them. When you edit a camera later this box starts empty; leave it empty to keep the address already saved, and only the other fields change.
Room (optional)
A plain label such as Hall. It appears as the camera's area in the pickers, beside the rooms Home Assistant reports for its own entities.

An RTSP camera needs go2rtc on the screen, which the screen installer puts there. No browser can play RTSP, so the screen converts it locally. If the picture never appears on a screen that was set up some time ago, re-run the installer on that screen. A snapshot address needs nothing at all.

Editing and removing one

  • Edit reopens the form with the address blank. The stored address is never sent back to your browser, so leaving it blank is how you rename a camera without wiping its login.
  • Renaming a camera does not change its identifier. Turning Front door into Front Door would otherwise detach every rule and widget pointing at it, and you would find out the next time somebody rang the bell.
  • Removing a camera asks first, and says that any alert pointing at it will stop working. Those rules are deliberately left alone rather than rewritten — a rule that quietly does nothing until you look at it is better than one that has been edited behind your back.
  • The list shows each address with the password replaced by dots, so two cameras on the same box can be told apart. A settings page is not a place to put a credential back on screen.
  • A camera marked off in the list is not sent to screens at all.

Using a camera Home Assistant already has

Connect Home Assistant and its cameras appear in the same list as the ones you added by address. Nothing else has to be configured: the alert engine, the widget and the rule editor all work on an entity identifier and do not care where it came from.

  1. Connect Home Assistant

    Done once, on the Home Assistant page.

  2. Wait for a screen to report

    Mirra's servers cannot reach your home network, so the list you pick from is a snapshot pushed up by a screen roughly once a minute. A camera you added in Home Assistant a moment ago will not be there instantly. The Home Assistant page shows when the list was last taken.

  3. Pick it in a rule or a widget

A camera entity that Home Assistant is not offering an access token for cannot be shown at all. That is Home Assistant's side rather than Mirra's, and it usually means the integration behind the camera has not finished setting it up.

Finding out what your cameras will actually give you

Two things about a camera cannot be worked out from inside Mirra: what shape a doorbell press arrives in, and whether Home Assistant can really serve live video for it. Mirra ships a read-only script that answers both against your own installation.

It is a terminal command rather than a page in the portal. It lives in the Mirra source repository at tools/probe-cameras.mjs and has to be run on a machine that can reach Home Assistant — the mirror's Pi is usually the right one.

  1. Make a long-lived access token in Home Assistant

    Your profile, bottom-left, then Security, then Long-lived access tokens, then Create token.

  2. Run the script

    HA_URL=http://homeassistant.local:8123 HA_TOKEN=… node tools/probe-cameras.mjs — it only reads.

  3. Read the two answers

    Candidate triggers first, then every camera in turn.

  4. Revoke the token

  • For each candidate trigger it says which of the two shapes it is: a binary sensor whose edge is off going to on, or an event entity whose state is the timestamp of the last press. If both shapes appear in your house, both are handled.
  • For each camera it says whether a still arrives and whether a stream actually delivers frames. Home Assistant answers a stream request correctly and then sends nothing when it cannot reach the camera, so frames counted is the only evidence worth having.
  • A camera with no access token is reported as such. That one cannot be shown by the widget either.
  • Stream: no everywhere costs nothing. Alerts fall back to fast stills, which is what they were built around.

If it cannot connect because the certificate is for a name you are not dialling — normal in a house where Home Assistant has remote access set up but the router will not hairpin — prefix the command with HA_INSECURE_TLS=1. That is reasonable for a read-only probe on a network you own and nowhere else.

The token has full access to your Home Assistant. Pass it in the environment as shown rather than editing it into the file, and revoke it from the same page when you have finished.

Writing an alert

An alert is one sentence: when this trigger fires, show this camera, on these mirrors, for this long.

Every gate in it defaults to no. A new rule names no screens, so it does nothing until you tick some; it starts quiet from 22:00 to 07:00; and the camera is never pre-selected, because a hall mirror showing a bedroom window is how a helpful default becomes a household privacy failure.

  1. Press Add an alert

    The button stays disabled until at least one camera exists.

  2. Choose what fires it

    Triggered by lists everything that can carry an edge: the Home Assistant entities that can — binary sensors and event entities — and any doorbells you have added to Mirra. A camera you added by address has no motion sensor of its own, so it can be shown by a rule but cannot start one; a Mirra doorbell is the usual answer to that, and needs no Home Assistant at all. See Doorbells. One option has nothing to point at. Shortly before a booked visitor is fired by reception rather than by anything on your network, so the Triggered by list disappears when you choose it — there is nothing to pick.

  3. Choose the camera

    The picker starts empty and stays empty until you choose. If you save without one, Mirra answers: Choose a camera to show.

  4. Tick the mirrors

    Only the screens you tick will ever receive this camera. A mirror in a bedroom or bathroom is best left unticked.

  5. Set the quiet hours and the timings

  6. Press Save

    The named screens are told at once, and so are any screens you have just removed from the rule, so a screen stops acting on it rather than keeping it until its next poll.

Name
What the rule is called in the list, and the label drawn over the picture when it fires.Default: Front door
When
Somebody rings, Motion is seen, or A person is seen. This describes the rule and names it for you. The edge that actually fires it is whatever you choose under Triggered by — Mirra does no motion detection of its own.Default: Somebody rings
Triggered by
The entity Mirra watches. A binary sensor fires when it goes to on, and the release back to off is not a second press. An event entity fires when its timestamp moves forward, and a timestamp moving backwards is treated as a clock correction rather than a press.Default: nothing chosen
Show this camera
Which camera goes on the glass. Never pre-selected.Default: nothing chosen
On which mirrors
The screens allowed to act on this rule. The filtering happens on our servers, not on the screen: a mirror you did not tick never receives the rule, so it never learns the camera's identifier and cannot show it through any fault on the device.Default: none
Quiet from / Quiet until
The window in which the rule behaves differently. Both must be HH:MM. Leave both blank for a rule that is never quiet.Default: 22:00 and 07:00
During quiet hours
Say nothing at all, A line of text, no picture, or Show the camera anyway. Three choices rather than a switch, because at three in the morning a household may well want to know somebody is at the door and definitely does not want a lit rectangle of their doorstep on a bedroom wall.Default: A line of text, no picture
Show for (seconds)
How long the camera stays up before it takes itself away. Held between 5 and 300 — anything longer is a camera widget rather than an alert, and there is a widget for that.Default: 30
Not again within (seconds)
The smallest gap between firings. A driveway sensor beside a road is otherwise a strobe. Held between 5 and 3600.Default: 30
Live video rather than a still
Attempts a live stream instead of a fast-refreshing picture. Falls back on its own if the camera will not stream, which battery cameras usually will not.Default: off
Enabled
Turns the rule off without deleting it. A rule switched off while it is on the glass comes off immediately rather than waiting for its timer.Default: on

Say nothing at all does not consume the gap either. A household asleep has not just been told, and the morning's first press must not be swallowed by one nobody saw.

What happens when one fires

Broadcast — an emergency takes the screen from everythingCamera alert — momentary, and leaves by itselfSign-in prompt — somebody is halfway through itThe scene — the wall
What sits above what while an alert is on the glass.
  • The camera fills the screen above whatever was on it. Nothing underneath moves, so there is no question of what it goes back to.
  • A hairline along the bottom counts down, so a room can see that this will end by itself rather than wondering whether the mirror is stuck.
  • A newer alert replaces the one showing rather than stacking on it. Somebody at the door now matters more than motion in the driveway ten seconds ago.
  • Every screen you ticked shows it. There is no single elected screen — two mirrors both showing the front door is the point, not a bug.
  • Live video gives up after three seconds with no frame and falls back to fast stills. A camera you added by address always shows stills; the live tier is a Home Assistant one.
  • In quiet hours with A line of text, no picture, all that appears is a dim label naming the rule, low on the screen, over whatever was already there.
  • Pressing Escape dismisses it, on the few screens that have a keyboard. On the rest the timer is the only thing that takes it away, which is why the duration is not optional.

Cameras and the reception desk

A building with a reception desk gets two things from its bookings, and both are guesses rather than facts.

The first happens on its own: when any alert fires and somebody is due at about that time, the picture is captioned "Expecting Priya, 10:00". It is worded as expecting on purpose. Somebody being booked in for ten is not evidence that the person at the door is them, and a receptionist who greets the wrong person by name has been told something false by the screen.

The second is a trigger you choose: Shortly before a booked visitor puts the door camera up about five minutes ahead of the booking, so you can watch somebody arrive. It shows once per booking and then takes itself away like any other alert.

  • Only a first name and a time reach a screen. The surname, the company and the email never leave the portal — a lobby screen is read by whoever is queuing in front of it.
  • A visitor who is already late does not trigger the camera. The moment worth watching has passed.
  • Two cameras pointed at two doors each show once for the same booking.
  • Quiet hours, the minimum gap and the hold all work exactly as they do for a doorbell.

The building needs the guestbook switched on for either of these. Without it, reception has nothing to tell the screens and both behave as though no one is ever due.

Why a camera rectangle is blank

A camera showing nothing is usually telling you something, and the wording is the clue. These are the messages Mirra puts in place of a picture.

  • Choose a camera — the widget has no camera set. Open the scene and pick one.
  • Not connected — a Home Assistant camera on a screen that has lost Home Assistant. A camera added by address never shows this, because it does not need Home Assistant at all.
  • … isn't offering a picture — check it in Home Assistant — the entity exists but is not handing out a way in. A camera added by address can show this message too, and when it does the thing to check is the address, not Home Assistant.
  • Home Assistant can't reach … — the picture was asked for and did not arrive: a wrong RTSP path, a camera asleep, a firewall in the way, or an RTSP camera on a screen that has no converter. The message clears on its own when the camera comes back, rather than staying accusatory until somebody reloads the screen.
  • Nothing at all when an alert should have fired — a camera reporting unavailable declines to show rather than putting a broken frame on a wall. The camera being down should look like nothing happening, not like the mirror is faulty.
  • A camera that works when you paste its address into a browser tab and shows nothing on the wall is almost always a credentials problem. Chrome will not send a login embedded in an image address, so the screen pulls it out and sends it as a header — and only Basic authentication is supported, so a camera that insists on digest never produces a frame.

What never leaves your house

  • No frame, thumbnail, clip or snapshot ever reaches Mirra's servers. Pictures go camera to screen, on your own network. There is no upload path.
  • Nothing is recorded when an alert fires. No log of every approach to the house, no history to scroll, no notification to a phone. Changes to a rule are audited; the firings are not, deliberately — a deduped, pushed log of every arrival is a movement record of your household in somebody's cloud, for a feature whose whole value is local and momentary.
  • Only entity identifiers, friendly names and the rules themselves are stored in the cloud.
  • A camera's address and password are stored encrypted and sent only to your own paired screens, which are the only things that can reach the camera at all.
  • Rules are filtered per screen before they are sent. A mirror you did not tick never receives the rule, and a rule with a corrupt or unreadable screen list is treated as naming nobody rather than everybody.

The consequence is worth being plain about: Mirra cannot show you a camera while you are away from the house. There is no remote view, and building one would mean putting your pictures somewhere we can reach them.

Related

  • DoorbellsA link that rings your screens. Set one up in a couple of minutes, point an alert at it, and have the mirror show your door when somebody presses the bell — with or without Home Assistant.
  • Home AssistantHow Mirra reaches Home Assistant through a screen on your own network, what it syncs, what it notices, and what each failure message means.
  • Every widget there isThe complete list of widgets Mirra ships with, grouped the way the scene editor groups them, with what each one shows and what it needs before it will show anything.
  • Screen settingsEvery setting on a screen's own page that belongs to the screen rather than to a scene — its shape, which way up it is, its camera and gestures, the commands you can send it, and unpairing.
  • Your dataSet how long Mirra keeps assistant transcripts, presence and the activity log, take a copy of everything held about your household, and close the account for good.
  • A screen is blank or showing old informationHow to tell a screen that has lost its connection from one that is doing exactly what its schedule and scenes tell it to, and what to check in which order.
  • Integrations: what they are, and turning them onAn integration is an outside source that several widgets draw on — this explains what turning one on and off does, and why Mirra refuses to turn one off while its widgets are still on a scene.