Dokumentation

Wählen Sie den richtigen Erstellungsweg

Bestehende Medien hochladen, ein fertiges Standbild generieren, eine eingebaute Karte für Live-Text platzieren oder einen Tag-Filter die Medien auswählen lassen. Diese Anleitung erklärt die Wahl und die Befehle.

Zusehen, wie es gebaut wird

Film / Kiosk-App mit dem SDK erstellen

3:07

Ein Besucher tippt an einem Lobby-Check-in-Kiosk unter einer Willkommenswand.

Einige Bildschirme sind Apps, keine Standbilder. Claude Code schreibt eine Kiosk-App, lädt sie als unveränderliche Version mit app upload hoch und pinnt sie in einer Playlist für einen Kiosk und eine Willkommenswand. Kapitel und Transkript →

Verwenden Sie screenrig nach der Sitzungseinrichtung auf Start.

Wählen Sie den Inhalts-Pfad

Seite Werkzeug
Fertiges Bild oder Video media upload
Fertiges Poster, Menü oder Ankündigung media generate mit dem gesamten Text im Prompt
Geliefertes Artwork mit Text darüber media upload das Artwork, dann eine eingebaute Karte auf derselben Seite
Text, Tabelle, Menü oder Tafel, die bearbeitbar bleiben Eine eingebaute Karte: card create, in einer Playlist platziert
Live-Video, Stream, iframe oder Anwendung Playlist-Primitiven
Ein Dashboard hinter einer Anmeldung Eine BI-Web-Verbindung und -Ansicht, platziert in einem iframe-Primitiv
Medien, die sich ändern, wenn Dateien hinzugefügt oder getaggt werden Ein dynamischer Selektor (tag, folder oder all), geprüft mit media selector-preview
Hintergrundmusik über die gesamte Playlist media upload eine MP3, dann der Soundtrack der Playlist audio

Die Generierung legt Artwork und Schrift zusammen fest, also gehört der gesamte Text in den Prompt. Karten zeichnen ihren Text im Player, sodass ein geändertes Wort oder eine geänderte Zahl kein neues Standbild braucht. Gelieferte fertige Assets benötigen keine Generierung. Animation allein erfordert weder das eine noch das andere.

Ein fertiges Standbild erzeugen

Der Agent sendet eine Eingabeaufforderung plus aspect_ratio und quality. screenRIG gibt ein med_… Medienobjekt im Medien-Store des Kontos zurück. Der Aufrufer lädt die Bytes nicht erneut hoch. Originalbytes nur zum Prüfen abrufen; ansonsten die med_… Referenz in einer Playlist behalten.

Ihre eigene media upload bleibt gültig. Nicht generieren, wenn die Datei bereits vorhanden ist. Live-Video, Stream, iframe- und Webapp-Seiten sind Playlist-Primitiven, keine generierten Standbilder.

Qualität ist low, medium, oder high (Standard medium). Seitenverhältnis ist 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, oder 2:3 (Standard 16:9). --quality ändert, wie detailliert das Standbild ist und wie viele Tokens es verwendet:

Qualität wann
low Unwichtige generierte Standbilder
medium Standard; für die meisten Fälle empfohlen
high dichter Text / komplexe Poster
media generate --prompt TEXT [--aspect-ratio RATIO] [--quality QUALITY] [--tag TAG]
Konsole
screenrig media generate --prompt "A 16:9 restaurant menu poster for North Lobby Cafe. Dark walnut, gold type. Title NORTH LOBBY CAFE. Items: Espresso $4, Cortado $4.50, House Blend $3. Footer Open 7am to 7pm. Typeset every line of copy in the image." --aspect-ratio 16:9 --quality high --tag LobbyMenu

Der Umschlag meldet eine med_…-ID. Er gibt nie Bilddaten aus.

{
  "ok": true,
  "data": {
    "id": "med_01EXAMPLEGENERATED0000000",
    "media_id": "med_01EXAMPLEGENERATED0000000"
  }
}

Soundtrack hinzufügen

