Muralis

Android kiosk for any web page

Lock a tablet to one page. Then leave it.

Muralis turns an Android tablet into a wall panel for any web page: a dashboard, a board, a menu, a page on your own network. It holds the screen on that page, recovers by itself, and takes commands over HTTP and MQTT.

  • Android 8 and up
  • No root
  • Any URL, local or internet
  • HTTP + MQTT
  • Made in Austria
A meeting-room board filling the whole tablet screen, with no browser bar and no Android bars
One page. The whole screen. Nothing else.

Who it is for

One screen, one page, nobody looking after it

Muralis does not care what is on the page. If a browser can show it, a tablet on the wall can hold it.

Smart-home dashboards

Home Assistant, openHAB, ioBroker, Domoticz. To Muralis they are all a page.

Office and workshop boards

A Grafana board, a build monitor, a ticket queue, on the wall of the room that needs it.

Front desk and shop

A welcome screen, a menu, today’s schedule, on a tablet nobody has to babysit.

Your own network

An intranet page or a local server. Nothing has to be on the internet.

What it does

Built to be left alone

Wall panels drift. A browser stops repainting, a network blip leaves an error page, an update reboots into the stock launcher. Muralis handles each of those without anyone walking over.

Locked to one page

Home app, lock task, no system UI to reach. Back by itself after a reboot.

Recovers unattended

Failed loads retry, hung loads time out, a dead renderer is rebuilt.

Catches a frozen page

A page that was updating and stopped is reloaded. One that never changes is left alone.

Restarts itself nightly

A full restart in the small hours, and a rebuild whenever memory runs low.

A way out you choose

Three to twelve corner taps, recorded on the device. Nothing is hardcoded.

Display off, done properly

A real screen-off where the tablet can be trusted to sleep, a black film where it cannot. It says which.

Something to look at when nobody is

Dimmed page, black film, another page, or pictures: your folders in playlists, or a picture of the day, credited.

Remote control, Pro

Every setting, from anywhere on your network

The web admin is a page the panel serves itself. The same commands and settings answer over HTTP and MQTT, and the reference shows each one with the panel’s real reply.

  • One command set. The same names over HTTP and MQTT. A refused command says why.
  • Every setting. The page, brightness, orientation, display off, the screensaver and its playlists, the broker, the escape combinations.
  • Live status. Battery, memory, storage, network, temperature and page health, as JSON.
  • Telemetry to automate on. Battery, memory, storage, network, CPU, thermal, screen and page health, once a minute and sooner when something changes.
  • Nothing leaves your network, and nothing is on until you set it up. No default credentials; broker and admin secrets encrypted in the Android keystore. No cloud, no account.
curl -k -u :your-admin-password -X POST https://192.0.2.42:8080/api/command \
     -d cmnd=kiosk.open_url \
     -d url=https://muralis.spazio17.org

The panel answers:

{"status":"accepted","detail":""}

In motion

Four clips off a real panel

Recorded over the cable. They loop, there is no sound, and nothing in them is a mock-up.

The page fails and nobody touches the tablet. About ten seconds later the panel loads the configured page again by itself. The waiting runs at five times speed, and the badge counts the real seconds as they pass.

Five taps in one corner opens the settings. You choose the corners on the device, and the page underneath carries on as if nothing happened.

A POST to the panel’s own web admin and it changes page, with nobody near it. The reply under the command is the panel’s own.

curl -k -u :your-admin-password -X POST https://192.0.2.42:8080/api/command \
     -d cmnd=kiosk.open_url \
     -d url=https://muralis.spazio17.org

One message on the panel’s command topic. It does as it is told and answers on its own result topic.

mosquitto_pub -h test.mosquitto.org \
    -t kiosk/hallway-panel/command \
    -m '{"command":"kiosk.open_url","args":{"url":"https://muralis.spazio17.org"}}'

Screens

The tablet, the web admin, and what they produce

