Skip to content

King Admin User Guide

King Admin is the admin console for your King ecosystem. It gives you a visual interface for managing KingKiosk digital signage devices and RTSP cameras — all built on top of the same MQTT messaging your devices already use. Think of it as a control room: you can see what every device is displaying, push new content to screens, monitor camera feeds with AI overlays, and adjust settings, all from one place.

King Admin runs on macOS, Windows, Linux, iOS, Android, and in any web browser.


Table of Contents


Logging In

Connection Modes

King Admin reaches your devices through MQTT. There are two ways to connect, and the app tells you which one is active with a toast notification after login:

Direct MQTT — The app connects straight to your MQTT broker. This is what you use on desktop and mobile, and on the web if you are not running the Home Assistant addon. You fill in the broker address and credentials on the login screen and hit Connect.

HA Addon Mode — If King Admin is deployed as a Home Assistant addon and you open it through Home Assistant's sidebar, it detects the King Core 3 backend automatically and connects without showing a login screen at all. Core 3 maintains the broker connection on the server side and relays messages to the admin app over HTTP.

Desktop and Mobile Login

When you open King Admin on macOS, Windows, Linux, iOS, or Android, you see a login screen with the King Admin icon and four fields:

Broker Host / URL — Type your broker's IP address or hostname. For most home setups, this is something like 192.168.1.50 or mosquitto.local. You can also paste a full URI if you need to specify the transport explicitly (e.g. mqtt://192.168.1.50 for TCP, or ws://192.168.1.50/mqtt for WebSocket), but most people just type the IP and leave the rest to the defaults.

Port — Pre-filled with 1883, the standard MQTT port. Change this only if your broker listens on a different port.

Username and Password — Fill these in if your broker requires authentication (most do). Leave them blank if your broker allows anonymous connections.

Below the credentials, there are a few more options:

Use TLS — Turn this on if your broker requires an encrypted connection. When you enable TLS, two more options appear:

  • Allow insecure/self-signed certs — Check this if your broker uses a self-signed certificate. The app will accept it without validation. A warning toast reminds you this is not recommended for production.
  • CA Certificate (PEM) — If your organization runs its own Certificate Authority, paste the CA's root certificate here in PEM format. This lets the app trust your broker's certificate without disabling validation entirely. This field only appears when TLS is on and the insecure-cert option is off.

Remember Me — Check this and the app saves your credentials securely. Next time you open King Admin, it auto-connects without showing the login screen.

Press Connect. The button shows a spinner while the connection is being established. If it succeeds, you are taken straight to the Home Dashboard.

Web Login

When you run King Admin in a web browser, there is one important difference: browsers can only connect to MQTT brokers over WebSocket. They cannot open raw TCP connections. The login screen adapts for this automatically.

What you enter is the same — broker host, port, username, password. But behind the scenes the app always uses WebSocket (ws:// or wss://) to reach your broker.

The port default changes based on how you loaded the page: - If you loaded King Admin over HTTPS, the port defaults to 8884 and the app uses WSS (encrypted WebSocket). A green chip below the form confirms "Secure connection (WSS)." - If you loaded King Admin over HTTP, the port defaults to 1884 and the app uses WS (unencrypted WebSocket). An orange chip shows "Unencrypted connection (WS)."

These are the standard WebSocket ports for the Mosquitto addon in Home Assistant. If your broker uses different WebSocket ports, change the port field accordingly.

Your broker must have a WebSocket listener enabled. This is a separate listener from the normal MQTT TCP port. If you are using the Home Assistant Mosquitto addon, WebSocket listeners on 1884 and 8884 are usually pre-configured. If you are running your own Mosquitto, you need a listener 1884 with protocol websockets in your config.

There is no TLS toggle on web — the app automatically matches the WebSocket security to the page protocol. You cannot override this.

Web TLS Restrictions

This is the most common source of connection problems on the web, so it is worth understanding clearly:

If King Admin is served over HTTPS, it must connect to your broker over WSS (encrypted WebSocket). Browsers enforce this — they will not allow an HTTPS page to open an unencrypted WebSocket connection.

WSS requires your broker's TLS certificate to be trusted by the browser. This means the certificate must be: - Issued by a public Certificate Authority (like Let's Encrypt), or - A certificate whose CA is installed in your operating system's trust store so the browser recognizes it.

Self-signed certificates will not work on the web. Unlike the desktop app where you can check "Allow insecure certs," browsers provide no way for a web app to bypass certificate validation. If your broker uses a self-signed cert, the WSS connection will simply fail with no useful error message.

Your options if you have a self-signed cert: - Serve King Admin over HTTP instead of HTTPS so it connects via plain WS (no certificate validation needed). This is unencrypted but avoids the cert issue entirely. - Get a proper certificate for your broker from Let's Encrypt or another CA. - Install your private CA's root certificate in your OS trust store so the browser trusts it. - Use the desktop or mobile app instead of the web version — those platforms support the "Allow insecure certs" toggle.

HA Addon Mode

If you are running King Admin as a Home Assistant addon and open it through Home Assistant's sidebar or ingress URL, you do not need to do anything. The app detects the King Core 3 backend at startup, connects through its HTTP bridge, and takes you directly to the Home Dashboard.