Eine Playlist kann einen Soundtrack enthalten: eine geordnete Liste von MP3-Tracks, die kontinuierlich spielt, während sich die Seiten ändern. Seitenübergänge stoppen, starten oder überblenden die Musik nie. Der Soundtrack ist eine Playlist-Einstellung, kein siebtes Primitive, daher hat er kein Rechteck oder eine Ebene auf der Leinwand.

Jeden Track mit media upload hochladen. MP3-Dateien werden unverändert hochgeladen; WAV, AAC, M4A, OGG und FLAC werden zuerst in MP3 konvertiert. Jeder Track wird zu einem audio Medienobjekt mit einer med_… ID und einer Dauer.

Konsole
screenrig media upload ./intro.mp3 --tag LobbyMusic
screenrig media upload ./bed.wav --tag LobbyMusic

Benennen Sie die Tracks im Playlist-audio-Mitglied; es enthält 1 bis 128 Tracks. Tracks spielen nacheinander, ohne Pause. loop (Standard true) startet nach dem letzten Track wieder beim ersten; volume (Standard 1, von 0 bis 1) skaliert die eigene Lautstärke des Players.

json
{
  "name": "Lobby",
  "audio": {
    "tracks": [
      { "id": "intro", "media_id": "med_01EXAMPLEINTRO000000000" },
      { "id": "bed", "media_id": "med_01EXAMPLEBED00000000000" }
    ],
    "loop": true,
    "volume": 0.8
  },
  "pages": [
    { "id": "welcome", "audio_cue": { "track": "intro", "restart": true } },
    { "id": "menu" }
  ]
}

Eine Seite kann eine optionale audio_cue tragen. Wenn diese Seite erscheint, wechselt der Player zum benannten Track von dessen Anfang; wenn dieser Track bereits spielt, startet er nur neu, wenn restart true ist. Die Sequenz setzt sich dann vom markierten Track fort. Markierungen sind Hinweise: Ein Player wendet sie mit kurzem Überblenden an oder überspringt sie, wenn der Track nicht bereit ist. Seiten ohne Markierung lassen die Musik unberührt. Seitenfelder außer id und audio_cue sind im obigen Beispiel ausgelassen.

Das Ersetzen einer Playlist ersetzt auch deren Soundtrack; lassen Sie audio weg, um ihn zu entfernen. Videos auf der Leinwand bleiben stumm, sodass der Soundtrack der einzige Ton ist, den ein Bildschirm abspielt.

Eine Seite an eine Spur binden

Für ein Album oder Buch mit einer Seite pro Titel oder jede Seite, die genau so lange dauert wie ein Titel, binden Sie die Seite an ihren Titel.

Setzen Sie die Seite advance auf { "mode": "audio_end" }. Die Seite wendet ihr audio_cue an, wenn sie erscheint, wie jeder Cue, und endet, wenn dieser Titel endet, so wie eine media_end-Seite mit ihrem Video endet. Die Seite muss ein audio_cue tragen und die Playlist einen audio-Soundtrack. Bild- und Videoprimitive folgen den duration-Regeln: kein dwell_ms, und one_at_a_time: true bei jedem dynamischen Selektor (all, tag, folder oder ids mit mehr als einer ID), auch wenn er heute nur einem Objekt entspricht. Ein stream-Primitive benötigt weiterhin eine duration-Seite, und eine Anwendung auf der Seite ist niemals deren Steuerung. max_ms ist ein optionaler Sicherheitshinweis; der Server setzt die Frist anhand der Titellänge, daher lassen Sie ihn weg. Wenn der Player den Titel nicht abspielen kann, dauert die Seite dennoch die Titellänge.

Setzen Sie cued auf true im audio-Mitglied, um den Soundtrack nach jedem Titel zu stoppen. Ein vorgemerkter Titel wird nur abgespielt, wenn eine Seite audio_cue ihn startet. Er spielt unter allen folgenden normalen Seiten weiter, bis er endet, und dann ist der Soundtrack still bis zum nächsten Cue, sodass eine Seite und ihr Titel gebunden bleiben, mit beliebig vielen normalen Seiten dazwischen. loop hat keine Wirkung auf einen vorgemerkten Soundtrack, und cued ist standardmäßig false.

