Documentation

Listes de lecture : commandes CLI

Préparez, validez, créez, modifiez, exportez et importez des listes de lecture, gérez pages, révisions et instances, remplacez une version d’application.

Chaque commande s’exécute comme décrit dans la référence CLI : drapeaux globaux, sortie JSON, codes de sortie, révisions et réessais.

Listes de lecture

Une liste de lecture est un document JSON de pages. playlist init prépare un document plein écran à partir d’entrées ordonnées. playlist create et playlist update lisent ce document depuis un fichier ; playlist patch, playlist rename et playlist page add|replace|remove en modifient une partie. La forme est résumée sous les commandes.

playlist init#

Préparer une liste de lecture plein écran modifiable à partir de fichiers médias locaux, d’ID médias prêts, d’ID de version d’application, d’URL HTTP ou HTTPS, ou de codes d’intégration iframe collés.

playlist init <inputs...> --name NAME --output FILE [--overwrite] [--screen-id ID]
              [--target-width PX --target-height PX] [--duration-ms MS] [--fit contain|cover|fill] [--sound]
              [--no-transcode] [--no-progress] [--poll-ms MS]
ParamètreTypeRequisPar défautNotes
<inputs...>fichiers, identifiants med_, identifiants rel_, URL HTTP ou HTTPS, ou codes d’intégration <iframe> collésouiaucunOrdre de lecture. Les fichiers image, vidéo et audio locaux sont téléversés et attendent la disponibilité sauf --no-transcode. Les médias existants doivent déjà être prêts. Un fichier audio ou un ID med_ audio prêt devient la bande sonore, dans l’ordre d’entrée, au lieu d’une page ; au moins une entrée doit être une page. Les URL HTTP et HTTPS peuvent inclure des hôtes du réseau local, des identifiants intégrés et des jetons d’écran comme {screen.field.kiosk_id}, conservés tels qu’écrits, et ne sont pas récupérées. Un code d’intégration collé est lu pour son src. L’application web du Player exige des URL HTTPS sans nom d’utilisateur ni mot de passe.
--name NAMEstringouiaucunNom d’affichage de la liste de lecture.
--output FILEcheminouiaucunÉcrivez le document de liste de lecture modifiable. Les dossiers parents sont créés. Exclusif par défaut : un fichier existant non vide échoue avec usage_error (sortie 2) et reste intact.
--overwritebooleannondésactivéRemplacer un fichier de sortie existant de manière atomique par un document construit à partir de ces entrées.
--screen-id IDstringnonaucunLire les dimensions et la révision de l’écran cible. Un écran avec un mur vidéo donne la toile du mur et le format correspondant.
--target-width PX / --target-height PXintegerensemblenon définiRemplacer la taille du canevas. Les deux ou aucun. Obligatoire lorsqu’aucun écran n’est fourni ou que l’écran signale une surface inconnue ou multiple.
--duration-ms MSintegernon8000Durée des pages qui ne sont pas des vidéos. Une page d’application dure 24 heures (86400000) sauf si elle est fournie.
--fitstringnoncontaincontain, cover ou fill pour les pages d’images et de vidéos. Les applications et iframes utilisent fill.
--soundbooleannondésactivéJoue l’audio des pages vidéo. Sans cette option, chaque page vidéo est muette. Une page avec son met la bande sonore en pause pendant son affichage.
--no-transcodebooleannondésactivéOctets du fichier téléversé acceptés inchangés.
--no-progressbooleannondésactivéSupprimer la progression du téléversement sur stderr.
--poll-ms MSintegernon1000Intervalle de sondage de téléversement.
screenrig playlist init med_01EXAMPLEIMAGE0000000000 med_01EXAMPLEVIDEO0000000000 --name "Lobby loop" --screen-id scr_01EXAMPLESCREEN00000000 --output lobby.json

La préparation écrit le document local et peut téléverser des médias ; elle ne crée pas de liste de lecture distante et n’affecte aucun écran. Inspectez le document, puis screen publish. Voir Préparer, publier et modifier des listes de lecture.

data rapporte output, width, height, page_count, soundtrack_tracks, release_ids, media_ids et uploads, et avec --screen-id aussi screen_id, screen_revision et publish.argv ; un écran avec un mur vidéo ajoute format. Une page d’application réglée à moins de 60 secondes déclenche un avertissement application_page_short.

playlist validate#

Validez un document de liste de lecture localement avant création ou mise à jour. Pas de réseau.

playlist validate <file>
ParamètreTypeRequisPar défautNotes
<file>cheminouiaucunLe document de liste de lecture, ou - pour stdin.
screenrig playlist validate ./lobby-loop.json

Les erreurs nomment des chemins JSON exacts. Une réussite signifie que la forme locale et la sémantique inter-champs sont valides ; l’autorisation, la disponibilité des médias, le nombre de sélecteurs dynamiques, les durées et la disponibilité distante nécessitent encore des vérifications serveur. playlist create, playlist update et screen publish effectuent cette vérification avant leur écriture. data rapporte valid, scope et server_checks, et porte des constats de géométrie lint, chacun avec page_id, code, id et message, qui ne font pas échouer la vérification : motion_overuse, collision, safe_margin et adjacent_repeat. Une page d’application qui avance en moins de 60 secondes déclenche un avertissement application_page_short. Pour voir à quoi ressemble une page, publiez-la et exécutez screen screenshot.

playlist create#

Créer une liste de lecture à partir d'un document JSON, d'un modèle ou du modèle intégré Avis urgent.