If auto-detection fails (for example, if Core 3 is still starting up), the app falls back to showing the normal login screen so you can connect directly.

In HA Addon mode, the app polls Core 3 for device updates roughly every 800ms. It also opens a lightweight direct MQTT connection in the background for screenshot data, since those payloads are large and benefit from real-time delivery.

Remember Me and Auto-Connect

On desktop and mobile, the Remember Me checkbox controls whether your credentials are saved. When checked and the connection succeeds, the app stores your broker address, port, username, and password in secure platform storage (Keychain on macOS/iOS, Keystore on Android, platform-appropriate secure storage on Windows/Linux). On next launch, the app auto-connects and takes you straight to the dashboard. If the auto-connect fails (broker unreachable, credentials changed), you see the login screen with your saved values pre-filled so you can edit and retry. Disconnecting always clears saved credentials.

On the web, credentials are saved automatically after every successful connection — there is no checkbox. The next time you open the page, your fields are pre-filled. However, the app does not auto-connect on web; it first tries HA Addon auto-detection, and if that fails, shows the login screen with your saved values.

Command Signing

If your deployment requires it, you can enable HMAC-SHA256 command signing so that every command King Admin sends includes a cryptographic signature. This prevents anyone with broker access from spoofing commands to your devices.

To enable it: 1. From the Home Dashboard, tap the overflow menu (three dots in the top-right). 2. Tap Signing (On/Off). 3. Enter the shared secret. This must be the exact same secret configured on your King devices. 4. Save.

All commands will now include a signed envelope. If your devices are not configured to verify signatures, they will ignore the signing fields, so enabling this harmlessly does nothing until both sides are set up.

Connection Failures and Reconnect

If the connection drops while you are using King Admin (broker restarts, network blip, etc.), the app automatically retries every 5 seconds until it reconnects. You will see the device cards go offline and come back as the connection restores.

If the initial login fails, an error notification appears. Common causes:

  • Wrong broker address or port — double-check the IP and port number.
  • Authentication failure — verify your username and password match the broker config.
  • WebSocket listener not enabled (web only) — your broker needs a separate WebSocket listener configured.
  • Certificate not trusted (web WSS only) — see Web TLS Restrictions.
  • Broker unreachable — check that the broker is running and your network allows the connection.

Home Dashboard

Once connected, the Home Dashboard is your starting point. It shows every device King Admin has discovered — your KingKiosk screens and your cameras — as a grid of cards.

Finding Your Devices

Devices appear automatically as they publish status messages over MQTT. Cameras (which are managed via REST API rather than MQTT) also appear here. If you just connected and the grid is empty, give it a moment — devices populate as their retained messages arrive.

Search — Tap the magnifying glass icon in the top bar to reveal a search field. Type part of a device name or ID to filter the grid in real time.

Filter by status — A row of chips below the top bar lets you show All devices, only Online (green), or only Offline (red). This is useful when you have a large fleet and want to quickly spot problems.

Filter by type — Next to the status chips are type filters: All Types, Kiosk, and Camera. Use these to focus on one category of device.

Sort — Tap the sort icon to choose how the grid is ordered: alphabetically, by last-seen time, online-first, or grouped by device type.

Switch views — Toggle between a visual Grid View (square cards with screenshots and status) and a compact List View (rows with name, type, status, and timestamps). Your preference is saved between sessions.

Pull to refresh — Drag down on the device list to force a refresh.

Device Cards

Each card gives you a quick snapshot of a device's state:

KingKiosk cards show the latest screenshot from the device as the card background, with the device name and an online/offline indicator overlaid. You can see at a glance what the screen is currently displaying.

Camera cards show a snapshot from the camera with badges indicating which AI features are active (AI detection, face recognition, speech transcription, recording) and the camera's state (Running, Stopped, Error).

Tap any card to open its full detail screen.

Removing a Device

Each card has a small close button. Tapping it shows a confirmation dialog explaining what will happen: - For KingKiosk devices, this clears the device from the broker by publishing empty retained messages. The device itself is not affected — it will reappear if it publishes again. - For cameras, this stops the camera and permanently deletes its configuration from Core 3.

Notifications

A notification panel sits at the bottom of every screen once you are logged in. It tracks connection events, command results, errors, and status changes.

When collapsed, it shows a bell icon with an unread count and a preview of the latest message. Tap it to expand into a scrollable list of all notifications, color-coded by type (blue for info, green for success, amber for warnings, red for errors). You can dismiss individual notifications or tap "Clear All" to reset.


Managing KingKiosk Devices

KingKiosk devices are digital signage screens. They can display web pages, videos, images, live streams, data widgets, and alert notifications — all controlled remotely through King Admin.

The Kiosk Detail Screen

Tap a KingKiosk card on the Home Dashboard to open its detail screen. This is where you spend most of your time managing a kiosk. The screen is organized from top to bottom:

Top bar — Shows the device name, an animated online/offline badge, and live telemetry chips for battery level, CPU usage, and memory when the device reports them. If a command is in-flight, an amber chip appears showing what is pending and how long it has been waiting.