json
{
  "name": "Album",
  "audio": {
    "tracks": [
      { "id": "song1", "media_id": "med_01EXAMPLESONG1000000000" },
      { "id": "song2", "media_id": "med_01EXAMPLESONG2000000000" }
    ],
    "cued": true
  },
  "pages": [
    { "id": "song1-cover", "advance": { "mode": "audio_end" }, "audio_cue": { "track": "song1", "restart": true } },
    { "id": "interlude", "advance": { "mode": "duration", "after_ms": 8000 } },
    { "id": "song2-cover", "advance": { "mode": "audio_end" }, "audio_cue": { "track": "song2", "restart": true } }
  ]
}

Seitenfelder außer id, advance und audio_cue sind im obigen Beispiel ausgelassen.

Karte für Live-Text platzieren

Eine eingebaute Karte zeichnet Text, ein Menü, eine Tabelle, eine Uhr oder ein Messgerät im Player selbst, sodass der Text bearbeitbar bleibt und ein neuer Wert jeden Bildschirm ohne neues Standbild erreicht. cards list zeigt die Typen, card create erstellt eine Instanz, und die Playlist platziert sie als Primitive card. card data put schreibt ihre Live-Werte. Karten listet jeden Typ und jedes Layout auf.

Konsole
screenrig cards list
screenrig card create --type gauge --file gauge-params.json
screenrig card data put crd_EXAMPLE --file gauge-data.json

Ein Dashboard hinter einer Anmeldung anzeigen

Eine Web-Verbindung meldet sich bei einer Website an wie eine Person, mit einem Dienstkonto, und eine Web-Ansicht zeigt eine Seite davon. Sie eignet sich für Dashboards in Salesforce, Looker Studio, Datadog, HubSpot und jeder anderen Website ohne öffentlichen Link. Ein Browser am Rand von screenRIG öffnet die Seite angemeldet, und der Player zeigt ein Bild davon, das alle refresh_s Sekunden neu gezeichnet wird (60 bis 86.400, standardmäßig 300). Alle Bildschirme gleicher Größe teilen ein Bild, sodass mehr Bildschirme keine weiteren Anmeldungen verursachen, und ein Bild wird nur gezeichnet, solange die Playlist eines Bildschirms die Ansicht zeigt. Verbindungen und Ansichten für Grafana, Power BI und Tableau funktionieren genauso und stehen in der API-Referenz.

  1. Legen Sie ein Dienstkonto an der Website an, das nur die Dashboards lesen kann, die Ihre Bildschirme zeigen. Jede Erfassung meldet sich damit an.
  2. Legen Sie die Verbindung an mit kind web und den Einstellungen unten. Das Passwort ist secret.
  3. Legen Sie eine Ansicht an für eine Seite: ihre https-Adresse als url und, als wait_for, ein CSS-Selektor eines Elements, das nur erscheint, wenn die Seite angemeldet und bereit ist, sodass eine Anmeldeseite abläuft, statt gezeichnet zu werden. clip zeichnet nur den Teil der Seite, den ein Selektor benennt, und wait_ms (bis zu 10.000) wartet auf spät ladende Diagramme.
  4. Platzieren Sie die embed_url der Ansicht in einem iframe-Primitiv mit content_fit fill.