In place. A Grafana board, a Home Assistant dashboard, an openHAB home: three pages, one panel, nothing else reachable.
Web admin. Every setting, without touching the panel.
On the device. The same settings, in your hand.
The way out. Corner taps you record yourself, and a PIN if you want one.
Screensaver. Pictures from the panel’s own folders, in playlists, or a picture of the day.
In Home Assistant. Discovered, not declared.
A status page. Gatus, on the wall of the room that runs the servers.

For Home Assistant users

Discovered, not declared

Over MQTT the panel appears in Home Assistant as one device, with no YAML: sensors for battery, memory, storage and temperature, controls for brightness, orientation, display off and the page, buttons for reload, restart and reboot. The two recipes below are ready-made automations built on them. Import one and Home Assistant asks you which entities to use.

Needs Pro

Wake on presence, blank when empty

A panel that glows all night is a nightlight nobody asked for. This wakes the screen when someone is in the room and blanks it again once the room has been empty for a while. The page stays loaded and comes straight back.

It asks you for

  • a motion or occupancy sensor
  • the panel’s Display on and Display off buttons
  • how long the room must be empty first
  • optionally, something that keeps it dark regardless

Needs Pro

Keep the battery in a healthy band

A tablet left plugged in forever sits at 100 percent and warms up, and after a year or two the battery swells and lifts the screen off the front. This charges it only between two thresholds instead. The panel keeps running throughout; only the charger is switched.

It asks you for

  • the panel’s battery level sensor
  • the smart plug feeding its charger
  • the floor and the ceiling, 20 and 80 by default

Both read the panel’s own entities, so both need Pro. Home Assistant imports blueprints from GitHub rather than from any website, which is why the buttons above hand it the repository and not this page.

Free, and Pro

The kiosk is free. Reaching it from a distance is Pro.

A panel on a wall is meant to be left alone, and the kiosk does that for free. Pro is how you reach it anyway: a browser, a broker or an automation, without walking up to it.

Muralis

Free

Everything that makes a tablet a wall panel. Not a trial, not a cut-down edition.

  • Locked to one page, with the system UI out of reach
  • Recovers on its own: retries, timeouts, frozen-page detection, a nightly restart
  • The recorded corner-tap way out
  • Display off, real or black film, chosen for you and explained
  • Optional stats overlay, drawn on the panel itself
  • No Google account needed, on a de-Googled tablet or any other
  • A screensaver: dimmed page, black film, a web page, or pictures from your own folders and from Bing or Wikimedia Commons
  • No watermark, no expiry, no sign-in, nothing that phones home

Muralis is in closed testing on Google Play, and nothing is on sale yet: the price and the split above are the plan, not a shop. A panel that never buys Pro is never nagged and never stops working.

Install

Two ways onto a tablet

They are not the same. Only the QR makes a locked panel; the app from Play is for trying it.

Muralis owns the tablet and holds the screen on your page. Android grants that only during setup, which is why the tablet has to be reset first.

  1. Back up anything on the tablet.
  2. Factory reset, and stop at the welcome screen.
  3. Tap the screen six times, then join a network when it asks.
  4. Scan the code.

A tablet that cannot verify the code’s signing fingerprint refuses to go on. What the code encodes, and how to check it, is on the download page.

Provisioning QR code for Muralis

The app only. No lockdown, nothing is wiped: Android grants ownership during setup and never after. Good for seeing what it does before you reset a tablet.

In closed testing: the link opens only for accounts on the tester list.

Get it on Google Play

Requirements

What it needs

Android 8.0 (API 26) or newer.
Install An ordinary APK. No root, no platform signature.
Full kiosk Needs device owner, over adb or by QR at setup.
Without it Still runs and recovers. System UI stays reachable, reboot and real screen-off unavailable.
Battery settings Two switches Android keeps for you. How to set them.
Google account Only to buy Pro.
The page Any web page, on the internet or on your own network.
Broker Only for MQTT. Unencrypted, so trusted networks only.

Availability

Where it stands

Runs on real panels every day. On Google Play in closed testing, and published in full on the download page.

Closed testing. The Play link opens only for accounts on the tester list. The download page has the same APK, signed by Google, together with its checksum, its signing certificate and the provisioning QR, for anyone who wants to check it or make a panel with it today.