Action chips — A horizontally scrollable row of shortcut buttons: Command Center, Widget Builder, Export Config, Import Config, Raw Command, Screenshot Viewer, and Take Screenshot. These are quick access points for the features described below.

Quick controls — A translucent bar with the most commonly used controls: volume slider, brightness slider, and action chips for Close All, window tiling mode, screenshot, and screensaver toggle.

Main view — A visual representation of what is on the kiosk screen, with two view modes (Screen View and Graph View) described below.

Editor panel — When you select an element, a panel slides in from the right showing all of its editable properties.

Everyday Controls: Volume, Brightness, Screensaver

These are the things you will adjust most often, so they are right at the top of the detail screen in the quick controls bar:

Adjusting volume — Drag the volume slider left or right. It snaps to 5% increments. When you release it, the new volume is sent to the device immediately.

Adjusting brightness — Same as volume. Drag the brightness slider and it updates the device on release.

Activating or dismissing the screensaver — The screensaver chip shows "Screensaver" when the screen is awake and "Wake Screen" when the screensaver is active. Tap it to toggle. After toggling, the app waits two seconds and then requests a fresh screenshot so you can see the result.

Closing everything on screen — Tap "Close All" to immediately remove every window, media element, widget, and alert from the kiosk display. This is useful when you want to start fresh.

Switching window mode — Tap "Tile Windows" to arrange all windows in an automatic grid layout, or "Float Windows" to let them be positioned freely. The label changes to reflect the current mode.

Viewing Your Kiosk: Screen View and Graph View

The main area of the detail screen shows you what is on the kiosk. There are two ways to look at it, toggled via the segmented button in the toolbar:

Screen View is a proportionally-scaled replica of the kiosk display. The latest screenshot is shown as the background, and every element (window, video, widget, alert) is drawn on top at its real position and size, color-coded by category: blue for windows, green for media, orange for widgets, red for alerts. You can drag elements to reposition them and drag corner handles to resize them — changes are sent to the device as you move things around.

Graph View shows a node graph with the display at center and elements arranged around it, connected by curved lines. This is useful when elements overlap on screen and you need to see them individually. Drag nodes to rearrange the layout. Use the zoom controls or Ctrl/Cmd+scroll to zoom in and out.

The toolbar above the view shows live counters for how many media, windows, widgets, and alerts are currently on screen, plus buttons to add new elements, open remote settings, and lock/unlock the device.

Putting Content on Screen

There are several ways to add content to a kiosk, depending on what you need:

Quick add from the toolbar — Click the "Add Element" button in the view toolbar. A dialog appears with a grid of element types organized by category: - Windows: Browser, WebView, PDF viewer - Media: Video, Audio, Image, Carousel, YouTube, RTSP stream - Widgets: Clock, Calendar, Timer, Weather, Gauge, Chart - Alerts: Info, Success, Warning, Error

Pick a type, give it a title, enter a URL (for web pages, videos, images, or streams), and click Add. The element appears on the kiosk immediately.