json
{
  "kind": "web",
  "name": "Sales dashboard",
  "config": {
    "login_mode": "auto",
    "login_url": "https://login.example.com/sign-in",
    "username": "screens@example.com"
  },
  "secret": "ACCOUNT_PASSWORD",
  "totp_secret": "AUTHENTICATOR_KEY"
}
json
{
  "connection_id": "bic_01EXAMPLECONNECTION0000",
  "name": "Sales this week",
  "url": "https://app.example.com/dashboards/sales",
  "refresh_s": 300,
  "wait_for": "#sales-total"
}
EinstellungBedeutung
login_modeauto füllt das Formular unter login_url mit username und dem Passwort aus. steps führt Ihr eigenes Skript aus. none meldet sich nirgends an: Die Verbindung zeigt Seiten mit ihren Cookies oder ohne
login_urlDie https-Adresse der Anmeldeseite der Website, auf einem öffentlichen Host. Erforderlich für auto und steps
usernameDer Benutzername des Dienstkontos, für auto und steps
stepsBis zu 30 Schritte: goto (url), fill (selector, value), click und wait_for (selector), press (value ist eine Taste wie Enter, mit optionalem selector, um zuerst den Fokus zu setzen) und wait_ms (ms). Ein Wert darf {{username}}, {{password}} und {{otp}} enthalten: Schreiben Sie den Platzhalter, nie das Passwort oder einen Code
secretDas Passwort. Erforderlich für auto
totp_secretFür ein Konto mit Authenticator-App: der Base32-Schlüssel, den die Website anzeigt (16 bis 128 Zeichen, Leerzeichen erlaubt), oder seine otpauth://totp/...-Adresse, die SHA256 oder SHA512, 6 bis 8 Ziffern und eine Periode von 10 bis 120 Sekunden festlegen kann. screenRIG berechnet den Code auf seinem Server und sendet nur den Code
cookiesEin aus einem angemeldeten Browser exportierter Cookie-Satz, bis zu 100 Cookies: name, value, domain (.example.com für jede Subdomain), path, expires (Unix-Sekunden, 0 für ein Sitzungs-Cookie), httpOnly, secure und sameSite

Das Passwort, der TOTP-Schlüssel und die Cookies stehen neben config, werden versiegelt gespeichert und nie wieder angezeigt: Ein Lesezugriff sagt, ob jedes gesetzt ist. Ein leeres secret oder totp_secret oder cookies: [] entfernt es.

  • Cookies kommen zuerst. Die Verbindung hält einen versiegelten Cookie-Satz: den eingefügten, dann die Cookies, die jede Erfassung zurückgibt. Eine Erfassung sendet den Cookie-Satz und keine Zugangsdaten und meldet sich nur an, wenn es keinen Satz gibt oder die letzte Erfassung eine Anmeldeseite erreicht hat. Eine Website, die ihre Sitzung außerhalb von Cookies hält, meldet sich bei jeder Erfassung an, geben Sie ihrer Ansicht also ein langes refresh_s.
  • Das Passwort geht nur an die Anmeldeseite. Es wird bei login_url und in den goto-Schritten eingegeben, nie in die Adresse einer Ansicht. Eine Adresse zu einem von beiden hinzuzufügen, verlangt das Passwort in derselben Anfrage, sodass ein Mitglied, das das Passwort nicht lesen kann, es nicht auf eine eigene Seite lenken kann.
  • Das Konto ist geschützt. Eine abgelehnte Anmeldung (bi_web_login_failed oder bi_web_otp_required) wartet 5 Minuten, dann 15, 60 und 120, und die fünfte in Folge stoppt die Verbindung, bis Sie ihre Zugangsdaten oder Anmeldeeinstellungen ändern, sodass in der ersten Stunde höchstens 3 Versuche laufen. Eine Anmeldung, die anders endet (Zeitüberschreitung, Sperre, eine Seite, die sich nicht öffnen ließ), wartet 15 Minuten. Verwenden Sie ein schreibgeschütztes Dienstkonto.
  • Manche Websites lassen sich nicht skripten. Eine Website, die Anmeldungen auf einem Telefon genehmigt, Geräte prüft oder ein CAPTCHA zeigt, braucht einen Cookie-Satz (login_mode none) oder ein Dienstkonto, das die Website ausnimmt.

Der Player behält das letzte gute Bild, während eine Erfassung fehlschlägt, und der Status der Ansicht trägt einen dieser Codes:

CodeBedeutung
bi_web_login_failedDie Website hat die Anmeldung abgelehnt: Korrigieren Sie Benutzername, Passwort, TOTP-Schlüssel, login_url oder die Schritte
bi_web_otp_requiredDie Website wollte einen Code, den die Verbindung nicht liefern konnte
bi_web_session_expiredEine Anmeldeseite wurde angezeigt. Mit auto oder steps meldet sich die nächste Erfassung an; bei reinen Cookies fügen Sie einen neuen Cookie-Satz ein
bi_web_login_pausedEine Anmeldung wartet das Ratenlimit ab, die Verbindung ist gestoppt, oder eine andere Erfassung meldet sich an
bi_web_timeoutDie Seite wurde nicht geladen: Setzen Sie wait_for oder wait_ms
bi_web_navigation_failedDie Seite ließ sich nicht öffnen
bi_web_blockedDie Website hat den Renderer mit einer Bot-Prüfung oder einem CAPTCHA blockiert
bi_upstream_unavailableDer Renderer hat nicht geantwortet

screenrig bi connection test ID meldet sich an und berichtet das Ergebnis. Die session einer Verbindung sagt, wie es um ihre Cookies und ihre Anmeldung steht: idle, active, login_needed, paused, stopped oder expired.

Tag-Filter und Wiedergabe-Batches

Medien tragen bis zu 32 eindeutige Tags, jeweils 1–32 Buchstaben oder Ziffern. Ersetzen Sie den gesamten Satz mit screenrig media update med_ID --tags Summer,Drinks. --tag Summer ersetzt ihn durch ein Tag; --clear-tag löscht alle Tags. media list --tag Summer stimmt mit Mitgliedschaft irgendwo im Satz überein. Tags sind case-sensitiv und niemals Autorisierung.

Ein dynamischer Selektor kann ein tag oder ein tags Filterobjekt verwenden:

{
  "by": "tag",
  "tags": { "all": ["Summer", "Drinks"], "any": ["Lobby", "Patio"], "none": ["Expired"] },
  "order": "random",
  "one_at_a_time": false,
  "batch_size": 3
}

all erfordert alle aufgelisteten Tags, any erfordert mindestens einen, und none schließt alle aufgelisteten Tags aus. Vorhandene Gruppen werden mit UND kombiniert; ausgelassene Gruppen setzen keine Bedingung. Mindestens eine nicht-leere Gruppe angeben. Jede Gruppe akzeptiert bis zu 32 eindeutige Tags. tag und tags schließen sich gegenseitig aus. Ein none-nur-Filter wählt alle bereiten Medien dieses Primitivs außer den ausgeschlossenen Tags aus. Bildselektoren wählen Bilder und Videoselektoren Videos aus.

Der Kandidatenpool enthält bis zu 1.024 bereite Medien pro Selektor, mit 1.024 Medienreferenzen im gesamten Loop-Snapshot. Ein größeres Match führt zu einem Fehler; verengen Sie die Filter. batch_size ist ein separates Limit von 1–1.024 Elementen pro Seitenbesuch. Auf einer media_end-Seite spielt one_at_a_time: false die nächste Charge in der Reihenfolge ab; das Weglassen von batch_size spielt den verbleibenden Durchgang ab. one_at_a_time: true spielt ein Element pro Erscheinung und erlaubt nur eine weggelassene Chargengröße oder batch_size: 1. Dauer, Anwendung und audio_end-Seiten erfordern one_at_a_time: true. Bilder auf media_end erfordern ebenfalls dwell_ms; Videos können auf dieser Seite nicht in einer Schleife abgespielt werden.

Der Player löst bei jedem Start der Playlist und an jeder Schleifenbegrenzung alle dynamischen Medienprimitive in einer Anfrage auf. Die Mitgliedschaft ist während der Schleife eingefroren. Hochladungen, Entfernungen, Tagging-Änderungen und Verfügbarkeitsgrenzen erzeugen das Manifest nicht neu. Beim nächsten Aktualisieren verlassen entfernte oder neu ausgeschlossene Elemente die Warteschlange; neue Übereinstimmungen treten bei Abschluss des aktuellen Durchlaufs bei. Eine letzte Charge kann weniger als die angeforderte Anzahl enthalten; sie füllt nicht aus dem nächsten Durchlauf auf. Die Dateinamenreihenfolge sortiert nach Dateiname, dann Medien-ID. Die Zufallsreihenfolge mischt einmal pro vollständigem Durchlauf und erhält die verbleibende Reihenfolge über Schleifenaktualisierungen. Die gewichtete Reihenfolge folgt ihren Gewichten, siehe unten. Der Cursor ist lokal für Bildschirm, Playlist, Seite und Primitive, bleibt über Neustarts erhalten und wird bei Änderung von Filter, Reihenfolge oder Batch-Policy zurückgesetzt. Die Offline-Wiedergabe verwendet den letzten erfolgreichen Schnappschuss. Leere Übereinstimmungen überspringen das Primitive und jede resultierende leere Seite.