playlist create [file] [--from-template ID --name NAME [--set NAME=VALUE...] [--dry-run]] [--starter KEY [--name NAME]] [--format-region REGION --format-orientation ORIENTATION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
[file]cheminnonaucunLe document de liste de lecture, ou - pour stdin. Donnez-le, ou --from-template, ou --starter. Il contient name, pages et éventuellement audio, format et fields ; tout autre membre est un usage_error.
--from-template IDstringnonaucunCréer la liste de lecture à partir de ce modèle (un id pl_) : ses pages actuelles avec les valeurs de --set, vérifiée comme toute liste de lecture.
--name NAMEstringavec --from-templateaucunLe nom de la nouvelle liste de lecture. --dry-run n’en a pas besoin, et --starter le prend facultativement.
--set NAME=VALUEstringnonaucunAvec --from-template : la valeur d'un champ, l'id d'une image ou d'une vidéo prête pour un champ média. Répétable. NAME est un nom de champ de 1 à 32 lettres minuscules, chiffres ou traits de soulignement, donné une seule fois.
--dry-runbooleannondésactivéAvec --from-template : vérifier les valeurs et indiquer le nombre de pages sans rien créer.
--starter KEYstringnonaucunAjouter un modèle intégré : urgent-notice, un titre et un message pour les annonces rapides.
--format-region REGIONstringnonaucunheader, footer ou side : fait de la liste de lecture un bandeau tracé sur la page le long de ce bord, et remplace un format du fichier. Indiquez-le avec --format-orientation. Voir bandeaux.
--format-orientation ORIENTATIONstringavec --format-regionaucunlandscape ou portrait : l’orientation de l’afficheur pour lequel le bandeau est conçu, telle que la voit le spectateur.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist create ./lobby-loop.json
screenrig playlist create --from-template pl_01EXAMPLETEMPLATE00000 --name "Monday notice" --set headline="Open late"

data.id de l'enveloppe est l'id pl_ que prend screen assign. Quand le changement attend une révision, data vaut {status: pending_review, review, playlist, next} : la liste de lecture existe avec approved_revision: 0, et aucun écran ne peut l'afficher tant qu'une personne n'a pas approuvé (playlist_not_approved) ; next vaut screenrig reviews show ID. Un modèle est une liste de lecture qui déclare fields ; il n'est jamais affiché sur un écran (playlist_is_template), et une liste créée à partir de lui est une liste ordinaire, qu'on peut affecter, planifier et réviser.

playlist update#

Remplacer un document de liste de lecture.

playlist update <id> <file> [--format-region REGION --format-orientation ORIENTATION] [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
<file>cheminouiaucunLe document de remplacement, ou - pour stdin. Il contient name, pages et éventuellement audio, format et fields ; tout autre membre est un usage_error. Omettre audio supprime la bande sonore, omettre format fait de la liste de lecture une liste ordinaire, et les fields omis sont conservés.
--format-region REGIONstringnonaucunheader, footer ou side : fait de la liste de lecture un bandeau tracé sur la page le long de ce bord, et remplace un format du fichier. Indiquez-le avec --format-orientation. Voir bandeaux.
--format-orientation ORIENTATIONstringavec --format-regionaucunlandscape ou portrait : l’orientation de l’afficheur pour lequel le bandeau est conçu, telle que la voit le spectateur.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Omettre pour écrire la ressource actuelle. Une valeur périmée fournie est revision_conflict : refetch, reapply, retry.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist update pl_01EXAMPLEPLAYLIST000000 ./lobby-loop.json

playlist show ID --output FILE écrit un fichier de cette forme. Pour ne modifier qu’une partie d’une liste de lecture, utilisez playlist patch, playlist rename ou playlist page add|replace|remove.

Lorsque la modification attend une révision, la liste de lecture en direct continue de jouer sans changement jusqu'à ce qu'une personne approuve la proposition.

playlist patch#

Ne modifier que les membres de premier niveau fournis d’une liste de lecture et garder tout le reste.

playlist patch <id> [file] [--name NAME] [--clear-audio] [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
[file]cheminnonaucunUn objet JSON partiel avec un ou plusieurs de name, pages, audio, format et fields, ou - pour stdin. pages, audio et format fournis remplacent toute la valeur ; les tableaux ne sont pas fusionnés. audio: null supprime la bande sonore et format: null supprime le format.
--name NAMEstringnoninchangéDéfinir le nom, de 1 à 120 caractères après rognage, sans envoyer le contenu. Pas avec name dans le fichier.
--clear-audiobooleannondésactivéSupprimer la bande sonore, comme le fait audio: null. Aucune page ne peut garder de audio_cue. Pas avec audio dans le fichier.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Omettre pour écrire la ressource actuelle. Une valeur périmée fournie est revision_conflict : refetch, reapply, retry.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist patch pl_01EXAMPLEPLAYLIST000000 --name "Lobby loop" --expect-rev 7
screenrig playlist patch pl_01EXAMPLEPLAYLIST000000 changes.json --expect-rev 7

Donnez un fichier, --name ou --clear-audio. Un changement de nom seul ne revérifie pas le contenu existant. pages et audio fournis sont vérifiés ensemble par le serveur. Un format de région est {"region": "header", "orientation": "landscape"} ; voir bandeaux. Sous l’accès Propose, ou dans un projet qui exige une révision pour les modifications d’agent, la modification attend comme pour playlist update et répond pending_review.

playlist rename#

Modifier le nom d’une liste de lecture sans envoyer son contenu.

playlist rename <id> --name NAME [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--name NAMEstringouiaucunLe nouveau nom, de 1 à 120 caractères après rognage.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Omettre pour écrire la ressource actuelle. Une valeur périmée fournie est revision_conflict : refetch, reapply, retry.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist rename pl_01EXAMPLEPLAYLIST000000 --name "Lobby loop" --expect-rev 7

La forme de playlist patch pour le nom seul : les pages, la bande sonore et les commentaires restent tels quels, et le contenu existant n’est pas revérifié. Un renommage proposé attend l’approbation d’une personne comme tout autre changement.

playlist page add#

Ajouter une page à une liste de lecture sans renvoyer les autres.

playlist page add <playlist-id> (--file PAGE.json | --media MED_ID) [--seconds N] [--fit contain|cover] [--sound]
                  [--from WHEN] [--until WHEN] [--before PAGE_ID] [--page-id ID]
                  [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<playlist-id>stringouiaucunL’identifiant de playlist pl_.
--file PAGE.jsoncheminexactement l’un de --file ou --mediaaucunUn objet page ajouté tel qu’écrit, ou - pour stdin. --seconds et --fit ne s’y appliquent pas.
--media MED_IDstringexactement l’un de --file ou --mediaaucunUne image ou une vidéo prête. La page l’affiche en pleine toile sur la toile de la liste de lecture (la toile du mur pour un mur vidéo, sinon celle de la première page ordinaire) avec la transition de la première page ordinaire, et n’a pas de dates sauf si vous en donnez. Une image passe à la suivante après --seconds ; une vidéo joue jusqu’à sa fin, muette sauf avec --sound.
--seconds Nintegernon10Durée d’affichage d’une image, de 1 à 86400.
--fitstringnoncontaincontain ou cover.
--soundbooleannondésactivéJoue l’audio de la vidéo. Une vidéo seulement ; la page met la bande sonore en pause pendant son affichage et ne peut pas porter de audio_cue. Pas avec --file, dont la page porte son propre muted.
--from WHENstringnonaucunPremière fois que la page est affichée : YYYY-MM-DDTHH:MM, ou YYYY-MM-DD pour 00:00, dans le fuseau horaire de chaque écran.
--until WHENstringnonaucunFin de l’affichage de la page, exclusive : YYYY-MM-DDTHH:MM, ou YYYY-MM-DD pour la fin de ce jour.
--before PAGE_IDstringnonà la finPlacer la page devant cette page.
--page-id IDstringnonup- et huit lettres minuscules ou chiffresL’ID de la nouvelle page : une lettre, puis des lettres, chiffres, - ou _, au plus 64 caractères.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Omettre pour écrire la ressource actuelle. Une valeur périmée fournie est revision_conflict : refetch, reapply, retry.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist page add pl_01EXAMPLEPLAYLIST000000 --media med_01EXAMPLEIMAGE0000000000 --from 2026-12-01 --until 2026-12-24
screenrig playlist page add pl_01EXAMPLEPLAYLIST000000 --media med_01EXAMPLEVIDEO0000000000 --before up-ab12cd34 --note "Winter menu"
screenrig playlist page add pl_01EXAMPLEPLAYLIST000000 --file page.json --page-id welcome

La page est affichée de --from jusqu’à --until exclu. Les pages terminées restent jusqu’à ce que quelqu’un les supprime. La réponse est la liste de lecture mise à jour.

Sous l’accès Propose, dans un projet qui exige une révision pour les modifications d’agent, ou en tant que membre téléverseur dont les changements sont révisés, la modification répond pending_review (ok: true, sortie 0). Un changement de page ultérieur à la même liste de lecture par le même proposeur rejoint cette révision tant qu’elle attend, de sorte que des téléversements successifs ne se remplacent pas. Une liste de lecture qu’aucune personne n’a encore approuvée répond playlist_not_approved. Un téléverseur n’ajoute que des pages média de ses propres dossiers à ses propres listes de lecture ; tout le reste est outside_upload_scope, dont upload_scope énumère ce qu’il peut utiliser. Voir Téléverseurs.

playlist page replace#

Remplacer une page d’une liste de lecture en gardant sa place et son ID.

playlist page replace <playlist-id> <page-id> [--file PAGE.json | --media MED_ID] [--seconds N] [--fit contain|cover]
                      [--sound] [--from WHEN] [--until WHEN | --always] [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<playlist-id>stringouiaucunL’identifiant de playlist pl_.
<page-id>stringouiaucunLa page à remplacer.
--file PAGE.jsoncheminnonaucunLa nouvelle page complète, ou - pour stdin. Son id doit être <page-id> ou absent. Pas avec --media.
--media MED_IDstringnonaucunChanger le média de la page ; tout le reste, dates comprises, reste tel que stocké. Une image remplacée par une image garde la toile, l’ajustement, les secondes et les dates, et une vidéo remplacée par une vidéo aussi. Une image remplacée par une vidéo, ou l’inverse, est reconstruite en page média sur la toile de la liste de lecture, qui garde l’ID, la transition et les dates. Nécessite une page avec une seule primitive.
--seconds NintegernoninchangéDurée d’affichage d’une image, de 1 à 86400. Pas avec --file.
--fitstringnoninchangécontain ou cover. Pas avec --file.
--soundbooleannondésactivéJoue l’audio de la vidéo de la page, seul ou avec --media. Une page avec une seule primitive vidéo seulement ; sans cette option, un remplacement conserve l’état sonore de la page. Pas avec --file.
--from WHENstringnoninchangéPremière fois que la page est affichée : YYYY-MM-DDTHH:MM, ou YYYY-MM-DD pour 00:00, dans le fuseau horaire de chaque écran. Ne change que cette limite.
--until WHENstringnoninchangéFin de l’affichage de la page, exclusive : YYYY-MM-DDTHH:MM, ou YYYY-MM-DD pour la fin de ce jour. Ne change que cette limite.
--alwaysbooleannondésactivéRetirer les dates de la page, from et until. Une désactivation, des fenêtres hebdomadaires ou une condition de données définies par le projet restent en place. Pas avec --from ni --until.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Une page dérivée de celle stockée est liée à la révision à laquelle elle a été lue, sauf si vous en donnez une. Une valeur périmée est revision_conflict.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist page replace pl_01EXAMPLEPLAYLIST000000 up-ab12cd34 --media med_01EXAMPLEIMAGE0000000000
screenrig playlist page replace pl_01EXAMPLEPLAYLIST000000 up-ab12cd34 --until 2026-12-31
screenrig playlist page replace pl_01EXAMPLEPLAYLIST000000 up-ab12cd34 --always

Donnez au moins l’un de --file, --media, --sound, --from, --until ou --always. Les drapeaux de date fonctionnent aussi sur une page avec plusieurs primitives ; changer le média, l’ajustement ou les secondes nécessite une page avec une seule primitive, ou la page entière dans --file. Un ID de page inconnu est refusé. Les règles de révision et de téléverseur sont celles de playlist page add ; un téléverseur ne remplace qu’une page média de ses propres dossiers.

playlist page remove#

Supprimer une page d’une liste de lecture.

playlist page remove <playlist-id> <page-id> [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<playlist-id>stringouiaucunL’identifiant de playlist pl_.
<page-id>stringouiaucunLa page à supprimer.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Omettre pour écrire la ressource actuelle. Une valeur périmée fournie est revision_conflict : refetch, reapply, retry.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification : texte brut, au maximum 280 caractères. Ignorée lorsque la modification s’applique immédiatement.
screenrig playlist page remove pl_01EXAMPLEPLAYLIST000000 up-ab12cd34

Une liste de lecture conserve de 1 à 100 pages et une page ordinaire sans visibility, donc supprimer la dernière page sans date donne invalid_request. Une page inconnue donne not_found. Les règles de révision et de téléverseur sont celles de playlist page add.

playlist show#

Lire une liste de lecture, y compris sa révision actuelle, ou l’écrire comme document éditable.

playlist show <id> [--output FILE [--overwrite]] [--editable]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--output FILEcheminnonaucunÉcrivez le document modifiable dans FILE et indiquez son chemin, playlist_id et revision. Le fichier est prêt pour playlist update tel qu’écrit. Les dossiers parents sont créés. Exclusif par défaut. Prévaut sur --editable.
--overwritebooleannondésactivéRemplacer un fichier --output existant de manière atomique. Un fichier vide laissé par une exécution interrompue est remplacé sans cette option.
--editablebooleannondésactivéRetourner le document éditable et sa révision dans l’enveloppe comme data.document, data.playlist_id et data.revision.
screenrig playlist show pl_01EXAMPLEPLAYLIST000000
screenrig playlist show pl_01EXAMPLEPLAYLIST000000 --output playlist.json
screenrig playlist show pl_01EXAMPLEPLAYLIST000000 --editable

Un show simple est une réponse d'inspection. Il retourne la version en direct. approved_revision est 0 pour une playlist qu'aucune personne n'a encore approuvée, et approval nomme la revue ouverte pendant qu'un changement attend ; reviews show ID retourne la proposition. Lorsque des notes ouvertes portent sur la playlist, l'avertissement notes_about_resource les compte et nomme screenrig notes --about ID, et --human en liste jusqu'à cinq.

playlist list#

Lister les listes de lecture du projet.

playlist list [--templates] [--library]
ParamètreTypeRequisPar défautNotes
--templatesbooleannondésactivéSeulement les modèles : les listes de lecture qui déclarent des champs.
--librarybooleannondésactivéListe plutôt les listes de lecture de la Bibliothèque de l’organisation, en lecture seule : assignez-les à des écrans, des horaires et des piles, ou copiez-en une avec playlist create --from-template ; modifiez-les seulement dans le projet Bibliothèque.
screenrig playlist list --templates
screenrig playlist list --library

playlist fields#

Afficher les champs d'un modèle ou les valeurs d'une copie, ou modifier les valeurs et mettre la copie à jour.

playlist fields <id> [--set NAME=VALUE...] [--clear NAME...] [--refresh] [--expect-rev REVISION] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'id pl_ d'un modèle ou d'une liste de lecture créée à partir d'un modèle.
--set NAME=VALUEstringnonaucunDéfinir la valeur d’un champ. Répétable ; NAME est un nom de champ de 1 à 32 lettres minuscules, chiffres ou traits de soulignement, donné une seule fois.
--clear NAMEstringnonaucunEffacer la valeur d'un champ facultatif. Répétable.
--refreshbooleannondésactivéRecréer les pages à partir de la révision actuelle du modèle, quelles que soient les valeurs.
--expect-rev REVISIONstringnonaucunExiger facultativement cette révision de la ressource.
--note TEXTstringnonaucunUne note pour la personne qui examine le changement.
screenrig playlist fields pl_01EXAMPLECOPY00000000 --set headline="Closed today"

Sans option, il affiche les champs d'un modèle et le nombre de listes de lecture créées à partir de lui, ou les valeurs d'une copie, la révision du modèle dont elle est issue et si le modèle en a une plus récente. data.kind est template ou instance : un modèle rapporte fields et instances, une copie template_id, template_revision, template_current_revision, outdated et values. Chaque changement, et --refresh seul, recrée les pages de la copie à partir de la révision actuelle du modèle, ce qui permet à un changement de marque fait sur le modèle d'atteindre les copies existantes ; rien n'y est poussé automatiquement. Les valeurs sont vérifiées comme à la création. Avec l'accès Propose, un changement devient une révision.

playlist instances#

Lister les listes de lecture créées à partir d'un modèle et la révision du modèle dont chacune est issue.

playlist instances <id>
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL'id pl_ du modèle.
screenrig playlist instances pl_01EXAMPLETEMPLATE00000

outdated signale une liste de lecture créée à partir d'une révision plus ancienne du modèle ; playlist fields ID --refresh la remet à jour.

playlist revisions#

Lister les révisions d'une liste de lecture, la plus récente en premier.

playlist revisions <id> [--after CURSOR]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--after CURSORstringnonaucunLe data.next_cursor de la page précédente.
screenrig playlist revisions pl_01EXAMPLEPLAYLIST000000

Chaque révision de data.items indique ce qui l'a créée (created, edited, promoted avec la révision copiée comme restored_from, ou baseline, la révision que la liste de lecture avait au début de son historique), qui l'a faite, quand, son nom, combien de pages elle contient et si elle est current. Une page contient au plus 50 révisions ; tant que data.next_cursor est une chaîne, les révisions plus anciennes restent, et null marque la dernière page. Les révisions sont conservées aussi longtemps que la liste de lecture.

playlist revision show#

Lire une révision et la liste de lecture telle qu'elle était à ce moment.

playlist revision show <id> --revision N
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--revision NintegerouiaucunLa révision à lire.
screenrig playlist revision show pl_01EXAMPLEPLAYLIST000000 --revision 3

data.revision contient les champs que playlist revisions liste, et data.playlist la liste de lecture telle qu’elle était : nom, pages, bande sonore et format, avec revision réglé sur celle-ci. Une révision que la liste de lecture n’a jamais eue, ou antérieure au début de son historique, est not_found.

playlist promote#

Rendre de nouveau actuelle une révision antérieure en la copiant comme nouvelle révision.

playlist promote <id> --revision N --expect-rev CURRENT
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--revision NintegerouiaucunLa révision à copier.
--expect-rev CURRENTstringouiaucunLa révision actuelle de la liste de lecture (playlist show). Une valeur périmée est revision_conflict : relisez la liste de lecture et réessayez.
screenrig playlist promote pl_01EXAMPLEPLAYLIST000000 --revision 3 --expect-rev 9

Les pages, la bande sonore et le format de la révision deviennent la révision suivante. Le nom reste le même, les révisions précédentes restent dans la liste et chaque écran qui affiche la liste de lecture se met à jour ; la commande retourne une fois la liste de lecture écrite et n’attend pas les Players. Les pages sont résolues de nouveau comme pour toute écriture : un sélecteur correspond aux médias d’aujourd’hui, et si des médias ou une application utilisés par la révision ont disparu ou ne sont pas prêts, la promotion est refusée avec le problème qu’une écriture obtiendrait. La promotion exige un identifiant qui publie en direct ; un identifiant dont les changements attendent une révision obtient forbidden, et une liste de lecture qu’aucune personne n’a encore approuvée est playlist_not_approved. Une révision dont le contenu est déjà actuel ne change rien. La promotion est une fonctionnalité Premium : un forfait qui ne l’inclut pas répond feature_not_in_plan (sortie 8), tandis que playlist revisions et playlist revision show sont offerts avec tous les forfaits.

playlist delete#

Supprimer une liste de lecture.

playlist delete <id> [--expect-rev REVISION]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--expect-rev REVISIONstringnonaucunPrécondition optionnelle de révision. Omettre pour écrire la ressource actuelle. Une valeur périmée fournie est revision_conflict : refetch, reapply, retry.
screenrig playlist delete pl_01EXAMPLEPLAYLIST000000

Une liste de lecture n’est pas supprimée tant qu’un écran, archivé ou en cours de jumelage, l’a comme valeur par défaut, dans sa programmation de listes de lecture ou comme prise de contrôle, tant qu’un dossier d’écrans l’a comme valeur par défaut, ou tant qu’une campagne la joue : la réponse est resource_conflict (sortie 5). Modifiez-les d’abord.

playlist export#

Exportez les fichiers image et vidéo, l’audio de la bande sonore et les URL d’iframe dans un paquet de liste de lecture portable.

playlist export <id> --output DIRECTORY [--skip-applications]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--output DIRECTORYcheminouiaucunRépertoire de destination. Il ne doit pas déjà exister ; le paquet est écrit via un frère temporaire et renommé en place.
--skip-applicationsbooleannondésactivéSupprimez les primitives d’application et les pages vides ou contrôlées par une application. Au moins une page doit rester. Le résultat indique les identifiants des primitives et des pages ignorées.
screenrig playlist export pl_01EXAMPLEPLAYLIST000000 --output ./lobby-bundle

Le paquet contient un manifeste, le document de liste de lecture et des fichiers image, vidéo et audio de bande sonore adressés par leur contenu. Il porte name, audio et pages ; un format et le fields d’un modèle ne sont pas inclus. Les sélecteurs dynamiques all, tag et folder sont figés sur des identifiants exacts, les URL d’iframe sont conservées et les commentaires sont exclus.

Les cartes, les flux et les pages adslot arrêtent l’exportation avant le téléchargement des médias. Les applications l’arrêtent aussi par défaut; --skip-applications supprime les primitives d’application ainsi que les pages vides ou contrôlées par une application, et indique les identifiants des primitives et des pages ignorées. Au moins une page doit rester. Les cartes, les flux et les pages adslot arrêtent toujours l’exportation avec cette option.

Pour obtenir un document modifiable qui conserve les références aux cartes et aux applications, utilisez screenrig playlist show pl_01EXAMPLEPLAYLIST000000 --output playlist.json. Le document utilise les ressources existantes du même projet.

playlist import#

Créer une liste de lecture à partir d’un répertoire bundle, ou en mettre à jour une existante à partir de celui-ci.

playlist import <directory> [--name NAME] [--update ID [--expect-rev REVISION]] [--poll-ms MS] [--note TEXT]
ParamètreTypeRequisPar défautNotes
<directory>cheminouiaucunUn répertoire de bundle écrit par playlist export.
--name NAMEstringnonle nom de la playlist du bundle1 à 120 caractères. Nomme la nouvelle liste de lecture, ou renomme celle que --update remplace.
--update IDstringnonune nouvelle liste de lecture est crééeMettre à jour cette pl_ liste de lecture au lieu d’en créer une nouvelle. Affecte chaque écran qui lui est assigné. Accepte --expect-rev optionnel.
--expect-rev REVISIONstringnonaucunAvec --update : la révision actuelle de la liste de lecture de destination.
--poll-ms MSintegernon1000Intervalle entre les sondages des téléversements pendant que les médias deviennent prêts.
--note TEXTstringnonaucunUne note pour la personne qui révise la modification lorsqu’elle attend une révision, au maximum 280 caractères.
screenrig playlist import ./lobby-bundle
screenrig playlist import ./lobby-bundle --name "Lobby loop (copy)"
screenrig playlist import ./lobby-bundle --update pl_01EXAMPLEPLAYLIST000000

Les noms d’affichage des listes de lecture peuvent se répéter. L’import crée une liste de lecture distincte même si son nom correspond ; utilisez --update avec un ID pour remplacer une liste de lecture existante.

L’importation valide localement l’ensemble du paquet avant qu’il ne touche le projet : manifeste, document, chemins, types de médias, longueurs et hachages. Les médias existants sont réutilisés si le nom de fichier, le type de média, la longueur en octets, le hachage et la balise correspondent exactement ; les autres sont téléversés sans conversion, et la liste de lecture est écrite seulement après que chaque objet est prêt. data rapporte mode (create ou update), source_playlist_id, playlist, directory et media avec total, reused et uploaded.

Sous l’accès Propose, ou dans un projet qui exige une révision pour les modifications d’agent, le média est quand même téléversé et l’écriture de la liste de lecture devient une révision : data.status vaut pending_review, data.review la nomme et data.next vaut screenrig reviews show ID. Rien ne change à l’écran tant qu’une personne n’a pas approuvé.

L’importation ne supprime ni n’élague jamais les médias distants. Si une étape ultérieure échoue après le début d’un téléversement, l’erreur liste les objets confirmés prêts et indique si l’écriture de la liste de lecture a commencé. Réessayer le même paquet réutilise ces objets.

playlist replace-release#

Prévisualiser ou appliquer le remplacement d’une version d’application dans une liste de lecture, avec les écrans qu’il touche.

playlist replace-release <id> --page PAGE_ID --primitive PRIMITIVE_ID --release-id REL_ID
                         [--apply [--expect-rev REVISION] [--expect-impact TOKEN] [--note TEXT]]
ParamètreTypeRequisPar défautNotes
<id>stringouiaucunL’identifiant de playlist pl_.
--page PAGE_IDstringouiaucunL’ID exact de la page qui contient l’application.
--primitive PRIMITIVE_IDstringouiaucunL’ID exact de la primitive application de cette page.
--release-id REL_IDstringouiaucunLa nouvelle version immuable rel_, à partir de data.application.release_id de app update.
--applybooleannondésactivéÉcrivez le remplacement. Sans cela, la commande est un aperçu en lecture seule.
--expect-rev REVISIONstringnonaucunAvec --apply : la révision de la liste de lecture provenant de l’aperçu. Une révision actuelle différente est revision_conflict, et le serveur la vérifie de manière atomique.
--expect-impact TOKENstringnonaucunAvec --apply : data.impact provenant de l’aperçu. Si le remplacement ou les écrans concernés ont changé depuis, l’écriture est resource_conflict : refaites un aperçu.
--note TEXTstringnonaucunAvec --apply : une note pour la personne qui révise la modification lorsqu’elle attend une révision.
screenrig playlist replace-release pl_01EXAMPLEPLAYLIST000000 --page board-page --primitive board --release-id rel_NEW
screenrig playlist replace-release pl_01EXAMPLEPLAYLIST000000 --page board-page --primitive board --release-id rel_NEW --apply

L’aperçu liste les écrans actifs, en attente de jumelage et archivés dont l’assignation par défaut, les entrées de programmation enregistrées (y compris celles en pause et à venir), la prise de contrôle ou la liste de lecture effective actuelle (y compris la lecture des campagnes et des dossiers hérités) référence la liste de lecture. data porte previous_release_id, release_id, revision, affected_screens (chacun avec id, label, state et revision), impact et applied. Un --apply direct saute le relevé des écrans, donc affected_screens est omis sauf si --expect-impact est fourni. Une version déjà épinglée réussit sans écrire. En cours d’examen, --apply propose le nouvel épinglage. Voir Remplacer une version d’application.

Le document de la liste de lecture

Une liste de lecture est name (1 à 120 caractères) plus pages (1 à 100), avec une bande sonore audio optionnelle et un format optionnel. Chaque page porte id, canvas, transition, advance, visibility optionnel, audio_cue optionnel et primitives (1 à 24). Les ID de page, de primitive et de piste sont une lettre suivie d’au plus 63 lettres, chiffres, _ ou - ; les ID de page sont uniques dans la liste de lecture et les ID de primitive sur leur page. Un canvas prend width et height de 1 à 1 000 000, un background et un viewport_fit optionnel : voir Arrière-plan et mouvement de la page.

Un format fait d’une liste de lecture un mur vidéo, {displays, arrangement, orientation} avec columns pour un grid, ou un bandeau, {region, orientation}. Un mur compte de 2 à 12 afficheurs de 1920 x 1080 (1080 x 1920 en portrait), chaque page ordinaire a la toile du mur, et le displays d’une primitive nomme les tuiles qu’elle couvre à la place de rect. Voir Murs vidéo et Bandeaux. Une page d’emplacement publicitaire, {id, type: "adslot", adslot_id} avec visibility optionnel, ne contient ni toile ni primitives ; une liste de lecture en contient au plus 16 et garde une page ordinaire sans visibility.

Un modèle ajoute fields au document, [{name, label, type, required, max_length?}] avec type valant text, media ou url, et peut marquer toute primitive locked: true. Une page lit un champ sous la forme {field.NAME} dans les params d'une carte (champs texte et adresse), comme selector.media_id d'une image ou d'une vidéo (un champ média) ou comme src entier d'un iframe (un champ adresse). Chaque jeton doit nommer un champ déclaré du bon type, chaque champ doit être lu, et une primitive verrouillée n'en lit aucun ; playlist validate le vérifie hors ligne. Seul le propriétaire ou un membre qui peut approuver modifie une primitive verrouillée (primitive_locked). Un modèle déclare au plus 16 champs : name est de 1 à 32 lettres minuscules, chiffres ou traits de soulignement, label jusqu'à 60 caractères, et le max_length d'un champ texte (200 par défaut) jusqu'à 2000. Un champ média ou adresse optionnel laissé sans valeur omet la primitive qui le lit. Déclarer fields et verrouiller une primitive relèvent des modèles de liste de lecture, une fonctionnalité Premium. Un format de mur vidéo de 2 ou 3 écrans exige Plus, et un de 4 à 12 écrans, Enterprise. Un forfait sans la fonctionnalité répond feature_not_in_plan avec required_plan, tandis qu’une écriture qui conserve ce que la liste de lecture contient déjà reste possible. Créer une copie à partir d'un modèle est inclus dans tous les forfaits.

Les six primitives sont image, video téléversée, stream en direct, iframe Web et application, et card. Le texte et l’habillage ne sont pas des types de transmission : placez une card pour du texte en direct, ou téléversez une image fixe terminée que votre agent a créée et placez-la comme image.

Un flux prend une ou deux sources ordonnées avec des protocoles uniques et une image prête du même projet comme fallback_media_id. Utilisez au plus un flux par page et avance basée sur la durée. HLS utilise une URL HTTPS publique; les Players Android et Qt se connectent directement aux flux RTSP des caméras, identifiants compris. Consultez les détails des transports de caméra pour les formats d’URL ouverts par chaque Player; le multicast direct UDP/MPEG-TS en option sur Android et Qt utilise un groupe IPv4 dans 239/8 et un port. Une source peut ne donner que son url et laisser le schéma nommer le protocole. Les autres Players sélectionnent l’alternative HLS ou affichent le fallback. Les octets du flux ne sont pas mis en cache pour la relecture. L’audio est muet par défaut ; muted défini à false le fait jouer, selon les règles du son d’une vidéo ci-dessous. L’importation et l’exportation de paquet de liste de lecture ne supportent pas les flux.

{
  "id": "live",
  "primitive": "stream",
  "sources": [
    {
      "protocol": "udp-mpegts",
      "group": "239.10.0.1",
      "port": 5000
    },
    {
      "protocol": "hls",
      "url": "https://example.com/live.m3u8"
    }
  ],
  "fallback_media_id": "med_fallback",
  "muted": true,
  "rect": {
    "x": 0,
    "y": 0,
    "width": 1920,
    "height": 1080
  },
  "layer": 0,
  "content_fit": "contain"
}

Utilisez ce primitif sur une page avec advance: {"mode":"duration","after_ms":30000}. Remplacez le flux d’exemple et l’ID de secours. Exigences du lecteur et configuration du transport.

Chaque primitive est à plat : id, primitive, les champs propres à cette primitive, puis rect, layer, content_fit, et enter et motion optionnels. Il n’y a pas d’objet de contenu imbriqué. rect est x, y, width et height en unités de toile et layer un nombre entier de 0 à 1024. Un rect peut dépasser la toile pour un fond perdu : les Players ajustent le contenu à l’ensemble de rect puis le rognent à la toile, donc utilisez content_fit cover ou fill pour remplir la toile visible. Une carte est placée par layout et ne nécessite un rect que pour free ; sur une liste de lecture de mur, displays remplace rect.

Les primitives image et vidéo exigent un selector. selector.by est id avec un media_id prêt et one_at_a_time false, ids avec 1 à 1 024 media_ids prêts uniques, all pour chaque objet prêt de cette primitive, tag correspondant à ^[A-Za-z0-9]{1,32}$, ou folder avec le folder_id d’un dossier multimédia mfd_ existant, qui lit directement les fichiers prêts qu’il contient et aucun de ses sous-dossiers. Ne mettez pas media_id sur la primitive elle-même et n’envoyez pas d’éléments résolus par le serveur. Une primitive application épingle un release_id et une primitive iframe prend un src et un title de 1 à 200 caractères, donc aucune des deux n’accepte de sélecteur. src est n’importe quelle page http ou https que l’écran peut atteindre, y compris une page de réseau local ou derrière une connexion ; un lien YouTube est stocké sous forme de son intégration à lecture automatique. src, et le fallback_src facultatif d’un iframe, peuvent porter des jetons d’écran comme {screen.field.kiosk_id}, et une primitive application peut porter params avec les mêmes jetons, de sorte qu’une seule liste de lecture donne à chaque écran sa propre page. Les Players Android, Amazon Signage Stick, Linux, Raspberry Pi et Windows ouvrent la page elle-même. L’application Web du Player et les Players macOS, Samsung Tizen, LG webOS et BrightSign l’encadrent, donc une page qui envoie X-Frame-Options (DENY, SAMEORIGIN ou l’obsolète ALLOW-FROM), ou une liste Content-Security-Policy frame-ancestors sans l’origine du Player, y affiche un cadre bloqué, et l’application Web du Player n’affiche que des pages https sans connexion dans l’adresse. Lorsque la publication détecte une page HTTPS publique qui refuse l’encadrement, l’écriture réussit quand même et la CLI affiche l’entrée warnings du serveur : le code iframe_framing_refused, le page_id, primitive_id et src, l’en-tête qui a refusé, et la prochaine étape (utilisez une page qui autorise l’encadrement depuis l’origine du Player, ou demandez à son propriétaire d’autoriser cette origine). Le serveur ajoute aussi un avertissement playlist.iframe_framing_refused au journal des événements, un par page qui refuse, que events list affiche avec primitive_id. Une page de réseau local, une page http et une page que le serveur ne peut pas joindre en quelques secondes ne sont pas vérifiées. Un Player signale une liste de lecture comme en cours de lecture dès que son manifeste est à l’écran, donc une publication vérifiée ne prouve pas qu’une page iframe s’est affichée : agissez sur l’avertissement, ou regardez l’écran. Les deux primitives Web exigent content_fit de fill, parce qu’aucune n’a de taille intrinsèque.

Un iframe prend aussi reload_s (0, la valeur par défaut, ne recharge jamais ; de 60 à 86400 charge src de nouveau toutes les reload_s secondes tant que la page est à l’écran), fallback_src (la page affichée lorsque src ne se charge pas, avec les formes et règles de src ; un src rétabli la remplace au prochain rechargement) et navigation_allowlist (de 1 à 64 sources d’hôte de la forme [scheme://]host[:port][path], comme example.com, *.example.com ou https://example.com/docs/ ; avec une liste, les liens de la page, les navigations par script et les redirections n’atteignent que src, fallback_src et les adresses correspondantes ; omettez-le pour aucune restriction, une liste vide est refusée). Un code d’intégration <iframe> collé est lu pour son src. Un partage Google Slides, Docs ou Sheets, un lien Publier sur le Web ou d’intégration, ou un lien d’intégration Microsoft 365, est stocké reconstruit pour l’écran : les présentations Slides et PowerPoint bouclent, une présentation Slides avance sur le délai propre du lien plafonné à la durée de la page (donnez à la page la durée de la présentation entière), et Docs, Sheets, Word et Excel se rechargent toutes les 5 minutes. Un fichier qui demande aux spectateurs de se connecter est refusé avec document_not_shared, dont le détail nomme le paramètre de partage à modifier. Voir Afficher une page Web, une vidéo ou un document.

advance.mode est duration avec after_ms, qui sur une page contenant exactement une vidéo YouTube (ni liste de lecture ni direct) peut aussi porter until réglé sur video_end pour que la page dure jusqu’à la fin de la vidéo et que after_ms soit le temps d’affichage quand l’écran ne peut pas lire la durée de la vidéo, media_end sur une page avec exactement une primitive image ou vidéo, audio_end sur une page dont le audio_cue nomme une piste sonore, ou application avec max_ms lorsque l’application termine son propre tour en appelant window.screenrig.nextPage(). Une page application nécessite exactement une primitive marquée controller ; tout autre mode l’interdit. after_ms, max_ms et dwell_ms sont des millisecondes entières de 1 000 à 86 400 000, et une image sur une page media_end nécessite dwell_ms. Une page contient au plus un stream et au plus deux primitives application ou iframe, et media_end interdit les deux.

transition.type est l’un de crossfade, swipe-left, swipe-right, swipe-up, swipe-down, dip, wipe-left, wipe-right, wipe-up, wipe-down, slide-left, slide-right, slide-up, slide-down ou stinger. duration_ms est requis, de 0 à 60000. playlist init écrit un fondu enchaîné de 200 ms. Balayer déplace les deux pages ensemble comme un carrousel. Glisser fait glisser la page entrante sur la page sortante, qui dérive d’un quart de la distance. Essuyer découvre la page entrante derrière un bord dur en mouvement. Plonger fait fondre la page sortante vers une couleur unie puis vers la page entrante ; color est un #RRGGBB optionnel, par défaut #000000, et n’est valide que sur dip. Les noms de direction indiquent la direction du mouvement : wipe-left est un bord se déplaçant vers la gauche. ease est optionnel : linear, in, out ou in-out ; la valeur par défaut est linear pour crossfade et swipe-* et in-out pour dip, wipe-* et slide-* ; il n’est pas permis sur stinger. La page entrante possède sa transition. La première page d’une liste de lecture ne joue aucune transition.

Un stinger est un graphique thématique plein cadre qui couvre la page sortante, échange la page entrante pendant que l’écran est couvert, puis la découvre. Utilisez-le pour nommer une section d’une liste de lecture : placez-le sur la première page de la section. L’objet stinger est requis pour type: "stinger" et interdit sur les autres types. Tous ses membres sont optionnels. theme est l’un de neomustard (par défaut), cyanotype, propaganda, signal, avant-garde, bloom ou primetime, et correspond aux thèmes de carte. title fait jusqu’à 40 caractères et subtitle jusqu’à 60, définis dans le type d’affichage du thème. logo est media: plus l’identifiant d’une image prête dans le projet, par exemple media:med_01EXAMPLE. accent est un #RRGGBB optionnel qui remplace l’accent du thème. duration_ms pour un stinger est entre 2000 et 6000 et couvre tout le bumper ; les durées typiques vont de 2700 à 4000. Le titre reste entièrement affiché pendant hang_ms, de 0 à 6000, par défaut 1000 (une seconde), et hang_ms est au maximum 60 % de duration_ms ; un maintien plus long nécessite un duration_ms plus long. Un Player incapable d’afficher un stinger joue un fondu enchaîné de même durée. Consultez la page en direct Carte Stinger pour voir la transition.

L’exemple suivant montre une transition de page stinger :

{ "type": "stinger", "duration_ms": 3500, "stinger": { "theme": "primetime", "title": "BREAKFAST", "subtitle": "Served until 11", "logo": "media:med_01EXAMPLE", "hang_ms": 1000 } }

Un objet enter optionnel sur une primitive ajoute une animation d’objet : fade-up, fade-down, fade-left, fade-right, fade-in, zoom-in ou zoom-out, et un stagger optionnel de 0 à 8 retarde son début de 120 ms par pas. Un motion optionnel garde une primitive en mouvement après son entrée : spin et drift font pivoter ou glisser une image ou une vidéo, et path déplace une image, une vidéo, une application ou un iframe le long de points de passage. Voir Arrière-plan et mouvement de la page.

Un objet page visibility optionnel limite quand la page joue : un booléen enabled requis, des limites civiles optionnelles from et until, et jusqu’à 16 windows récurrents de jours et heures civiles. from et until sont YYYY-MM-DDTHH:MM dans le fuseau horaire de chaque écran, from inclus et until exclu et postérieur à from ; une fenêtre est days (mon à sun) avec start et end sous la forme HH:MM, donnés ensemble ou tous deux omis pour la journée entière, et un end égal ou antérieur à start traverse minuit. enabled: false masque la page ; enabled: true nécessite au moins l’un de from, until, windows ou data. Chaque liste de lecture garde au moins une page sans aucun champ visibility. Un écran lit ces heures dans son fuseau horaire effectif : sa substitution, sinon le fuseau que signale son Player, sinon UTC.

Une condition visibility.data de page, {key, path?, equals?}, n’affiche la page que tant qu’un document de données de carte correspond : key est une clé de données de carte ou un ID de carte, path un pointeur RFC 6901 dans le document, et equals une chaîne, un nombre, un booléen ou null (omettez-le pour tester que la valeur existe). La clé {screen.weather} lit la météo à l’emplacement propre de chaque écran, que screen update ID --location LAT,LON définit : {"enabled":true,"data":{"key":"{screen.weather}","path":"/condition","equals":"rain"}} n’affiche la page que lorsqu’il pleut là où se trouve cet écran. Le document météo contient condition (clear, cloud, fog, rain, snow, storm ou wind), band (freezing sous 0 °C, cold de 0 à 9, mild de 10 à 17, warm de 18 à 24, hot à partir de 25), temperatureC en degrés entiers et isDay. C’est la météo actuelle de la cellule de 0,25 degré de l’écran, actualisée environ toutes les heures, et non une prévision. Un écran sans emplacement n’affiche jamais la page, et la publication refuse un path ou un equals que le document ne peut pas contenir, comme cloudy pour cloud. Un Player qui ne déclare pas la capacité d’hôte page.conditions voit une telle page désactivée. Les conditions de données sont une fonctionnalité Plus : sans elle, une écriture qui ajoute une condition visibility.data qu’une page n’a pas déjà reçoit feature_not_in_plan, tandis que conserver ou retirer une condition enregistrée et la visibilité par plages horaires restent possibles. Gardez une page ordinaire sans visibility comme page de repli.

Un primitif video ou stream joue sans son à moins de régler muted sur false. Il joue alors son audio au volume de l’écran tant que sa page est courante, et cette page met en pause la bande sonore de la liste de lecture, qui reprend au même point sur la page suivante sans son. Plusieurs primitifs sur une même page jouent tous leur audio. Une page avec son ne peut pas porter de audio_cue : une écriture qui en ajoute un répond invalid_request à pages[i].audio_cue, « a page with sound cannot cue the soundtrack », tandis qu’une page plus ancienne déjà enregistrée qui a les deux continue de jouer. Les publicités restent muettes.

Un objet audio optionnel de premier niveau ajoute une bande sonore qui joue continuellement pendant que les pages changent et se met en pause sur une page avec son. tracks liste de 1 à 128 entrées dans l’ordre de lecture, chacune avec un id unique (le motif d’ID de page) et le media_id d’un objet média audio prêt. loop par défaut est true et redémarre à la première piste après la dernière ; volume par défaut est 1 et varie de 0 à 1, multiplié par le volume du Player ; cued par défaut est false, et true arrête la bande sonore après chaque piste pour qu’une piste joue seulement quand une page audio_cue la démarre. Une page ordinaire peut porter audio_cue avec un ID track de cette liste et un booléen restart optionnel (par défaut false) : quand la page apparaît, le Player passe à cette piste depuis son début, la redémarrant seulement si elle joue déjà et que restart est true. Les repères sont des indices, les pages d’emplacement publicitaire ne peuvent pas les porter, et un repère sans bande sonore est rejeté. Une page avec advance {"mode":"audio_end"} se termine quand la piste nommée par son audio_cue se termine, donc elle requiert ce repère et une bande sonore, ne prend pas de after_ms, et suit les règles duration pour les primitifs image et vidéo ; un primitif stream a toujours besoin d’une page duration, et une application sur la page n’est jamais son contrôleur ; max_ms est un indice optionnel que le serveur remplace. playlist update remplace tout le document, donc omettre audio supprime la bande sonore ; playlist patch la conserve sauf si audio est fourni, et --clear-audio ou audio: null la supprime. Un bandeau n’a pas de bande sonore. Création de bande sonore.

Autres groupes de commandes