Example — Putting a website on screen: 1. Click "Add Element" in the toolbar. 2. Choose "Browser" under the Windows category. 3. Enter a title like "Dashboard" and the URL (e.g. https://grafana.local/d/my-dashboard). 4. Click Add. 5. The browser window appears on the kiosk. Select it in the view and drag it to position, or use the editor panel to set exact coordinates.

Example — Playing a video: 1. Click "Add Element" and choose "Video" under Media. 2. Enter the video URL (a direct link to an MP4, HLS stream, or similar). 3. Click Add. 4. Select the video element and use the editor panel to enable looping, adjust volume, or switch to fullscreen display mode.

Example — Sending an alert: 1. Click "Add Element" and choose an alert type (Info, Warning, etc.). 2. Type your message as the title. 3. Click Add. The alert appears on the kiosk screen.

For more complex or precise content creation, use the Widget Builder or the Command Center (described below).

Editing What's Already on Screen

Click on any element in the Screen View or Graph View to select it. The editor panel slides in from the right side of the screen with everything you can change:

Common fields (all element types): Title, URL, position (X and Y coordinates), size (Width and Height), opacity slider (fully transparent to fully opaque), and z-index (controls stacking order — higher numbers are on top).

Media-specific controls (videos, audio, carousels): - Play and Pause buttons. - Toggle switches for Loop, Autoplay, and Muted. - Volume slider. - For carousels: interval between slides, transition effect (fade/slide/scale), scroll direction, and navigation buttons. - For RTSP and WebRTC streams: stream URL field and hardware acceleration toggle.

Window-specific controls (browsers, webviews): - Show/hide title bar. - Allow dragging and resizing by kiosk users. - Zoom level (50% to 200%). - For remote browsers: server URL, video quality profile, connect/disconnect.

Widget-specific controls — Each widget type has its own settings. For example: - Gauges: the MQTT topic to bind to, min/max range, unit label, and interactive toggle. - Weather: location, forecast toggle, temperature units. - Clock: digital or analog style, 24-hour format, show seconds.

After making changes, click Apply Changes in the footer. The button highlights when you have unsaved changes so you do not forget. You can also delete the element from the panel footer, or use quick actions like Bring to Front, Maximize, or Close.

The Widget Builder

The Widget Builder is a 3-step wizard for creating widgets visually, with live preview on actual kiosk hardware. It is the most powerful way to build data-driven displays — gauges, charts, buttons, weather panels, clocks, and more — because you can see exactly what the widget will look like on the real screen while you configure it.

Open it from the Widget Builder chip in the action bar on any kiosk detail screen. It opens as a full-screen dark interface with frosted-glass panels and a step indicator at the top.

You can also navigate between steps at any time by clicking the step chips in the header ("1 Type", "2 Configure", "3 Preview & Deploy"), or press Escape to go back a step.

Step 1 — Choose a Widget Type

You see a responsive grid of widget type cards, each with a title, description, and icon. Tap the one you want and the builder advances to Step 2 automatically.

The types are organized into four categories:

Data-Driven — These widgets bind to MQTT topics (or Home Assistant entities) and display live data. When you select one of these, the Entity Picker appears in Step 2 to help you connect it to a data source.

  • Gauge — Displays a live numeric value with a radial, linear, circular, semicircular, or thermostat-style gauge. Supports color zones, thresholds, and multiple pointers.
  • Chart — Line, bar, or pie chart fed by MQTT data.
  • MQTT Button — A toggle or momentary button that publishes to an MQTT topic when tapped and shows live state from a subscription.
  • Alarmo — A Home Assistant Alarmo security panel with arm/disarm modes and PIN entry.
  • MQTT Image — Displays images received via MQTT payloads (useful for camera frames or generated images).

Display — These widgets show information that does not require an MQTT data binding.

  • Clock — Analog or digital, with options for 24-hour format, seconds hand, and theme.
  • Weather — Current conditions and forecast using a weather API. Configure location, units, and refresh interval.
  • Animated Text — Text with animation effects (fade, typewriter, wave, kinetic presets).
  • Screensaver — Configures the kiosk's idle screensaver with custom items and timing.

Interactive — Widgets that users at the kiosk (or you, remotely) can interact with.

  • Map — Interactive map with configurable tile provider, initial position, and zoom.
  • Canvas — Drawing and diagramming surface with objects, grid snap, and touch interaction.
  • Remote Browser — A browser session streamed via WebRTC from a Feature Server.
  • Local Browser — A native web view.

Media — Content playback widgets.

  • Media — Video, audio, image, or web content with playback controls.
  • Carousel — A rotating slideshow of multiple items.
  • DLNA Player — A UPnP/DLNA media renderer.

Step 2 — Configure

Once you pick a type, the configuration form appears. It has up to three sections, depending on the widget type.

The Entity Picker (Data-Driven widgets only)

If you chose a data-driven type (Gauge, Chart, Button, Alarmo, or MQTT Image) and your kiosks are connected to Home Assistant, an Entity Picker appears at the top of the form. This is the fastest way to wire up a widget to real data.

How it works:

  1. A Domain Filter bar shows chips for each available entity domain — sensor, light, switch, climate, camera, alarm_control_panel, and so on. Tap a domain to narrow the list, or leave it on "All" to see everything.

  2. Below that, a search field lets you filter by entity name, ID, or area. Results are grouped by room/area, with each area header showing its name and entity count.

  3. Each entity in the list shows its friendly name, entity ID, current state, and unit of measurement. Tap one to select it.

What happens when you select an entity — this is where the builder saves you real time. It auto-populates the widget's configuration based on the entity:

  • The MQTT subscribe topic is set to the entity's state topic (e.g. kingkiosk/ha/state/sensor/living_room_temperature).
  • The MQTT publish topic is set to the entity's command topic.
  • The title and label are set to the entity's friendly name.
  • The unit is filled from the entity's unit of measurement.
  • For numeric entities (sensors, thermostats): the min and max values are intelligently guessed — it uses the entity's own min/max attributes if available, or infers reasonable ranges from the unit (0–100 for percentages, 50–90 for Fahrenheit temperatures, 10–35 for Celsius, etc.).
  • For climate entities specifically, the builder creates a full thermostat gauge configuration with three pointers (current temperature, heat setpoint, cool setpoint), each with the correct color and publish payloads for controlling the thermostat.
  • For buttons, it sets up toggle mode with the correct service call payload.
  • For Alarmo, it pre-fills the entity and MQTT base topic.

You can always override any of these auto-populated values in the form below. The entity picker is a starting point, not a locked-in choice.

The Configuration Form

Below the entity picker (or at the top, for non-data-driven types), the form shows fields specific to the widget type you selected. Here are the key options for the most commonly used types:

Gauge configuration: - Gauge Type — Choose from Linear, Radial, Circular, Semicircular, or Thermostat. Thermostat mode is designed for HVAC displays with multiple pointers. - Min and Max — The range of the gauge. - Default Value and Unit — Starting value and the unit label (e.g. "F", "%", "kW"). - Color Mode — How the gauge is colored: Zones (colored bands at value ranges), Thresholds (color changes at specific values), Gradient (smooth color transition), or Solid (single color). - Interactive and Locked — Whether kiosk users can drag the gauge to set a value, or whether it is display-only. - MQTT Binding — Subscribe topic (where the gauge reads values from), publish topic (where it sends values when interacted with), and JSON field (which field in the MQTT payload contains the value, e.g. state or data.value). - Pointers — You can add multiple pointers to a single gauge. Each pointer has its own label, style (Needle, Dot, Target, or Bar), color, data binding, and publish payload. For thermostat gauges, a "Thermostat Preset" button auto-creates the standard Current/Heat/Cool pointer set. - Thresholds and Zones — Defined as JSON arrays for fine control over color breakpoints.

Weather configuration: - API Key — Your weather service API key. - Location — City and country code (e.g. "San Francisco,US"). - Units — Imperial, Metric, or Standard. - Show Forecast — Toggle the multi-day forecast display. - Auto Refresh — Whether to periodically refresh, and how often (in seconds).

MQTT Button configuration: - Mode — Toggle (stays on/off), Button (momentary), or Icon Button. - Label — Text shown on the button. - Publish Topic and Payload — The MQTT message sent when the button is pressed. - Subscribe Topic and Status Path — Where to read the current state from. - Icons and Colors — Separate icons and colors for the on and off states.

Clock configuration: - Mode — Analog or Digital. - Theme — Auto, Light, or Dark. - Show Numbers — Whether the clock face shows hour numbers. - Show Second Hand — Whether seconds are displayed.

Chart, Map, Canvas, Carousel, and other types each have their own form with relevant fields. The forms are designed to expose the most common options as simple fields, with an "Advanced" JSON editor available for power users who need access to every possible parameter.

Window Geometry

At the bottom of every configuration form, regardless of widget type, is the Window Geometry section. This controls where the widget appears on the kiosk screen:

  • Window ID — Auto-generated, but you can change it.
  • Title — The window title (shown in the title bar if the kiosk displays one).
  • X and Y — Position in pixels from the top-left corner.
  • Width and Height — Size in pixels.
  • Opacity — 0 (fully transparent) to 1 (fully opaque).
Validation

If any required fields are missing or invalid, a red Validation Errors panel appears below the geometry section listing each problem. These must be resolved before deploying.

From here, click Preview & Deploy to advance to Step 3, or Back to return to the type picker.

Step 3 — Preview and Deploy

This step has two panels side by side on wide screens (stacked on narrow screens): the Live Preview panel on the left and the Deploy panel on the right.

Live Preview

This is the feature that makes the Widget Builder special. Instead of guessing what your widget will look like, you push it to a real kiosk and see it live.

To start a live preview:

  1. Choose a preview device from the dropdown. This lists all online KingKiosk and KingLauncher devices. The preview device can be different from your eventual deploy target — you might preview on a test kiosk and deploy to production.

  2. Click Start Preview. A pulsing green dot appears to confirm the preview is active.

What happens on the kiosk: The builder first saves a backup of the kiosk's current screen layout (so nothing is lost). It then overlays a dark semi-transparent backdrop and renders your widget on top of it, so you can see it clearly against a clean background.

Live updating: As you go back to Step 2 and change configuration values, the widget on the kiosk updates automatically after a short 500ms pause. You can watch the real hardware while you adjust colors, sizes, data bindings, gauge ranges, and positions. This tight feedback loop means you can fine-tune a widget in seconds rather than going through a deploy-check-redeploy cycle.

Stopping preview: Click Stop Preview (or navigate away from the Widget Builder). The kiosk's original screen layout is automatically restored from the backup. Even if you close the browser tab or the app crashes, the next time you connect King Admin will attempt to clean up.

You can switch the preview device at any time — the old device is restored and the new device picks up the preview.

The JSON Editor

Next to (or below) the preview panel, a JSON editor shows the live MQTT command that will be sent to the kiosk. This is the raw payload — the exact JSON that creates the widget.

The editor syncs bidirectionally with the form: - Change a field in the form → the JSON updates instantly. - Edit the JSON directly → the form fields update to match.

This is useful for power users who want to hand-tune parameters that are not exposed in the form, or for copying a command payload to use elsewhere. A Copy button copies the JSON to your clipboard.

If you paste or type invalid JSON, an error message appears below the editor. The builder preserves any custom fields in the JSON that it does not recognize, so you can add extra keys without losing them when switching back to the form.

Templates

Templates let you save and reuse widget configurations:

  • Save Template — Click the bookmark icon, give the template a name (e.g. "Lobby Temperature Gauge"), and save. The entire widget type and configuration are stored.
  • Load Template — Click the bookmarks icon to open a list of all saved templates. Tap one to restore its widget type and configuration. You can also delete templates from this list.

Templates are saved locally, so they persist across sessions. They are a good way to standardize widgets across a fleet — configure one gauge perfectly, save it as a template, and deploy it to every kiosk.

Deploying

Choose how and where to deploy:

  • Single device — Select a target device from the dropdown and click Deploy Widget. The widget is created on that kiosk immediately. A success notification confirms the deployment.
  • Batch deploy — Toggle "Deploy to all online devices" and click Batch Deploy. The widget command is sent to every online KingKiosk and KingLauncher device. A notification tells you how many devices received it.

If there are validation errors in your configuration, deploying is blocked and you see a warning listing the problems.

Keyboard shortcut: Press Ctrl+Enter on Step 3 to deploy immediately.

If you had a live preview running on the same device you are deploying to, the builder is smart about it: it stops the preview (removing the backdrop), deploys the widget cleanly, and restores the rest of the screen layout. The result is your widget appearing on the kiosk exactly as it looked in preview, but now as a permanent part of the display.

Widget Builder Walkthrough: Temperature Gauge from a HA Sensor

Here is a complete example of using the Widget Builder end to end:

  1. From a kiosk detail screen, tap Widget Builder in the action chip bar.
  2. In Step 1, tap Gauge in the Data-Driven category.
  3. In Step 2, the Entity Picker appears at the top. Tap the "sensor" domain filter chip to narrow the list to sensors only. Use the search field to find your temperature sensor (e.g. type "living room"). Tap it.
  4. The builder auto-fills the MQTT topics, sets the unit to "F" (or "C"), and guesses a reasonable min/max range based on the sensor's current value.
  5. Under Gauge Settings, change the Gauge Type to "Radial" and set the Color Mode to "Zones." Under the Advanced section, add color zones: green for comfortable (65–75F), amber for warm (75–85F), red for hot (85+).
  6. Under Window Geometry, set the position and size where you want the gauge on screen (e.g. X: 50, Y: 50, Width: 300, Height: 300).
  7. Click Preview & Deploy to go to Step 3.
  8. Select your kiosk from the preview device dropdown and click Start Preview. The gauge appears on the actual kiosk screen with the dark backdrop behind it.
  9. Go back to Step 2 (click "2 Configure" in the header or press Escape). Adjust the colors and size. Watch the kiosk update live after each change.
  10. When it looks right, go back to Step 3. Click Save Template and name it "Room Temperature Gauge" for future reuse.
  11. Select the target kiosk (or toggle batch deploy) and click Deploy Widget. The gauge is now live on the kiosk, reading real-time temperature data.

Widget Builder Walkthrough: Deploying a Clock to Every Screen

  1. Open the Widget Builder from any kiosk.
  2. Tap Clock in the Display category.
  3. Set Mode to "Digital", enable 24-Hour Format, and turn on Show Seconds.
  4. Set the window position to the top-right corner of the screen (e.g. X: 1520, Y: 20, Width: 380, Height: 100).
  5. Preview on one device to confirm it looks right.
  6. On Step 3, toggle "Deploy to all online devices".
  7. Click Batch Deploy. Every online kiosk gets the same clock widget in the same position.

Widget Builder Walkthrough: Thermostat Control from HA Climate Entity

  1. Open the Widget Builder and tap Gauge.
  2. In the Entity Picker, filter by "climate" and select your thermostat entity.
  3. The builder automatically configures a thermostat-style gauge with three pointers: a white needle for current temperature, an orange dot for the heat setpoint, and a blue dot for the cool setpoint. The publish payloads are pre-configured so dragging the setpoint pointers on the kiosk actually controls the thermostat.
  4. Preview it, adjust the size, and deploy.

The Command Center

The Command Center is an advanced control panel with 10 tabs covering every aspect of kiosk management. Open it from the action chip bar or the overflow menu. It is a 900x700 dialog organized by category:

System — Brightness and volume sliders with Set, Get, and Restore buttons. Take screenshots with or without confirmation. Request the device configuration or view command history. Use this when you need precise numeric control rather than the quick controls bar.

Windows — Manage individual windows. Switch between floating and tiling mode. Select a specific window from a dropdown list, then set its exact position, size, and opacity, or close, maximize, or bring it to front. The "Close All Windows" button clears everything at once.

Media — Create and control media elements. Set a URL, pick a type (video, audio, image), configure looping and autoplay, and play or pause existing media.

Widgets — Create widgets using forms for each type: gauges, charts, weather displays, clocks, calendars, alarmo panels, MQTT buttons, DLNA players, and more. Each form has the fields specific to that widget type.

States — Save the current screen layout as a named state, load a previously saved state, list all saved states, or export a state as JSON for backup. This is how you switch between different display configurations — for example, a "Lobby Welcome" layout during business hours and a "After Hours" layout at night.

Schedule — Set up commands to run at specific times.

Batch — Send multiple commands as a single batch operation. Useful for complex layout changes that involve creating several elements at once.

AI/Vision — Configure person detection and security camera features on kiosks that support them.

Alerts — Send alert notifications to the kiosk: info, success, warning, or error messages with customizable position, auto-dismiss timing, and sound.

Cache — Manage the kiosk's content cache.

Saving and Restoring Layouts

Screen states let you save the entire arrangement of a kiosk — every element's position, size, configuration, and content — and restore it later. This is useful for:

  • Switching between daytime and evening content.
  • Setting up event-specific displays and reverting afterward.
  • Keeping a known-good layout as a backup before making changes.

To save the current layout, open the Command Center, go to the States tab, type a name, and click Save. To restore it later, select it from the list and click Load. You can also export states as JSON to transfer between devices.

Screenshots

King Admin automatically requests a screenshot when you open a kiosk detail screen (if the device is online). The screenshot serves as the background in Screen View, so you can see what the actual display looks like. On Pico and other embedded targets that return an HTTP QOI image instead of MQTT base64 PNG, King Admin fetches and converts the image automatically.

To manually capture a fresh screenshot, tap "Take Screenshot" in the action chip bar or the quick controls bar. A toast confirms the request was sent.

To view screenshots in detail, tap "Screenshot Viewer" in the action chip bar. This opens a dialog with the full-resolution image, zoom controls (0.2x to 5x), metadata (timestamp, size), and a button to copy the raw image data to clipboard.

Remote Device Settings

The Remote Settings screen lets you configure the kiosk device itself — not just what is on screen, but how the device behaves. Open it from the gear icon in the graph view toolbar.

Settings are organized into sections that vary by device platform. Common sections include: - Security — PIN and lock configuration. - App Settings — General application behavior. - MQTT Settings — The device's broker connection parameters. - Feature Server — Integration with phone/server features. - Speech & AI — Voice assistant and AI configuration. - Media & Cameras — Media playback and camera settings. - Networked Audio — Audio networking options.

Each section can be edited through structured form fields or as raw JSON for power users. A dirty-state indicator warns you about unsaved changes before you navigate away.

Locking a Kiosk

To prevent users at the kiosk from interacting with the touchscreen, use the lock feature:

  1. Tap the Lock button in the view toolbar.
  2. Enter a PIN code.
  3. The device locks — touch interaction is disabled.

To unlock, tap the button again and enter the same PIN. The lock state is reflected in the toolbar with an animated icon.

Backing Up and Restoring Configuration

Export Config — Tap "Export Config" in the action chip bar. The app retrieves the device's full configuration and displays it as formatted JSON. Copy it to your clipboard or save it externally as a backup.

Import Config — Tap "Import Config" to open a JSON editor. Paste a previously exported configuration (or one you have hand-crafted) and click Apply. The app sends it to the device as a provisioning command. This is useful for cloning settings between devices or restoring a device to a known state.

Sending Raw MQTT Commands

For advanced users, the Raw Command dialog lets you send arbitrary JSON payloads directly to the device over MQTT. Open it from the action chip bar.

The dialog includes: - A scope toggle — System (sends to the device's system command topic) or Element (sends to a specific element's command topic, with a field for the element ID). - A template picker — A dropdown with dozens of pre-built command templates covering every documented MQTT command. Select a template and the JSON editor fills in with a ready-to-use payload that you can customize. - A JSON editor with syntax highlighting and validation. - A topic preview showing exactly where the command will be published. - A Send button to publish.

This is the escape hatch for anything that does not yet have a dedicated button in the GUI. The template picker makes it accessible even if you are not familiar with the raw MQTT command format.


Managing Cameras

Cameras in King Admin are RTSP surveillance cameras managed through the King Core 3 REST API. They support live viewing, AI-powered object detection, face recognition, audio event detection, speech transcription, recording, and RTSP re-export.

Adding a Camera

From the Home Dashboard, tap the floating action button (camera icon) in the bottom-right corner. This opens a 3-step wizard:

Step 1 — Connection. Enter a name for the camera (e.g. "Front Door" or "Parking Lot"), the RTSP URL (e.g. rtsp://192.168.1.100:554/stream1), and optionally a username and password if the camera requires authentication.

Step 2 — Test. The wizard shows the URL you entered and a "Test Connection" button. Click it to verify the stream is reachable. If successful, you see the stream's resolution, codec, and FPS displayed as info chips. If it fails, you see the error message with options to retry or go back and edit the URL.

Step 3 — Features. Toggle the capabilities you want: - Auto-start (on by default) — The camera starts automatically when Core 3 boots. - Object Detection (on by default) — YOLO-based detection that draws bounding boxes around people, vehicles, animals, and other objects. - Face Recognition — Identifies known faces. Requires object detection to be enabled. - Audio Transcription — Whisper speech-to-text from the camera's audio feed. - Audio Event Detection — Detects environmental sounds like barking, sirens, glass breaking, and alarms. - Recording — Records video to MP4 files on the server. You can optionally specify a custom recording path. - RTSP Export — Re-exports the camera stream as a standard RTSP URL that other systems (NVRs, VLC, etc.) can consume. Optional rotation (0, 90, 180, or 270 degrees).

A summary at the bottom shows your camera name, URL, and which features are enabled. Click "Create Camera" to finish. The camera appears on the Home Dashboard.

The Camera Detail Screen

Tap a camera card to open its detail screen. The layout is a single scrollable column, centered and capped at 800px wide:

At the top, the app bar shows the camera name and a colored state badge: green "Running," red "Stopped," amber "Starting" or "Reconnecting," or red "Error."

Below that, the live preview area takes up most of the screen — a 16:9 viewport showing either a periodically-refreshing snapshot or a live WebRTC stream (see below). Active feature badges appear in the top-left corner (AI, Face, STT, Audio, REC, RTSP). Detection overlays are drawn directly on top of the preview.

Below the preview, a controls bar contains the Start/Stop button and a row of feature toggle buttons for Detection, Faces, STT, Audio Detection, Recording, and RTSP Export. Each button is color-coded and shows whether the feature is currently active.

Further down, expandable panels show detailed information for each feature: detection results with class names and confidence scores, recognized faces, audio event history, transcription output, recording files, and RTSP export status.

Starting and Stopping a Camera

Tap the Start button (green) to begin capturing from the RTSP stream. The button shows a spinner during startup. Once running, it changes to a red Stop button. Stopping the camera disconnects from the RTSP stream and halts all AI processing.

Watching a Live Feed

The preview area supports two modes, toggled via a badge in the top-right corner of the preview:

Snapshot mode (default) — A JPEG snapshot refreshes every 3 seconds. This uses minimal bandwidth and works well for casual monitoring.

WebRTC mode — A real-time video stream with minimal latency. Switch to this when you need to see what is happening right now. WebRTC also enables audio playback (with a mute/unmute toggle) and two-way audio if the camera supports it.

AI Detection and Overlays

When object detection is enabled on a running camera, you see bounding boxes drawn over the live preview in real time:

  • Each detected object has a colored box (red for people, cyan for vehicles, violet for animals, green for furniture, etc.), a label showing the object class, and a confidence percentage.
  • The Object Detection panel (expandable below the controls) shows a scrollable list of current detections with precise coordinates.

When face recognition is also enabled: - Recognized faces show a green bounding box with the person's name and recognition confidence. - Unknown faces show a confidence-colored box. - The Face Recognition panel lists all detected faces with their recognition status.

Audio event detection, when enabled, listens for environmental sounds and displays recent events (e.g. "bark 94%," "siren 87%") in the Audio Events panel.

Audio transcription runs Whisper speech-to-text on the camera's audio feed, with status shown in the Transcription panel.

Two-Way Audio (Talkback)

When viewing a camera in WebRTC mode that supports two-way audio, a microphone button appears in the top-right of the preview. Tap it to start push-to-talk — the button turns green and your microphone audio is sent to the camera's speaker. Tap again to stop. This is useful for intercom-style communication through a doorbell or entry camera.

Ignore Zones

If there are areas of the camera frame that produce unwanted detections (a busy street visible through a window, a TV screen, a clock with moving hands), you can define ignore zones to suppress detections in those areas:

  1. Expand the Ignore Bounds panel below the preview.
  2. Click Add ignore area. An orange rectangle appears on the preview.
  3. Drag the rectangle to cover the area you want to exclude.
  4. Drag the corner handle to resize it.
  5. Detections that fall within the orange zone are filtered out.

You can add multiple ignore zones and delete them individually from the panel.

Recordings

When recording is enabled, the camera saves video as MP4 files on the Core 3 server. The Recording panel shows: - Whether recording is currently active or idle. - A list of saved recordings with filename, duration, and file size. - Per-recording actions: Download the file, Copy URL to clipboard, or Delete the recording (disabled for the actively-recording file).

The recording list refreshes automatically.

RTSP Export

When RTSP export is enabled, the camera stream is re-published as a standard RTSP URL through go2rtc. The RTSP Export panel shows the export URL. You can copy this URL and paste it into any RTSP-compatible viewer, NVR, or media player to watch the stream outside of King Admin.

Optional rotation (set during camera creation or edited later) rotates the exported stream by 90, 180, or 270 degrees.


Troubleshooting

Devices are not appearing on the Home Dashboard - Confirm your MQTT connection is established (the toast after login should say "Direct Mode" or "HA Addon Mode"). - Kiosk devices appear when they publish their status topics. If a device was powered off when you connected, it will appear when it comes online. - For cameras, verify that King Core 3's camera API is reachable. - Try pulling down on the device grid to force a refresh.

A device shows as offline even though it is running - King Admin uses a 45-second heartbeat timeout. If a device stops sending messages for that long, it is marked offline. - Stale retained messages with old timestamps are filtered out automatically. The device must send fresh messages to be marked online. - Check your MQTT broker logs for disconnect/reconnect events.

Cannot connect from the web browser - Your MQTT broker must have a WebSocket listener enabled. The standard MQTT TCP port (1883) does not accept WebSocket connections. - If the page is served over HTTPS, the broker must be reachable over WSS with a valid, browser-trusted TLS certificate. Self-signed certs will silently fail. - Check the browser's developer console (F12 → Console tab) for WebSocket connection errors.

HA Addon mode does not activate - Verify King Core 3 is installed, running, and healthy. - Check the Core 3 addon logs in Home Assistant for errors. - If the Core 3 probe fails, the app falls back to showing the direct login screen — you can still connect manually.

Commands are not reaching a device - If command signing is enabled, make sure the shared secret matches on both King Admin and the device. Try disabling signing temporarily to rule it out. - Check your MQTT broker's access control lists (ACLs) to make sure publish permissions are granted for the admin user.

Screenshots are not updating - The device must be online and responsive. Check the online/offline badge. - Try clicking "Take Screenshot" manually. - On very slow networks, screenshots (which are base64-encoded images) can take a moment to arrive.