Speichern Sie das obige Selector-Objekt als selector.json und prüfen Sie dann den aktuellen Kandidatenkatalog vor der Veröffentlichung:

screenrig media selector-preview selector.json --primitive video

Die Vorschau gibt matched_count zurück, dateinamegeordnet candidates mit Medien-IDs und Tags sowie die normalisierte selector-Richtlinie. Bei zufälliger Reihenfolge zeigt sie den Pool und die Shuffle-Richtlinie; sie wählt nicht das Shuffle des Players, setzt keinen Cursor vor, erstellt keine Wiedergabeberechtigung und ändert kein Manifest. Bei gewichteter Reihenfolge gibt sie für jeden Kandidaten weight und share_percent sowie cycle zurück. --rect WxH (API rect: {width, height}) ist die Größe des Slots und ist mit fit: "aspect" erforderlich; die ausgeschlossenen Treffer stehen in excluded mit dem Grund aspect_mismatch. Bildselektoren übergeben --primitive image. Die API ist POST /api/selectors/preview mit { "primitive": "video", "selector": ... }. Sie verwendet das authentifizierte Projekt und dieselben Übereinstimmungsregeln wie die Wiedergabe. Katalogänderungen nach der Vorschau werden beim nächsten Schleifenende der Wiedergabe berücksichtigt.

Der statische Bundle-Export friert dynamische Übereinstimmungen als exakte IDs ein. Er bewahrt die Wiedergabe einzeln oder komplett; eine begrenzte Laufzeitsequenz mit batch_size und one_at_a_time: false erfordert vor dem Export das Entfernen dieses Feldes oder die Auswahl expliziter IDs. Dies verhindert das stille Verlieren eines Laufzeit-Batch-Cursors in einem statischen Bundle.

Gewichtete Rotation und Seitenverhältnis-Anpassung

order: "weighted" rotiert die Creatives eines Slots nach Gewicht, sodass jeder Sponsor seinen Anteil an den Wiedergaben behält. weights ordnet einer Medien-ID (med_...) oder tag:NAME eine ganze Zahl von 1 bis 1.000 zu, mit höchstens 64 Schlüsseln. Es funktioniert mit by von all, tag oder folder:

{
  "by": "all",
  "order": "weighted",
  "one_at_a_time": true,
  "weights": { "tag:Acme": 50, "tag:Globex": 30, "tag:Initech": 20 },
  "fit": "aspect"
}

Gewichte von 50, 30 und 20 liefern in jedem Zyklus genau 5, 3 und 2 von 10 Wiedergaben, und ein Neustart setzt mitten im Zyklus fort. Das Gewicht eines Elements ist sein Medien-ID-Schlüssel, falls vorhanden; sonst der alphabetisch erste Schlüssel tag:NAME unter den Tags, die es trägt, gleichmäßig aufgeteilt auf die Elemente der Auswahl, die ihn tragen, sodass der Anteil eines Sponsors unabhängig von der Anzahl seiner Creatives gleich bleibt; sonst zählt das Element als eigene Gruppe mit Gewicht 1. Ein Zyklus hat höchstens 4.096 Wiedergaben; Anteile werden nur dann darauf gerundet, wenn das exakte Verhältnis einen längeren Zyklus erfordert.

Die gewichtete Reihenfolge spielt pro Besuch ein Element ab, setzen Sie also one_at_a_time: true oder batch_size: 1. weights ist mit gewichteter Reihenfolge erforderlich und nur dort erlaubt; andernfalls gibt das Schreiben invalid_request zurück. Web-, Android-, Apple-, Windows- und Linux-Player unterstützen die gewichtete Reihenfolge ab den Versionen, die die Host-Fähigkeit selector.weighted deklarieren. Ein älterer Player spielt den Selektor zufällig ab, und die Manifest-Diagnosen enthalten selector_order_downgraded.

