# Create it. Publish it. Keep it current

> Canonical HTML: https://screenrig.ai/features/

Tell your agent what the screen should show. It builds it, publishes it to your Players and checks it plays.

[Set up your agent](https://screenrig.ai/docs/start.md) · [Free for up to 100 screens](https://screenrig.ai/pricing.md)

Agent session, restaurant screen:

> **You:** Put tonight’s dinner menu on the restaurant screen. Late menu at 10 pm.
> - `media generate`: dinner and late menus, 16:9
> - `playlist init`: late menu from 22:00, screen time
> - `screen publish`: playing on the restaurant screen
> - `screen screenshot`: dinner menu confirmed on the glass
> **Agent:** Published. The late menu takes over at 10 pm.

<a id="on-glass"></a>

## What can go on the glass?

Menus, welcome boards, live dashboards and custom kiosks, shown where they play:

- **Restaurant menus:** specials, scheduled for breakfast, lunch or dinner.
- **Workplace screens:** updates, video and web content together.
- **Hotel wayfinding:** today’s sessions and where to find them.
- **Self-service kiosks:** your own app; it supplies the interaction and its integrations.

<a id="primitives"></a>

## Five primitives, one canvas

Mix what you already have with what your agent makes. A page can layer primitives, with at most one stream, and an MP3 soundtrack plays underneath without a break at page changes.

- `image`: finished stills: menus, posters, slides
- `video`: one uploaded rendition per clip
- `stream`: live HLS feeds with an image fallback
- `iframe`: an existing public web page
- `application`: your own interactive web app

Under the pages, a playlist soundtrack plays MP3 tracks in order without a break at page changes. Pages can cue a named track when they appear.

Each primitive on glass, as a short silent loop:

- [`image` on a café menu board](https://screenrig.ai/static-resources/videos/loops/primitive-image-720-fd042241.mp4): finished stills, a menu and then a pastry promo, each made once as an image.
- [`video` in a hotel lobby](https://screenrig.ai/static-resources/videos/loops/primitive-video-720-bcdad930.mp4): one uploaded clip, playing to the end before the next page.
- [`stream` at an office all-hands](https://screenrig.ai/static-resources/videos/loops/primitive-stream-720-ee8c52e1.mp4): a live HLS feed on the wall, with an image fallback if it drops.
- [`iframe` in a station concourse](https://screenrig.ai/static-resources/videos/loops/primitive-iframe-720-0e796610.mp4): a public web page that allows embedding, live on the glass, here rolling departures.
- [`application` on a museum kiosk](https://screenrig.ai/static-resources/videos/loops/primitive-application-720-b0c4d4da.mp4): your own web app on its own origin; a visitor taps a fossil and the app opens its page.
- [Soundtrack in a boutique](https://screenrig.ai/static-resources/videos/loops/primitive-soundtrack-720-f921d653.mp4): a playlist setting, not a primitive; one MP3 track plays on while the pages change.

[See the playlist reference](https://screenrig.ai/docs/cli.md#cmd-playlist-create)

<a id="capabilities"></a>

## Everything a screen needs, run by your agent

Content, schedules, apps, Players, fleets and proof of what played.

<a id="takeover"></a>

### Dayparts and takeovers

Breakfast, lunch and dinner on the screen’s own clock. One `screen takeover` puts an announcement ahead of everything, then each screen returns to its schedule.

Give a screen a playlist schedule: breakfast, lunch and dinner playlists, each on its own days and hours in the screen’s timezone, with the assigned playlist in between. The server switches playlists within about a minute of each boundary, and Players need no update.

For an announcement, a launch or a drill, one `screen takeover` command puts a playlist ahead of everything on a screen or a tagged fleet, for up to 7 days or until cleared. When it ends, each screen returns to its schedule on its own.

<a id="motion"></a>

Inside a playlist, schedule pages with date bounds and recurring day-and-time windows in the screen’s IANA timezone. Every playlist keeps an unscheduled page for when nothing else applies. Crossfade or swipe between pages, add entrance motion, and advance on a duration, at the end of a video, or when an app asks.

[Schedule and takeover commands](https://screenrig.ai/docs/cli.md#schedules)

<a id="alerts"></a>

### Alerts take over the glass

Connect Everbridge, Rave, Alertus or an IPAWS relay once. Each CAP alert takes the screens over with a full-screen warning, and a cancel or all-clear gives them back.

Your agent creates a trigger for a tag or a list of screens and hands you its URL, username and password. Enter them in your emergency notification system as a CAP 1.2 destination with HTTP Basic authentication. A project can have up to 20 triggers.

Each alert becomes a full-screen card in the colour of its severity, with the event, headline, description and instruction, on every targeted screen with a default playlist. It holds until the alert’s own expiry, or a default you choose from a minute to 7 days. An update redraws the card; a cancel or all-clear returns each screen to its schedule. Exercises carry an EXERCISE banner, and test, system and draft messages are ignored.

Your agent runs `triggers test` for a 60-second exercise on the real screens, reads what each alert did with `triggers show`, and ends one early with `triggers clear`.

[CAP alert commands](https://screenrig.ai/docs/cli.md#triggers)

<a id="fleet-actions"></a>

### Tag it once, run the whole fleet

Assign, reload, toast or retag every tagged screen in one request, then screenshot each one. Every screen reports its own result, so one failure doesn’t stop the rest.

Give each screen up to 16 tags, such as `Lobby` or `Floor2`. Your agent lists screens by tag, then assigns a playlist, reloads, sends a toast or retags every matching screen in one request for up to 500 screens, billed as one API request whatever the fleet size.

Each screen reports its own result, so a failure on one screen is named for that screen while the rest go ahead. To publish to a fleet, your agent creates the playlist once, assigns it by tag, then captures a screenshot from every tagged screen.

[Fleet commands](https://screenrig.ai/docs/cli.md#fleet-results)

<a id="fleet"></a>

### Proof, not promises

Publishing says whether the Player is playing the new content or only has it assigned, and why. Screenshots and per-play records confirm it.

Your agent requests a screenshot from one screen or every screen in a tagged fleet, reviews daily playback aggregates and follows project events. Publishing a screen reports whether the Player is playing the new content or only has it assigned, and why; a screenshot and playback evidence confirm what the Player showed.

Every visible start of an image or video is a play record. Your agent exports plays as CSV or JSON for any range up to 31 days, filtered by screen, media or tag, and daily totals as CSV; the dashboard exports the same files. Plays are kept at least 30 days.

[Watch: How your agent knows it’s playing](https://screenrig.ai/videos/verified-playback/) — 1:18, Meta Muse. The agent publishes, then screenshots the glass, catches a cut-off menu row and fixes it before anyone notices.

[Follow the agent workflow](https://screenrig.ai/docs/agents.md)

<a id="presence"></a>

### Know when a screen drops

Offline, back online and health changes arrive as events, free, and signed webhooks can wake your agent before anyone notices a dark screen.

The project event log records `screen.offline` once a screen has been offline for 60 seconds and `screen.online` when it returns, so a quick reconnect stays quiet. Your agent watches both on the listen stream at no charge. The dashboard’s activity log shows them next to the screen, and its Screens view filters by tag.

<a id="health"></a>

Every Player reports uptime, memory, CPU load, temperature, display connection, network and recent crashes every fifteen minutes, and at once when the display connection or power changes. Your agent sees it with `screen show`, and the screen list flags a disconnected display, a hot device, repeated crashes or a silent Player. Changes arrive as `screen.health_changed` events on the listen stream and through webhooks, free like every screen event.

<a id="webhooks"></a>

Register up to 10 HTTPS endpoints and screenRIG POSTs matching project events to them, signed with HMAC-SHA256: a screen going offline, a kiosk event, a playlist change. Your receiver checks the signature and wakes an agent, a bot or your own service. Failed deliveries retry with backoff for 24 hours, and every attempt is in a delivery log. Deliveries are metered like listen-stream events, and the same events stay free.

[Watch project events](https://screenrig.ai/docs/cli.md#events) · [Webhooks](https://screenrig.ai/docs/cli.md#webhooks) · [Device health](https://screenrig.ai/docs/cli.md#device)

<a id="applications"></a>

### Apps with real state

Package a static web app and it runs on its own isolated origin under `apps.screenrig.ai`. Your playlist pins that release until you update it.

The injected `window.screenrig` runtime lets a controller app request the next page and emit named events your agent can act on. Application key/value state persists across releases, so your agent can update data without repackaging the app. Use `emit` for application events and `log` for diagnostics.

When a key changes, an app that listens with `kv.onChange` hears it within seconds on every screen and redraws. A webhook URL lets any other system, such as Zapier, Make, a point of sale or a spreadsheet script, write a key with one HTTP POST.

[Explore the browser SDK](https://screenrig.ai/docs/sdk.md) · [Push data from another system](https://screenrig.ai/docs/sdk.md#kv-webhooks)

<a id="players"></a>

### Keeps playing offline

Each Player caches what it downloads and replays it locally. Live streams need a connection, but their image fallback can display offline. Live web pages and connected apps can still need a network.

Players: the Player web app (PWA), Android on Google Play, Amazon Signage Stick, Apple TV, macOS, Windows, Linux and Raspberry Pi packages, Samsung Smart Signage (Tizen), and BrightSign. Every available Player shows a pairing code your agent uses to connect the screen.

[Download the Player](https://screenrig.ai/downloads.md) · [Get it on Google Play](https://play.google.com/store/apps/details?id=ai.screenrig.player) · [Install the Player](https://screenrig.ai/docs/players.md)

<a id="compose"></a>

### Slides rendered locally, free

For slide-deck-like pages, your agent writes editable JSON, renders region PNGs and a `manifest.json`, inspects them and iterates on its own machine. The Player receives the finished media. Local composition is unbilled.

[Read the authoring guide](https://screenrig.ai/docs/compose.md)

<a id="power"></a>

### Reboot and display power

Your agent reboots a device remotely, or turns its display on or off now, on one screen or a tagged fleet. A display schedule sets the hours the display is on, and the Player applies it on the device, even offline.

Depending on the device, the Player switches the display with HDMI-CEC, DDC/CI, the backlight or an on-screen blackout, and reports the power it achieved.

[Reboot and display commands](https://screenrig.ai/docs/cli.md#cmd-screen-reboot)

<a id="iframes"></a>

### Your existing pages, on the wall

Use an iframe for a public HTTPS page that allows embedding; the page stays hosted by its owner. Publish checks HTTPS and rejects private addresses; it does not check whether the target allows framing. A blocked page fails at runtime and is recorded in the event log. An iframe cannot control the playlist or emit application events.

<a id="media"></a>

### One library, tagged by purpose

Upload media you already have or generate a complete still through the bundled CLI; either lands in the project media library, ready for a playlist. Each object is stored as one rendition, with no per-device fallback. Tags help your agent find and update content by purpose.

[CLI media commands](https://screenrig.ai/docs/cli.md#media)

<a id="dashboard"></a>

### A dashboard for the people in charge

One personal login works across your projects. Use the dashboard’s project switcher to choose a project, then see its screens, media, playlists, applications, playback, usage and activity. The dashboard also supports screenshots and documented removal operations. Content creation and playlist editing stay with the agent and bundled CLI.

The unified Invitations page manages invitations for project members and ad buyers. Member invitations arrive by email by default and last 7 days; an explicitly requested member link lasts 24 hours. Ad-buyer invitations are email-only. Invited buyers see the seller’s inventory and rates in the Marketplace.

Accept an invitation by creating a passkey, or sign in with your existing login. Need to replace your sign-in method? A sign-in reset arrives only by email and lasts 1 hour. The dashboard URL is ordinary navigation, not a login credential.

[Open the dashboard](https://screenrig.ai/dashboard/)

<a id="authoring"></a>

## How do I put a page on a playlist?

Your agent picks the path that fits the content. Animation doesn’t change the choice.

1. **Upload what you have:** Existing image, video or music goes up with `media upload`; MP3 tracks become the soundtrack.
2. **Generate a finished design:** Posters and menus are one `media generate` call, with every fact and all the copy in the prompt.
3. **Compose slides locally:** Tables and measured layouts use unbilled `compose render`, checked before upload.
4. **Go live:** Live video, a web page or an app is a primitive: `stream`, `iframe` or `application`.

[Choose an authoring path](https://screenrig.ai/docs/compose.md)

<a id="primitive-support"></a>

## Primitive support by platform

Compare the five content primitives across Player platforms.

| Player platform | Image | Video | Stream | Iframe | Application |
| --- | --- | --- | --- | --- | --- |
| Web / PWA | Yes | Yes | HLS | Yes | Yes |
| Android (`standard`) | Yes | Yes | HLS + multicast¹ | Yes | Yes |
| Android (`amazon` flavor) | Yes | Yes | HLS + multicast¹ | Yes | Yes |
| Linux (Qt, x86_64 artifact) | Yes | Yes | HLS + multicast¹ | Yes | Yes |
| macOS | Yes | Yes | HLS | Yes | Yes |
| Apple TV / tvOS | Yes | Yes | HLS | No | No |
| Windows | Yes | Yes | HLS | Yes | Yes |
| Samsung Smart Signage (Tizen) | Yes | Yes | HLS | Yes | Yes |
| BrightSign | Yes | Yes | HLS | Yes | Yes |

¹ Direct UDP/MPEG-TS multicast is optional and must be enabled on Android or Qt. It requires a network that carries the multicast group to the Player. Other Players use HLS; a multicast source can include an HLS alternative.

Apple TV supports images, video, and HLS streams. It cannot display iframe web pages or packaged web applications. A playlist containing either web primitive is rejected; the last accepted playlist stays active.

Every Player platform above also plays the playlist soundtrack. The Player web app starts it once the browser allows sound; see [Soundtracks](https://screenrig.ai/docs/players.md#soundtrack).

<a id="advertising"></a>

## Sell advertising on your screens

Advertising, by invitation. Invite businesses to buy ad breaks on the screens you operate, through the same plugin and dashboard.

### Offer your inventory

Opt a screen in and define ad slots. An adslot page in a playlist is the ad break; every other page keeps playing.

### Invite your buyers

Advertisers join by emailed invitation and buy from your Marketplace. They need no screen.

### Get paid per completed play

Set a rate per 15 seconds of completed playback. Skipped or interrupted plays aren’t billed, and an empty slot is skipped rather than shown blank.

Earned credits cover that project’s screenRIG usage automatically. The serving fee is 30% on Standard, 20% on Premium, and 10% on Enterprise. [Advertising rates and serving fees](https://screenrig.ai/pricing.md#advertising) · [Buying and selling setup](https://screenrig.ai/docs/start.md#signage-buying-or-selling)

<a id="pricing"></a>

## Free. Not a trial

Standard is the whole product, free for up to 100 screens. Screens replay what they download from their own storage, so a looping playlist costs nothing to keep running, and most fleets never use up the monthly allowance. Paid plans add more screens, people and contracts, never features. [See what fits in the free allowance](https://screenrig.ai/pricing.md#free-examples)

<a id="next-steps"></a>

## Put your next idea on a screen

Install the official plugin, set up the Player, then ask your agent to publish and verify the result.

[Set up your agent](https://screenrig.ai/docs/start.md) · [Read agent context](https://screenrig.ai/llms-full.txt)
## Cards first. An app when you need more.

Place a ready-made card for the weather, a menu, a queue or the score. It is live on every Player, in eight themes, full-screen, in a region or as a small chip in the corner. When the screen has a real job (check-in, orders, a factory line) your agent builds a custom application for it instead.

[See Apps](https://screenrig.ai/apps/) · [Build a custom app](https://screenrig.ai/apps/#custom-applications) · [Browse the cards](https://screenrig.ai/apps/#cards)

<!-- featured-cards:begin -->
[Weather](https://screenrig.ai/docs/cards/weather/)

![Weather](/cards/weather/v1/screenshots/canvas-bloom.webp?sha=b818dcf3c8fe737feac2b5f03a1db51b7a34a9c644901e45a79de130c744d5ac)

[Menu board](https://screenrig.ai/docs/cards/menu/)

![Menu board](/cards/menu/v1/screenshots/canvas-bloom.webp?sha=03c2a71c293deaba11936fde1946f10c202cf81e513ce7301493dd615ca5b2b1)

[Gauge](https://screenrig.ai/docs/cards/gauge/)

![Gauge](/cards/gauge/v1/screenshots/canvas-bloom.webp?sha=ec387a26a1ca12ce47e0e491201ba5dd1be5a9e4b6ce8e7d5196692131edc222)

[Clock](https://screenrig.ai/docs/cards/clock/)

![Clock](/cards/clock/v1/screenshots/canvas-bloom.webp?sha=b0afe34cf41d147967dcd1676c7e308108f74edc056ad99ee7fa945922067e05)

[Promo](https://screenrig.ai/docs/cards/promo/)

![Promo](/cards/promo/v1/screenshots/canvas-bloom.webp?sha=c940093911e9fa30578d84d139d62b0ef714ef4379c196ab7f378120e248e936)

[Departures](https://screenrig.ai/docs/cards/departures/)

![Departures](/cards/departures/v1/screenshots/canvas-bloom.webp?sha=beccdb00a58371898d2ce4ceaaccb528d98354061401be3442d885a0bf24d90b)

[Browse all cards](https://screenrig.ai/apps/#cards)
<!-- featured-cards:end -->