fit: "aspect" an einem dynamischen Selektor behält nur Dateien, deren Verhältnis von Breite zu Höhe innerhalb von 5 % des Rechtecks des Slots liegt, auch bei einer Videowand oder einem Anzeigerahmen, gelesen beim Auflösen des Selektors. Ein Hochformat-Slot spielt nie eine Querformat-Datei ab. Am Player ändert sich nichts.

screenrig media selector-preview gibt den erwarteten Anteil jedes gewichteten oder seitenverhältnisangepassten Selektors aus, und der Seiteneditor des Dashboards zeigt dieselbe Tabelle im Inspektor. Der statische Bundle-Export friert einen gewichteten Selektor als exakte IDs in Dateinamenreihenfolge ein; Gewichte bleiben nicht erhalten.

Bildschirm-Token in Tag-Selektoren

Das tag eines Tag-Selektors und jeder Eintrag seines tags-Filters darf {screen.field.NAME} oder {screen.id} sein, die Kennung des Bildschirms ohne das Präfix scr_, die ein Tag ist. Der Server füllt den Token für jeden Bildschirm, wenn er dessen Manifest und Selektor-Snapshot erstellt, sodass eine Playlist die eigenen Medien jedes Bildschirms abspielt. Versehen Sie die Medien mit dem Tag Lobby oder Garage, setzen Sie das Feld jedes Bildschirms mit screenrig screen update scr_ID --field zone=Lobby und geben Sie dem Slot diesen Selektor:

{ "by": "tag", "tag": "{screen.field.zone}", "one_at_a_time": true }

Der eingesetzte Wert folgt den Tag-Regeln: 1 bis 32 Buchstaben oder Ziffern. Ein Bildschirm ohne das Feld oder mit einem Wert, der kein Tag ist, wählt nichts aus: Er spielt aus diesem Slot keine Datei ab, und die Manifest-Diagnosen enthalten screen_fact_missing oder screen_fact_invalid. Eine Änderung eines Felds erstellt das Manifest dieses Bildschirms neu. Ein Selektor mit einem Token lässt sich nicht in der Vorschau anzeigen (media selector-preview erwartet ein konkretes Tag) und wird von playlist export nicht eingefroren.

Bildschirm-Token in Iframe-Adressen und Anwendungsparametern

src und fallback_src einer iframe können Bildschirm-Token im Pfad, in der Query oder im Fragment einer http- oder https-Adresse tragen, ebenso das optionale params eines application-Primitivs: bis zu 16 Namen aus 1 bis 32 Kleinbuchstaben, Ziffern oder Unterstrichen (ticket und policy sind reserviert) mit Werten von bis zu 512 Zeichen. Der Server füllt sie für jeden Bildschirm:

TokenWert
{screen.id}Die Kennung des Bildschirms ohne sein Präfix scr_.
{screen.name}Der Name des Bildschirms.
{screen.timezone}Die gespeicherte IANA-Zeitzone des Bildschirms.
{screen.field.NAME}Das Feld NAME des Bildschirms, 1 bis 32 Kleinbuchstaben, Ziffern oder Unterstriche.
{screen.location.lat}, {screen.location.lon}Sein Standort in Dezimalgrad.
{screen.location.name}, {screen.location.address}Sein Ortsname und seine Straßenadresse.
{
  "primitive": "iframe",
  "src": "https://maps.example.com/directory?kiosk={screen.field.kiosk_id}&level={screen.field.level}",
  "title": "Directory"
}

Der Schreibvorgang speichert die Vorlage wie geschrieben, geschweifte Klammern eingeschlossen. Das Manifest jedes Bildschirms trägt seine eigene Adresse, jeder Wert prozentkodiert für seine Stelle in der URL: Ein kiosk_id von B 2&3 wird zu B%202%263. Ein Token im Schema, in den Zugangsdaten, im Host oder im Port oder in einem YouTube-Link, einem Google- oder Microsoft-Dokumentlink oder einer BI-Ansichtsadresse ist invalid_request bei src (oder fallback_src). Das Veröffentlichen überspringt die Framing-Prüfung für eine src mit Token, und Vorschauen zeigen die Vorlage wie geschrieben.

Ein Bildschirm, dem ein Wert fehlt (ein nicht gesetztes Feld, kein Standort), oder dessen Werte sich zu einer Adresse über 2048 Zeichen oder zu einer mit einem Pfadsegment . oder .. füllen, erhält kein solches Iframe und keine solche Anwendung, und seine Manifest-Diagnosen enthalten screen_fact_missing oder screen_fact_invalid; eine leer gebliebene Seite wird verworfen. Jeder Schreibvorgang, der einen solchen Bildschirm erreicht (ein Playlist-Schreibvorgang, screen assign, screen update, eine Flottenzuweisung, eine genehmigte Prüfung), antwortet mit einer screen_fact_missing-Warnung, die die Tokens, die ersten 20 Bildschirm-IDs und deren Anzahl nennt. Das Ändern eines Felds oder Standorts erstellt das Manifest der betroffenen Bildschirme neu.

Bei einer Anwendung wird jeder gefüllte Parameter nach ticket an die Startadresse angehängt, prozentkodiert, zusammen höchstens 4096 Zeichen, sodass die Anwendung ihn aus location.search liest (SDK). Startparameter erreichen die Player-Web-App und die Player, die sie ausführen (Samsung Tizen, BrightSign, LG webOS und Vega); die Qt-, Android-, Apple- und Windows-Player laden die Anwendung aus ihrem lokalen Paket und senden keine. Das Feld url einer Vorlage kann ein ganzes Iframe src sein, und sein Wert kann selbst Bildschirm-Token tragen, die beim Erstellen des Manifests gefüllt werden. Ein Tag-Selektor verwendet {screen.id} und {screen.field.NAME} genauso (oben). Karten behalten ihre eigenen {screen.…}-Token.

Medienverfügbarkeit

screenrig media availability med_ID --file rule.json legt fest, wann die dynamischen Selektoren (all, tag und folder) eine Datei auswählen dürfen. --clear entfernt die Regel und --expect-rev N schützt die Medienrevision. Die API ist PATCH /api/media/{id}/availability mit If-Match und { "availability": {...} | null }. Zum Setzen einer Regel ist Manage-Zugriff nötig; eine Propose-Anmeldeinformation erhält insufficient_access.

Die Regel ist die Uhrzeit-Grammatik des Zeitplans, gelesen in der Zeitzone jedes Bildschirms, und enthält mindestens ein Element: from und until (zivil YYYY-MM-DDTHH:MM, until exklusiv), windows (wöchentlich {days, start, end}), monthly ({day} oder {nth, weekday}, jeweils mit optionalem start und end), dates ({date, start, end}) und except (Daten, die ein Vorkommen entfernen, einschließlich über Mitternacht reichender Enden). Sie enthält weder data noch interaction. Der Creative eines Sponsors für das lange Wochenende, nur an Werktagabenden innerhalb des Zeitraums verfügbar:

{
  "from": "2026-11-27T00:00",
  "until": "2026-11-30T23:59",
  "windows": [{ "days": ["mon", "tue", "wed", "thu", "fri"], "start": "17:00", "end": "22:00" }]
}

Nur Selektoren lesen die Regel: Ein expliziter Selektor mit id oder ids ignoriert sie, ebenso die Medienverweise von Karten, Soundtrack-Audio und Anzeigen-Creatives. Eine Datei verlässt die Auswahl und kehrt bei der nächsten Playlist-Schleife jedes Bildschirms zurück, innerhalb von etwa einer Minute nach der Grenze. Keine Playlist- oder Manifest-Revision ändert sich, und ein Offline-Player behält seine letzte Auswahl, bis er sich wieder verbindet. screenrig media selector-preview --timezone ZONE (Standard UTC) listet die Dateien, die jetzt außerhalb ihrer Regel liegen, in excluded mit dem Grund outside_window auf.

Zurück zur screenRIG CLI-Referenz.