Cada comando se ejecuta de la misma manera
screenrig [--json | --human] [--api-url URL] [--config PATH] [--request-id ID]
[--project-id ID] [--idempotency-key KEY] [--timeout MS] [--beta-key KEY] <command> [args]Banderas globales
| Marcar | Tipo | Predeterminado | Notas |
|---|---|---|---|
--json | boolean | JSON para operaciones | Salida JSON explícita, retenida por compatibilidad. También selecciona ayuda estructurada. No se puede combinar con --human. |
--human | boolean | apagado | Seleccione salida operativa legible para humanos. No se puede combinar con --json. |
--project-id ID | string | último proyecto usado | Corrija esta invocación a un proyecto en caché sin cambiar la selección. Cada comando mantiene su objetivo y estado de recuperación durante toda su ejecución. |
--api-url URL | string | https://api.screenrig.ai | Origen del plano de control. SCREENRIG_API_URL establece lo mismo. |
--config PATH | ruta | el archivo de configuración del usuario | Use un archivo de configuración específico. SCREENRIG_CONFIG establece lo mismo. |
--request-id ID | string | generado por ejecución | Su propio id de solicitud, reflejado como request_id. Consérvelo en los informes. |
--idempotency-key KEY | string | derivado por escritura | Reutilice la misma clave para reintentar una escritura ambigua. El servidor devuelve el resultado original durante veinticuatro horas; un cuerpo diferente bajo la misma clave es idempotency_mismatch. |
--timeout MS | integer | 30000 por solicitud | Limita cada solicitud HTTP. En un comando que espera una operación es el plazo de espera en su lugar, y el valor predeterminado es 120000. |
--beta-key KEY | string | no establecido | Se envía solo cuando el plano de control lo solicita. SCREENRIG_BETA_KEY establece lo mismo. |
--help, -h | boolean | apagado | Imprima ayuda enfocada para el comando o grupo y salga. Añada --json para ayuda estructurada. |
--version, -V | boolean | apagado | Imprima la versión del CLI incluida y salga. Igual que el comando version. |
Entorno
| Variable | Efecto |
|---|---|
SCREENRIG_API_URL | Origen del plano de control, que anula la configuración almacenada. |
SCREENRIG_CONFIG | Ruta al archivo de configuración. |
XDG_CONFIG_HOME | Base del directorio de configuración. De lo contrario %APPDATA%\screenrig en Windows, o ~/.config/screenrig. |
SCREENRIG_BETA_KEY | Clave beta, cuando el plano de control la solicita. |
SCREENRIG_FFMPEG | Ruta absoluta a ffmpeg, cuando media upload no debe obtenerse de PATH. |
SCREENRIG_FFPROBE | Ruta absoluta a ffprobe. |
SCREENRIG_CWEBP | Ruta absoluta a cwebp, el codificador de reserva aún activo. |
SCREENRIG_CLIENT_ID | Ejecute como este cliente de servicio (scl_…), con exactamente uno de los dos siguientes. |
SCREENRIG_CLIENT_KEY_FILE | El archivo de clave privada del cliente de servicio, un JWK o PEM, firmado en una aserción private_key_jwt. |
SCREENRIG_CLIENT_SECRET | El secreto del cliente de servicio, enviado con HTTP Basic. |
No hay bandera de token ni variable de entorno de token. El CLI lee la sesión que el plugin almacenó para esta instalación, en un archivo privado del usuario que sobrevive a una actualización del plugin, y la renueva por sí mismo. Con SCREENRIG_CLIENT_ID configurado, inicia sesión como ese cliente de servicio en su lugar, mantiene el token en memoria y nunca lee ni escribe la configuración almacenada.
Salida
Los comandos operativos escriben JSON en stdout por defecto, incluyendo errores. Un solo resultado lleva un sobre: ok, luego data, request_id, operation_id y warnings[] en caso de éxito, o error en caso de fallo. El progreso, URLs seguras y notas humanas van a stderr. events follow emite NDJSON: un sobre JSON por evento, en su propia línea. Redirigir stdout no cambia el formato.
Use --human para inspección manual. Los comandos de eventos imprimen una línea logfmt por evento. La ayuda y grupos de comandos simples permanecen texto legible por defecto; use screenrig --json playlist --help para descubrimiento estructurado. --json y --human no se pueden combinar.
Los paquetes de plugins antiguos pueden requerir --json explícito para resultados operativos. Consulte la ayuda del CLI instalado al trabajar con un paquete antiguo. Los archivos de autoría de lista de reproducción siguen siendo documentos JSON; un sobre de resultado de comando no es un documento de lista de reproducción editable.
Un sobre de error lleva error.status, un error.code estable y a menudo error.next.command que nombra exactamente qué ejecutar a continuación. Ramifique en esos en lugar de en el texto.
Un cambio que espera la revisión de una persona es un éxito, no un error: ok: true, salir 0, data.status: pending_review con el review, una advertencia pending_review que nombra la URL de revisión, y data.next apuntando a reviews show ID. Un retag de medios aprobados bajo revisión es ok, salir 0, con la advertencia media_review_pending en su lugar: su revisión aparece en reviews list en pocos segundos. Ver Revisiones.
Códigos de salida
| Código | Significado |
|---|---|
0 | Éxito. |
1 | Fallo inesperado. |
2 | Error de uso. No se envió nada. |
3 | Problema con la credencial. Esta instalación no puede autenticarse. |
4 | No encontrado. |
5 | Conflicto. |
6 | Precondición fallida, incluyendo revision_conflict: la revisión --expect-rev estaba obsoleta. |
7 | Límite de frecuencia. Respete Retry-After, mostrado como retry_after_seconds. |
8 | Rechazo del lado del cliente por otro motivo. |
9 | Error del servidor. |
10 | Fallo de red. |
11 | Tiempo agotado. |
12 | Error de configuración. |
13 | La operación en sí falló. |
Códigos comunes de problemas en el sobre:
| Código | Significado | Siguiente paso |
|---|---|---|
not_enrolled | Esta instalación aún no tiene credencial de proyecto. | Crear un proyecto con screenrig agent enroll --email ADDRESS --organization NAME, o inicie sesión en este dispositivo en un proyecto al que pertenezca con screenrig login. |
session_ended | El inicio de sesión fue revocado, expiró o terminó. | screenrig login, aprobado por una persona en el dashboard. |
insufficient_access | El nivel de acceso de la sesión no puede hacer esto: Solo lectura no cambia nada, y Proponer no puede eliminar, controlar pantallas ni gastar. | screenrig agent status muestra effective_access. Cuando access_limited_by nombra project o person, el propietario del proyecto cambia la configuración de revisión; de lo contrario screenrig login --access manage, aprobado por una persona. |
approver_required | Solo el propietario del proyecto o un miembro que pueda aprobar puede hacer esto, como dar a un agente Gestión. | Pida al propietario del proyecto que active Puede aprobar, o elija Solo lectura o Proponer. |
playlist_not_approved | La lista de reproducción aún no tiene una versión aprobada, por lo que ninguna pantalla puede mostrarla. | Espere su revisión (screenrig reviews show ID), o elija una playlist aprobada. |
review_not_pending | La revisión ya fue decidida, retirada o reemplazada. | screenrig reviews show ID para su estado. |
login_denied, login_expired | La persona negó el inicio de sesión, o su código de 24 horas expiró. | Ejecute screenrig login de nuevo. |
client_auth_failed | Se rechazó la clave, secreto o id de un cliente de servicio. | Compare el archivo de clave o de secreto con el que inicia sesión la configuración (login --client-id ID --client-key-file FILE o --client-secret-file FILE) con screenrig service-client show ID. |
capability_required | El proyecto carece de la capacidad que este comando necesita, como screens o advertiser. | screenrig project capabilities, luego elija el --intent correspondiente para un nuevo proyecto o cambie el propósito del proyecto. |
rate_limited | Demasiadas solicitudes en la ventana actual. | Espere retry_after_seconds, luego intente de nuevo. |
free_organization_limit | La persona ya tiene su organización Standard gratuita, así que project create no puede iniciar otra. | Añade el proyecto a la organización indicada en el detalle: screenrig project create NAME --organization-id ID. Otra organización requiere Plus, Premium o Enterprise a través del formulario de contacto en https://screenrig.ai/contact#message. |
organization_plan_required | La organización no admite nuevas pantallas hasta que un plan lo pague. | El propietario mueve el proyecto con screenrig project moves y screenrig project move --organization-id ID, o la organización contrata Plus, Premium o Enterprise a través del formulario de contacto en https://screenrig.ai/contact#message. |
Revisiones y reintentos
Los guardias de revisión son opcionales. Omitir --expect-rev para escribir el recurso actual sin una lectura previa de revisión. Proporciónelo con un revision conocido para rechazar escrituras obsoletas. En revision_conflict, vuelva a obtener el recurso, reaplique el cambio y reintente con la revisión devuelta. En una falla de transporte ambigua, reintente con el mismo --idempotency-key; el plano de control devuelve el resultado original en lugar de escribir dos veces.
Créditos
El plano de control mide un crédito por cada comando autenticado facturado y uno por cada evento facturado de flujo de proyecto. Estos comandos de plano de control no lo debitan y siguen funcionando en cero: project show, agent status, notes list, notes show, screen reload, screen toast y screen screenshot. Abrir events follow cuesta un crédito como la suscripción, y la reproducción tras una reconexión es gratuita. Un comando de flota, screen assign, screen reload, screen toast o screen tag con varios ids de pantalla o --tag, es una acción facturada sin límite de cantidad de pantallas, incluyendo todas las continuaciones, por lo que una recarga o notificación emergente de flota se factura aunque una sola sea gratuita. screen screenshot --tag sigue todas las páginas de lista, cada una facturada, para resolver las pantallas etiquetadas; las capturas en sí son gratuitas. Los correos electrónicos de notificación y los avisos de pantalla son gratuitos. Cada intento de entrega de webhook de un evento del proyecto se mide como un evento facturado del flujo de escucha. Cada página JSON de playback plays o playback list es una solicitud facturada, y una exportación CSV de reproducción es una solicitud facturada para todo su rango.
Interfaz CLI empaquetada
Los comandos están agrupados como los agrupa la CLI. La instalación y el primer uso se cubren en Inicio; la elección entre subida, generación, tarjetas y selectores se cubre en Componer.
Nombres de comandos y descubrimiento
Use show para inspeccionar un recurso, list para colecciones, y kv get / kv set para valores. Use --name para nombres de pantalla, --screen-id, --app-id, --playlist-id y --release-id para selectores de recursos, --expect-rev para protecciones de revisión y --after para cursores de eventos. El grupo es app; “application” es el nombre del recurso. Los comentarios mantienen comment ACTION screen|playlist ID.
Use screenrig help --all para el inventario completo o screenrig playlist init
--help para ayuda enfocada. Agregue --json para metadatos de argumentos, opciones, valores predeterminados, ejemplos, alias y relaciones de opciones. Los grupos exactlyOne, atLeastOne y together se verifican antes de la configuración o acceso a red; requires significa que la primera opción requiere todas las opciones restantes. Lea stdin solo donde la ayuda del comando explícitamente soporta -.
Crear un nuevo proyecto
screenrig agent enroll --email ADDRESS --organization "Screens"
agent enroll crea una identidad, organización, proyecto Screens y membresía, y almacena credenciales de identidad y proyecto de forma privada. Reutilice el nombre de organización ya proporcionado, o use Screens sin un aviso de elección. --organization es obligatorio; --name nombra por separado al agente. Use el correo electrónico de contacto real de la persona. La inscripción envía un correo electrónico de invitación para miembros del proyecto; no revela si esa dirección ya tiene un inicio de sesión. La persona abre la invitación y crea un inicio de sesión con passkey, o inicia sesión para añadir el proyecto a su inicio de sesión existente. La aceptación mueve el proyecto a la organización que tiene el dominio de correo electrónico verificado de la persona, de lo contrario a la organización Standard gratuita que ya posee, renombrada en caso de conflicto de nombres.
Agregue --intent advertising para un proyecto que compra anuncios en lugar de emparejar pantallas. --force reemplaza el estado de inscripción o conexión pendiente de esta instalación al crear intencionalmente otro proyecto.
agent enroll --email ADDRESS --organization NAME [--name NAME]
[--intent signage|advertising] [--force]
Iniciar sesión con AgentID
Un agente con un AgentID inicia sesión en https://api.screenrig.ai/agentid/start, recibe un código de reclamación, instala el plugin oficial y ejecuta screenrig agent enroll --agentid-claim CODE --organization NAME. El correo electrónico verificado del propietario recibe la invitación al dashboard.
Iniciar sesión en una cuenta existente
screenrig loginlogin registra esta instalación en una cuenta que ya existe. Imprime una dirección del dashboard y un código, luego espera hasta 24 horas. Una persona abre la dirección, que lleva el código, verifica que coincida, ajusta el proyecto, Solo lectura, Proponer o Administrar, o las áreas de capacidad si lo desean, y presiona Conectar una vez; un inicio de sesión en el dashboard de la última hora es la prueba, por lo que no hay un segundo aviso de passkey. La CLI almacena la sesión, selecciona el proyecto aprobado y devuelve status: signed_in con el proyecto, organización y access.
login [--project ID] [--access read|propose|manage] [--name NAME] [--no-wait] [--resume ID]
logout--access solicita un nivel; el predeterminado es manage, y la persona decide. --project sugiere el proyecto. --no-wait devuelve status: pending con el verification_uri_complete, el user_code y un identificador login_ que no contiene secreto; login --resume ID espera la aprobación posterior. Ejecute login nuevamente en una instalación con sesión iniciada para añadir otro proyecto o para elevar un proyecto Solo lectura o Proponer a Administrar.
Cada sesión lleva áreas de capacidad: screens, content, playlists, advertising, reports y project. Una sesión solo ejecuta comandos en sus áreas; reports también lee cualquier área. Un comando fuera de ellas devuelve 403 forbidden con el detalle This agent credential lacks the <name> capability.. Las sesiones de solo lectura solo listan y leen. Las sesiones de propuesta también suben multimedia, escriben notas y proponen cambios en multimedia, listas de reproducción y pantallas, los cuales esperan la revisión de una persona. Un cambio más allá del nivel de la sesión devuelve 403 insufficient_access.
logout revoca el inicio de sesión en el servidor y elimina los tokens almacenados. Un fallo que podría no haber llegado al servidor los conserva, por lo que volver a ejecutar logout es seguro. doctor muestra cuándo termina la sesión: 90 días después de su último uso y como máximo un año después del inicio de sesión. Véase Autenticación.
Ciclo de vida del proyecto y la organización
El proyecto actual es el último usado. Cada sobre JSON incluye contexto de organización y proyecto; la salida humana nombra ambos. Las credenciales de identidad están limitadas por la membresía del proyecto seleccionado. El estado de reintento se mantiene separado por proyecto.
project list
project use ID
project create NAME [--organization-id ID | --organization NAME]
project moves
project move --organization-id ID
project transfer-owner --user-id ID
project deletion-preview
project delete --name NAME --revision N --yes
organization list
organization rename ID NAME
agent revoke-identity --yesproject list verifica membresías accesibles. project use selecciona una. Crear requiere un nombre único en su organización y por defecto la organización del proyecto actual, luego la organización que administra; cuando no se nombra ninguna, la organización que tiene el dominio de correo electrónico verificado del propietario viene primero. La persona responsable se convierte en propietario. Cada plan limita cuántos proyectos tiene una organización; cada persona tiene una organización Standard gratuita, y una segunda necesita Plus, Premium o Enterprise. Sin proyecto actual y sin organización nombrada, el servidor coloca el proyecto de la misma manera. --organization NAME inicia una nueva organización solo para una persona que no tiene una gratuita; de lo contrario, la creación se rechaza con free_organization_limit, cuyo detalle nombra la organización a usar. La inscripción está gobernada por límites de tasa.
El propietario puede moverse a un destino devuelto por project moves, o transferir la propiedad a un miembro verificado existente. Un movimiento lleva pantallas, y una organización de destino que ya tiene tantos proyectos como permite su plan lo rechaza con project_limit_reached. La eliminación usa el nombre actual exacto y la revisión positiva de su vista previa. Requiere cero pantallas no archivadas, ningún plan propio, sin obligaciones de billetera y sin publicidad activa. Envía correos a los miembros y conserva una lápida.
Los nombres de organización pueden repetirse; use IDs explícitos al renombrar una organización que administra. Una organización tiene administradores designados y miembros que la tienen como organización principal; los administradores invitan a otros administradores y miembros por correo electrónico desde el panel. organization list marca organizaciones free y plan_required e informa new_organization_allowed. Su lista de proyectos no concede acceso al contenido del proyecto. La organización paga: su dinero y asignaciones son compartidos por sus proyectos; el uso sigue atribuido a proyectos y los cargos históricos conservan su pagador original.
login --project ID solicita ese proyecto con la misma identidad. Solo la aprobación explícita de esta solicitud concede la membresía. agent disconnect --yes revoca una membresía; agent revoke-identity --yes revoca por separado la identidad y todas las membresías. Una respuesta ambigua conserva las credenciales locales y el estado de reintento para reconciliación.
Los informes publicitarios conservan datos de liquidación más allá de la retención de eventos. Lea sus metadatos de cobertura: reproducciones históricas faltantes o duración aprobada desconocida son desconocidas, nunca cero. Un informe puede tener totales financieros completos e historial de resultados incompleto.
Proyectos, invitaciones y diagnósticos
Los comandos de proyecto listan membresías, seleccionan un proyecto, crean proyectos y gestionan sus nombres, propietarios, movimientos y eliminación. Las invitaciones incorporan personas a proyectos o redes publicitarias.
project show#
Leer el registro del proyecto y su crédito restante.
project show
Sin parámetros.
screenrig project show
data.credit_remaining es un conteo entero total de créditos. Por debajo de 1000 el sobre puede llevar una advertencia credits_low. Hasta el 1 de enero de 2027 el uso es gratuito dentro de lo razonable, por lo que el crédito restante es un medidor entero que un agente puede leer, no una instrucción de corte.
project rename#
Establecer el nombre que las personas ven en el conmutador de proyectos del panel.
project rename NAME
project capabilities#
Leer el plan del proyecto, las banderas de función independientes screens y advertiser y el conjunto de capacidades efectivas. Una denegación de ruta prevalece sobre una lectura de capacidad obsoleta.
project capabilities
project uptime#
Leer la disponibilidad diaria de pantallas del proyecto durante días UTC.
project uptime [--day-from YYYY-MM-DD] [--day-to YYYY-MM-DD]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--day-from YYYY-MM-DD | string | no | 29 días antes de --day-to | Primer día UTC, inclusive. |
--day-to YYYY-MM-DD | string | no | hoy | Último día UTC, inclusive. Como máximo 366 días después de --day-from. |
screenrig project uptime
screenrig project uptime --day-from 2026-09-01 --day-to 2026-09-30El rango y los valores predeterminados son los de screen uptime. data.items lista una fila por día UTC, del más antiguo al más reciente: online_s y offline_s sumados sobre las pantallas con estado registrado ese día, availability, coverage (la proporción del día de esas pantallas con estado registrado) y screens (cuántas tenían estado registrado). La fila de hoy cubre intervalos que terminaron hasta ahora; screen list muestra quién está en línea ahora.
project health-trend#
Leer la salud de la flota por hora UTC: pantallas reportando, calientes, pantalla desconectada, fallando.
project health-trend [--from TIME] [--to TIME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--from TIME | string | no | 24 horas antes de --to | Inicio inclusivo de la hora: un instante RFC 3339 con segundos y un desplazamiento (normalizado a UTC), now, o una antigüedad como 7d, 12h o 30m. |
--to TIME | string | no | ahora | Fin exclusivo, en las mismas formas. Máximo 93 días después de --from. |
screenrig project health-trend
screenrig project health-trend --from 7ddata.items lista la salud de la flota por hora UTC: hour, screens_reporting, hot (temperatura máxima igual o superior a 80 °C), display_disconnected, y crashing (3 o más fallos en 24 horas). La CLI sigue next_cursor hasta el final y responde cada hora con next_cursor null. Las horas siguen a los informes con hasta unos 5 minutos de retraso.
invitations#
Crear, listar o revocar invitaciones para miembros del proyecto y compradores de anuncios.
invitations create --email ADDRESS[,ADDRESS] [--kind member|ad-buyer]
invitations create --link
[--screen-id ID] [--slot-id ID] [--policy trusted|review_required]
invitations list [--kind member|ad-buyer] [--status STATUS]
invitations revoke ID
--kind predetermina a member. La entrega por correo electrónico es la predeterminada y expira después de siete días. --email acepta destinatarios separados por comas, hasta cincuenta por solicitud. --link es solo para miembros, requiere exactamente un destinatario previsto y devuelve una URL de invitación de veinticuatro horas una vez para entrega directa. Nunca ponga esa URL en registros, notas o una transcripción compartida. Las listas nunca la devuelven.
Los compradores de anuncios usan solo correo electrónico y necesitan un alcance de pantalla o espacio propio (o ambos). --screen-id y --slot-id aceptan IDs separados por comas; --policy selecciona trusted o review_required. Los filtros de estado son queued, sent, issued, accepted, revoked, expired y failed.
screenrig invitations create --email teammate@example.com
screenrig invitations create --kind ad-buyer --email buyer@example.com --screen-id scr_LOBBY --policy review_required
Los agentes no aceptan invitaciones. La persona invitada abre el correo, inicia sesión o crea una passkey, y acepta en el panel. El registro por enlace verifica primero su correo. Revocar una invitación aceptada no anula una membresía; use los controles de membresía de comprador para revocar el acceso publicitario.
agent status#
Reportar si esta instalación tiene una credencial usable.
agent status
Sin parámetros.
screenrig agent status
Solo lectura. Nunca cambia estado local o servidor, y no cuesta nada. El resultado lleva el access de la sesión, su effective_access y, cuando la configuración de revisión del proyecto o un miembro sin aprobación lo mantiene bajo, access_limited_by (project o person).
login#
Inicie sesión en esta instalación con una cuenta existente, con la aprobación de una persona en el panel.
login [--project ID] [--access read|propose|manage] [--name NAME] [--no-wait] [--resume ID]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--project ID | string | no | ninguno | Sugiera el proyecto que la persona aprueba. |
--access LEVEL | string | no | administrar | read, propose o manage. La persona toma la decisión final. |
--name NAME | string | no | ninguno | Nombre de esta instalación, máximo 80 caracteres. |
--no-wait | boolean | no | apagado | Devolver status: pending con la dirección, el código y un identificador login_. |
--resume ID | string | no | ninguno | Espere el inicio de sesión pendiente que --no-wait inició. |
screenrig login --access readImprime la dirección del panel y un código de ocho letras en stderr, luego espera hasta 24 horas. La persona verifica que el código coincida y presiona Conectar una vez, sin segunda solicitud de passkey tras un inicio de sesión en el panel en la última hora. El sobre informa status: signed_in, el proyecto, la organización y access. Ejecutarlo de nuevo en una instalación con sesión iniciada añade un proyecto o eleva un proyecto de Solo lectura o Proponer a Gestionar. La denegación es login_denied y la expiración es login_expired.
logout#
Finalizar la sesión de esta instalación y eliminar sus tokens.
logoutSin parámetros.
screenrig logoutRevoca el inicio de sesión en el servidor, luego elimina los tokens almacenados e informa status: signed_out. Un fallo que podría no haber llegado al servidor los mantiene, por lo que volver a ejecutar es seguro. Ejecute screenrig login para iniciar sesión nuevamente.
dashboard#
Abra la URL ordinaria del panel. Este comando no genera un enlace de inicio de sesión, crea una sesión ni necesita credencial de agente.
dashboard [open]
screenrig dashboard
El dashboard muestra los proyectos de la persona después de iniciar sesión. La selección de proyecto en el navegador no cambia el proyecto vinculado a un agente.
dashboard reset-sign-in#
Solicitar un correo electrónico de restablecimiento de inicio de sesión sin credencial de agente.
dashboard reset-sign-in --email ADDRESS
El acuse no revela si el correo tiene inicio de sesión. El restablecimiento enviado por correo expira en una hora; la persona crea una nueva passkey. La finalización reemplaza sus credenciales de inicio de sesión y revoca otras sesiones.
doctor#
Verifique esta instalación e informe cada verificación por nombre.
doctor [--repair-config]
| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--repair-config |
boolean | no | apagado | Restringa los permisos en un archivo de configuración existente que sea legible por grupo u otros. |
screenrig doctor
data.checks nombra cada verificación y su estado: el runtime de Node, la ruta de configuración resuelta y sus permisos, el origen del plano de control y sus rutas de servicio, la capacidad feedback anunciada, y la cadena de herramientas multimedia opcional (ffmpeg, ffprobe, encoder_libx264, encoder_libx265, encoder_libwebp, cwebp, filter_hdr_tonemap).
Cualquier verificación fallida hace que doctor salga con código distinto de cero, así que lea los nombres individuales antes de marcar la instalación como no saludable. Una cadena de herramientas de medios faltante afecta solo a media upload.
version#
Imprima la versión del CLI incluida y su adaptador de protocolo.
version
Sin parámetros.
screenrig version
Ejecute esto primero en una sesión. Un sobre exitoso prueba que el lanzador resolvió la CLI incluida. --version y -V hacen lo mismo desde cualquier línea de comandos.
Clientes de servicio
Un cliente de servicio es un servidor, script o trabajo de CI propiedad del proyecto, que inicia sesión con su propia clave o secreto en lugar de la aprobación de una persona. Para crear o modificar un cliente, el agente necesita acceso Gestionar para su identidad con el ámbito identity, su propia autorización Gestionar con la capacidad project en el proyecto de destino y una persona responsable verificada que administre la organización de ese proyecto. Un cliente de servicio nunca gestiona clientes. Para ejecutar comandos como el cliente, configure SCREENRIG_CLIENT_ID con SCREENRIG_CLIENT_KEY_FILE o SCREENRIG_CLIENT_SECRET. Consulte Clientes de servicio.
service-client list#
Listar los clientes de servicio de este proyecto, activos y revocados, con sus claves, IDs secretas y uso.
service-client listSin parámetros.
screenrig service-client listNunca devuelve un secreto.
service-client show#
Mostrar un cliente de servicio.
service-client show ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
ID | string | sí | ninguno | El id del cliente, scl_…. |
screenrig service-client show scl_IDLista el kid de cada clave y el css_ de cada secreto para rotación.
service-client create#
Crear un cliente de servicio propiedad de este proyecto.
service-client create --name NAME [--capability NAME]... [--access read|propose|manage] [--key-file PATH] [--secret-file PATH]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | Máximo 80 caracteres. |
--capability NAME | string | no | los seis | Repetible: screens, content, playlists, advertising, reports, project, cada uno dentro de los suyos. |
--access LEVEL | string | no | leer | read, propose o manage. propose envía cambios de lista de reproducción y pantalla a la revisión de una persona. |
--key-file PATH | ruta | uno de estos | ninguno | Un JWK o PEM: Ed25519, EC P-256 o RSA de al menos 2048 bits. Solo se envía la mitad pública. |
--secret-file PATH | ruta | uno de estos | ninguno | Generar un secreto y escribirlo en este nuevo archivo 0600. Se muestra una vez. |
screenrig service-client create --name "Nightly report" --access read --capability reports --key-file screenrig-client.pemRequiere las autorizaciones de identidad, proyecto y administración de la organización descritas arriba. Máximo 50 clientes activos por organización, contados en todos sus proyectos. Una clave sin su propio kid se identifica mediante su huella RFC 7638.
service-client add-key#
Registrar una segunda clave pública para una rotación sin tiempo de inactividad.
service-client add-key ID --key-file PATH| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
ID | string | sí | ninguno | El id del cliente. |
--key-file PATH | ruta | sí | ninguno | La nueva clave pública, un JWK o PEM. |
screenrig service-client add-key scl_ID --key-file new.pemUn cliente tiene como máximo dos claves.
service-client add-secret#
Generar un segundo secreto para una rotación sin tiempo de inactividad.
service-client add-secret ID --secret-file PATH| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
ID | string | sí | ninguno | El id del cliente. |
--secret-file PATH | ruta | sí | ninguno | Un nuevo archivo 0600 que recibe el secreto. |
screenrig service-client add-secret scl_ID --secret-file new-secretUn cliente tiene como máximo dos secretos. El actual sigue funcionando hasta que lo elimine.
service-client remove-key#
Eliminar una clave; los tokens emitidos con ella dejan de funcionar en segundos.
service-client remove-key ID --kid KID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
ID | string | sí | ninguno | El id del cliente. |
--kid KID | string | sí | ninguno | El id de clave de service-client show. |
screenrig service-client remove-key scl_ID --kid KIDUn cliente mantiene al menos una clave o secreto.
service-client remove-secret#
Eliminar un secreto; los tokens emitidos con él dejan de funcionar en segundos.
service-client remove-secret ID --secret-id css_ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
ID | string | sí | ninguno | El id del cliente. |
--secret-id ID | string | sí | ninguno | El id secreto css_ de service-client show. |
screenrig service-client remove-secret scl_ID --secret-id css_IDservice-client revoke#
Revocar un cliente de servicio permanentemente.
service-client revoke ID --yes| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
ID | string | sí | ninguno | El id del cliente. |
--yes | boolean | sí | apagado | Confirmar la revocación permanente. |
screenrig service-client revoke scl_ID --yesElimina sus claves y secretos; sus tokens dejan de funcionar en segundos. El registro permanece para auditoría.
Multimedia
Un objeto multimedia es una imagen fija, un clip o una pista de audio MP3, almacenado como exactamente una versión. No hay respaldo por dispositivo, así que lo que media upload o media generate almacena es lo que cada pantalla debe decodificar.
Las carpetas multimedia organizan la biblioteca. Un ID de carpeta comienza con mfd_ y un ID de archivo con med_. Una carga llega a la raíz de la biblioteca a menos que --folder nombre una carpeta, media move y media folder update reorganicen el árbol, y un selector de lista de reproducción by:folder reproduce los archivos directamente dentro de una carpeta, no los de sus subcarpetas. Una organización contiene como máximo 1000 carpetas en todos sus proyectos, anidadas hasta 10 niveles, con nombres de 1 a 100 caracteres.
Un contenido multimedia conserva su ID cuando cambia su archivo: media replace reemplaza el archivo en el sitio, de modo que cada lista de reproducción y programación que lo usa reproduce el nuevo, y media versions enumera todos los archivos que ha tenido el elemento.
media generate#
Generar una imagen fija presentable de página completa en la tienda de medios del proyecto.
media generate --prompt TEXT [--aspect-ratio RATIO] [--quality low|medium|high] [--tag TAG]
[--no-progress]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--prompt TEXT | string | sí | ninguno | De 1 a 4000 caracteres. Ponga todos los hechos y todo el texto en el aviso para que el modelo de imagen lo componga. |
--aspect-ratio RATIO | string | no | 16:9 | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2 o 2:3. |
--quality | string | no | medium | low, medium, o high. Cambia el nivel de detalle de la imagen fija. |
--tag TAG | string | no | ninguno | La misma etiqueta de 1 a 32 letras o dígitos que la carga. |
--no-progress | boolean | no | apagado | Suprimir la línea de inicio de stderr. |
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 LobbyMenuEl comando almacena un WebP con pérdida en la tienda de medios del proyecto y devuelve data.media_id (med_…). No vuelva a subir los bytes. Nunca imprima píxeles ni el aviso. El árbol de autoría y el contrato del aviso viven en Compose.
media upload#
Convierta un archivo local a bytes de entrega, cárguelo y espere hasta que el objeto esté listo.
media upload <file> [--content-type TYPE] [--tag TAG] [--folder ID] [--no-wait] [--poll-ms MS]
[--timeout MS] [--no-transcode] [--codec h264|hevc] [--max-fps N]
[--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
[--preset signage-1080p30|signage-4k30] [--no-audio]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<file> | ruta | sí | ninguno | La imagen fija, clip o pista de audio fuente. El nombre del archivo se convierte en el identificador humano en listados, listas de reproducción e informes de reproducción, así que nómbrelo según lo que muestra. |
--content-type TYPE | string | no | detectado a partir de los bytes subidos | Declare usted mismo el tipo de contenido en lugar de dejar que la CLI lo detecte. |
--tag TAG | string | no | ninguno | De uno a 32 letras o dígitos, que coinciden con ^[A-Za-z0-9]{1,32}$. Se rechazan los guiones. Una etiqueta es lo que hace que media list --tag TAG sea un mapa confiable de nombre de archivo a id. |
--folder ID | string | no | raíz de la biblioteca | Una carpeta de medios mfd_ existente, verificada antes de comenzar cualquier trabajo. La carga lista se mueve a ella y data.folder_id la reporta. Se rechaza con --no-wait (usage_error, salida 2), porque el ID de medios aún no existe: ejecute media move una vez que el objeto esté listo. |
--no-wait | boolean | no | apagado | Devolver tan pronto como se acepte el compromiso. El objeto aún no está listo; termine con operations wait. |
--poll-ms MS | integer | no | 1000 | Intervalo entre sondeos de operación mientras espera. |
--timeout MS | integer | no | 120000 | Fecha límite para la espera. También limita cada solicitud subyacente. |
--no-transcode | boolean | no | apagado | Suba los bytes de origen sin cambios. ffmpeg, ffprobe y cwebp no se ejecutan. WebP sin pérdida sigue siendo rechazado. |
--codec | string | no | h264 | h264 o hevc; avc y h265 se aceptan como alias. Use hevc solo cuando todas las pantallas que reproducirán el clip sean Player nativos. |
--max-fps N | number | no | 30 | Velocidad de fotogramas de salida constante. Cada video se codifica exactamente a esta velocidad sin importar su velocidad de origen, por lo que los clips consecutivos nunca cambian la velocidad. Mayor que 0 y como máximo 240. |
--max-edge PIXELS | integer | no | 3840 | Límite aplicado a cada borde, de 16 a 3840. Se preserva la relación de aspecto y una fuente más pequeña nunca se escala hacia arriba. |
--webp-quality | integer | no | 90 | Calidad de imagen fija para la codificación WebP, de 1 a 100. |
--preset | string | no | no establecido | signage-1080p30 o signage-4k30. Tamaño de video consciente de la orientación y 30 fps constantes. --max-edge y --max-fps pueden ajustar un preajuste pero no ampliarlo. Solo video; no se puede combinar con --no-transcode. |
--no-audio | boolean | no | apagado | Omitir la pista de audio en la entrega de video. Solo video; no se puede combinar con --no-transcode. |
--no-progress | boolean | no | apagado | No emitir salida de progreso. El progreso siempre se envía a stderr; stdout queda reservado para el único sobre de resultado. |
screenrig media upload ./lobby-welcome-loop.mp4 --tag LobbyLoopEl video se convierte en MP4: perfil alto H.264 nivel 4.2 por defecto, o H.265 con --codec hevc, en yuv420p etiquetado Rec. 709. Una fuente HDR se mapea a tono Rec. 709. El audio, si la fuente lo tiene, es AAC a 192 kbit/s, 48 kHz, estéreo.
Las imágenes fijas se convierten en WebP con pérdida a calidad 90, manteniendo el canal alfa donde la fuente lo tiene. Una fuente animada se repite indefinidamente. Un WebP que ya cumple con el límite de tamaño se pasa sin recodificar.
El audio se convierte en un MP3 para la banda sonora de la lista de reproducción. Una fuente MP3 se sube sin cambios; fuentes WAV, AAC, M4A, OGG y FLAC se convierten a MP3 de 128 kb/s, que requiere una compilación ffmpeg con libmp3lame. Una pista dura de 1 segundo a 3 horas. playlist init convierte entradas de audio en pistas de banda sonora en lugar de páginas. El objeto listo es un objeto multimedia audio con duración. No puede colocarse en una página; en la lista de reproducción, nómbrelo como banda sonora audio.
El id del objeto listo es data.media_id. El mismo valor es data.id y data.operation.result.media_id. Ese id es lo que toma un selector de lista de reproducción.
Un nombre de archivo con poca información como video.mp4 añade una advertencia generic_filename al sobre. La carga aún tiene éxito y la CLI nunca renombra el archivo; elija el nombre antes de ejecutar el comando.
La conversión ejecuta ffmpeg y ffprobe desde PATH, o desde las rutas absolutas en SCREENRIG_FFMPEG y SCREENRIG_FFPROBE. Las imágenes fijas prefieren el codificador ffmpeg libwebp y recurren a cwebp en PATH o SCREENRIG_CWEBP. Ejecute doctor antes de la primera carga de una sesión.
--preset signage-1080p30 limita el borde largo a 1920, el borde corto a 1080 y la tasa a 30 fps constante. signage-4k30 limita el borde largo a 3840, el borde corto a 2160 y la tasa a 30 fps constante. Ambos funcionan con contenido horizontal, vertical y cuadrado. --no-audio omite la codificación de audio para clips silenciosos. Estas opciones solo se aplican a video.
screenrig media upload ./lobby.mov --preset signage-1080p30 --no-audioscreenrig media upload ./menu.png --folder mfd_01EXAMPLEFOLDER000000000La carga aterriza en la raíz de la biblioteca y se mueve a la carpeta una vez que está lista. media upload-batch --folder mueve cada elemento cargado de la misma manera.
Con acceso Proponer, o cuando el proyecto requiere revisión para cambios de agente, una nueva carga espera la revisión de una persona antes de que una etiqueta, carpeta o selector all la reproduzca; vea Revisiones.
media upload-batch#
Suba muchos archivos locales desde un manifiesto, reanudando desde un archivo de estado requerido.
media upload-batch <manifest.json> [--state FILE] [--concurrency N] [--tag TAG] [--folder ID]
[--poll-ms MS] [--timeout MS] [--no-transcode] [--codec h264|hevc]
[--max-fps N] [--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
[--preset signage-1080p30|signage-4k30] [--no-audio]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<manifest.json> | ruta | sí | ninguno | { "items": [ { "path": "./a.png", "tag"?: "Lobby", "content_type"?: "image/png" } ] } con 1 a 1000 elementos. Las rutas son relativas al archivo manifiesto. |
--state FILE | ruta | no | archivo privado junto a la configuración | Un archivo JSON 0600 indexado por el SHA-256 de los bytes locales de cada archivo fuente. Los elementos ya presentes con un media_id se reportan como resumed. No comparta un archivo de estado entre proyectos. |
--concurrency N | integer | no | el valor predeterminado de la CLI | Subidas paralelas. |
--no-transcode | boolean | no | apagado | Suba los bytes de origen sin cambios, como hace media upload. |
--poll-ms MS | integer | no | 1000 | Intervalo entre sondeos de operación mientras espera. |
--timeout MS | integer | no | 120000 | Fecha límite para la espera. También limita cada solicitud subyacente. |
--codec | string | no | h264 | h264 o hevc; avc y h265 se aceptan como alias. Use hevc solo cuando todas las pantallas que reproducirán el clip sean Player nativos. |
--max-fps N | number | no | 30 | Velocidad de fotogramas de salida constante. Cada video se codifica exactamente a esta velocidad sin importar su velocidad de origen, por lo que los clips consecutivos nunca cambian la velocidad. Mayor que 0 y como máximo 240. |
--max-edge PIXELS | integer | no | 3840 | Límite aplicado a cada borde, de 16 a 3840. Se preserva la relación de aspecto y una fuente más pequeña nunca se escala hacia arriba. |
--webp-quality | integer | no | 90 | Calidad de imagen fija para la codificación WebP, de 1 a 100. |
--preset | string | no | no establecido | signage-1080p30 o signage-4k30. Tamaño de video consciente de la orientación y 30 fps constantes. --max-edge y --max-fps pueden ajustar un preajuste pero no ampliarlo. Solo video; no se puede combinar con --no-transcode. |
--no-audio | boolean | no | apagado | Omitir la pista de audio en la entrega de video. Solo video; no se puede combinar con --no-transcode. |
--tag TAG | string | no | ninguno | Aplicado cuando un elemento omite su propia etiqueta. |
--folder ID | string | no | raíz de la biblioteca | Una carpeta de medios mfd_ existente. Cada elemento subido se mueve a ella después de la carga, y data.folder_id lo reporta. |
--no-progress | boolean | no | apagado | No emitir salida de progreso. |
screenrig media upload-batch ./images.json --state ./upload-state.jsonEl sobre lleva data.items[] en orden de manifiesto, cada uno con path, source_filename, sha256, outcome (accepted o resumed), y media_id. data.failed[] lleva elementos que no se entregaron.
media replace#
Reemplazar el archivo de un contenido multimedia en el sitio. Su ID, sus listas de reproducción y sus programaciones siguen funcionando.
media replace <id> <file> [--expect-rev REVISION] [--note TEXT] [--content-type TYPE] [--no-wait]
[--poll-ms MS] [--timeout MS] [--no-transcode] [--codec h264|hevc] [--max-fps N]
[--max-edge PIXELS] [--webp-quality 1-100] [--no-progress]
[--preset signage-1080p30|signage-4k30] [--no-audio]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
<file> | ruta | sí | ninguno | La nueva imagen, clip o pista de audio. Debe ser del mismo tipo que el contenido multimedia: imagen por imagen, vídeo por vídeo, audio por audio. Se comprueba antes de que empiece cualquier trabajo (usage_error, código de salida 2). |
--expect-rev REVISION | string | no | ninguno | Precondición de revisión opcional. Un valor obsoleto suministrado es revision_conflict y la carga declarada se cancela: lea media show ID y ejecute de nuevo el comando. |
--note TEXT | string | no | ninguno | Se conserva con la nueva versión y se muestra a la persona que la revisa. Como máximo 280 caracteres. |
--content-type TYPE | string | no | detectado a partir de los bytes subidos | Declare usted mismo el tipo de contenido en lugar de dejar que la CLI lo detecte. |
--no-wait | boolean | no | apagado | Devolver tan pronto como se acepte el reemplazo. El archivo nuevo aún no está en uso; termine con operations wait. |
--poll-ms MS | integer | no | 1000 | Intervalo entre sondeos de operación mientras espera. |
--timeout MS | integer | no | 120000 | Fecha límite para la espera. También limita cada solicitud subyacente. |
--no-transcode | boolean | no | apagado | Suba los bytes de origen sin cambios. ffmpeg, ffprobe y cwebp no se ejecutan. WebP sin pérdida sigue siendo rechazado. |
--codec | string | no | h264 | h264 o hevc; avc y h265 se aceptan como alias. Use hevc solo cuando todas las pantallas que reproducirán el clip sean Player nativos. |
--max-fps N | number | no | 30 | Velocidad de fotogramas de salida constante. Cada video se codifica exactamente a esta velocidad sin importar su velocidad de origen, por lo que los clips consecutivos nunca cambian la velocidad. Mayor que 0 y como máximo 240. |
--max-edge PIXELS | integer | no | 3840 | Límite aplicado a cada borde, de 16 a 3840. Se preserva la relación de aspecto y una fuente más pequeña nunca se escala hacia arriba. |
--webp-quality | integer | no | 90 | Calidad de imagen fija para la codificación WebP, de 1 a 100. |
--preset | string | no | no establecido | signage-1080p30 o signage-4k30. Tamaño de video consciente de la orientación y 30 fps constantes. --max-edge y --max-fps pueden ajustar un preajuste pero no ampliarlo. Solo video; no se puede combinar con --no-transcode. |
--no-audio | boolean | no | apagado | Omitir la pista de audio en la entrega de video. Solo video; no se puede combinar con --no-transcode. |
--no-progress | boolean | no | apagado | No emitir salida de progreso. El progreso siempre se envía a stderr; stdout queda reservado para el único sobre de resultado. |
screenrig media replace med_01EXAMPLEIMAGE0000000000 ./menu-v2.png
screenrig media replace med_01EXAMPLEVIDEO0000000000 ./intro.mp4 --expect-rev 3 --note "Spring cut"El contenido multimedia conserva su ID, sus etiquetas y su carpeta, de modo que cada lista de reproducción y programación que lo nombra reproduce el archivo nuevo en el siguiente manifiesto, y los selectores de etiqueta, carpeta y all también lo recogen. No se reprograma nada. El comando ejecuta los mismos pasos que media upload (conversión, límite de bytes de vídeo del plan, límites de dimensiones, cuota de almacenamiento, transferencia firmada) y luego reemplaza en lugar de añadir contenido multimedia nuevo. No admite --tag ni --folder.
De forma predeterminada el comando espera al procesamiento. data.media_id y data.id son el ID del contenido multimedia, data.version es el número del nuevo archivo en media versions, y data.revision es la nueva revisión del contenido multimedia. data.warnings, data.operation, data.upload, data.transcode y la temporización se informan como en media upload, y el ID de la operación está en el sobre. Con --no-wait, data.operation es la operación aceptada, y data.version y data.warnings no aparecen.
Se permite un cambio de relación de aspecto. El sobre incluye una advertencia aspect_ratio_changed, y data.warnings[].playlists nombra las listas de reproducción que usan el contenido multimedia, así que compruebe cómo se ven. Un archivo con los mismos bytes que el actual se rechaza con resource_conflict (código de salida 13).
Cada archivo anterior permanece en el historial del contenido multimedia y cuenta en los bytes almacenados hasta que se elimine su versión; vea media versions.
Con acceso Propose, o cuando el proyecto requiere revisión para los cambios de agente, el reemplazo espera a una persona y el comando tiene éxito (código de salida 0): data.status es pending_review, data.review_id nombra la revisión, la advertencia pending_review da su URL y data.next es screenrig reviews show ID. El contenido multimedia sigue reproduciendo su archivo actual hasta que una persona apruebe, así que dígale que está esperando y no repita la escritura. Un reemplazo más reciente del mismo contenido multimedia sustituye al que espera. Vea Revisiones.
media versions#
Enumera los archivos que ha tenido un contenido multimedia, con el archivo en uso primero.
media versions <id> [--limit N] [--cursor CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--limit N | integer | no | cada página | Leer una página de esta cantidad de versiones, de 1 a 100. |
--cursor CURSOR | string | no | ninguno | Leer la página que sigue al data.next_cursor de la página anterior. |
screenrig media versions med_01EXAMPLEIMAGE0000000000data.items tiene una entrada por cada archivo que ha tenido el contenido multimedia: number, current, filename, content_type, sha256, bytes, width, height, duration_ms, codecs, source (upload, replace, sync o restore), note, by (tipo person, agent, client o sync, con ID y nombre) y restored_from. El archivo en uso va primero (current: true), después los demás del más reciente al más antiguo. La versión 1 es la primera carga; cada reemplazo, restauración o cambio de sincronización de multimedia añade el número siguiente.
Sin --limit ni --cursor se leen todas las páginas y data.next_cursor es null. Con cualquiera de los dos, se lee una página: mientras data.next_cursor sea una cadena, ejecute de nuevo el comando con --cursor establecido en ese valor. Basta con acceso de solo lectura. Los bytes de una versión anterior siguen almacenados y cuentan en los bytes almacenados del proyecto hasta que media version delete los elimine; no hay límite en cuántas versiones se conservan, y los bytes almacenados por encima del almacenamiento gratuito del plan se facturan como cualquier otro almacenamiento.
media restore#
Volver a poner en uso una versión anterior como nueva versión.
media restore <id> --number N [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--number N | integer | sí | ninguno | El número de la versión que se va a volver a poner en uso, tal como lo enumera media versions. |
--expect-rev REVISION | string | no | ninguno | Precondición de revisión opcional. Un valor obsoleto suministrado es revision_conflict: lea media show ID y ejecute de nuevo el comando. |
--note TEXT | string | no | ninguno | Se conserva con la nueva versión y se muestra a la persona que la revisa. Como máximo 280 caracteres. |
screenrig media restore med_01EXAMPLEIMAGE0000000000 --number 2
screenrig media restore med_01EXAMPLEIMAGE0000000000 --number 2 --expect-rev 5 --note "Back to the winter menu"El contenido multimedia conserva su ID y pasa a una nueva revisión, y cada lista de reproducción y programación que lo nombra vuelve a reproducir ese archivo. La versión que copia permanece en el historial y comparte sus bytes; la nueva versión cuenta en los bytes almacenados como cualquier otra. data.media es el contenido multimedia y data.warnings incluye aspect_ratio_changed, que nombra las listas de reproducción que usan el contenido multimedia, cuando el archivo restaurado tiene otra relación de aspecto.
La versión en uso no se puede restaurar (resource_conflict, código de salida 5), y una versión desconocida es not_found (código de salida 4). Con acceso Propose, o cuando el proyecto requiere revisión para los cambios de agente, la restauración espera a una persona y el comando tiene éxito (código de salida 0): data.status es pending_review con data.review, la advertencia pending_review da su URL y data.next es screenrig reviews show ID. El contenido multimedia sigue reproduciendo su archivo actual hasta que una persona apruebe, así que no repita la escritura.
media version delete#
Eliminar una versión anterior y sus bytes almacenados.
media version delete <id> --number N| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--number N | integer | sí | ninguno | El número de la versión que se va a eliminar, tal como lo enumera media versions. |
screenrig media version delete med_01EXAMPLEIMAGE0000000000 --number 2El registro de la versión desaparece y sus bytes salen de inmediato de los bytes almacenados del proyecto. El objeto almacenado se elimina tras 24 horas, salvo que otra versión o el archivo en uso contenga el mismo archivo. Una versión eliminada no se puede restaurar. La versión en uso no se puede eliminar, y ninguna versión se puede eliminar mientras un reemplazo del contenido multimedia espera revisión; ambos casos son resource_conflict (código de salida 5), y media versions ID muestra qué versión está en uso. Una versión desconocida es not_found (código de salida 4). Eliminar requiere acceso Manage: una credencial Propose se rechaza con insufficient_access, y la eliminación nunca se propone para revisión.
media show#
Lea un objeto multimedia, incluida su revisión actual.
media show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
screenrig media show med_01EXAMPLEIMAGE0000000000media download#
Escriba una versión almacenada en disco para inspección. Nunca imprima los bytes.
media download <id> [--output FILE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--output FILE | ruta | no | ./<id>.<ext> en el directorio actual | Una ruta de archivo, no un directorio. Un archivo existente se sobrescribe. La extensión sigue al tipo de contenido. |
screenrig media download med_01EXAMPLEIMAGE0000000000 --output ./lobby.webpEl sobre informa media_id, path, bytes, sha256, content_type, primitive, filename, opcional source_filename, y width / height. Nunca lleva píxeles. Use esto para verificar una imagen generada antes de que se muestre en pantalla.
media list#
Listar objetos multimedia, opcionalmente filtrados por etiqueta y primitivo.
media list [--tag TAG] [--primitive image|video|audio] [--folder ID|root] [--library]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--tag TAG | string | no | ninguno | Coincidir ^[A-Za-z0-9]{1,32}$. Los objetos sin etiqueta se omiten siempre que este filtro esté presente. |
--primitive | string | no | todo | image, video o audio. Restringe la lista a imágenes fijas, clips o pistas de banda sonora. |
--folder ID|root | string | no | cada carpeta | Solo archivos directamente dentro de esta carpeta mfd_, no sus subcarpetas, o con root solo archivos en la raíz de la biblioteca. La API aplica el filtro. |
--library | boolean | no | apagado | Enumera en su lugar los medios de la Biblioteca de la organización, en solo lectura: las filas llevan library: true. Use sus ID en las páginas de la lista de reproducción; cámbielos solo en el proyecto Biblioteca. |
screenrig media list --tag LobbyLoop --primitive video
screenrig media list --folder mfd_01EXAMPLEFOLDER000000000
screenrig media list --libraryCada fila lleva folder_id, que está ausente en la raíz de la biblioteca.
media update#
Cambiar o borrar la etiqueta en un objeto. Su regla de disponibilidad se define con media availability.
media update <id> (--tag TAG | --tags TAG1,TAG2 | --clear-tag) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--tag TAG | string | uno de los dos | ninguno | La etiqueta de reemplazo, de una a 32 letras o dígitos. |
--clear-tag | boolean | uno de los dos | apagado | Envíe null y deje el objeto sin etiquetar. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig media update med_01EXAMPLEIMAGE0000000000 --tag LobbyLoopCon acceso Proponer, o cuando el proyecto requiere revisión para cambios de agente, volver a etiquetar multimedia aprobado responde ok con advertencia media_review_pending: las pantallas siguen reproduciéndolo con sus etiquetas aprobadas hasta que una persona aprueba el cambio, y un rechazo restaura las etiquetas. Su revisión aparece en reviews list en segundos; un reetiquetado que no cambia ninguna playlist aprobada ni ninguna playlist en revisión se aplica solo. Vea Revisiones.
media availability#
Define o borra cuándo los selectores dinámicos pueden elegir un archivo.
media availability <id> (--file FILE | --clear) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--file FILE | string | uno de los dos | ninguno | Una regla de disponibilidad JSON. |
--clear | boolean | uno de los dos | apagado | Elimina la regla; el archivo siempre está disponible. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig media availability med_01EXAMPLEIMAGE0000000000 --file rule.jsonLos miembros y el comportamiento de la regla están en Disponibilidad de medios.
media delete#
Eliminar un objeto multimedia.
media delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de objeto med_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig media delete med_01EXAMPLEIMAGE0000000000media move#
Mueva archivos y carpetas multimedia a una carpeta, o de vuelta a la raíz de la biblioteca.
media move <id>... (--folder ID | --root)| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | sí | ninguno | Uno o más ID de archivo med_ y ID de carpeta mfd_, como máximo 1000 en total. |
--folder ID | string | uno de los dos | ninguno | La carpeta de destino mfd_. |
--root | boolean | uno de los dos | apagado | Mover a la raíz de la biblioteca. |
screenrig media move med_01EXAMPLEIMAGE0000000000 med_01EXAMPLEVIDEO0000000000 --folder mfd_01EXAMPLEFOLDER000000000
screenrig media move mfd_01EXAMPLEFOLDER000000000 --rootEl movimiento es una solicitud de todo o nada. Una carpeta no puede moverse dentro de sí misma ni dentro de una carpeta que contenga, y las carpetas se anidan a lo sumo 10 niveles. Los elementos ya en el destino permanecen como están. data.media y data.folders cuentan lo que se movió.
Mover archivos cambia lo que los selectores by:folder de sus carpetas antigua y nueva reproducen, desde la resolución del siguiente selector de cada pantalla; mover una carpeta no cambia los archivos propios de ninguna carpeta. Bajo Propose access, o cuando el proyecto requiere revisión para cambios de agente, cada archivo movido espera la revisión de una persona (reviews list) y las listas de reproducción aprobadas siguen reproduciéndolo por la carpeta con la que fue aprobado; vea Reviews.
media folder list#
Listar las carpetas multimedia del proyecto.
media folder list [--library]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--library | boolean | no | apagado | Enumera en su lugar las carpetas de la Biblioteca de la organización, en solo lectura: las filas llevan library: true, y un selector by:folder puede nombrar una para reproducir sus archivos. |
screenrig media folder list
screenrig media folder list --libraryDevuelve todas las carpetas del proyecto, hasta 1000, ordenadas por nombre: data.items con id, name, parent_id (null en la raíz de la biblioteca) y revision. Construya el árbol a partir de parent_id. La carpeta de un archivo es folder_id en media list y media show; está ausente en la raíz de la biblioteca.
media folder show#
Lea una carpeta de medios.
media folder show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de carpeta mfd_. |
screenrig media folder show mfd_01EXAMPLEFOLDER000000000El sobre lleva el name, parent_id y revision de la carpeta.
media folder create#
Crear una carpeta de medios en la raíz de la biblioteca o dentro de otra carpeta.
media folder create --name NAME [--parent ID]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | De 1 a 100 caracteres, recortados. Los nombres pueden repetirse. |
--parent ID | string | no | raíz de la biblioteca | La carpeta mfd_ para crearla. |
screenrig media folder create --name Menus
screenrig media folder create --name Lunch --parent mfd_01EXAMPLEFOLDER000000000Una organización contiene como máximo 1000 carpetas en todos sus proyectos, anidadas hasta 10 niveles de profundidad. Una lista de reproducción reproduce los archivos de una carpeta con un selector by:folder.
media folder update#
Renombrar una carpeta de multimedia o moverla con todo su contenido a otra carpeta.
media folder update <id> [--name NAME] [--parent ID | --root] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de carpeta mfd_. |
--name NAME | string | al menos uno de --name, --parent, --root | sin cambios | El nuevo nombre, de 1 a 100 caracteres. |
--parent ID | string | al menos uno de --name, --parent, --root | sin cambios | Mueva la carpeta, con todo su contenido, a esta carpeta mfd_. No con --root. |
--root | boolean | al menos uno de --name, --parent, --root | apagado | Mueva la carpeta a la raíz de la biblioteca. No con --parent. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig media folder update mfd_01EXAMPLEFOLDER000000000 --name Archive
screenrig media folder update mfd_01EXAMPLEFOLDER000000000 --rootUna carpeta no puede moverse dentro de sí misma ni dentro de una carpeta contenida en ella, y un movimiento debe mantener todas las carpetas dentro de 10 niveles. Enviar los valores actuales no hace nada.
media folder delete#
Eliminar una carpeta de multimedia. Sus archivos y carpetas se mueven un nivel arriba.
media folder delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de carpeta mfd_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig media folder delete mfd_01EXAMPLEFOLDER000000000Elimina solo la carpeta. Sus archivos y carpetas se mueven al padre, o a la raíz de la biblioteca si no tiene. Un selector by:folder que la nombre ya no coincide con nada, así que redirija esas listas de reproducción primero.
Sincronización de medios
Una sincronización de medios mantiene una carpeta de medios al día con una carpeta de SharePoint, OneDrive para el trabajo, Dropbox o Google Drive. Cada ejecución importa las imágenes (png, jpeg, webp, gif), los videos (mp4, webm) y el audio (mp3) que estén directamente dentro de la carpeta de origen; las subcarpetas se ignoran. Un archivo modificado reemplaza sus bytes bajo el mismo ID de medios, de modo que se actualiza toda lista de reproducción que lo reproduce, y un archivo eliminado o movido fuera en el origen deja de reproducirse: su medio se elimina o, mientras una pantalla aún lo muestra, se mueve a una subcarpeta Removed y se elimina cuando nada lo retiene. Los demás archivos se listan como omitidos con el motivo: muestre un archivo de Office o un PDF con un enlace de documento en una lista de reproducción, y exporte los MOV y similares como MP4 H.264. Una lista de reproducción reproduce la carpeta con un selector by:folder.
Toda sincronización lee a través de una cuenta del proyecto. Un ID de cuenta empieza por msa_ y un ID de sincronización por msy_. media sync account add microsoft365 guarda su propia aplicación de Microsoft Entra, o nombra una conexión de Microsoft del proyecto; media sync account add dropbox imprime un enlace de un solo uso para la persona propietaria de la cuenta de Dropbox; media sync account add google-drive lee las carpetas compartidas con la dirección de una cuenta de servicio, la de screenRIG o la suya propia. Pruebe la cuenta y cree después una sincronización a partir de la dirección de una carpeta: debe ejecutarse de inmediato.
Indique un secreto de cliente con --secret-file FILE y una clave de Google Drive con --key-file FILE, o - para stdin, nunca como argumento. Los secretos se sellan en el servidor y solo se devuelven como data.secret {set, hint}. Leer requiere acceso Read, y cualquier cambio requiere acceso Manage.
media sync account add microsoft365#
Agrega su propia aplicación de Microsoft Entra, o una conexión de Microsoft del proyecto, para que una sincronización pueda leer una carpeta de SharePoint o de OneDrive para el trabajo.
media sync account add microsoft365 --name NAME
(--tenant-id TENANT --client-id ID --secret-file FILE | --connection-id ID)| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | De 1 a 80 caracteres. |
--tenant-id TENANT | string | sin --connection-id | ninguno | El ID de directorio (tenant) de su organización, o su dominio principal, como contoso.onmicrosoft.com; nunca common, organizations ni consumers. Junto con --client-id y --secret-file. |
--client-id ID | string | sin --connection-id | ninguno | El ID de aplicación (cliente) del registro de la aplicación, un GUID. |
--secret-file FILE | string | sin --connection-id | ninguno | Lee el valor del secreto de cliente desde este archivo, o - para stdin (nunca un argumento); el archivo contiene solo el valor. |
--connection-id ID | string | sin --tenant-id | ninguno | Inicia sesión mediante una conexión de Microsoft (pcn_…) del proyecto, en cualquiera de los dos modos, en lugar de --tenant-id, --client-id y --secret-file. No con ellas. |
screenrig media sync account add microsoft365 --name Contoso --tenant-id contoso.onmicrosoft.com --client-id 0b1d2f3a-4c5e-4f60-8a7b-9c0d1e2f3a4b --secret-file secret.txt
screenrig media sync account add microsoft365 --name Contoso --connection-id pcn_01EXAMPLECONNECTION0000En el centro de administración de Microsoft Entra, registre una aplicación de un solo tenant sin URI de redirección, agregue un secreto de cliente (copie su valor, no su ID de secreto), agregue el permiso de aplicación de Microsoft Graph Sites.Selected (y luego conceda a la aplicación acceso de lectura a cada sitio) o Files.Read.All, y conceda el consentimiento del administrador. La aplicación pertenece a este proyecto. Ejecute media sync account test a continuación.
media sync account add dropbox#
Agrega una cuenta de Dropbox e imprime el enlace de un solo uso que su propietario abre, con la sesión iniciada en Dropbox, para conectarla.
media sync account add dropbox --name NAME [--app-key KEY]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | De 1 a 80 caracteres. |
--app-key KEY | string | no | la aplicación de Dropbox de screenRIG | La clave de su propia aplicación de Dropbox: de 1 a 64 letras y dígitos, nunca su secreto de aplicación. |
screenrig media sync account add dropbox --name "Marketing Dropbox"
screenrig media sync account add dropbox --name "Marketing Dropbox" --app-key YOURAPPKEYdata.authorize_url es el enlace y data.authorize_expires_at su caducidad. La CLI nunca abre un navegador: envíe el enlace a la persona propietaria de la cuenta de Dropbox, que permite el acceso de solo lectura (files.metadata.read, files.content.read, account_info.read). Ejecute media sync account show hasta que data.state sea ready (empieza como pending_consent) y después media sync create dropbox. Su propia aplicación de Dropbox necesita esos permisos habilitados y el URI de redirección que muestra la salida.
media sync account add google-drive#
Agrega una cuenta de Google Drive, lista de inmediato, e imprime la dirección de la cuenta de servicio con la que se comparten las carpetas.
media sync account add google-drive --name NAME [--key-file FILE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | De 1 a 80 caracteres. |
--key-file FILE | string | no | la cuenta de servicio de screenRIG | Lee la clave JSON de su propia cuenta de servicio de Google Cloud desde este archivo, o - para stdin (nunca un argumento). |
screenrig media sync account add google-drive --name "Marketing Drive"
screenrig media sync account add google-drive --name "Marketing Drive" --key-file key.jsondata.config.service_account_email es la dirección con la que compartir cada carpeta; basta con el rol Lector. Con la cuenta de servicio de screenRIG, una carpeta se sincroniza solo cuando un miembro de este proyecto con un correo electrónico verificado la compartió o es su propietario (de lo contrario, media_sync_sharer_not_member). Con su propia clave, se sincroniza cualquier carpeta compartida con la cuenta de servicio.
media sync account list#
Lista las cuentas de sincronización de medios de este proyecto con su tipo, estado y última prueba; no se devuelve ningún secreto.
media sync account listSin parámetros.
screenrig media sync account listmedia sync account show#
Inspecciona una cuenta: su tenant y su ID de cliente, el estado, el secreto enmascarado y la última prueba.
media sync account show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La cuenta (msa_…). |
screenrig media sync account show msa_01EXAMPLEACCOUNT0000000Una cuenta de Dropbox muestra además quién la conectó y su app_key; una cuenta de Google Drive muestra su service_account_email.
media sync account update#
Cambia el nombre de una cuenta, el tenant, el ID de aplicación o el secreto de cliente de una aplicación de Microsoft, o sustituye la clave propia de una cuenta de Google Drive.
media sync account update <id> [--name NAME] [--tenant-id TENANT] [--client-id ID]
[--secret-file FILE | --key-file FILE] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La cuenta (msa_…). |
--name NAME | string | no | sin cambios | Cambia el nombre de la cuenta. |
--tenant-id TENANT | string | no | sin cambios | El ID de directorio o el dominio principal del tenant. |
--client-id ID | string | no | sin cambios | El ID de aplicación (cliente) del registro de la aplicación. |
--secret-file FILE | string | no | sin cambios | Lee el valor del nuevo secreto de cliente desde este archivo, o - para stdin; sustituye el secreto almacenado. Un secreto omitido se conserva. |
--key-file FILE | string | no | sin cambios | Lee la clave JSON propia de una cuenta de Google Drive desde este archivo, o - para stdin; debe pertenecer a la misma cuenta de servicio. No con --secret-file. |
--expect-rev REVISION | integer | no | ninguno | Rechaza el cambio salvo que la cuenta esté en esta revisión (revision_conflict, salida 6). |
screenrig media sync account update msa_01EXAMPLEACCOUNT0000000 --secret-file new-secret.txt
screenrig media sync account update msa_01EXAMPLEACCOUNT0000000 --name "Contoso tenant" --expect-rev 2Se requiere al menos un cambio. Un cambio de credenciales borra last_test: pruebe la cuenta de nuevo. Los secretos de cliente de Entra caducan, así que reemplace aquí el secreto antes de que caduque.
media sync account connect#
Genera un nuevo enlace de un solo uso para conectar, o reconectar, una cuenta de Dropbox.
media sync account connect <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La cuenta (msa_…). |
screenrig media sync account connect msa_01EXAMPLEACCOUNT0000000data.authorize_url y data.authorize_expires_at llevan el enlace, que sustituye al anterior. Envíelo a la persona propietaria de la cuenta de Dropbox. Úselo cuando la persona no haya terminado o la cuenta esté en reconnect_required (Dropbox ya no acepta la conexión). Una cuenta conectada sigue conectada hasta que se completa el nuevo consentimiento, y otra cuenta de Dropbox que inicie sesión se queda con la conexión.
media sync account test#
Comprueba una cuenta: el inicio de sesión y los permisos de Graph de una aplicación de Microsoft, o la conexión o la clave de una cuenta de Dropbox o de Google Drive.
media sync account test <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La cuenta (msa_…). |
screenrig media sync account test msa_01EXAMPLEACCOUNT0000000La respuesta se guarda como last_test. Para una aplicación de Microsoft informa de credentials (Microsoft emitió un token; un rechazo lleva su código AADSTS, como AADSTS7000215 cuando el secreto es el ID en lugar del valor) y permissions (los permisos de aplicación de Graph que lleva el token). Sites.Selected por sí solo es una advertencia: cada sitio sigue necesitando su concesión, y un enlace para compartir necesita Files.Read.All. La prueba no juzga la concesión de un sitio ni una carpeta: media sync create lee la carpeta que usted indica. Una comprobación fallida es data.ok false con salida 0.
media sync account delete#
Elimina una cuenta que ninguna sincronización usa.
media sync account delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La cuenta (msa_…). |
--expect-rev REVISION | integer | no | ninguno | Rechaza la eliminación salvo que la cuenta esté en esta revisión (revision_conflict, salida 6). |
screenrig media sync account delete msa_01EXAMPLEACCOUNT0000000Mientras haya sincronizaciones que usen la cuenta, la respuesta es resource_conflict (salida 5), que las nombra: elimínelas primero.
media sync create dropbox#
Sincroniza una carpeta de Dropbox en una carpeta de medios.
media sync create dropbox --account-id ID --url URL|PATH [--folder-id ID] [--every DURATION] [--name NAME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--account-id ID | string | sí | ninguno | La cuenta de Dropbox conectada por la que leer (msa_…). |
--url URL | string | sí | ninguno | La dirección de la carpeta en Dropbox (https://www.dropbox.com/home/...), un enlace de carpeta compartida que la cuenta ha añadido a su Dropbox, o una ruta que empieza por /. Una carpeta de espacio de equipo se lee desde la raíz del equipo. |
--folder-id ID | string | no | una carpeta de medios nueva con el nombre de la carpeta de origen | La carpeta de medios (mfd_…) en la que se colocan los archivos. |
--every DURATION | string | no | 15m | Con qué frecuencia buscar cambios, de 5 minutos a 24 horas: 15m, 1h, 6h o simplemente segundos (de 300 a 86400). |
--name NAME | string | no | el nombre de la carpeta de origen | De 1 a 80 caracteres. |
screenrig media sync create dropbox --account-id msa_01EXAMPLEACCOUNT0000000 --url https://www.dropbox.com/home/Marketing/Lobby%20Signs
screenrig media sync create dropbox --account-id msa_01EXAMPLEACCOUNT0000000 --url /Marketing/Lobby --folder-id mfd_01EXAMPLEFOLDER000000000 --every 1h --name "Lobby signs"Cada ejecución continúa desde la posición guardada de Dropbox en la carpeta y lee solo lo que cambió. Una carpeta que la cuenta no puede abrir da media_sync_source_refused, y una conexión que Dropbox ya no acepta da dropbox_reconnect_required (media sync account connect): ambas con salida 5, sin guardar nada.
media sync create google-drive#
Sincroniza una carpeta de Google Drive compartida con la cuenta de servicio de una cuenta en una carpeta de medios.
media sync create google-drive --account-id ID --url URL|ID [--folder-id ID] [--every DURATION] [--name NAME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--account-id ID | string | sí | ninguno | La cuenta de Google Drive por la que leer (msa_…). |
--url URL | string | sí | ninguno | La dirección de la carpeta (https://drive.google.com/drive/folders/ID), o su ID. Comparta primero la carpeta con el service_account_email de la cuenta; basta con el rol Lector. |
--folder-id ID | string | no | una carpeta de medios nueva con el nombre de la carpeta de origen | La carpeta de medios (mfd_…) en la que se colocan los archivos. |
--every DURATION | string | no | 15m | Con qué frecuencia buscar cambios, de 5 minutos a 24 horas: 15m, 1h, 6h o simplemente segundos (de 300 a 86400). |
--name NAME | string | no | el nombre de la carpeta de origen | De 1 a 80 caracteres. |
screenrig media sync create google-drive --account-id msa_01EXAMPLEACCOUNT0000000 --url https://drive.google.com/drive/folders/1AbCdEfGhIjKlMnOpQrStUvWxYz --folder-id mfd_01EXAMPLEFOLDER000000000 --every 1h
screenrig media sync create google-drive --account-id msa_01EXAMPLEACCOUNT0000000 --url 1AbCdEfGhIjKlMnOpQrStUvWxYzCon la cuenta de servicio de screenRIG, la carpeta se sincroniza solo cuando un miembro de este proyecto con un correo electrónico verificado la compartió o es su propietario (media_sync_sharer_not_member, salida 3, no se guarda nada). Cada ejecución lo comprueba de nuevo, y una carpeta que se queda sin esa persona que la compartía detiene la sincronización en estado error conservando sus medios: vuelva a compartirla desde la cuenta de Google de un miembro y después ejecute media sync update ID --resume. Los archivos de Google Docs, Sheets y Slides se omiten como unsupported_type. Una carpeta que la dirección no puede abrir da media_sync_source_refused (salida 5): compártala con la cuenta de servicio.
media sync list#
Lista las sincronizaciones de medios de este proyecto con su carpeta de medios, cadencia, estado y estado de la última ejecución.
media sync listSin parámetros.
screenrig media sync listmedia sync show#
Inspecciona una sincronización y el resumen de su última ejecución.
media sync show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La sincronización (msy_…). |
screenrig media sync show msy_01EXAMPLESYNC000000000data.last_run lleva status (ok, partial o error), added, updated, removed, pending_delete (archivos eliminados que una pantalla aún conserva, a la espera en la carpeta Removed) y skipped con el motivo de cada archivo (unsupported_type, too_large, storage, subfolder, download_failed, unreadable, in_use); una ejecución fallida lleva error con un code y un detail que indican la solución. data.source añade path para Dropbox y shared_by para Google Drive.
Una sincronización en estado error necesita una reparación. Se eliminó su carpeta de medios: apúntela a otra con media sync update --folder-id. Se eliminó o movió su carpeta de origen: elimine la sincronización y cree otra. Para Google Drive con la cuenta de servicio de screenRIG, la carpeta se quedó sin una persona verificada que la comparta (sharer_not_member): vuelva a compartirla desde la cuenta de Google de un miembro del proyecto y después media sync update ID --resume. Una ejecución de Dropbox falla con reconnect_required cuando Dropbox deja de aceptar la conexión (media sync account connect).
media sync update#
Cambia el nombre, la cadencia o la carpeta de medios de una sincronización, o la pausa y la reanuda.
media sync update <id> [--name NAME] [--every DURATION] [--folder-id ID]
[--pause | --resume] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La sincronización (msy_…). |
--name NAME | string | no | sin cambios | Cambia el nombre de la sincronización. |
--every DURATION | string | no | sin cambios | Con qué frecuencia buscar cambios, de 5 minutos a 24 horas. |
--folder-id ID | string | no | sin cambios | Llena esta carpeta de medios (mfd_…) en su lugar. La siguiente ejecución vuelve a leer todo el origen y coloca en ella todos los archivos sincronizados. |
--pause | boolean | no | apagado | Deja de ejecutarse hasta que se reanude. No con --resume. |
--resume | boolean | no | apagado | Vuelve a ejecutarla; también reinicia una sincronización que un error detuvo. No con --pause. |
--expect-rev REVISION | integer | no | ninguno | Rechaza el cambio salvo que la sincronización esté en esta revisión (revision_conflict, salida 6). |
screenrig media sync update msy_01EXAMPLESYNC000000000 --every 1h
screenrig media sync update msy_01EXAMPLESYNC000000000 --pause
screenrig media sync update msy_01EXAMPLESYNC000000000 --folder-id mfd_01EXAMPLEFOLDER000000000 --expect-rev 3Se requiere al menos un cambio.
media sync run#
Ejecuta una sincronización ahora en lugar de a su próxima hora.
media sync run <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La sincronización (msy_…). |
screenrig media sync run msy_01EXAMPLESYNC000000000La sincronización se ejecuta en unos 30 segundos, y media sync show muestra entonces su última ejecución. Una sincronización en pausa debe reanudarse antes.
media sync delete#
Detiene una sincronización; sus medios y su carpeta permanecen.
media sync delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La sincronización (msy_…). |
--expect-rev REVISION | integer | no | ninguno | Rechaza la eliminación salvo que la sincronización esté en esta revisión (revision_conflict, salida 6). |
screenrig media sync delete msy_01EXAMPLESYNC000000000La sincronización olvida qué archivo de origen se convirtió en qué medio. Los medios importados y la carpeta de medios permanecen, y no se elimina nada.
Aplicaciones
Una aplicación es un directorio estático ya construido con una raíz index.html. El empaquetador inyecta el SDK del navegador en _screenrig/runtime.js y añade su etiqueta de script, así la app alcanza window.screenrig sin paso de compilación ni nada que añadir a sus dependencias. Nada en el directorio se construye o ejecuta durante el empaquetado.
app pack#
Empaque un directorio estático en un archivo determinista sin subirlo.
app pack <directory> [--output FILE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<directory> | ruta | sí | ninguno | El directorio estático construido. Necesita una raíz index.html. |
--output FILE | ruta | no | nada está escrito | También escriba el archivo en esta ruta. Sin ella, el comando informa el archivo y lo mantiene en memoria. |
screenrig app pack ./lobby-board --output ./lobby-board.tgzEl sobre informa sha256, compressed_bytes, expanded_bytes, file_count, la lista de entradas y si se inyectó el tiempo de ejecución del SDK. app upload empaqueta el directorio mismo, así que use este comando solo cuando quiera inspeccionar primero el archivo.
Las aplicaciones se ejecutan bajo una política de seguridad de contenido que bloquea código en línea. El empaquetado mueve bloques de estilo y script en línea a archivos bajo _screenrig/inline/ y los enlaza. Los manejadores de eventos en línea como onclick= y URLs javascript: no pueden moverse; el empaquetado los rechaza y nombra el archivo y la línea.
app upload#
Empaque un directorio, publíquelo como una nueva versión de la aplicación y espere a que la publicación tenga éxito.
app upload <directory> [--name NAME] [--no-wait] [--poll-ms MS] [--timeout MS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<directory> | ruta | sí | ninguno | El directorio estático construido. |
--name NAME | string | no | ninguno | Nombre de la aplicación, máximo 120 caracteres. |
--no-wait | boolean | no | apagado | Devolver antes de que termine la operación de publicación. Ejecute operations wait antes de fijar la versión en una lista de reproducción. |
--poll-ms MS | integer | no | 1000 | Intervalo entre sondeos de operación mientras espera. |
--timeout MS | integer | no | 120000 | Fecha límite para la espera. También limita cada solicitud subyacente. |
screenrig app upload ./lobby-board --name "Lobby board"Leer tres campos: data.operation.state es succeeded, data.application.release_id es el id rel_ un application primitivo pins, y data.application.id es el id app_ que toman los comandos kv. Una operación exitosa, no un id de lanzamiento por sí solo, significa que el lanzamiento es utilizable.
Cada app upload crea una nueva aplicación y un primer lanzamiento inmutable. Para publicar un lanzamiento posterior de la misma app, use app update. Una lista de reproducción sigue sirviendo el lanzamiento que ya fija hasta que edite ese primitivo.
app update#
Publicar una nueva versión de una aplicación existente, preservando identidad, nombre y K/V de la aplicación.
app update <id> <directory> [--expect-rev REVISION] [--no-wait] [--poll-ms MS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de aplicación app_. |
<directory> | ruta | sí | ninguno | El directorio estático construido. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
--no-wait | boolean | no | apagado | Devolver antes de que termine la operación de publicación. Ejecute operations wait antes de fijar la versión en una lista de reproducción. |
--poll-ms MS | integer | no | 1000 | Intervalo entre sondeos de operación mientras espera. |
screenrig app update app_01EXAMPLEAPP00000000000 ./lobby-boardEspere data.operation.state: "succeeded", luego use playlist replace-release para revisar la página exacta, el primitivo, la nueva versión y las pantallas afectadas. Aplique con el token de impacto devuelto y una protección de revisión opcional como se describe en el flujo de trabajo de la playlist. Los pines existentes de la playlist permanecen sin cambios hasta aplicar. En caso de conflicto de revisión, lea la aplicación nuevamente antes de decidir si reintentar; no cree una aplicación de reemplazo solo para evitar el conflicto.
app list#
Listar las aplicaciones del proyecto.
app listSin parámetros.
screenrig app listapp show#
Lea una aplicación.
app show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de aplicación app_. |
screenrig app show app_01EXAMPLEAPP00000000000latest_ready_release está ausente hasta que una primera publicación alcanza listo. El estado de publicación vive en la operación y el lanzamiento, no en la aplicación.
app delete#
Eliminar una aplicación y todas sus versiones.
app delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de aplicación app_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig app delete app_01EXAMPLEAPP00000000000No hay eliminación por lanzamiento. Mientras una pantalla muestra una de las versiones de la aplicación, la eliminación responde application_in_use: primero dé a esas pantallas otro contenido. La eliminación no verifica listas de reproducción que fijan una versión sin mostrarla, así que actualice o elimine esas listas también.
Clave/valor de aplicación
El almacenamiento clave/valor pertenece a una aplicación y es seguro para binarios. Cada comando toma --app-id con el id app_ de app upload, nunca un id de lanzamiento. Usar exactamente un modo de valor por escritura.
kv list#
Listar las claves almacenadas para una aplicación.
kv list --app-id ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
screenrig kv list --app-id app_01EXAMPLEAPP00000000000kv get#
Lea una clave.
kv get --app-id ID <key>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
<key> | string | sí | ninguno | La clave a leer. |
screenrig kv get --app-id app_01EXAMPLEAPP00000000000 menukv set#
Escriba una clave desde JSON, un archivo o bytes base64.
kv set --app-id ID <key> --json-value JSON [--expect-rev REVISION]
kv set --app-id ID <key> --file FILE [--content-type TYPE] [--expect-rev REVISION]
kv set --app-id ID <key> --value-base64 BASE64 [--content-type TYPE] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
<key> | string | sí | ninguno | La clave a escribir. |
--json-value JSON | string | un modo | ninguno | Un valor JSON, canonizado antes de enviarse, siempre almacenado como application/json. También se acepta un tipo de contenido application/json explícito. |
--file FILE | ruta | un modo | ninguno | Leer los bytes de valor desde un archivo, o entrada estándar con -. Por defecto application/octet-stream. |
--value-base64 BASE64 | string | un modo | ninguno | Base64 estándar rellena canónica sin espacios, máximo 1,398,104 caracteres. Por defecto es application/octet-stream. |
--content-type TYPE | string | no | application/octet-stream para bytes | De uno a 127 caracteres. |
--expect-rev REVISION | string | no | ninguno | Escriba solo si la entrada almacenada sigue en esta revisión. |
screenrig kv set --app-id app_01EXAMPLEAPP00000000000 menu --json-value '{"soup":"lentil"}'kv delete#
Eliminar una clave.
kv delete --app-id ID <key> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
<key> | string | sí | ninguno | La clave a eliminar. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig kv delete --app-id app_01EXAMPLEAPP00000000000 menuWebhooks clave/valor
Un webhook clave/valor es una URL que escribe una clave de una aplicación, así cualquier sistema externo, como un punto de venta, un script de hoja de cálculo o un trabajo cron, envía datos a pantallas con un POST HTTP. Una aplicación que se suscribe con kv.onChange actualiza en segundos en cada pantalla que la ejecuta. Una aplicación tiene como máximo 20 webhooks.
El remitente se autentica con el secreto del webhook, srkw_…, como Authorization: Bearer <secret>, o con HTTP Basic usando el id del webhook como nombre de usuario y el secreto como contraseña; nunca se acepta un secreto en la URL o cadena de consulta. El cuerpo sin procesar, de máximo 1 MiB, se convierte en el valor de la clave y Content-Type en su tipo de contenido. Cada publicación es una solicitud API facturada, medida y contada para almacenamiento como kv set, aumenta la revisión y responde con los nuevos metadatos de la clave, nunca su valor. Un encabezado opcional Idempotency-Key deduplica los reintentos del remitente durante 24 horas. Un webhook admite como máximo 120 publicaciones por minuto, y un secreto faltante o incorrecto o un webhook desconocido responde 401. Enviar datos desde otro sistema tiene curl ejemplos.
El secreto solo lo muestran kv webhook create y kv webhook rotate-secret. La URL no es secreta. Crear, rotar y eliminar un webhook añade kv_webhook.created, kv_webhook.secret_rotated y kv_webhook.deleted al registro de eventos del proyecto, y cada publicación añade kv.updated como cualquier escritura.
| Código de problema | Salir | Significado |
|---|---|---|
kv_webhook_limit_reached | 5 | La aplicación ya tiene 20 webhooks. No se creó ninguno. Elimine uno primero. |
not_found | 4 | La aplicación no está en este proyecto, o ningún webhook tiene este id en ella. |
kv webhook create#
Crear un webhook que escriba una clave, y recibir su URL y secreto una vez.
kv webhook create <key> --app-id ID [--description TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<key> | string | sí | ninguno | La clave que cada publicación escribe, de 1 a 256 caracteres: una letra o dígito primero, luego letras, dígitos, ., _, :, / o -. La clave no necesita existir aún. |
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
--description TEXT | string | no | ninguno | Qué envía, máximo 200 caracteres. No debe contener credenciales. |
screenrig kv webhook create menu --app-id app_01EXAMPLEAPP00000000000 --description "Point of sale menu feed"El sobre es el webhook: data.id (kvw_…), data.key, data.url (https://api.screenrig.ai/api/applications/<app_id>/kv-webhooks/<id>/write) y data.secret (srkw_…). Ingrese la URL y el secreto en el sistema de envío ahora. Ningún comando posterior muestra este secreto de nuevo.
kv webhook list#
Listar webhooks de una aplicación, las más antiguas primero.
kv webhook list --app-id ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
screenrig kv webhook list --app-id app_01EXAMPLEAPP00000000000Cada elemento tiene id, key, description, url, created_at y, una vez que ha escrito, last_used_at. Una lista nunca contiene un secreto.
kv webhook delete#
Eliminar un webhook. Su URL deja de funcionar de inmediato y la clave mantiene su valor.
kv webhook delete <webhook_id> --app-id ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<webhook_id> | string | sí | ninguno | El id de webhook kvw_. |
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
screenrig kv webhook delete kvw_01EXAMPLEWEBHOOK00000 --app-id app_01EXAMPLEAPP00000000000kv webhook rotate-secret#
Reemplazar el secreto de un webhook y recibir el nuevo una vez.
kv webhook rotate-secret <webhook_id> --app-id ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<webhook_id> | string | sí | ninguno | El id de webhook kvw_. |
--app-id ID | string | sí | ninguno | El id de aplicación app_. |
screenrig kv webhook rotate-secret kvw_01EXAMPLEWEBHOOK00000 --app-id app_01EXAMPLEAPP00000000000El sobre lleva el nuevo secreto en data.secret. El secreto antiguo deja de funcionar de inmediato, así que ingrese el nuevo en el sistema de envío.
Webhooks de tarjeta
Un webhook de tarjeta es una URL que escribe el documento de datos de una tarjeta, de modo que un sistema externo como un CMS, un punto de venta o un script envía datos a una tarjeta con un solo POST HTTP. kv webhook create, list, rotate-secret y delete aceptan --card CARD_ID en lugar de --app-id; update y deliveries a continuación solo funcionan con tarjetas. Una tarjeta tiene como máximo 20 webhooks.
kv webhook create --card CARD_ID [--description TEXT] [--map FILE|-] [--signing]
kv webhook list --card CARD_ID
kv webhook rotate-secret <webhook_id> --card CARD_ID [--signing]
kv webhook delete <webhook_id> --card CARD_IDCrear un webhook de tarjeta no requiere clave. --map FILE (o - para stdin) es el mapeo y --signing activa la firma. La respuesta incluye data.secret y, si el webhook firma, data.signing_secret, cada uno mostrado una sola vez.
El remitente se autentica como en un webhook de aplicación: Authorization: Bearer <secret> con el secreto srkw_…, o HTTP Basic con el ID del webhook como nombre de usuario, así que https://kvw_ID:srkw_…@api.screenrig.ai/… sirve para un remitente que solo admite una URL. El cuerpo, de como máximo 1 MiB, es JSON o application/x-www-form-urlencoded; un nombre de formulario repetido pasa a ser un arreglo. Sin mapeo, el objeto enviado es el documento de datos de la tarjeta.
Un mapeo es una plantilla JSON que construye el documento a partir del cuerpo. Una cadena con marcadores como {{body.alert.title}} o {{body.items[0].name}} es texto, y una cadena que es exactamente un marcador conserva el tipo del valor. Una ruta empieza con body o query (los parámetros de consulta de la URL), y una ruta que no contiene nada queda vacía en el texto y omite un valor aislado. $each mapea un arreglo con item e index en el ámbito, $group con $by agrupa en el orden de primera aparición, $number lee 1,234.50, $3.50, 3,50 € o 12% (añada "$decimal": "," para una coma decimal), $bool lee true, yes, y, 1 y x, y $text con $max recorta el texto. La plantilla se comprueba al guardarla: invalid_request indica el lugar que falló.
{
"title": "{{body.alert.title}}",
"body": "{{body.alert.message}}",
"items": { "$each": "{{body.items}}", "$limit": 20, "$template": { "text": "{{item.name}}" } }
}curl https://api.screenrig.ai/api/cards/crd_01EXAMPLEBOARD0000000000/kv-webhooks/kvw_01EXAMPLEWEBHOOK00000/write \
-H "Authorization: Bearer $CARD_WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
--data '{"alert":{"title":"Fire drill","message":"Leave by the east door"},"items":[{"name":"Floor 2"}]}'Cada envío se comprueba como los datos propios de la tarjeta: card_data_invalid indica la ruta y no se escribe nada. Un documento igual al actual de la tarjeta responde unchanged y no escribe nada, así que no se despierta ninguna pantalla. Un envío aceptado es una solicitud de API facturada, un webhook admite como máximo 120 envíos por minuto y un encabezado Idempotency-Key deduplica los reintentos de un remitente durante 24 horas.
Una dirección incorrecta, un secreto incorrecto o ausente, un webhook desactivado, una firma ausente o incorrecta y cada GET reciben la misma respuesta 404, de modo que una vista previa de enlace o una suposición no revela nada. kv webhook deliveries explica el motivo.
Con --signing, cada envío debe incluir también ScreenRig-Signature: t=<unix seconds>,v1=<hex>, donde v1 es el HMAC-SHA256 de t, un punto y el cuerpo sin procesar con el secreto de firma whsec_…, y t debe estar a menos de cinco minutos del reloj del servidor. Es el formato de las firmas de webhook de screenRIG.
Firmas y handshakes de proveedores
Los proveedores firman sus envíos a su manera, y algunos no pueden enviar su secreto en absoluto. Un webhook de tarjeta puede verificar la firma del proveedor en lugar del secreto y responder al handshake de configuración del proveedor, así que GitHub, Stripe, Shopify, Slack, Linear, Vercel, Asana, Microsoft Graph, monday.com, Trello y Azure Event Grid envían directamente a él, sin intermediarios. Cualquier otro remitente que firme con HMAC también funciona. Defina verify y handshake mediante la API al crear o cambiar el webhook (POST /api/cards/{id}/kv-webhooks, y luego PATCH /api/cards/{id}/kv-webhooks/{webhook_id}).
verifyes{vendor, secret}, más, parageneric_hmac, elheader, laencoding(hexobase64), untimestamp_headerytolerance_seconds(300 por defecto). Un envío que lleva la firma válida del proveedor se acepta sin el secretosrkw_propio del webhook, que sigue funcionando a su lado. El secreto del proveedor se almacena sellado y solo se muestra comosety sus cuatro últimos caracteres. Un cambio que envíaverifysinsecretconserva el almacenado mientras el proveedor siga siendo el mismo, yverify: nullelimina la verificación.verifyy--signingse excluyen entre sí.handshakeesmicrosoft_graph,monday,trellooazure_event_grid, ynulllo elimina. Slack y Asana responden a sus propios handshakes medianteverify.vendor.
verify.vendor | Encabezado | Qué se firma | Marca de tiempo |
|---|---|---|---|
github | X-Hub-Signature-256 | HMAC-SHA256 del cuerpo | Ninguno |
stripe | Stripe-Signature | HMAC-SHA256 de la marca de tiempo, un punto y el cuerpo; cualquier v1 puede coincidir | 5 minutos |
shopify | X-Shopify-Hmac-Sha256 | HMAC-SHA256 del cuerpo, en base64 | Ninguno |
slack | X-Slack-Signature | HMAC-SHA256 de v0:, la marca de tiempo, dos puntos y el cuerpo | X-Slack-Request-Timestamp, 5 minutos |
linear | Linear-Signature | HMAC-SHA256 del cuerpo | webhookTimestamp en el cuerpo, 1 minuto |
vercel | x-vercel-signature | HMAC-SHA1 del cuerpo | Ninguno |
asana | X-Hook-Signature | HMAC-SHA256 del cuerpo, con el X-Hook-Secret del handshake como clave | Ninguno |
generic_hmac | El header que usted nombra | HMAC-SHA256 del cuerpo o, con un timestamp_header, de la marca de tiempo, un punto y el cuerpo | tolerance_seconds |
La clave de cada HMAC es el texto del secreto tal como lo muestra el proveedor (el de Stripe incluye whsec_). Una firma se comprueba sobre el cuerpo exactamente como llegó, en tiempo constante, antes de que el envío consuma presupuesto de escritura, y se juzga antes que su marca de tiempo: timestamp_stale siempre significa que el secreto era correcto. Un cuerpo puede ser JSON, un formulario o multipart/form-data, donde un campo de texto es body.FIELD y los archivos se cuentan, no se leen.
| Proveedor | screenRIG responde | Envíos posteriores |
|---|---|---|
Slack (verify.vendor slack) | El url_verification firmado con su challenge; una persona que pruebe con curl puede enviar en su lugar el secreto del webhook | Firmados con el secreto de firma |
Asana (asana) | El X-Hook-Secret del handshake, que guarda sellado como clave de cada X-Hook-Signature. El mismo secreto de nuevo es un reintento; uno distinto se rechaza como handshake_invalid | X-Hook-Signature |
Microsoft Graph (microsoft_graph) | El ?validationToken= decodificado como text/plain | Llevan el secreto del webhook |
monday.com (monday) | El challenge que envía, devuelto como JSON | Llevan el secreto del webhook |
Trello (trello) | Una comprobación HEAD responde 200 sin cuerpo, solo para este webhook | Llevan el secreto del webhook |
Azure Event Grid (azure_event_grid) | {"validationResponse": "CODE"} | Llevan el secreto del webhook |
Un handshake se responde solo para un webhook configurado para ese proveedor, antes de pedir ninguna credencial, a una solicitud que es ese handshake, y nunca por un webhook desactivado. No escribe nada, nunca se factura y no gasta presupuesto de velocidad. Microsoft Graph, monday.com, Trello y Azure Event Grid no envían ningún encabezado que screenRIG verifique, así que sus entregas solo se aceptan con el secreto del webhook. Azure Event Grid lo lleva como un encabezado de entrega estático, Authorization: Bearer srkw_…, marcado como secreto, y sus eventos llegan como una matriz, así que un mapeo lee body[0].
| Proveedor | En los ajustes del proveedor |
|---|---|
| GitHub | Settings, Webhooks, Add webhook: la Payload URL es el url del webhook, el tipo de contenido es application/json, y el mismo secreto. El ping de GitHub está firmado y se acepta |
| Stripe | Workbench, Webhooks: añada el url y revele su secreto de firma. Mientras Stripe rota un secreto envía un v1 por cada uno y se acepta cualquiera de los dos; después sustituya el secreto almacenado con un PATCH |
| Shopify | Suscríbase con el url en formato JSON. El secreto es el secreto de cliente de la aplicación |
| Slack | La Request URL de la Events API es el url, y el secreto es el secreto de firma de la aplicación. Un comando de barra envía un formulario: {{body.text}}, {{body.user_name}} |
| Linear | En los ajustes de la API cree un webhook con el url y copie su secreto de firma. El webhookTimestamp del cuerpo debe estar a menos de un minuto del reloj del servidor |
| Vercel | Team settings, Webhooks: cree uno con el url. Vercel muestra el secreto una sola vez |
| Asana | Cree el webhook con {"verify": {"vendor": "asana"}}: todavía no tiene secreto y rechaza los eventos con secret_pending. Después cree el webhook de Asana con target establecido en el url, y el handshake fija el secreto. Para tomar un secreto nuevo, PATCH con verify en null y luego otra vez con el proveedor |
| Microsoft Graph | Cree la suscripción con notificationUrl establecido en el url |
| monday.com | Ejecute create_webhook con el url |
| Trello | POST /1/webhooks con callbackURL establecido en el url |
| Azure Event Grid | Cree la suscripción de eventos con el url como su punto de conexión de webhook, y añada el encabezado de entrega anterior |
curl https://api.screenrig.ai/api/cards/crd_01EXAMPLEBOARD0000000000/kv-webhooks \
-H "Authorization: Bearer $SCREENRIG_TOKEN" -H "Content-Type: application/json" \
--data '{"description":"Pushes","verify":{"vendor":"github","secret":"YOUR_SECRET"},
"mapping":{"title":"{{body.repository.full_name}}","body":"{{body.head_commit.message}}"}}'
Un remitente que firma con su propio HMAC nombra el encabezado, la codificación y, si firma una marca de tiempo, el encabezado de la marca de tiempo:
curl https://api.screenrig.ai/api/cards/crd_01EXAMPLEBOARD0000000000/kv-webhooks \
-H "Authorization: Bearer $SCREENRIG_TOKEN" -H "Content-Type: application/json" \
--data '{"verify":{"vendor":"generic_hmac","secret":"YOUR_SECRET","header":"X-Acme-Signature",
"encoding":"base64","timestamp_header":"X-Acme-Time","tolerance_seconds":120},
"mapping":{"title":"{{body.sensor}}","body":"{{body.state}}"}}'
ts=$(date +%s); body='{"sensor":"door","state":"open"}'
sig=$(printf '%s.%s' "$ts" "$body" | openssl dgst -sha256 -hmac "$SECRET" -binary | openssl base64 -A)
curl "$URL" -H "Content-Type: application/json" -H "X-Acme-Time: $ts" -H "X-Acme-Signature: $sig" -d "$body"
Cada fallo da el mismo 404 que cualquier otro rechazo. kv webhook deliveries muestra el motivo, y un handshake aparece con el resultado handshake:
| Motivo | Significado |
|---|---|
signature_missing | verify está definido y el envío no llevaba ni el secreto ni el encabezado del proveedor |
signature_invalid | El encabezado está mal formado o no coincide con el cuerpo |
timestamp_missing | La firma necesita una marca de tiempo que el envío no llevaba |
timestamp_stale | La firma es válida y su marca de tiempo está fuera de la ventana |
secret_pending | Una verificación de Asana sigue esperando su handshake |
handshake_invalid | La solicitud es el handshake de un proveedor y no puede responderse |
kv webhook update#
Cambiar un webhook de tarjeta: su descripción, mapeo, estado activado o firma.
kv webhook update <webhook_id> --card CARD_ID [--description TEXT] [--map FILE|-] [--clear-map]
[--enable|--disable] [--signing|--no-signing]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<webhook_id> | string | sí | ninguno | El id de webhook kvw_. |
--card CARD_ID | string | sí | ninguno | El ID de tarjeta crd_. |
--description TEXT | string | no | ninguno | Qué envía, máximo 200 caracteres. No debe contener credenciales. |
--map FILE | ruta | no | ninguno | Reemplazar el mapeo con un objeto JSON leído de un archivo, o - para stdin. |
--clear-map | boolean | no | apagado | Quitar el mapeo: el objeto enviado pasa a ser el documento. |
--enable / --disable | boolean | no | apagado | --disable responde a cada envío como a un secreto incorrecto hasta que se use --enable. |
--signing / --no-signing | boolean | no | apagado | --signing exige el encabezado de firma e imprime el secreto de firma una vez; --no-signing deja de exigirlo. |
screenrig kv webhook update kvw_01EXAMPLEWEBHOOK00000 --card crd_01EXAMPLEBOARD0000000000 --map alert-map.jsonEl sobre es el webhook. data.signing_secret aparece una sola vez, en la respuesta que activó la firma.
kv webhook deliveries#
Leer el registro de entregas de un webhook de tarjeta, de lo más reciente a lo más antiguo, de los últimos siete días.
kv webhook deliveries <webhook_id> --card CARD_ID [--limit N]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<webhook_id> | string | sí | ninguno | El id de webhook kvw_. |
--card CARD_ID | string | sí | ninguno | El ID de tarjeta crd_. |
--limit N | number | no | 100 | Cuántas entregas devolver, de 1 a 100. |
screenrig kv webhook deliveries kvw_01EXAMPLEWEBHOOK00000 --card crd_01EXAMPLEBOARD0000000000Cada elemento tiene at, outcome (written, unchanged, refused, invalid o handshake), reason (por ejemplo credentials, signature, disabled, body, mapping, card_data_invalid o rate_limited), detail, status, bytes, revision y request_id. No se almacena ningún cuerpo, encabezado ni credencial, y un envío a una dirección incorrecta no deja ninguna fila.
Listas de reproducción
Una lista de reproducción es un documento JSON de páginas. playlist init prepara un documento a pantalla completa a partir de entradas ordenadas. playlist create y playlist update leen ese documento desde un archivo; la forma se resume bajo los comandos.
playlist init#
Prepare una lista de reproducción de pantalla completa editable a partir de archivos multimedia locales, ID de medios listos, ID de lanzamiento de aplicación o URL HTTP o HTTPS.
playlist init <inputs...> --name NAME --output FILE [--overwrite] [--screen-id ID]
[--target-width PX --target-height PX] [--duration-ms MS] [--fit contain|cover|fill]
[--no-transcode] [--no-progress] [--poll-ms MS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<inputs...> | archivos, med_ IDs, rel_ IDs o URLs HTTP o HTTPS | sí | ninguno | Orden de reproducción. Los archivos locales de imagen/video se cargan y esperan estar listos a menos que --no-transcode. Los medios existentes ya deben estar listos. Las URL HTTP y HTTPS pueden incluir hosts de la red local y credenciales integradas y no se recuperan. La aplicación web del Player requiere URL HTTPS sin nombre de usuario ni contraseña. |
--name NAME | string | sí | ninguno | Nombre para mostrar de la lista de reproducción. |
--output FILE | ruta | sí | ninguno | Escriba el documento editable {name, pages}. Se crean los directorios padres. Exclusivo por defecto. |
--overwrite | boolean | no | apagado | Reemplazar un archivo de salida existente de forma atómica. |
--screen-id ID | string | no | ninguno | Leer las dimensiones y la revisión de la pantalla objetivo. |
--target-width PX / --target-height PX | integer | juntos | no establecido | Anular tamaño del lienzo. Ambos o ninguno. Requerido cuando no se suministra pantalla o la pantalla reporta superficies desconocidas o múltiples. |
--duration-ms MS | integer | no | 8000 | Duración para páginas no de video. |
--fit | string | no | contain | contain, cover o fill para páginas de imagen y video. Aplicaciones e iframes usan fill. |
--no-transcode | boolean | no | apagado | Bytes del archivo subido aceptado sin cambios. |
--no-progress | boolean | no | apagado | Suprimir progreso de carga en stderr. |
--poll-ms MS | integer | no | 1000 | Subir intervalo de sondeo. |
screenrig playlist init med_POSTER med_VIDEO --name "Lobby loop" --screen-id scr_LOBBY --output lobby.jsonLa preparación escribe el documento local y puede subir medios; no crea una lista de reproducción remota ni asigna una pantalla. Inspeccione el documento, luego screen publish. Vea Preparar, publicar y editar listas de reproducción.
playlist validate#
Valide un documento de lista de reproducción localmente antes de crear o actualizar. Sin red.
playlist validate <file>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<file> | ruta | sí | ninguno | El documento de la lista de reproducción. |
screenrig playlist validate ./lobby-loop.jsonLos errores nombran rutas JSON exactas. Un pase significa que la forma local y la semántica cruzada de campos son válidas; autorización, preparación de medios, conteos de selectores dinámicos, duraciones y disponibilidad remota aún requieren verificaciones del servidor. Crear y actualizar ejecutan esta verificación antes de escribir. El resultado también incluye hallazgos lint de geometría que no hacen fallar la verificación: motion_overuse, collision, safe_margin y adjacent_repeat. Para ver cómo se ve una página, publíquela y ejecute screen screenshot.
playlist create#
Crea una lista de reproducción a partir de un documento JSON, de una plantilla o de la plantilla integrada Aviso urgente.
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]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
[file] | ruta | no | ninguno | El documento de la lista de reproducción. Indíquelo, o --from-template, o --starter. |
--from-template ID | string | no | ninguno | Crea la lista de reproducción a partir de esta plantilla (un id pl_): sus páginas actuales con los valores de --set, validada como cualquier lista. |
--name NAME | string | con --from-template | ninguno | El nombre de la nueva lista de reproducción. |
--set NAME=VALUE | string | no | ninguno | Con --from-template: el valor de un campo; para un campo de medio, el id de una imagen o un vídeo listo. Se puede repetir. |
--dry-run | boolean | no | apagado | Con --from-template: comprueba los valores e informa del número de páginas sin crear nada. |
--starter KEY | string | no | ninguno | Añadir una plantilla integrada: urgent-notice, un titular y un mensaje para anuncios rápidos. |
--format-region REGION | string | no | ninguno | header, footer o side: convierte la lista de reproducción en una franja dibujada sobre la página a lo largo de ese borde y sustituye un format del archivo. Indíquela junto con --format-orientation. Consulte franjas. |
--format-orientation ORIENTATION | string | con --format-region | ninguno | landscape o portrait: la orientación de la pantalla para la que se hace la franja, tal como la ve el espectador. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig playlist create ./lobby-loop.jsonscreenrig playlist create --from-template pl_01EXAMPLETEMPLATE00000 --name "Monday notice" --set headline="Open late"data.id del sobre es el id pl_ que toma screen assign. Cuando el cambio espera revisión, data es {status: pending_review, review, playlist}: la lista existe con approved_revision: 0 y ninguna pantalla puede mostrarla hasta que una persona la apruebe (playlist_not_approved). Una plantilla es una lista que declara fields; nunca se muestra en una pantalla (playlist_is_template), y una lista creada a partir de ella es una lista normal que se puede asignar, programar y revisar.
playlist update#
Reemplazar un documento de lista de reproducción.
playlist update <id> <file> [--format-region REGION --format-orientation ORIENTATION] [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
<file> | ruta | sí | ninguno | El documento de reemplazo. |
--format-region REGION | string | no | ninguno | header, footer o side: convierte la lista de reproducción en una franja dibujada sobre la página a lo largo de ese borde y sustituye un format del archivo. Indíquela junto con --format-orientation. Consulte franjas. |
--format-orientation ORIENTATION | string | con --format-region | ninguno | landscape o portrait: la orientación de la pantalla para la que se hace la franja, tal como la ve el espectador. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig playlist update pl_01EXAMPLEPLAYLIST000000 ./lobby-loop.jsonCuando el cambio espera revisión, la lista de reproducción en vivo sigue reproduciéndose sin cambios hasta que una persona aprueba la propuesta.
playlist show#
Lea una lista de reproducción, incluida su revisión actual.
playlist show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
screenrig playlist show pl_01EXAMPLEPLAYLIST000000Devuelve la versión en vivo. approved_revision es 0 para una playlist que ninguna persona ha aprobado aún, y approval nombra la revisión abierta mientras un cambio espera; reviews show ID devuelve la propuesta.
playlist list#
Listar las playlists del proyecto.
playlist list [--templates] [--library]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--templates | boolean | no | apagado | Solo plantillas: listas de reproducción que declaran campos. |
--library | boolean | no | apagado | Enumera en su lugar las listas de reproducción de la Biblioteca de la organización, en solo lectura: asígnelas a pantallas, horarios y pilas, o copie una con playlist create --from-template; cámbielas solo en el proyecto Biblioteca. |
screenrig playlist list --templates
screenrig playlist list --libraryplaylist fields#
Muestra los campos de una plantilla o los valores de una copia, o cambia los valores y pone la copia al día.
playlist fields <id> [--set NAME=VALUE...] [--clear NAME...] [--refresh] [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id pl_ de una plantilla o de una lista de reproducción creada a partir de una. |
--set NAME=VALUE | string | no | ninguno | Establece el valor de un campo. Se puede repetir. |
--clear NAME | string | no | ninguno | Borra el valor de un campo opcional. Se puede repetir. |
--refresh | boolean | no | apagado | Vuelve a crear las páginas con la revisión actual de la plantilla, sean cuales sean los valores. |
--expect-rev REVISION | string | no | ninguno | Exige opcionalmente esta revisión del recurso. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio. |
screenrig playlist fields pl_01EXAMPLECOPY00000000 --set headline="Closed today"Sin opciones muestra los campos de una plantilla y cuántas listas se crearon a partir de ella, o los valores de una copia, la revisión de la plantilla con la que se creó y si la plantilla tiene una más reciente. Cada cambio, y --refresh solo, vuelve a crear las páginas de la copia con la revisión actual de la plantilla, que es como un cambio de marca hecho en la plantilla llega a las copias existentes; nada se envía a ellas por sí solo. Los valores se comprueban como al crear. Con acceso Propose, un cambio se convierte en una revisión.
playlist instances#
Lista las listas de reproducción creadas a partir de una plantilla y la revisión de la plantilla con la que se creó cada una.
playlist instances <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id pl_ de la plantilla. |
screenrig playlist instances pl_01EXAMPLETEMPLATE00000outdated marca una lista de reproducción creada con una revisión anterior de la plantilla; playlist fields ID --refresh la pone al día.
playlist revisions#
Listar las revisiones de una playlist, la más reciente primero.
playlist revisions <id> [--after CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
--after CURSOR | string | no | ninguno | El next_cursor de la página anterior. |
screenrig playlist revisions pl_01EXAMPLEPLAYLIST000000Cada revisión indica qué la creó (created, edited, promoted con la revisión que copió, o baseline, la revisión que tenía la playlist cuando empezó su historial), quién la hizo, cuándo, cuántas páginas tiene y si es la actual. Una página contiene 50 revisiones; next_cursor lee la siguiente.
playlist revision show#
Leer una revisión y la playlist tal como estaba en ella.
playlist revision show <id> --revision N| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
--revision N | integer | sí | ninguno | La revisión que se lee. |
screenrig playlist revision show pl_01EXAMPLEPLAYLIST000000 --revision 3playlist promote#
Volver a hacer actual una revisión anterior copiándola como una nueva revisión.
playlist promote <id> --revision N --expect-rev CURRENT| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
--revision N | integer | sí | ninguno | La revisión que se copia. |
--expect-rev CURRENT | string | sí | ninguno | La revisión actual de la playlist (playlist show). Un valor obsoleto es revision_conflict: vuelva a leer la playlist y reintente. |
screenrig playlist promote pl_01EXAMPLEPLAYLIST000000 --revision 3 --expect-rev 9Las páginas, la banda sonora y el formato de la revisión pasan a ser la siguiente revisión. El nombre se mantiene, las revisiones anteriores siguen en la lista y cada pantalla que muestra la playlist se actualiza. Promover requiere una credencial que publique en vivo; una cuyos cambios esperan revisión recibe forbidden. Una revisión cuyo contenido ya es el actual no cambia nada.
playlist delete#
Eliminar una lista de reproducción.
playlist delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig playlist delete pl_01EXAMPLEPLAYLIST000000playlist export#
Exporta archivos de imagen y vídeo, audio de la banda sonora y URL de iframe como un paquete portátil de lista de reproducción.
playlist export <id> --output DIRECTORY [--skip-applications]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de lista de reproducción pl_. |
--output DIRECTORY | ruta | sí | ninguno | Directorio de destino. No debe existir ya; el paquete se escribe a través de un hermano temporal y se renombra en su lugar. |
--skip-applications | bandera | no | apagado | Elimina las primitivas de aplicación y las páginas vacías o controladas por una aplicación. Debe quedar al menos una página. El resultado enumera los ID de las primitivas y páginas omitidas. |
screenrig playlist export pl_01EXAMPLEPLAYLIST000000 --output ./lobby-bundleEl paquete contiene un manifiesto, el documento de la lista de reproducción y archivos de imagen, vídeo y audio de la banda sonora direccionados por contenido. Los selectores dinámicos all, tag y folder se fijan en ID exactos, las URL de iframe se conservan y los comentarios se excluyen.
Las tarjetas, los flujos y las páginas adslot detienen la exportación antes de descargar los archivos multimedia. Las aplicaciones también la detienen de forma predeterminada; --skip-applications elimina las primitivas de aplicación y las páginas vacías o controladas por una aplicación, e informa de los ID de las primitivas y páginas omitidas. Debe quedar al menos una página. Las tarjetas, los flujos y las páginas adslot siguen deteniendo la exportación con esta opción.
Para obtener un documento editable que conserve las referencias a tarjetas y aplicaciones, usa screenrig playlist show pl_01EXAMPLEPLAYLIST000000 --output playlist.json. El documento utiliza recursos existentes del mismo proyecto.
playlist import#
Crear una lista de reproducción desde un directorio de paquete, o actualizar una existente desde él.
playlist import <directory> [--name NAME] [--update ID [--expect-rev REVISION] [--note TEXT]]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<directory> | ruta | sí | ninguno | Un directorio de paquete escrito por playlist export. |
--name NAME | string | no | el nombre de la playlist del paquete | De 1 a 120 caracteres. Importe el paquete como una nueva lista de reproducción con este nombre. |
--update ID | string | no | se crea una nueva lista de reproducción | Actualizar esta lista de reproducción pl_ en lugar de crear una. Acepta --expect-rev opcional. |
--expect-rev REVISION | string | no | ninguno | La revisión actual de la lista de reproducción de destino. |
--note TEXT | string | no | ninguno | Con --update: una nota para la persona que revisa el cambio, de máximo 280 caracteres. |
screenrig playlist import ./lobby-bundle
screenrig playlist import ./lobby-bundle --name "Lobby loop (copy)"Los nombres para mostrar de listas de reproducción pueden repetirse. La importación crea una lista separada incluso cuando su nombre coincide; use --update con un ID para reemplazar una lista existente.
La importación valida todo el paquete localmente antes de tocar el proyecto: manifiesto, documento, rutas, tipos de medios, longitudes y hashes. Los medios existentes se reutilizan si coinciden exactamente en nombre de archivo, tipo de medio, longitud en bytes, hash y etiqueta; el resto se carga sin conversión, y la lista de reproducción se escribe solo después de que cada objeto está listo.
La importación nunca elimina ni poda medios remotos. Si un paso posterior falla después de que se haya iniciado una carga, el error lista los objetos confirmados como listos y dice si comenzó la escritura de la lista de reproducción. Reintentar el mismo paquete reutiliza esos objetos.
El documento de la lista de reproducción
Una lista de reproducción es name más pages, con una banda sonora audio opcional. Cada página lleva id, canvas, transition, advance, visibility opcional, audio_cue opcional y primitives.
Una plantilla añade fields al documento, [{name, label, type, required, max_length?}] con type de text, media o url, y puede marcar cualquier primitiva como locked: true. Una página lee un campo como {field.NAME} en los params de una tarjeta (campos de texto y de dirección), como selector.media_id de una imagen o un vídeo (un campo de medio) o como src completo de un iframe (un campo de dirección). Cada marcador debe nombrar un campo declarado del tipo correcto, cada campo debe leerse y una primitiva bloqueada no lee ninguno; playlist validate lo comprueba sin conexión. Solo el propietario o un miembro que pueda aprobar cambia una primitiva bloqueada (primitive_locked).
Las seis primitivas son image, cargada video, en vivo stream, web iframe y application, y card. El texto y el chrome no son tipos del protocolo: coloque una card para texto en vivo, o cargue una imagen fija terminada (media generate crea una) y colóquela como imagen.
Un flujo toma una o dos fuentes ordenadas con protocolos únicos y una imagen lista del mismo proyecto como fallback_media_id. Use como máximo un flujo por página y avance basado en duración. HLS usa una URL HTTPS pública; los Players de Android y Qt se conectan directamente a las transmisiones RTSP de las cámaras, con las credenciales incluidas. Consulte los detalles del transporte de cámaras para conocer los formatos de URL que abre cada Player; la multidifusión UDP/MPEG-TS directa opcional en Android y Qt usa un grupo IPv4 en 239/8 y un puerto. Una fuente puede dar solo su url y dejar que el esquema indique el protocolo. Otros Players seleccionan la alternativa HLS o muestran el fallback. Los bytes del flujo no se almacenan en caché para reproducción. El audio está silenciado por defecto. La importación y exportación de paquetes de listas de reproducción no admiten flujos.
{
"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"
}Utilice este primitivo en una página con advance: {"mode":"duration","after_ms":30000}. Reemplace el ejemplo de fuente y el ID de respaldo. Requisitos del Player y configuración del transporte.
Cada primitivo es plano: id, primitive, los propios campos de ese primitivo, luego rect, layer, content_fit y opcional enter. No hay objeto de contenido anidado.
Las primitivas de imagen y video requieren un selector. selector.by es id con un media_id listo y one_at_a_time false, ids con de 1 a 1024 media_ids listos únicos, all para todos los objetos listos de esa primitiva, tag que coincide con ^[A-Za-z0-9]{1,32}$, o folder con el folder_id de una carpeta de medios mfd_ existente, que reproduce directamente los archivos listos que contiene y ninguno de sus subcarpetas. No ponga media_id en la propia primitiva ni envíe elementos resueltos por el servidor. Una primitiva application fija un release_id y una primitiva iframe toma un src y un título, por lo que ninguna de las dos toma un selector. src es cualquier página http o https a la que la pantalla pueda llegar, incluida una página de la LAN o una detrás de un inicio de sesión; un enlace de YouTube se guarda como su incrustación con reproducción automática. src, y el fallback_src opcional de un iframe, pueden llevar tokens de pantalla como {screen.field.kiosk_id}, y una primitiva application puede llevar params con los mismos tokens, de modo que una lista de reproducción da a cada pantalla su propia página. Los Players Android, Amazon Signage Stick, Linux, Raspberry Pi y Windows abren la página directamente. El Player web y los Players macOS, Samsung Tizen, LG webOS y BrightSign la enmarcan, por lo que una página que envía X-Frame-Options (DENY, SAMEORIGIN o el obsoleto ALLOW-FROM), o una lista Content-Security-Policy frame-ancestors sin el origen del Player, muestra un marco bloqueado en ellos, y el Player web solo muestra páginas https sin inicio de sesión en la dirección. Cuando la publicación detecta una página HTTPS pública que rechaza ser enmarcada, la escritura igualmente tiene éxito y la CLI imprime la entrada warnings del servidor: el código iframe_framing_refused, page_id, primitive_id y src, el encabezado que la rechazó y el paso siguiente (use una página que permita el marco desde el origen del Player, o pida a su propietario que permita ese origen). El servidor también añade una advertencia playlist.iframe_framing_refused al registro de eventos, una por cada página que la rechaza, que events list imprime con primitive_id. Una página de la LAN, una página http y una página a la que el servidor no puede llegar en unos segundos no se comprueban. Un Player informa de una lista de reproducción como en reproducción una vez que su manifiesto está en pantalla, por lo que una publicación verificada no prueba que una página iframe se haya mostrado: actúe según la advertencia, o mire la pantalla. Ambas primitivas web requieren content_fit de fill, porque ninguna tiene un tamaño intrínseco.
advance.mode es duration con after_ms, que en una página con exactamente un video de YouTube (no una lista de reproducción ni una transmisión en vivo) también puede llevar until establecido en video_end para que la página dure hasta que termine el video y after_ms sea el tiempo que se muestra cuando la pantalla no puede leer la duración del video, media_end en una página con exactamente una primitiva de imagen o video, audio_end en una página cuyo audio_cue nombra una pista de banda sonora, o application con max_ms cuando la aplicación termina su propio turno llamando a window.screenrig.nextPage(). Una página application necesita exactamente una primitiva marcada controller; todos los demás modos lo prohíben.
transition.type es uno 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 o stinger. duration_ms es obligatorio, de 0 a 60000. La página predeterminada es un fundido cruzado de 200 ms. Deslizar mueve ambas páginas juntas como un carrusel. Deslizar lateral mueve la página entrante sobre la saliente, que se desplaza una cuarta parte. Barrido descubre la página entrante detrás de un borde duro en movimiento. Sumergir desvanece la página saliente a un color sólido y luego a la página entrante; color es un #RRGGBB opcional, predeterminado #000000, y válido solo en dip. Los nombres de dirección indican la dirección del movimiento: wipe-left es un borde que se mueve hacia la izquierda. ease es opcional: linear, in, out o in-out; el predeterminado es linear para crossfade y swipe-* y in-out para dip, wipe-* y slide-*; no está permitido en stinger. La página entrante controla su transición. La primera página de una lista de reproducción no reproduce transición.
Un stinger es un gráfico temático a pantalla completa que cubre la página saliente, intercambia la página entrante mientras la pantalla está cubierta y luego la descubre. Úselo para nombrar una sección de una lista de reproducción: colóquelo en la primera página de la sección. El objeto stinger es obligatorio para type: "stinger" y no está permitido en otros tipos. Todos sus miembros son opcionales. theme es uno de neomustard (el predeterminado), cyanotype, propaganda, signal, avant-garde, bloom o primetime, y coincide con los temas de la tarjeta. title tiene hasta 40 caracteres y subtitle hasta 60, establecidos en el tipo de visualización del tema. logo es media: más el id de una imagen lista en el proyecto, por ejemplo media:med_01EXAMPLE. accent es un #RRGGBB opcional que reemplaza el acento del tema. duration_ms para un stinger es de 2000 a 6000 y cubre todo el bumper; las duraciones típicas son de 2700 a 4000. El título se muestra completamente durante hang_ms, de 0 a 6000, predeterminado 1000 (un segundo), y hang_ms es como máximo el 60 % de duration_ms; una duración más larga necesita un duration_ms más largo. Un Player que no puede dibujar un stinger reproduce un fundido cruzado de la misma duración. Vea la página en vivo Tarjeta Stinger para observar la transición.
El siguiente ejemplo muestra una transición de página con stinger:
{ "type": "stinger", "duration_ms": 3500, "stinger": { "theme": "primetime", "title": "BREAKFAST", "subtitle": "Served until 11", "logo": "media:med_01EXAMPLE", "hang_ms": 1000 } }Un objeto enter opcional en un primitivo añade una animación de objeto: fade-up, fade-down, fade-left, fade-right, fade-in, zoom-in o zoom-out.
Un objeto de página visibility opcional limita cuándo se reproduce la página: un booleano enabled obligatorio, límites civiles from y until opcionales, y hasta 16 windows recurrentes de días y horas civiles. Cada playlist mantiene al menos una página sin campo visibility alguno, y una pantalla que ejecuta una playlist programada necesita una zona horaria. Establezca esa zona horaria primero; screen assign y playlist update rechazan localmente sin una y nombran el comando que lo corrige.
Una condición visibility.data de página, {key, path?, equals?}, muestra la página solo mientras un documento de datos de tarjeta coincide: key es una clave de datos de tarjeta o un ID de tarjeta, path un puntero RFC 6901 dentro del documento, y equals una cadena, un número, un booleano o null (omítalo para comprobar que el valor existe). La clave {screen.weather} lee el clima de la ubicación propia de cada pantalla, que establece screen update ID --location LAT,LON: {"enabled":true,"data":{"key":"{screen.weather}","path":"/condition","equals":"rain"}} muestra la página solo mientras llueve donde está esa pantalla. El documento del clima tiene condition (clear, cloud, fog, rain, snow, storm o wind), band (freezing por debajo de 0 °C, cold de 0 a 9, mild de 10 a 17, warm de 18 a 24, hot desde 25), temperatureC en grados enteros e isDay. Es el clima actual de la celda de 0,25 grados de la pantalla, actualizado cada hora aproximadamente, no un pronóstico. Una pantalla sin ubicación nunca muestra la página, y la publicación rechaza un path o un equals que el documento no puede contener, como cloudy en lugar de cloud. Mantenga una página ordinaria sin visibility como respaldo.
Un objeto audio opcional de nivel superior añade una banda sonora que se reproduce continuamente mientras cambian las páginas. tracks lista de 1 a 128 entradas en orden de reproducción, cada una con un id único (el patrón de id de página) y el media_id de un objeto de medios audio listo. loop por defecto es true y reinicia en la primera pista tras la última; volume por defecto es 1 y varía de 0 a 1, multiplicado por el volumen del Player; cued por defecto es false, y true detiene la banda sonora tras cada pista para que una pista se reproduzca solo cuando una página audio_cue la inicia. Una página ordinaria puede llevar audio_cue con un id track de esa lista y un booleano restart opcional (por defecto false): cuando aparece la página, el Player cambia a esa pista desde su inicio, reiniciándola solo si ya está reproduciéndose y restart es true. Las señales son indicios, las páginas de espacios publicitarios no pueden llevarlas, y una señal sin banda sonora es rechazada. Una página con advance {"mode":"audio_end"} termina cuando termina la pista que su audio_cue nombra, por lo que requiere esa señal y una banda sonora, no toma after_ms, y sigue las reglas duration para primitivos de imagen y video; un primitivo stream aún necesita una página duration, y una aplicación en la página nunca es su controlador; max_ms es un indicio opcional que el servidor anula. playlist update reemplaza todo el documento, por lo que omitir audio elimina la banda sonora. Creación de banda sonora.
Tarjetas
Descubra los tipos de tarjetas, cree una instancia y actualice sus datos en directo. Una lista de reproducción coloca el ID de tarjeta devuelto.
screenrig cards list
screenrig cards show gauge
screenrig card create --type gauge --file gauge-params.json
screenrig card list
screenrig card show crd_EXAMPLE
screenrig card params crd_EXAMPLE --file gauge-params.json
screenrig card data get crd_EXAMPLE
screenrig card data put crd_EXAMPLE --file gauge-data.json --expect-rev 1
screenrig card preview crd_EXAMPLE --output gauge.pngPantallas
Una pantalla es un Player. Estos comandos la leen, la apuntan a una lista de reproducción y gestionan su vida. Las precondiciones de revisión son opcionales en escrituras.
Las etiquetas agrupan pantallas en flotas. Cada pantalla lleva de 0 a 16 etiquetas únicas de 1 a 32 letras o dígitos, establecidas con screen tag. screen assign, screen reload, screen toast, screen tag y screen screenshot toman un id de pantalla, varios ids o --tag TAG, y una respuesta de flota informa cada pantalla: vea Resultados de flota.
Las carpetas de pantallas agrupan las pantallas por lugar, una carpeta por pantalla. Un comando de flota también acepta --folder ID: vea Carpetas de pantallas.
screen pair#
Empareje un Player con el código que aparece en su pantalla.
screenrig screen pair "$PAIRING_CODE" --name "Lobby"screen list#
Listar pantallas. Se omiten las pantallas archivadas a menos que se soliciten.
screen list [--state archived] [--tag TAG] [--folder ID|root]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--state | string | no | pantallas activas | El único valor aceptado es archived, que lista solo pantallas archivadas. |
--tag TAG | string | no | cada pantalla | Lista solo pantallas que llevan esta etiqueta exacta. |
--folder ID|root | string | no | cada pantalla | Lista solo las pantallas directamente dentro de esta carpeta de pantallas sfd_, no las de sus subcarpetas, o con root solo las pantallas fuera de toda carpeta. |
screenrig screen list --tag Lobby
screenrig screen list --folder sfd_01EXAMPLEFOLDER000000000Cada fila lleva el tags de la pantalla. Con --human, la tabla agrega una columna TAGS cuando alguna pantalla listada tiene etiquetas.
screen show#
Lea una pantalla, incluida revisión, asignación y estado en vivo.
screen show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
screenrig screen show scr_01EXAMPLESCREEN00000000tags lista las etiquetas de la flota de la pantalla. effective_playlist, takeover y playlist_schedule informan qué reproduce la pantalla y por qué; vea Programaciones y takeover. health y las capacidades del host del Player están en Salud y energía del dispositivo. online es verdadero mientras un Player está conectado, incluyendo una breve ventana de reconexión. last_online_at y last_ip opcionales aparecen después de la primera conexión. observation opcional informa las superficies que un Player ha pintado: id, width, height, pixel_ratio y presentation. Todos estos son solo lectura; screen update no puede enviarlos, y una pantalla archivada aún devuelve su fila.
commands lista los últimos 10 reinicios, recargas, vaciados de caché, reinicios de aplicación y actualizaciones de la pantalla, los más antiguos primero, cada uno con su type, su state (queued, sent, done, failed, expired, cancelled o superseded), su source (schedule para un reinicio emitido por una programación de reinicio; ausente en uno solicitado por una persona), su expires_at y el momento en que se envió o se completó. reboot_schedule y next_reboot_at informan de la programación de reinicio de la pantalla y del inicio de su próxima ventana de reinicio. Un vaciado de caché, un reinicio de aplicación o una actualización que terminó el Player lleva además su cause y un detail breve, que --human imprime como columna CAUSE y como línea bajo la tabla. suspension lleva message y since de una pantalla suspendida. Una pantalla archivada por screen replace informa replaced_by, la pantalla a la que se movió su dispositivo. Con --human, screen show imprime cada uno.
last_outage informa de la última caída de la pantalla: offline_since, back_at y duration_s y, cuando un informe de estado la determina, una likely_cause de device_restart, app_crash, app_restart, network o platform; no aparece cuando screenRIG no puede determinarla. Un reinicio se determina al volver la pantalla, mientras que una causa de red o de screenRIG espera al siguiente informe de estado del Player, que puede tardar hasta quince minutos. glass contiene los veredictos que screenRIG sacó de los informes de reproducción y las capturas de pantalla. Con --human, screen show imprime Last outage y Likely cause, y Playlist stalled, Blank screen o Frozen picture para un veredicto que encontró un problema; Notificaciones explica qué dejan fuera los veredictos.
screen update#
Parche el nombre de una pantalla, asignación de lista de reproducción o zona horaria en una sola llamada.
screen update <id> [--name NAME] [--playlist-id ID] [--timezone ZONE] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--name NAME | string | no | sin cambios | Nombre de pantalla para la pantalla. |
--playlist-id ID | string | no | sin cambios | La lista de reproducción pl_ que esta pantalla debe ejecutar. |
--timezone ZONE | string | no | sin cambios | Un identificador de zona IANA como America/Los_Angeles. Validado contra la base de datos de zonas del servidor. Un parche nunca borra una zona. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen update scr_01EXAMPLESCREEN00000000 --name "Lobby"En revisión, un cambio solo de --playlist-id se propone como screen assign; una sesión Proponer no puede cambiar otros campos.
screen publish#
Crear una nueva lista de reproducción desde un archivo preparado y asignarla a una pantalla.
screen publish <id> <file> [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
<file> | ruta | sí | ninguno | El documento de lista de reproducción preparado, o - para stdin. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión de pantalla. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen publish scr_LOBBY lobby.jsonEsto crea una nueva lista de reproducción y la asigna. No actualiza una lista de reproducción existente por nombre. Inspeccione primero el documento preparado. Repita la entrada idéntica para reanudar un fallo ambiguo. La lectura de la asignación no prueba la reproducción; solicite una captura de pantalla por separado. En revisión devuelve stage: pending_review con ambas revisiones. Vea Preparar, publicar y editar listas de reproducción.
screen assign#
Apunte una pantalla, o una flota de pantallas, a una lista de reproducción.
screen assign (<id>... | --tag TAG) --playlist-id ID [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--playlist-id ID | string | sí | ninguno | La lista de reproducción pl_ para ejecutar. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: vuelva a buscar, reapply, retry. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen assign scr_01EXAMPLESCREEN00000000 --playlist-id pl_01EXAMPLEPLAYLIST000000
screenrig screen assign --tag Lobby --playlist-id pl_01EXAMPLEPLAYLIST000000Si la lista de reproducción programa alguna página y la pantalla no tiene zona horaria, la CLI rechaza antes de enviar nada y nombra el comando screen set-timezone a ejecutar. Ninguna revisión se consume por ese rechazo. En una flota, cada pantalla aplica esa regla por sí misma: una pantalla sin zona horaria falla en su resultado y las otras se asignan.
Para publicar en una flota, cree la lista de reproducción una vez con playlist create, luego ejecute screen assign --tag TAG --playlist-id ID. screen publish apunta a una pantalla.
screen set-timezone#
Establecer la zona horaria civil en la que se lee una lista de reproducción programada.
screen set-timezone <id> --timezone ZONE [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--timezone ZONE | string | sí | ninguno | Un identificador de zona IANA como Europe/Berlin. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen set-timezone scr_01EXAMPLESCREEN00000000 --timezone America/Los_AngelesLos horarios de página son tiempos civiles, por lo que no tienen sentido sin una zona. Cambiar la zona renueva la revisión del manifiesto.
screen archive#
Ocultar una pantalla y oscurecer su cristal.
screen archive <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen archive scr_01EXAMPLESCREEN00000000Archivar oculta la pantalla de la lista predeterminada y oscurece el vidrio. No desvincula el reproductor.
screen unarchive#
Restaurar una pantalla archivada a la lista predeterminada.
screen unarchive <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen unarchive scr_01EXAMPLESCREEN00000000Un Player también puede archivar su propia pantalla: un restablecimiento confirmado en un Player que tiene una clave, o desvincular un Player de navegador emparejado por cookie. screen show luego reporta archive_reason como device_reset o device_unpair (project para un archivo que usted solicita), con archived_at. La pantalla mantiene su vinculación de dispositivo por cualquier motivo, por lo que un Player que aún tiene esa clave o cookie de dispositivo permanece apagado y se reanuda al desarchivar sin necesidad de volver a emparejar. El Player que fue restablecido o desvinculado pierde su clave o cookie y se empareja nuevamente como una pantalla nueva. Una clave reemplazada por una recuperación confirmada de pantalla permanece retirada.
Una pantalla archivada como replaced por screen replace no mantiene ninguna vinculación de dispositivo, por lo que desarchivar la rechaza y screen delete la elimina.
screen suspend#
Mostrar un aviso en una pantalla en lugar de su contenido, hasta que se reanude.
screen suspend <id> --message TEXT [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--message TEXT | string | sí | ninguno | El aviso que muestra la pantalla: de 1 a 280 caracteres tras recortar. El salto de línea es el único carácter de control, y el Player ajusta el texto y mantiene sus saltos de línea. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen suspend scr_01EXAMPLESCREEN00000000 --message "Closed for stocktake. Back at 9am."Una pantalla suspendida muestra el mensaje en lugar de su contenido. Nada más cambia: su lista de reproducción, programación, toma de control y control de pantalla permanecen y siguen evolucionando, y screen resume muestra lo que la pantalla estaría mostrando ahora. screen show informa suspension con message y since; suspender una pantalla suspendida reemplaza el mensaje y mantiene since. Suspender aumenta la revisión de la pantalla, y el Player vuelve a obtener su manifiesto de inmediato. Una pantalla archivada responde screen_archived.
screen resume#
Finalizar la suspensión de una pantalla para que vuelva a mostrar su propio contenido.
screen resume <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen resume scr_01EXAMPLESCREEN00000000Reanudar muestra de nuevo el contenido propio de la pantalla, a partir de lo que la pantalla estaría mostrando ahora, y el Player vuelve a obtener su manifiesto de inmediato. Una pantalla que no está suspendida responde sin cambios, sin cambio de revisión. Una pantalla archivada responde screen_archived.
screen delete#
Eliminar una pantalla.
screen delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen delete scr_01EXAMPLESCREEN00000000Eliminar quita una pantalla solo mientras no haya ninguna clave de Player vinculada a ella, y screen show informa deletable: true para esa pantalla. Un Player que se empareja con un código, ya sea nativo o de navegador, tiene una clave, y la clave permanece vinculada a su pantalla, por lo que eliminar esa pantalla responde 409 screen_archive_required (código de salida 5): archívela en su lugar. Solo un Player de navegador emparejado por cookie no tiene clave, y su pantalla se elimina esté emparejada o aún pendiente.
screen replace#
Mover a esta pantalla el dispositivo emparejado como otra pantalla, manteniendo la configuración y el historial de esta pantalla.
screen replace <id> --with ID [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La pantalla scr_ que se conserva. |
--with ID | string | sí | ninguno | La pantalla scr_ cuyo dispositivo emparejado toma el relevo. Debe ser otra pantalla del proyecto. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión de la pantalla que se conserva. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen replace scr_01EXAMPLESCREEN00000000 --with scr_01EXAMPLENEWSCREEN000000Empareje primero el nuevo hardware como su propia pantalla y luego reemplace. La clave del dispositivo, o la credencial de un Player de navegador, ahora da acceso a <id>, que mantiene su nombre, etiquetas, zona horaria, lista de reproducción, programaciones, toma de control, horario de pantalla y su anulación, muro de video, comentarios, campos, ubicación e historial, y adopta el host y el Player del reemplazo. Su salud, estado, almacenamiento y comandos en cola empiezan de cero. La pantalla nombrada por --with se archiva con archive_reason replaced y replaced_by que nombra <id>. No mantiene ninguna vinculación de dispositivo, por lo que screen unarchive no puede restaurarla y screen delete la elimina. La clave que tenía <id> se retira tras una ventana de gracia de quince minutos, y después su dispositivo anterior es rechazado. Ambas pantallas deben estar activas y tener un Player emparejado: una pantalla que sigue esperando el emparejamiento responde resource_conflict, una archivada responde screen_archived, y un muro de video necesita un Player de reemplazo que declare display.wall (wall_unsupported). La solicitud siempre lleva una clave de idempotencia, y un reintento exacto devuelve la respuesta original.
screen rotate-public-id#
Emitir un nuevo ID público para una pantalla.
screen rotate-public-id <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen rotate-public-id scr_01EXAMPLESCREEN00000000screen link create#
Crear el enlace de una pantalla, o reemplazarlo, e imprimir su URL de Player.
screen link create <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El ID de pantalla scr_. La pantalla está activa: su Player se ha vinculado una vez con su código. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen link create scr_01EXAMPLESCREEN00000000Imprime data.url, la URL de Player (https://play.screenrig.ai/player/#screen=…) que se pega como URL de una fuente de navegador en vMix u OBS, que no conserva almacenamiento y de otro modo perdería su vinculación en cada carga. El Player se ejecuta desde la URL en cada carga: la URL es toda la vinculación. Crear el enlace de nuevo lo reemplaza (data.replaced es true): la URL anterior deja de funcionar de inmediato y el Player abierto desde ella muestra un aviso sin contenido. La URL es una credencial que abre la pantalla: se imprime bajo una etiqueta sensible, se mantiene fuera del registro de operaciones y screen link show la vuelve a mostrar. Ábrala en un solo lugar. Una pantalla que no se ha vinculado responde resource_conflict (código de salida 5), y una pantalla archivada responde screen_archived. Tras una solicitud interrumpida, vuelva a ejecutar el mismo comando: reutiliza la clave de idempotencia guardada y devuelve el mismo enlace.
screen link show#
Imprimir el enlace de una pantalla y su URL de Player.
screen link show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
screenrig screen link show scr_01EXAMPLESCREEN00000000Imprime data.url bajo una etiqueta sensible con data.hint (los últimos cuatro caracteres del secreto), data.created_at y data.last_used_at una vez que un Player ha abierto el enlace. Una credencial solo lectura recibe url vacío con url_redacted true, y la salida humana indica que la URL se retiene; un inicio de sesión Manage la recibe. Una pantalla sin enlace responde screen_link_not_found (código de salida 4) y nombra el comando que crea uno. screen show imprime Screen link: on (…HINT) para una pantalla que lo tiene, y nunca su URL.
screen link delete#
Desactivar el enlace de una pantalla.
screen link delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen link delete scr_01EXAMPLESCREEN00000000La URL deja de funcionar de inmediato y toda sesión que abrió termina: una fuente de navegador que aún la muestra presenta un aviso y ningún contenido hasta que se le da una URL nueva. La pantalla, su vinculación y su contenido no se tocan. Tiene éxito, sin cambiar nada, cuando la pantalla no tiene enlace.
screen reload#
Pida al reproductor de una pantalla, o a todos los reproductores de una flota, que recarguen una vez.
screen reload (<id>... | --tag TAG) [--expires-in DURATION] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--expires-in DURATION | string | no | 24h, aplicado por el servidor | Cuánto tiempo espera la solicitud a que una pantalla sin conexión vuelva a estar en línea: 90s, 30m, 2h o 1d, de 60s a 24h. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen reload scr_01EXAMPLESCREEN00000000
screenrig screen reload scr_01EXAMPLESCREEN00000000 --expires-in 2h
screenrig screen reload --tag LobbyLa respuesta lleva un reload_id, un state y un expires_at. A una pantalla en línea se le envía la recarga de inmediato (state sent); una pantalla sin conexión la mantiene como queued y se le envía cuando vuelve a estar en línea antes de expires_at, 24 horas después de la solicitud salvo que --expires-in indique otra cosa. Una recarga más reciente reemplaza a una que sigue en cola, screen show lista los commands de la pantalla y screen command cancel cancela una que sigue en cola. En una flota, el reload de cada resultado lleva el mismo state. Un Player web se recarga en su próximo límite de página; un Player nativo se reconecta, vuelve a obtener su manifiesto y verifica si hay una actualización. Un Player ignora una recarga dentro de los diez minutos posteriores a la última que actuó. La recarga funciona en pantallas activas y archivadas y no cambia la revisión de la pantalla.
screen toast#
Publique un mensaje transitorio como chrome de escenario en una pantalla activa o una flota.
screen toast (<id>... | --tag TAG) --text TEXT [--level info] [--duration-ms MS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--text TEXT | string | sí | ninguno | De uno a 120 caracteres, salto de línea como único corte, máximo tres líneas. |
--level LEVEL | string | no | info | info, alert o error. El Player alojado muestra notificaciones de error. Info y alerta son niveles de diagnóstico que pueden suprimirse; el éxito del comando no establece visibilidad. |
--duration-ms MS | integer | no | 10000, aplicado por el servidor | Entre 2000 y 60000 cuando se suministra. |
screenrig screen toast scr_01EXAMPLESCREEN00000000 --text "Lobby closed"
screenrig screen toast --tag Lobby --text "Closing in ten minutes"Un toast no es un primitivo: no ocupa espacio en el lienzo, no tiene capa y no participa en la preparación ni en el fundido cruzado. Gana el último, no hay cola ni cancelación, y el sobre aceptado es solo { expires_at }. Nunca ponga credenciales u otro material secreto en el texto.
screen identify#
Mostrar el nombre de una pantalla sobre su contenido durante un tiempo, para encontrarla en el sitio.
screen identify <id> [--duration DURATION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--duration DURATION | string | no | 60s, aplicado por el servidor | Cuánto tiempo permanece visible la superposición, contado desde que el Player recibe la solicitud: 30s, 2m o 1m30s, de 2s a 10m. |
screenrig screen identify scr_01EXAMPLESCREEN00000000
screenrig screen identify scr_01EXAMPLESCREEN00000000 --duration 2mEl Player dibuja una superposición a pantalla completa sobre su contenido, con el nombre de la pantalla muy grande y su id pequeño debajo. La reproducción continúa detrás, y una identificación más reciente reemplaza la superposición. El sobre aceptado lleva identify_id, duration_ms y un expires_at 60 segundos después de la solicitud, por lo que una pantalla sin conexión nunca muestra la superposición más tarde. Solo un Player que declara la capacidad identify muestra la superposición: cualquier otra pantalla responde 409 identify_unsupported (código de salida 5) y no se envía nada, así que actualice el Player o muestre el nombre con screen toast. Una pantalla archivada responde screen_archived y una pantalla que sigue esperando el emparejamiento responde resource_conflict. La identificación no cambia la revisión de la pantalla.
screen screenshot#
Capture una imagen fija de una pantalla activa, o de cada pantalla en una flota, y guárdela en disco.
screen screenshot <id> [--output FILE] [--timeout MS] [--poll-ms MS]
screen screenshot (<id> <id>... | --tag TAG) [--output DIRECTORY] [--concurrency N] [--timeout MS] [--poll-ms MS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta, sin límite de cantidad de pantallas. |
--output FILE | ruta | no | ./<id>.webp | Para una pantalla, una ruta de archivo; un archivo existente se sobrescribe sin aviso. Para varios ids o --tag, un directorio, creado si falta, que recibe un <screen_id>.webp por pantalla. |
--concurrency N | integer | no | 4 | Capturas simultáneas para varios IDs o --tag, de 1 a 8. |
--timeout MS | integer | no | 35000 | Cuánto tiempo esperar para la captura. |
--poll-ms MS | integer | no | 500 | Intervalo entre sondeos de estado de captura. |
screenrig screen screenshot scr_01EXAMPLESCREEN00000000 --output ./lobby.webpscreenrig screen screenshot --tag Lobby --output ./lobby-shotsEl comando bloquea hasta que el WebP esté en disco; no hay --no-wait. El sobre informa screen_id, capture_id, path, bytes, sha256, width y height, y nunca bytes de imagen. Gana el último: una solicitud posterior reemplaza una captura en curso. Una captura de pantalla del Player web dibuja cada página iframe como un recuadro gris oscuro con la etiqueta «Embedded web page» y cada aplicación tal como se muestra a sí misma; la imagen no lleva ninguna marca del recuadro, por lo que no demuestra que una página iframe se mostrara.
Para varios ids o --tag, la respuesta es un resultado de flota con action: "screenshot", el selector, y el directorio output; cada resultado ok lleva path, bytes, sha256, width y height. Con --tag, la CLI primero lista las pantallas etiquetadas, siguiendo cada página de lista; cada página de lista se factura y las capturas son gratuitas, y varios ids no necesitan lista. --idempotency-key se rechaza en esta forma, porque cada captura usa su propia clave. Si una captura falla inesperadamente, el resultado de esa pantalla es unexpected_error, no se inician nuevas capturas, las pantallas que esperan reportan not_attempted y el código de salida es 1.
screen tag#
Establecer, agregar, eliminar o borrar las etiquetas en una pantalla o una flota.
screen tag (<id>... | --tag TAG) (--set TAGS | --add TAGS | --remove TAGS | --clear) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--set TAGS | string | exactamente una acción | ninguno | Reemplazar todo el conjunto con estas etiquetas separadas por comas, como Lobby,Floor2. |
--add TAGS | string | exactamente una acción | ninguno | Agregue estas etiquetas separadas por comas. |
--remove TAGS | string | exactamente una acción | ninguno | Eliminar estas etiquetas separadas por comas. |
--clear | boolean | exactamente una acción | apagado | Eliminar todas las etiquetas. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen tag scr_01EXAMPLESCREEN00000000 --set Lobby,Floor2
screenrig screen tag scr_01EXAMPLESCREEN00000000 --add Spring
screenrig screen tag --tag Lobby --add SpringUna etiqueta tiene de 1 a 32 letras o dígitos, y una pantalla lleva como máximo 16 etiquetas únicas. Las etiquetas seleccionan flotas; nunca son autorización ni llegan al Player. Cambiar etiquetas aumenta la revisión de la pantalla, no la revisión del manifiesto. Para una pantalla, el sobre es la pantalla actualizada. --add y --remove leen primero la pantalla y escriben el nuevo conjunto protegido por --expect-rev o la revisión recién leída, por lo que un cambio concurrente devuelve revision_conflict (salida 6) en lugar de sobrescribirse; vuelva a ejecutar el comando. En una flota, --add y --remove se aplican atómicamente contra el conjunto almacenado de cada pantalla, y una pantalla que pasaría de 16 etiquetas falla en su propio resultado con invalid_request.
Dondequiera que cambien las etiquetas (screen tag, una actualización de pantalla mediante la API, el editor de etiquetas del panel), el levels de la respuesta lista, en gained y lost, las campañas a cuya audiencia de etiquetas la pantalla entró o de la que salió, cada una con su source (campaign), id, el recuento de screens y, cuando la campaña tiene alcance, reach_before y reach_after. Un screen tag de flota los suma sobre toda la flota. Lea levels.lost antes de considerar inofensiva una edición de etiquetas: quitar la última etiqueta coincidente de las pantallas de una campaña vacía ese grupo y activa las notificaciones reach_dropped y group_empty.
Resultados de flota
Con varios ids de pantalla o --tag, screen assign, screen reload, screen toast y screen tag se ejecuta una acción medida sin límite de cantidad de pantallas. El CLI sigue automáticamente las páginas de resultados limitadas, espera cuando se agotan los presupuestos de control y mantiene la misma clave y flota seleccionada durante todo el proceso. --tag selecciona solo pantallas activas; los ids pueden nombrar cualquier pantalla. Un id de pantalla mantiene la respuesta de pantalla única. Los comandos de flota no toman --expect-rev, porque las protecciones de revisión son por pantalla. Cada comando de flota lleva una clave de idempotencia. Tras una solicitud interrumpida, como una conexión perdida, vuelva a ejecutar el comando idéntico para reproducir las pantallas terminadas sin repetir sus efectos secundarios. Tras una respuesta definitiva con fallos, reintente solo los ids fallidos: volver a ejecutar todo el comando actúa sobre todas las pantallas nuevamente. Reutilizar el mismo --idempotency-key explícito dentro de 24 horas devuelve la respuesta registrada en su lugar.
El sobre mantiene ok: true. El éxito parcial es una respuesta normal, no un error de transporte:
{
"ok": true,
"data": {
"action": "reload",
"matched": 3, "succeeded": 2, "failed": 1,
"results": [
{ "screen_id": "scr_LOBBY", "status": "ok", "reload": { "reload_id": "…", "expires_at": "…", "state": "sent" } },
{ "screen_id": "scr_GONE", "status": "failed", "problem": { "code": "not_found", "status": 404 } },
{ "screen_id": "scr_ENTRANCE", "status": "ok", "reload": { "reload_id": "…", "expires_at": "…", "state": "queued" } }
]
},
"warnings": [{ "code": "fleet_partial_failure", "message": "1 of 3 screens failed; 2 succeeded." }]
}Un resultado ok lleva el resultado de una sola pantalla: revision para assign, revision y tags para cambios de etiqueta, reload para recarga y toast para notificación. Un resultado failed lleva el problema que la propia solicitud de esa pantalla habría devuelto. Los límites por pantalla aún se aplican dentro de una acción de flota, por lo que una recarga o notificación de flota puede informar rate_limited para una pantalla que acaba de recargarse o notificarse; reintente ese id de pantalla más tarde. Los límites por pantalla son 6 recargas y 20 notificaciones por minuto. Las recargas y notificaciones de flota también consumen un presupuesto de organización de 600 pantallas por minuto: el servidor se pausa cuando se agota el presupuesto restante, y la CLI respeta Retry-After antes de continuar automáticamente.
| Resultado | Código de salida | Advertencia |
|---|---|---|
| Cada pantalla emparejada tuvo éxito | 0 | ninguno |
| Algunas o todas las pantallas fallaron | El código de la primera pantalla fallida, como 4 para not_found o 6 para revision_conflict | fleet_partial_failure |
| Ninguna pantalla coincide | 0 | fleet_no_match |
| Selector o acción malformada | 2 o el código propio de la solicitud; sin cambios en la pantalla | ninguno |
Carpetas de pantallas
Una carpeta de pantallas organiza las pantallas por lugar. El id de una carpeta empieza por sfd_, y una pantalla está como máximo en una carpeta, indicada como folder_id en screen show y screen list y ausente en la raíz del proyecto. Una organización contiene como máximo 1000 carpetas en todos sus proyectos, anidadas hasta 10 niveles de profundidad, con nombres de 1 a 100 caracteres únicos entre las carpetas del mismo nivel. Las etiquetas siguen sirviendo para los grupos que atraviesan los lugares.
screen folder list
screen folder show <id>
screen folder create --name NAME [--parent ID] [--default-playlist-id ID]
screen folder update <id> [--name NAME] [--parent ID | --root] [--default-playlist-id ID | --clear-default] [--expect-rev REVISION]
screen folder delete <id> [--expect-rev REVISION]
screen move <id>... (--folder ID | --root)screenrig screen folder create --name "North Tower"
screenrig screen folder create --name "Level 2" --parent sfd_01EXAMPLEFOLDER000000000 --default-playlist-id pl_01EXAMPLEPLAYLIST000000
screenrig screen move scr_01EXAMPLESCREEN00000000 --folder sfd_01EXAMPLEFOLDER000000000screen folder list devuelve todas las carpetas en data.items con id, name, parent_id (null en la raíz del proyecto), default_playlist_id cuando está definido, screens (las pantallas activas directamente dentro) y revision. screen move acepta ids de pantallas y de carpetas en cualquier combinación, como máximo 1000 en una sola solicitud de todo o nada; una carpeta se mueve con todo su contenido y no puede moverse dentro de sí misma ni de una carpeta que contiene. screen list --folder ID lista solo las pantallas directamente dentro de una carpeta.
En cada comando de flota que acepte --tag TAG, --folder ID selecciona cada pantalla activa de esa carpeta y de cada carpeta que contiene. Una campaña acepta lo mismo: --folder ID en campaign create y campaign update, o una regla {"folder":"sfd_…"} en --audience, que se combina con reglas de etiqueta como en {"all":[{"folder":"sfd_BUILDING"},{"tag":"overhead"}]}.
La lista de reproducción predeterminada de una carpeta es lo que muestran sus pantallas cuando no tienen una lista de reproducción propia. Gana la carpeta más cercana por encima de una pantalla que defina una, y effective_playlist informa source folder con el id de la carpeta como entry_id. Una toma de control, una campaña, una programación y la lista de reproducción asignada a la propia pantalla tienen prioridad sobre ella; vea Programaciones y toma de control. La lista de reproducción debe estar aprobada (playlist_not_approved, salida 5).
Mover pantallas o una carpeta, o cambiar la lista de reproducción predeterminada de una carpeta, vuelve a resolver las pantallas afectadas en unos 15 segundos. El levels de la respuesta lista, en gained y lost, las campañas a cuya audiencia de carpeta esas pantallas entraron o de la que salieron y las listas de reproducción predeterminadas de carpeta que empezaron o dejaron de mostrar, cada una con su source (campaign o folder), su id y su recuento de screens. Eliminar una carpeta no elimina nada de lo que contiene: sus pantallas y carpetas suben a su carpeta superior, y resource_conflict (salida 5) rechaza la eliminación mientras una audiencia de campaña nombre la carpeta. La eliminación responde 200 con levels, igual que un movimiento.
Las escrituras requieren acceso de administración y nunca esperan revisión: una sesión con acceso Proponer responde 403 insufficient_access. Cada escritura añade screen.folder_created, screen.folder_updated, screen.folder_deleted o screen.moved a los eventos del proyecto.
Programaciones y toma de control
Las campañas de una pantalla y las entradas de programación de listas de reproducción son niveles de una misma pila. El servidor decide qué reproduce cada pantalla de arriba abajo: su toma de control, las campañas que la alcanzan (primero --priority, luego la más reciente), las entradas de programación propias de la pantalla en orden, la lista de reproducción asignada con screen assign y, después, la lista de reproducción predeterminada de la carpeta de pantallas más cercana que defina una. Se reproduce el primer nivel que rige. Los cambios se aplican en aproximadamente un minuto desde un límite, y los Players no necesitan actualización. Una hoja de líneas de programación para muchas pantallas se importa en un solo paso: consulte Importación de programación.
Un nivel rige mientras rigen todas sus reglas: from y until, windows semanales, reglas monthly, dates, fechas except, una condición data y una condición interaction. Una regla monthly es un day del mes (de 1 a 31; un mes sin ese día la omite) o el día de la semana de posición nth (de 1 a 4, o -1 para el último) con un weekday; un elemento dates es una sola date; ambos admiten horas start y end opcionales y, si no, abarcan todo el día. Una fecha except elimina toda ocurrencia que empieza ese día, incluidas las colas nocturnas, y una ocurrencia nocturna pertenece a la fecha en que empieza. data es {key, path?, equals?} y rige mientras esos datos de la tarjeta existan o igualen el escalar. interaction es {idle_s} (de 5 a 3600, 60 por defecto): el nivel se reproduce mientras alguien usa la pantalla con un toque o un clic y vuelve atrás tras idle_s segundos sin entrada, como una página interactiva sobre un ciclo de atracción. displays lista las salidas del muro de video (de 1 a 12) en las que se reproduce el nivel. start es next_item (predeterminado), que espera a que termine el elemento actual, o on_time, que lo interrumpe en el instante exacto. Un Player que resuelve su propia pila reproduce los niveles interaction, data y displays; campaign explain informa del nivel para cualquier otro Player como off con el motivo stack_only (necesita un Player que resuelva su propia pila).
screen show, screen list y cada comando abajo devuelven effective_playlist ({id, source, entry_id?, until?}, donde source es takeover, campaign, schedule, default o folder), takeover y playlist_schedule. entry_id es el id de la campaña para campaign, el id de la entrada para schedule y el id de la carpeta para folder. until es el siguiente momento en que se sabe que cambia la elección. screen show --human lo imprime en la zona horaria de la pantalla, como en Assigned: pl_LUNCH (schedule entry lunch until 2026-08-14 15:00 America/Los_Angeles) o Assigned: pl_LUNCH (campaign cmp_LUNCH until 2026-08-14 15:00 America/Los_Angeles) (UTC, etiquetado, cuando la pantalla no tiene zona); la salida JSON mantiene instantes RFC 3339. Las tablas de programación humanas están etiquetadas con la zona horaria de la pantalla, y screen list --human añade una columna ASSIGNED cuando alguna pantalla listada reproduce algo distinto de su lista de reproducción predeterminada.
| Código de problema | Salir | Significado |
|---|---|---|
invalid_request | 8 | La pantalla no tiene lista de reproducción predeterminada asignada (next es screen assign), un horario apunta a una pantalla sin zona horaria (next es screen set-timezone), o no se puede asignar una lista de reproducción con nombre. |
screen_archived | 5 | Una pantalla archivada rechaza programaciones y tomas. next es screen unarchive. |
revision_conflict | 6 | La revisión --expect-rev estaba obsoleta. |
rate_limited | 7 | La programación y las escrituras de toma de control comparten límites por minuto: 600 por organización, 20 por pantalla y 60 por IP. Espere retry_after_seconds. |
Con un id de pantalla, estos comandos devuelven la pantalla actualizada y --expect-rev protege su revisión. Varios ids o --tag se ejecutan como una solicitud de flota con el sobre y reglas de salida de la flota; cada pantalla falla individualmente, y el CLI se pausa y reanuda automáticamente cuando se agota el presupuesto del proyecto.
screen schedule show#
Mostrar la programación de la lista de reproducción de una pantalla y la lista que actualmente selecciona.
screen schedule show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
screenrig screen schedule show scr_CAFELa salida JSON puede enviarse directamente a screen schedule set --file.
screen schedule set#
Reemplazar la programación de la lista de reproducción en una pantalla o flota.
screen schedule set (<id>... | --tag TAG) --file FILE [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--file FILE | ruta | sí | ninguno | El documento de programación, o - para stdin. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen schedule set scr_CAFE --file dayparts.json
screenrig screen schedule set --tag Cafe --file dayparts.jsonCada lista de reproducción que un horario nombra se valida como una asignación, y la pantalla necesita una zona horaria y una lista de reproducción predeterminada asignada. Cuando ninguna entrada rige, se reproduce la lista asignada. Si una lista programada no puede mostrarse, sus entradas se omiten y se registra screen.playlist_unavailable.
screen schedule clear#
Eliminar la programación de la lista de reproducción de una pantalla o flota.
screen schedule clear (<id>... | --tag TAG) [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen schedule clear --tag Cafescreen schedule preview#
Mostrar qué cambiaría reemplazar el horario de listas de reproducción de una pantalla, sin hacerlo.
screen schedule preview <id> --file FILE [--calendar-from INSTANT] [--calendar-to INSTANT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--file FILE | ruta | sí | ninguno | El documento de horario tal como lo toma screen schedule set, o - para stdin. Se acepta de vuelta el JSON de screen schedule show. |
--calendar-from INSTANT | string | no | ahora | Inicie los calendarios en este instante con zona, como 2026-12-01T00:00:00Z. |
--calendar-to INSTANT | string | no | una semana después del inicio | Termine los calendarios en este instante con zona, como máximo 93 días después del inicio. |
screenrig screen schedule preview scr_LOBBY --file dayparts.json
screenrig screen schedule preview scr_LOBBY --file dayparts.json --calendar-from 2026-12-01T00:00:00Z --calendar-to 2027-01-01T00:00:00ZNo se escribe nada. Las entradas se comprueban como las comprueba screen schedule set, así que una vista previa rechaza lo que rechaza el set. data.gained y data.lost dicen si la pantalla ganaría o perdería niveles de su horario; una entrada con "paused": true no está en ninguna pantalla, así que publicarla la gana. data.calendar.before y data.calendar.after son el calendario de la pantalla tal como es y tal como sería entre --calendar-from y --calendar-to.
screen schedule revisions#
Listar las revisiones del horario de listas de reproducción de una pantalla, la más reciente primero.
screen schedule revisions <id> [--after CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--after CURSOR | string | no | la primera página | Continúe desde el data.next_cursor de la página anterior. |
screenrig screen schedule revisions scr_LOBBY
screenrig screen schedule revisions scr_LOBBY --after CURSORdata.items contiene como máximo 50 revisiones, cada una con revision (la revisión de la pantalla en la escritura, por lo que los números tienen huecos donde la pantalla cambió de otro modo), created_at, change, current, author cuando se conoce y entries, el horario completo después de esa escritura (none significa que la pantalla no tenía horario). change es edited (un set, un clear o una importación de horarios), restored (una copia de la revisión anterior que nombra restored_from) o baseline. Mientras data.next_cursor sea una cadena, quedan revisiones más antiguas: ejecute el comando de nuevo con --after establecido en ese valor. Las revisiones se van con la purga de la pantalla. Basta con acceso de solo lectura.
screen schedule restore#
Volver a poner en una pantalla el horario de una revisión anterior copiándolo hacia delante.
screen schedule restore <id> --revision N [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--revision N | integer | sí | ninguno | La revisión que se copia hacia delante, tal como la numera screen schedule revisions. |
--expect-rev REVISION | string | no | la revisión recién leída | Exigir esta revisión actual de la pantalla, no N. Sin ella, la CLI lee la pantalla justo antes de escribir y envía esa revisión; un cambio entre medias es revision_conflict (salida 6). |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen schedule restore scr_LOBBY --revision 4
screenrig screen schedule restore scr_LOBBY --revision 4 --expect-rev 9Las entradas de la revisión N pasan a ser el horario de la pantalla, la misma escritura que screen schedule set con esas entradas (o screen schedule clear cuando esa revisión no tenía ninguna), comprobadas como se comprueban ahora: una lista de reproducción eliminada desde entonces la rechaza. Con acceso Propose, o en un proyecto que exige revisión de los cambios de los agentes, la restauración espera a una persona como el set, y nada cambia en pantalla hasta que la aprueba. Las revisiones anteriores quedan como estaban.
screen takeover#
Mostrar una lista de reproducción en una pantalla o en una flota antes de las campañas, el horario y la asignación.
screen takeover [set] (<id>... | --tag TAG) --playlist-id ID [--until TIME | --for DURATION] [--reason TEXT] [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--playlist-id ID | string | sí | ninguno | La lista de reproducción pl_ para mostrar. |
--until TIME | string | no | retenido hasta ser liberado | Un instante RFC 3339 estricto con segundos y un desplazamiento, en la forma YYYY-MM-DDTHH:MM:SSZ o YYYY-MM-DDTHH:MM:SS-07:00, enviado normalizado a UTC; estrictamente en el futuro y a lo sumo 7 días adelante. O none para mantener hasta screen takeover clear. |
--for DURATION | string | no | retenido hasta ser liberado | 30m, 2h o 3d, hasta 6d23h59m, convertido a un until desde el reloj de esta computadora. 7d se rechaza localmente; use --until para un total de 7 días. No con --until. |
--reason TEXT | string | no | ninguno | Una nota del operador sobre la toma y sus eventos. Recortada, máximo 120 caracteres, y sin caracteres de control. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen takeover scr_LOBBY --playlist-id pl_DRILL --for 30m --reason "Fire drill"
screenrig screen takeover --tag Lobby --playlist-id pl_LAUNCH --for 2h
screenrig screen takeover scr_A scr_B --playlist-id pl_NOTICE --until nonescreen takeover ID es la abreviatura de screen takeover set ID. Un takeover nuevo reemplaza al anterior. Cuando termina, la pantalla vuelve a una campaña que rige, a su programación o a su lista de reproducción asignada por sí sola. Un takeover cuya lista de reproducción no puede mostrarse termina. Una reejecución --for tras un fallo ambiguo calcula un nuevo final y se envía como una nueva solicitud.
screen takeover clear#
Finalizar la toma de control en una pantalla o una flota.
screen takeover clear (<id>... | --tag TAG) [--expect-rev REVISION] [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
--note TEXT | string | no | ninguno | Una nota para la persona que revisa el cambio: texto plano, máximo 280 caracteres. Se ignora cuando el cambio se aplica de inmediato. |
screenrig screen takeover clear --tag LobbyEl archivo de programación
Un horario lista de 1 a 32 entradas en orden de prioridad; gana la primera entrada que rige. Una entrada define al menos una regla de un nivel: windows, monthly, dates, except, data, interaction, from o until, y opcionalmente displays, start y paused. windows tiene de 1 a 16 elementos en la zona horaria de la pantalla: days usa mon a sun, y start y end son HH:MM; omita ambos para todo el día. Un end en o antes de start cruza la medianoche y pertenece al día de inicio. Opcionales from (inclusivo) y until (exclusivo) son minutos civiles como 2026-12-24T18:00, sin desfase. Un id omitido se convierte en entry_N. Una entrada con "paused": true es un borrador: no está en la pila de ninguna pantalla, screen schedule show la marca y el calendario la dibuja con trazo discontinuo. Envíe de nuevo el horario sin paused para publicarla. La CLI verifica esta forma antes de enviar algo. Franja horaria de desayuno, almuerzo y cena:
{
"entries": [
{ "id": "breakfast", "playlist_id": "pl_BREAKFAST",
"windows": [{ "days": ["mon", "tue", "wed", "thu", "fri"], "start": "06:00", "end": "11:00" },
{ "days": ["sat", "sun"], "start": "08:00", "end": "12:00" }] },
{ "id": "lunch", "playlist_id": "pl_LUNCH",
"windows": [{ "days": ["mon", "tue", "wed", "thu", "fri"], "start": "11:00", "end": "15:00" }] },
{ "id": "dinner", "playlist_id": "pl_DINNER",
"windows": [{ "days": ["mon", "tue", "wed", "thu", "fri", "sat", "sun"], "start": "17:00", "end": "22:00" }] }
]
}Un menú que se reproduce mientras alguien usa la pantalla, por encima de un brunch del primer domingo que omite una fecha:
{
"entries": [
{ "id": "browse", "playlist_id": "pl_MENU", "interaction": { "idle_s": 90 } },
{ "id": "brunch", "playlist_id": "pl_BRUNCH",
"monthly": [{ "nth": 1, "weekday": "sun", "start": "10:00", "end": "14:00" }],
"except": ["2026-12-06"] }
]
}Un horario de lista de reproducción elige entre listas; la página visibility dentro de una lista aún elige entre sus páginas.
Programar y eventos de toma de control
events list y events follow imprimen screen.playlist_switched (playlist_id, previous_playlist_id, source, entry_id, until), screen.takeover_started (playlist_id, until, donde none significa retenido hasta que se borre, y reason), screen.takeover_ended (reason expired, cleared, replaced, playlist_deleted, o playlist_unavailable), y la advertencia screen.playlist_unavailable (playlist_id, entry_ids, y code playlist_deleted o playlist_unavailable).
Eliminar una lista de reproducción que cualquier pantalla, incluidas las archivadas, aún puede mostrar falla con resource_conflict (salida 5): asignada, nombrada por una entrada de programación, retenida por una toma de control, mostrada por una campaña o efectiva. next señala a screen list.
Campañas
Una campaña cambia todas las pantallas de una audiencia a una lista de reproducción mientras rigen sus reglas, y las revierte cuando dejan de regir. Una sola campaña ejecuta los menús de almuerzo en cada tienda north, y una pantalla etiquetada north más adelante también la recibe. Sin ninguna regla definida, rige siempre.
Por pantalla, el servidor elige su toma de control, o la primera campaña que rige (--priority de 0 a 100, de mayor a menor, luego la más nueva), o la programación de lista de reproducción, o la lista de reproducción asignada; vea Programaciones y toma de control para la pila y las reglas. Una campaña alcanza una pantalla que tiene una lista de reproducción predeterminada (screen assign). Una con una regla de fecha u hora también necesita la zona horaria de la pantalla (screen set-timezone), porque son horas civiles que se leen en la zona horaria propia de cada pantalla. Las pantallas cambian dentro de aproximadamente un minuto, y los Players no necesitan actualización.
Una campaña en pausa es un borrador: no está en ninguna pantalla hasta que campaign publish la publica, primero si se desea en una carpeta de prueba o en unas pocas pantallas de prueba, y campaign promote pone después su audiencia en ella. campaign preview muestra un cambio antes de hacerlo, y campaign revisions y campaign restore guardan y recuperan versiones anteriores. Los mismos borradores, vistas previas e historial existen para las entradas de horario más abajo; consulte borradores, prueba y promoción, historial.
Los comandos de campaña usan la capacidad screens. Las escrituras requieren acceso de administración y nunca esperan revisión: una sesión con acceso Proponer responde 403 insufficient_access. Una organización tiene como máximo 100 campañas en todos sus proyectos (campaign_limit_reached, salida 5), y la lista de reproducción debe estar aprobada (playlist_not_approved, salida 5). Cada escritura añade campaign.created, campaign.updated o campaign.deleted a los eventos del proyecto, y una pantalla que una campaña cambia registra screen.playlist_switched con source campaign y el id de la campaña como entry_id. ads campaigns compran tiempo publicitario en otras pantallas y son un recurso distinto.
campaign list#
Listar las campañas del proyecto en el orden en que las pantallas las leen.
campaign listSin parámetros.
screenrig campaign listdata.items contiene como máximo 100 campañas, las de mayor prioridad primero y, dentro de una misma prioridad, las más nuevas primero. Una campaña pausada aparece en la lista y no se aplica en ninguna parte.
campaign show#
Lea una campaña.
campaign show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
screenrig campaign show cmp_LUNCHDevuelve name, playlist_id, audience (la regla exacta), priority, paused, los from, until, windows, monthly, dates, except, interaction, displays y start que están establecidos, y revision, el valor para --expect-rev en una escritura posterior. reach informa cuántas pantallas coinciden con la audiencia: published cuando la campaña se publicó por última vez (creada, o actualizada con una nueva audiencia, lista de reproducción o estado de pausa), current y at para el recuento más reciente, y empty_groups, las hojas tag:NAME y folder:ID de la audiencia que no coinciden con ninguna pantalla. Una etiqueta, carpeta, archivo o eliminación que cambia el recuento se vuelve a contar en unos 15 segundos; campaign list también lleva reach, y las notificaciones reach_dropped y group_empty lo vigilan. Un id de ads campaigns list responde not_found (salida 4) aquí.
campaign create#
Cambiar las pantallas de una audiencia a una lista de reproducción, siempre o mientras rigen sus reglas.
campaign create --name NAME --playlist-id ID (--tag TAG | --any-tag TAG | --screen-id ID | --folder ID | --all-screens | --audience RULE) [--from TIME] [--until TIME] [--window SPEC] [--monthly SPEC] [--date SPEC] [--except DATES] [--on-touch [IDLE_S]] [--displays N[,N]] [--start on-time|next-item] [--covers WHERE] [--priority N] [--paused]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | Un nombre de 1 a 120 caracteres. |
--playlist-id ID | string | sí | ninguno | La lista de reproducción pl_ que muestra la audiencia mientras la campaña rige. Debe estar aprobada. |
--tag TAG | string | una opción de audiencia | ninguno | Pantallas que llevan esta etiqueta. Repita o separe con comas para exigir todas las etiquetas listadas. |
--any-tag TAG | string | una opción de audiencia | ninguno | Pantallas que llevan al menos una de estas etiquetas. Repita o separe con comas. |
--screen-id ID | string | una opción de audiencia | ninguno | Estas pantallas. Repita o separe con comas. |
--folder ID | string | una opción de audiencia | ninguno | Las pantallas de esta carpeta de pantallas sfd_ y de cada carpeta que contiene. Para combinar una carpeta con etiquetas, use --audience. |
--all-screens | boolean | una opción de audiencia | apagado | Todas las pantallas del proyecto. |
--audience RULE | string | una opción de audiencia | ninguno | Una regla como JSON, @FILE para leerla desde un archivo, o - para entrada estándar. |
--from TIME | string | no | sin inicio | Comenzar a esta hora civil en la zona horaria de cada pantalla, YYYY-MM-DDTHH:MM sin desfase. |
--until TIME | string | no | sin fin | Finalizar antes de esta hora civil en la zona horaria de cada pantalla, en el mismo formato y posterior a --from. |
--window SPEC | string | no | ninguno | Rige solo en esta ventana semanal, DAYS o DAYS@HH:MM-HH:MM, por ejemplo mon-fri@09:00-17:00 o sat,sun. Repita hasta 16 veces; la campaña rige en cualquiera de ellas. |
--monthly SPEC | string | no | ninguno | Rige solo en esta ocurrencia mensual: un día del mes (15 o day15; un mes sin ese día la omite) o el enésimo día de la semana (1st-mon, 2nd-tue, 3rd-wed, 4th-thu, last-sun), cada uno con un @HH:MM-HH:MM opcional. Repita hasta 16 veces. |
--date SPEC | string | no | ninguno | Rige solo en este día, YYYY-MM-DD o YYYY-MM-DD@HH:MM-HH:MM. Repita hasta 100 veces. |
--except DATE | string | no | ninguno | Omite estas fechas, YYYY-MM-DD, repetidas o separadas por comas, hasta 100. Una excepción elimina toda ocurrencia que empieza en esa fecha, incluidas las colas nocturnas. |
--on-touch [IDLE_S] | integer | no | apagado | Rige solo mientras alguien usa la pantalla con un toque o un clic, hasta que pasen IDLE_S segundos, de 5 a 3600 (60 por defecto), sin entrada. |
--displays N[,N] | string | no | todas las salidas | Reproducir solo en estas salidas del muro de video, de 1 a 12, separadas por comas. |
--start WHEN | string | no | next-item | on-time cambia en el instante exacto e interrumpe el elemento en curso; next-item espera a que termine. |
--covers WHERE | string | no | full | Dónde se reproduce la lista: full (la página), main o header, footer o side, una franja dibujada sobre la página que necesita una lista de reproducción hecha para esa región. Consulte franjas. |
--priority N | integer | no | 0 | De 0 a 100. Gana el número más alto cuando dos campañas rigen en una misma pantalla. |
--paused | boolean | no | apagado | Créela pausada: un borrador que no está en ninguna pantalla hasta campaign publish o campaign resume. |
screenrig campaign create --name "Lunch menu" --playlist-id pl_LUNCH --tag north --window mon-fri@11:00-14:00
screenrig campaign create --name "North Tower welcome" --playlist-id pl_WELCOME --folder sfd_01EXAMPLEFOLDER000000000
screenrig campaign create --name "Holiday hours" --playlist-id pl_HOLIDAY --tag Lobby --from 2026-12-20T00:00 --until 2027-01-02T00:00 --priority 10
screenrig campaign create --name "North cafes" --playlist-id pl_CAFE --audience '{"all":[{"tag":"North"},{"any":[{"tag":"Cafe"},{"tag":"Patio"}]}]}' --paused
screenrig campaign create --name "Brunch" --playlist-id pl_BRUNCH --tag Cafe --monthly 1st-sun@10:00-14:00 --except 2026-12-06
screenrig campaign create --name "Touch to browse" --playlist-id pl_MENU --screen-id scr_KIOSK --on-touch 90
screenrig campaign create --name "Holiday opening" --playlist-id pl_HOLIDAY --tag Lobby --date 2026-12-24@18:00-22:00 --start on-time
screenrig campaign create --name "Wall outputs 1 and 2" --playlist-id pl_WALL --screen-id scr_WALL --displays 1,2Las etiquetas tienen de 1 a 32 letras o dígitos. DAYS es daily, un día (mon), un rango (mon-fri; fri-mon cruza el final de la semana) o una lista separada por comas (sat,sun). Sin hora, la ventana es todo el día, y un fin igual o anterior al inicio cruza la medianoche y pertenece al día de inicio. En una regla --audience cada miembro tiene exactamente uno de all, any, tag, screen_id o folder, los grupos se anidan hasta 3 niveles de profundidad, una audiencia tiene como máximo 500 reglas y {"all":[]} equivale a todas las pantallas.
Después de una creación interrumpida o ambigua, vuelva a ejecutar el mismo comando dentro de 24 horas: reutiliza la clave de idempotencia guardada, y el servidor devuelve la misma campaña en lugar de crear otra.
campaign update#
Cambiar una campaña; las pantallas de su audiencia anterior y de la nueva se vuelven a resolver dentro de un minuto.
campaign update <id> [--name NAME] [--playlist-id ID] [audience option] [--from TIME | --clear-from] [--until TIME | --clear-until] [--window SPEC | --clear-windows] [--monthly SPEC | --clear-monthly] [--date SPEC | --clear-dates] [--except DATES | --clear-except] [--on-touch [IDLE_S] | --clear-on-touch] [--displays N[,N] | --clear-displays] [--start WHEN] [--covers WHERE] [--priority N] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--name NAME | string | no | sin cambios | Renombrar la campaña. |
--playlist-id ID | string | no | sin cambios | Mostrar esta lista de reproducción en su lugar. Debe estar aprobada. |
--tag, --any-tag, --screen-id, --folder, --all-screens, --audience | string | no | sin cambios | Como máximo una, escrita como en campaign create. Reemplaza toda la audiencia. |
--from TIME, --until TIME | string | no | sin cambios | Una hora civil como en campaign create. --from debe seguir siendo anterior a --until; de lo contrario, invalid_request (salida 8). |
--clear-from, --clear-until | boolean | no | apagado | Eliminar el inicio o el fin. |
--window SPEC | string | no | sin cambios | Reemplaza todas las ventanas por estas. Repita hasta 16 veces. |
--clear-windows | boolean | no | apagado | Eliminar todas las ventanas. |
--monthly SPEC, --date SPEC, --except DATE | string | no | sin cambios | Como en campaign create; cada una reemplaza todas las reglas de su tipo. |
--on-touch [IDLE_S], --displays N[,N], --start WHEN | string | no | sin cambios | Como en campaign create; --on-touch sin valor son 60 segundos. |
--clear-monthly, --clear-dates, --clear-except, --clear-on-touch, --clear-displays | boolean | no | apagado | Los elimina. Una campaña sin ninguna regla rige siempre. |
--covers WHERE | string | no | sin cambios | full, main, header, footer o side, como en campaign create. |
--priority N | integer | no | sin cambios | De 0 a 100. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig campaign update cmp_LUNCH --playlist-id pl_LUNCH2 --expect-rev 2
screenrig campaign update cmp_LUNCH --tag Lobby --window sat,sun --priority 20
screenrig campaign update cmp_LUNCH --clear-until --clear-windows
screenrig campaign update cmp_BRUNCH --monthly 2nd-sun@10:00-14:00 --except 2026-12-13,2027-01-10
screenrig campaign update cmp_BROWSE --clear-on-touch --clear-displaysPase al menos un cambio; solo cambian los campos que pase. Un --playlist-id nuevo se verifica como al crear. Después de una solicitud interrumpida o ambigua, vuelva a ejecutar el mismo comando: reutiliza la clave de idempotencia guardada, y el servidor devuelve la actualización que ya ocurrió en lugar de aplicarla de nuevo.
campaign pause#
Detener una campaña en todas las pantallas sin eliminarla.
campaign pause <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig campaign pause cmp_LUNCHLas pantallas que la mostraban vuelven a lo que mostrarían sin ella dentro de un minuto. campaign resume la inicia de nuevo.
campaign resume#
Iniciar de nuevo una campaña pausada.
campaign resume <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig campaign resume cmp_LUNCHCada pantalla de la audiencia a la que la campaña puede aplicarse cambia a su lista de reproducción dentro de un minuto mientras la campaña rige.
campaign delete#
Eliminar una campaña.
campaign delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig campaign delete cmp_LUNCHLa campaña no regresa. Cada pantalla que la muestra vuelve a lo que mostraría sin ella dentro de un minuto; las listas de reproducción, las pantallas y las etiquetas permanecen. campaign pause detiene una campaña y la conserva.
campaign screens#
Mostrar las pantallas que alcanza una campaña y el estado de cada una.
campaign screens <id> [--limit N] [--cursor CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--limit N | integer | no | 100 | Pantallas por página, de 1 a 500. |
--cursor CURSOR | string | no | la primera página | El data.next_cursor de la página anterior. |
screenrig campaign screens cmp_LUNCHdata.counts cubre cada pantalla en vivo de la audiencia: audience, luego un conteo por cada estado presente. data.items es una página de esas pantallas en orden de id de pantalla, cada una con el status de la campaña. data.next_cursor está ausente en la última página. En una pantalla cuyo Player resuelve su propia pila, el estado es el que esa pila da a la campaña: una campaña de franja o main se reproduce en su región, y una campaña --displays, en sus pantallas.
| Estado | Significado |
|---|---|
playing | La pantalla muestra la lista de reproducción de la campaña. |
pending | Debería mostrarse, y el cambio ocurre dentro de un minuto. |
waiting | Fuera de --from, --until y las ventanas ahora; next_start cuando comienza dentro de ocho días. |
ended | --until ha pasado. |
outranked | Rige, pero gana una toma de control de pantalla (reason takeover) u otra campaña (reason campaign, con by). |
conditional | Rige por horario y se reproduce mientras alguien usa la pantalla (reason interaction) o mientras se cumple su condición de datos (reason data). Solo el Player ve su entrada y sus datos de tarjetas. |
paused | La campaña está pausada. |
blocked | No puede mostrarse aquí. reason es no_default_playlist (screen assign), no_timezone (screen set-timezone), playlist_unavailable (falta la lista de reproducción, no está aprobada o no se ajusta a la pantalla), region_not_laid_out (no cabe en ninguna pantalla del equipo: su franja no cabe en ninguna, o su --displays no nombra ninguna, y la campaña queda fuera de su pila) o stack_only (el Player de la pantalla no resuelve su propia pila, y solo uno que lo hace respeta una región, un bloqueo de pantallas, --on-touch o una condición de datos). |
campaign explain#
Mostrar por qué cada campaña se reproduce o no en una pantalla, ahora o en un momento elegido.
campaign explain <screen-id> [--at TIME] [--to TIME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<screen-id> | string | sí | ninguno | El id de pantalla scr_. |
--at TIME | string | no | ahora | Explicar este momento en lugar de ahora: un instante con zona (2026-12-24T10:00:00-08:00) o una hora del reloj propio de la pantalla (2026-12-24T18:00). Se rechaza una hora de reloj que el horario de verano omite o repite. |
--to TIME | string | no | ninguno | Lista también los cambios de lista de reproducción desde --at (por defecto, ahora) hasta este momento, en las mismas formas. No hay límite de distancia; una respuesta lista como máximo 500 tramos. |
screenrig campaign explain scr_LOBBY
screenrig campaign explain scr_LOBBY --at 2026-12-24T18:00 --to 2026-12-26T00:00data.items lista todas las campañas del proyecto en el orden en que la pantalla las lee, cada una con un estado de campaign screens o not_in_audience; una fila blocked nombra la solución. data.effective_playlist es la lista de reproducción que la pantalla reproduce ahora (id, source y, para campaign, el id de la campaña como entry_id), o null cuando la pantalla no muestra ninguna lista de reproducción. No cambia nada.
Con --at, data.at contiene la respuesta para ese momento: effective_playlist (su until es el siguiente cambio) y una fila verdicts para la toma de control, cada campaña y cada entrada del horario, en el orden en que la pantalla las lee.
Un veredicto es won (la lista de reproducción mostrada), outranked (rige, y by nombra a la ganadora), not_started (antes de su inicio), ended (después de su fin), outside_hours (dentro de sus fechas, fuera de sus ventanas, reglas mensuales o fechas, o en una fecha de excepción), conditional (rige por horario y se reproduce mientras alguien usa la pantalla, reason interaction, o mientras se cumple su condición de datos, reason data) o off (no se aplica, y reason dice por qué, como stack_only). En una pantalla cuyo Player resuelve su propia pila, los veredictos leen esa pila: un nivel de franja o main gana o queda superado en su región, y un bloqueo de pantallas, en sus pantallas. effective_playlist y la línea de tiempo siguen siendo la página de la pantalla 1, y data.at.not_judged incluye player_stack.
--to añade data.at.timeline, los tramos en los que la lista de reproducción no cambia, y timeline_truncated marca una respuesta que se detuvo antes de --to. data.at.not_judged indica lo que no se juzga: la toma de control, el horario y las campañas se leen tal como están ahora, y data.items sigue siendo el estado actual.
campaign preview#
Mostrar qué haría crear o cambiar una campaña antes de hacerlo.
campaign preview [<id>] [campaign create or update flags] [--paused | --publish] [--calendar-from INSTANT] [--calendar-to INSTANT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | no | una campaña nueva | La campaña cmp_ cuyo cambio se previsualiza. Omítala para previsualizar una campaña nueva a partir de los flags de campaign create. |
--name, --playlist-id, una opción de audiencia, los flags de regla | string | no | ninguno | Los flags de campaign create para una campaña nueva (--name, --playlist-id y una opción de audiencia son obligatorios), o de campaign update para un cambio. Se comprueban como los comprueba la escritura, así que una vista previa rechaza lo que rechaza la escritura. |
--paused | boolean | no | apagado | Previsualizar como borrador: en pausa, en ninguna pantalla. |
--publish | boolean | no | apagado | Previsualizar el fin de la pausa de la campaña. Con una opción de audiencia, previsualiza su publicación para esa audiencia. |
--calendar-from INSTANT | string | no | ahora | Inicie los calendarios en este instante con zona, como 2026-12-01T00:00:00Z. |
--calendar-to INSTANT | string | no | una semana después del inicio | Termine los calendarios en este instante con zona, como máximo 93 días después del inicio. |
screenrig campaign preview cmp_LUNCH --tag Lobby
screenrig campaign preview cmp_LUNCH --publish --folder sfd_TEST
screenrig campaign preview cmp_LUNCH --publish --calendar-from 2026-12-01T00:00:00Z --calendar-to 2027-01-01T00:00:00Z
screenrig campaign preview --name "Holiday hours" --playlist-id pl_HOLIDAY --tag Lobby --from 2026-12-20T00:00 --until 2027-01-02T00:00No se escribe nada. data.gained y data.lost son {count, screen_ids} (los primeros 500 por id): las pantallas que llevarían la campaña y ahora no, y las que dejarían de llevarla. Una campaña en pausa no está en ninguna pantalla, así que publicarla gana su audiencia; una edición que mantiene la campaña en una pantalla solo se ve en los calendarios. data.calendar.before y data.calendar.after son los calendarios de horarios entre --calendar-from y --calendar-to para las pantallas de la audiencia antigua y de la nueva, con los borradores dibujados como niveles en pausa. --human imprime los tramos de la primera pantalla y los borradores que regirían, y avisa cuando el calendario no cambia.
campaign publish#
Quitar la pausa a una campaña en borrador, si se desea solo para una carpeta de prueba o unas pocas pantallas de prueba.
campaign publish <id> [--test-folder ID | --test-screen ID] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--test-folder ID | string | no | la audiencia de la campaña | Publicar solo en las pantallas de esta carpeta de pantallas sfd_ y de cada carpeta que contiene. |
--test-screen ID | string | no | la audiencia de la campaña | Publicar solo en estas pantallas. Repita o separe con comas. |
--expect-rev REVISION | string | no | la revisión recién leída | Exigir esta revisión actual de la campaña. Sin ella, la CLI lee la campaña justo antes de escribir y envía esa revisión; un cambio entre medias es revision_conflict (salida 6). |
screenrig campaign publish cmp_LUNCH
screenrig campaign publish cmp_LUNCH --test-folder sfd_TEST
screenrig campaign publish cmp_LUNCH --test-screen scr_LOBBY,scr_CAFE --expect-rev 2Un borrador es una campaña en pausa: no está en ninguna pantalla hasta que se publica. Sin opción de prueba, la campaña llega a su propia audiencia en un minuto. Una opción de prueba reemplaza la audiencia en la misma escritura, de modo que solo cambian las pantallas de prueba. El flujo habitual: campaign create --paused con la audiencia real, campaign publish ID --test-folder FOLDER, mirar las pantallas de prueba y luego campaign promote ID --revision N. campaign preview ID --publish muestra antes el efecto.
campaign promote#
Poner la audiencia de un borrador en la campaña después de su prueba.
campaign promote <id> --revision N [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--revision N | integer | sí | ninguno | La revisión en pausa del borrador, tal como la numera campaign revisions. La campaña toma la audiencia de esa revisión. |
--expect-rev REVISION | string | no | la revisión recién leída | Exigir esta revisión actual de la campaña. Sin ella, la CLI lee la campaña justo antes de escribir y envía esa revisión; un cambio entre medias es revision_conflict (salida 6). |
screenrig campaign promote cmp_LUNCH --revision 1
screenrig campaign promote cmp_LUNCH --revision 1 --expect-rev 2La audiencia de la revisión N pasa a ser la de la campaña en una escritura, una revisión nueva cuyo change es promoted, y cada pantalla de la audiencia antigua y de la nueva se vuelve a resolver en un minuto. La revisión N debe ser una revisión en pausa (invalid_request la nombra en caso contrario), y la campaña debe estar activa: una campaña en pausa ahora no tiene prueba que promover. --expect-rev es la revisión actual de la campaña, no N. Promover requiere el acceso que requiere campaign update.
campaign revisions#
Listar las revisiones de una campaña, la más reciente primero.
campaign revisions <id> [--after CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--after CURSOR | string | no | la primera página | Continúe desde el data.next_cursor de la página anterior. |
screenrig campaign revisions cmp_LUNCH
screenrig campaign revisions cmp_LUNCH --after CURSORdata.items contiene como máximo 50 revisiones, cada una con revision, created_at, change, current, author cuando se conoce y campaign, la campaña tal como quedó después de esa escritura, con su estado de pausa. change es created, edited, restored o promoted (una copia de la revisión anterior que nombra restored_from), o baseline, la revisión que tenía la campaña cuando empezó su historial. Una campaña cuyo historial no tiene ninguna revisión sin pausar es un borrador. Mientras data.next_cursor sea una cadena, quedan revisiones más antiguas: ejecute el comando de nuevo con --after establecido en ese valor. Las revisiones se conservan mientras exista la campaña y se van con su eliminación. Basta con acceso de solo lectura.
campaign restore#
Hacer actual de nuevo una revisión anterior copiándola hacia delante.
campaign restore <id> --revision N [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de campaña cmp_. |
--revision N | integer | sí | ninguno | La revisión que se copia hacia delante, tal como la numera campaign revisions. |
--expect-rev REVISION | string | no | la revisión recién leída | Exigir esta revisión actual de la campaña. Sin ella, la CLI lee la campaña justo antes de escribir y envía esa revisión; un cambio entre medias es revision_conflict (salida 6). |
screenrig campaign restore cmp_LUNCH --revision 3
screenrig campaign restore cmp_LUNCH --revision 3 --expect-rev 5El nombre, la lista de reproducción, la audiencia, las reglas, la región, la prioridad y el estado de pausa de la revisión N pasan a ser una revisión nueva cuyo change es restored, comprobada como se comprueba campaign update: su lista de reproducción debe seguir existiendo y estar aprobada (playlist_not_approved, salida 5). Cada pantalla de la audiencia antigua y de la nueva se vuelve a resolver en un minuto. Las revisiones anteriores quedan como estaban, y restaurar el contenido actual no cambia nada. Restaurar requiere el acceso que requiere campaign update.
Revisiones
Cuando un proyecto requiere revisión para cambios de agente, o la sesión tiene acceso Proponer, los cambios en listas de reproducción y pantallas esperan a una persona en lugar de aplicarse. El comando aún tiene éxito: ok: true, salir 0, la respuesta del servidor en data, y una advertencia pending_review.
{
"ok": true,
"data": {
"status": "pending_review",
"review": {
"id": "rvw_LOBBY",
"kind": "playlist_change",
"state": "pending",
"url": "https://screenrig.ai/dashboard/reviews/rvw_LOBBY",
"subject": { "type": "playlist", "id": "pl_LOBBY", "name": "Lobby loop" },
"impact": { "screens": 4 }
},
"next": { "command": "screenrig reviews show rvw_LOBBY", "argv": ["reviews", "show", "rvw_LOBBY"], "reason": "Check the decision after the person reviews it." }
},
"warnings": [{ "code": "pending_review", "message": "Waiting for a person to approve: https://screenrig.ai/dashboard/reviews/rvw_LOBBY" }]
}Crear y actualizar lista de reproducción (incluyendo playlist import y playlist replace-release --apply), screen publish, screen assign, screen schedule set, clear y restore, y screen takeover y takeover clear esperan revisión, para una pantalla o una flota. Un cambio de flota es una revisión: su etiqueta se resuelve cuando una persona la aprueba, y reviews show luego informa el resultado de cada pantalla; una flota grande termina de aplicarse en segundo plano, y screen_change.result.applying es true hasta que cada pantalla tiene su resultado. Aparte de los cambios de contenido multimedia abajo, cada otro cambio responde 403 insufficient_access para una sesión Propose. --note TEXT en esos comandos envía una nota en texto plano, máximo 280 caracteres, que el revisor lee en el panel.
Una persona aprueba, solicita cambios o rechaza en la página Revisiones del panel; los agentes no pueden aprobar cambios en listas de reproducción o pantallas. Un cambio aprobado se aplica como si se hubiera hecho entonces, y sus eventos nombran a la persona que lo aprobó y al agente que lo propuso. No realice sondeos, pausas ni repita la escritura mientras una revisión espera: verifique más tarde con reviews show, o siga review.approved, review.rejected y review.changes_requested con events follow --type review..
Los cambios en multimedia también esperan una sesión Propose. Los selectores de etiqueta, carpeta y all omiten una nueva carga hasta que una persona la apruebe, y los medios aprobados que la sesión vuelve a etiquetar o mueve siguen reproduciéndose con sus etiquetas y carpeta aprobadas hasta que se apruebe el cambio. La reetiquetación responde ok, salida 0, con advertencia media_review_pending, y la revisión del elemento aparece en reviews list en segundos; no hacer sondeo, dormir ni reintentar. Cada elemento recibe una revisión, tipo playlist_change con operación selector_refresh y un asunto media: media_change muestra sus etiquetas y carpeta before y after (before es null para una nueva carga), y media_playlists lista todas las listas de reproducción aprobadas y todas las propuestas en revisión a las que el cambio lo añade o elimina (media_added, media_removed), con sus pantallas. Aprobar aplica el cambio a todas; rechazar, solicitar cambios o retirar devuelve un elemento reetiquetado o movido a su estado aprobado, y una nueva carga queda sin reproducir. Un cambio que no altera ninguna lista aprobada ni propuesta se aplica solo, y una lista que nombra el elemento por id lo lleva en su propia revisión. Cuando esas listas avanzan antes de que una persona decida, la revisión multimedia pasa a stale y una nueva la reemplaza en segundos.
Estados de revisión:
| Estado | Significado | Siguiente paso |
|---|---|---|
pending | Esperando a una persona. | Dé a la persona la URL de revisión; verifique nuevamente más tarde. |
approved | Aplicado a la lista de reproducción o pantallas. | Verificar en pantalla con screen show y una captura. |
changes_requested | La persona solicitó cambios; decision_note dice cuáles. | Revise y proponga de nuevo con --note. |
rejected | La persona rechazó; decision_note dice por qué. | No reenvíe el mismo cambio; pregunte a la persona. |
withdrawn | El proponente lo retiró. | Ninguno. |
superseded | Una propuesta más reciente para la misma lista de reproducción o pantalla la reemplazó; superseded_by la nombra. | Siga la revisión más reciente. |
stale | La lista de reproducción en vivo cambió después de la propuesta, o su etiqueta, carpeta o selectores all ahora reproducirían medios que no vio cuando se propuso, por lo que no puede aplicarse como revisada. Una revisión de medios se vuelve obsoleta cuando cambian las listas de reproducción que enumera. | Leer la lista de reproducción nuevamente y proponer sobre ella. Una revisión de medios obsoleta se reemplaza por una nueva en segundos. |
reviews list#
Listar reseñas, las más recientes primero.
reviews list [--state pending|decided|all] [--kind playlist_change|screen_change|ad_creative] [--limit N] [--cursor CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--state STATE | string | no | pending | pending, decided o all. |
--kind KIND | string | no | cada tipo | playlist_change, screen_change o ad_creative. |
--limit N | integer | no | 50 | Revisiones por página, de 1 a 100. |
--cursor CURSOR | string | no | la primera página | El next_cursor de la página anterior. |
screenrig reviews list --state allEl resultado lleva pending_count. Una sesión ve los tipos que sus capacidades leen: playlists para cambios en listas de reproducción, screens para cambios en pantallas y advertising para creatividades publicitarias.
reviews show#
Lea una reseña.
reviews show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de revisión del resultado pending_review. |
screenrig reviews show rvw_LOBBYLa revisión informa su state, el proponente, su note, la decision_note persona que dejó un comentario al rechazar o solicitar cambios, y impact.screens. Un cambio en la lista de reproducción añade el diff, un preview de las listas de reproducción en vivo y propuestas (ninguno para una revisión de medios), media_change para una revisión de medios, y media_playlists, las listas de reproducción cuya selección altera el cambio. Para un cambio en pantalla, blockers enumera las revisiones de listas de reproducción que una persona decide primero, con su estado actual.
reviews withdraw#
Retire su propia propuesta pendiente.
reviews withdraw <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | Una revisión pendiente propuesta en esta sesión. |
screenrig reviews withdraw rvw_LOBBYNada llega a las pantallas, y una lista de reproducción nueva retirada permanece sin aprobar. Una revisión que ya no está pendiente responde review_not_pending (salida 5).
Estado y potencia del dispositivo
Cada Player emparejado informa el estado del dispositivo al iniciar sesión, cada quince minutos y de inmediato cuando cambia su conexión de pantalla o energía. También declara las capacidades del host que soporta: reboot, clear_cache, restart_app y update donde cada una funciona en ese dispositivo, y los métodos de energía de pantalla que puede usar (display_power.serial, el puerto de control RS-232 del monitor; display_power.cec, display_power.ddc, display_power.backlight o display_power.scrim, un apagón en pantalla). screen show devuelve ambos.
screen show devuelve la salud como data.health con el reported_at del servidor; stale se vuelve verdadero tras 35 minutos sin informe, y el último informe permanece visible. Con --human imprime un bloque Health: hora del informe, tiempo activo del dispositivo y del Player, memoria en uso, carga y núcleos de CPU, temperatura, conexión y energía del monitor, tipo de red y señal Wi-Fi, nivel de batería, carga y fuente de alimentación en un dispositivo con batería, y fallos y reinicios del renderizador en las últimas 24 horas. screen list --human añade una columna HEALTH cuando alguna pantalla listada necesita atención: display disconnected, hot (80 °C o más), on battery, crashing (3 o más fallos en 24 horas) o stale.
Las transiciones llegan como eventos screen.health_changed, impresos por events list y events follow con un valor changes= compacto como display_disconnected,temperature_high temperature_c=82. Los comandos de energía añaden screen.reboot_requested y screen.display_changed. Una programación de reinicio añade screen.reboot_schedule_changed cuando se define o se borra y screen.reboot_skipped con un reason cuando una ventana pasa sin reinicio; screen.reboot_requested lleva source, schedule cuando lo emitió la programación. Como todo evento screen.*, son gratuitos en el flujo de escucha y como entregas de webhook. Una notificación le envía un correo, o hace POST de un webhook firmado, cuando un monitor se desconecta, un dispositivo se calienta o pasa a funcionar con batería, o un Player se bloquea repetidamente.
screen uptime, screen presence y screen health-history leen lo que hizo una pantalla a lo largo del tiempo: disponibilidad diaria, transiciones en línea y fuera de línea, y el estado que reportó. project uptime y project health-trend leen la flota. Fuera de línea se registra después de que una pantalla ha estado inalcanzable por 60 segundos, y el historial se mantiene según la retención de eventos del plan.
| Código de problema | Salir | Significado |
|---|---|---|
reboot_unsupported | 5 | El Player de la pantalla no declara reboot. No se envió ni se guardó nada; screen reload actualiza el contenido sin reiniciar el dispositivo. |
command_unsupported | 5 | El Player de la pantalla no declara clear_cache, restart_app ni update, la capacidad que necesita el comando. No se envió nada; screen show lista las capacidades del host y screen reload actualiza el contenido. |
resource_conflict | 5 | La pantalla aún espera emparejarse y no tiene Player para cambiar todavía. Aún se puede establecer un horario de pantalla. |
invalid_request | 8 | Una programación de pantalla o de reinicio apunta a una pantalla sin zona horaria (next es screen set-timezone), o el archivo está mal formado. |
rate_limited | 7 | Reinicios, y borrar caché, reiniciar la app y actualizar el software en conjunto: 2 por pantalla cada 10 minutos y 600 por organización por minuto. Escrituras de pantalla: 10 por pantalla y 600 por organización por minuto. Espere retry_after_seconds. |
Varios ids o --tag se ejecutan como una solicitud de flota con el sobre y reglas de salida de la flota.
screen reboot#
Reiniciar dispositivo de una pantalla o dispositivos de una flota.
screen reboot (<id>... | --tag TAG) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--yes | boolean | para varios ids o --tag | apagado | Confirma un reinicio de flota. La CLI nunca solicita. |
--expires-in DURATION | string | no | 24h, aplicado por el servidor | Cuánto tiempo espera la solicitud a que una pantalla sin conexión vuelva a estar en línea: 90s, 30m, 2h o 1d, de 60s a 24h. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen reboot scr_LOBBY
screenrig screen reboot scr_LOBBY --expires-in 2h
screenrig screen reboot --tag Lobby --yesEl Player reinicia el dispositivo, no solo a sí mismo. A una pantalla en línea se le envía el reinicio de inmediato (state sent); una pantalla sin conexión lo mantiene queued y se le envía cuando se conecta antes de expires_at, 24 horas después de la solicitud salvo que --expires-in indique otra cosa. Un reinicio más nuevo reemplaza a uno que siga en cola. screen show lista los commands de la pantalla: un reinicio enviado pasa a done cuando el dispositivo informa que arrancó, y screen command cancel cancela uno que siga en cola. En una flota, el reboot de cada resultado lleva el mismo state. Una solicitud rechazada o fallida, y una repetición exacta de la misma solicitud, no cuentan para el límite por pantalla. Desde el momento en que se envía un reinicio hasta que el dispositivo informa que arrancó o pasan diez minutos, la pantalla no abre ninguna alerta screen_offline o display_disconnected; un aviso de cualquiera de ellas que vence entonces espera hasta que termina ese período más su tiempo de espera, y un aviso crashing se omite como planned_reboot. Una condición que sigue vigente después se abre con normalidad.
screen clear-cache#
Borrar las cachés del Player de una pantalla, o de los Players de una flota.
screen clear-cache (<id>... | --tag TAG | --folder ID) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id>, --tag o --folder | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id>, --tag o --folder | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--folder ID | string | uno de <id>, --tag o --folder | ninguno | Toda pantalla activa de esta carpeta de pantallas sfd_ y de las carpetas que contiene. |
--yes | boolean | para varios ids, --tag o --folder | apagado | Confirma una solicitud de flota. El CLI nunca pide confirmación. |
--expires-in DURATION | string | no | 24h, aplicado por el servidor | Cuánto tiempo espera la solicitud a que una pantalla sin conexión vuelva a estar en línea: 90s, 30m, 2h o 1d, de 60s a 24h. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen clear-cache scr_LOBBY
screenrig screen clear-cache scr_LOBBY --expires-in 2h
screenrig screen clear-cache --tag Lobby --yesEl Player elimina sus medios descargados, paquetes de aplicación y cachés de datos, conserva su vinculación, identidad y ajustes, y luego obtiene de nuevo el manifiesto y el contenido; la pantalla puede mostrar su estado de carga mientras el contenido se repone. Solo llega a un Player que declara clear_cache. A una pantalla en línea se le envía la solicitud de inmediato (state sent); una pantalla sin conexión la mantiene queued y se le envía cuando vuelve a estar en línea antes de expires_at, 24 horas después de la solicitud salvo que --expires-in indique otra cosa. La respuesta lleva command_id, command, state y expires_at. Un Player que no declara la capacidad responde 409 command_unsupported y no se envía nada; en una flota esa pantalla falla por sí sola. screen show lista el comando en commands y, una vez que el Player informa, lo marca done o failed con un cause y un detail breve: cleared cuando las cachés están borradas y comenzó la nueva obtención, o clear_failed cuando no se puede borrar una caché. Un comando enviado sin informe permanece sent. Un comando más reciente del mismo tipo reemplaza a uno que sigue en cola, y screen command cancel cancela uno que sigue en cola. En una flota, el command de cada resultado lleva el mismo state. Una flota (varios ids, --tag o --folder) necesita --yes. Una solicitud rechazada o fallida, y una repetición exacta de la misma solicitud, no cuentan para el límite por pantalla de 2 solicitudes de clear-cache, restart-app y update-software en conjunto cada 10 minutos.
screen restart-app#
Reiniciar la aplicación del Player de una pantalla, o de los Players de una flota.
screen restart-app (<id>... | --tag TAG | --folder ID) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id>, --tag o --folder | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id>, --tag o --folder | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--folder ID | string | uno de <id>, --tag o --folder | ninguno | Toda pantalla activa de esta carpeta de pantallas sfd_ y de las carpetas que contiene. |
--yes | boolean | para varios ids, --tag o --folder | apagado | Confirma una solicitud de flota. El CLI nunca pide confirmación. |
--expires-in DURATION | string | no | 24h, aplicado por el servidor | Cuánto tiempo espera la solicitud a que una pantalla sin conexión vuelva a estar en línea: 90s, 30m, 2h o 1d, de 60s a 24h. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen restart-app scr_LOBBY
screenrig screen restart-app scr_LOBBY --expires-in 2h
screenrig screen restart-app --tag Lobby --yesEl Player reinicia su aplicación, no el dispositivo (un Player web recarga su página) e informa desde el proceso reiniciado. Solo llega a un Player que declara restart_app; screen reboot reinicia el dispositivo. A una pantalla en línea se le envía la solicitud de inmediato (state sent); una pantalla sin conexión la mantiene queued y se le envía cuando vuelve a estar en línea antes de expires_at, 24 horas después de la solicitud salvo que --expires-in indique otra cosa. La respuesta lleva command_id, command, state y expires_at. Un Player que no declara la capacidad responde 409 command_unsupported y no se envía nada; en una flota esa pantalla falla por sí sola. screen show lista el comando en commands y, una vez que el Player informa, lo marca done o failed con un cause y un detail breve: restarted, o restart_failed cuando el reinicio no puede comenzar. Un comando enviado sin informe permanece sent. Un comando más reciente del mismo tipo reemplaza a uno que sigue en cola, y screen command cancel cancela uno que sigue en cola. En una flota, el command de cada resultado lleva el mismo state. Una flota (varios ids, --tag o --folder) necesita --yes. Una solicitud rechazada o fallida, y una repetición exacta de la misma solicitud, no cuentan para el límite por pantalla de 2 solicitudes de clear-cache, restart-app y update-software en conjunto cada 10 minutos.
screen update-software#
Actualizar el Player de una pantalla a la versión más reciente, o los Players de una flota.
screen update-software (<id>... | --tag TAG | --folder ID) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id>, --tag o --folder | ninguno | Uno o más ID de pantalla scr_. Varios IDs se ejecutan como una solicitud de flota. |
--tag TAG | string | uno de <id>, --tag o --folder | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--folder ID | string | uno de <id>, --tag o --folder | ninguno | Toda pantalla activa de esta carpeta de pantallas sfd_ y de las carpetas que contiene. |
--yes | boolean | para varios ids, --tag o --folder | apagado | Confirma una solicitud de flota. El CLI nunca pide confirmación. |
--expires-in DURATION | string | no | 24h, aplicado por el servidor | Cuánto tiempo espera la solicitud a que una pantalla sin conexión vuelva a estar en línea: 90s, 30m, 2h o 1d, de 60s a 24h. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen update-software scr_LOBBY
screenrig screen update-software scr_LOBBY --expires-in 2h
screenrig screen update-software --tag Lobby --yesEl Player busca ahora la versión más reciente del Player y la instala donde su plataforma le permite actualizarse a sí mismo; un Player web actualiza su service worker y luego se recarga. Solo llega a un Player que declara update: un Player instalado desde una tienda o administrado por un administrador de dispositivos se actualiza por ese canal. A una pantalla en línea se le envía la solicitud de inmediato (state sent); una pantalla sin conexión la mantiene queued y se le envía cuando vuelve a estar en línea antes de expires_at, 24 horas después de la solicitud salvo que --expires-in indique otra cosa. La respuesta lleva command_id, command, state y expires_at. Un Player que no declara la capacidad responde 409 command_unsupported y no se envía nada; en una flota esa pantalla falla por sí sola. screen show lista el comando en commands y, una vez que el Player informa, lo marca done o failed con un cause y un detail breve: up_to_date cuando ya se ejecuta la versión más reciente, updated cuando la nueva versión ya se inició o, si falló, update_check_failed, download_failed, install_failed o no_update_channel. Un comando enviado sin informe permanece sent. Un comando más reciente del mismo tipo reemplaza a uno que sigue en cola, y screen command cancel cancela uno que sigue en cola. En una flota, el command de cada resultado lleva el mismo state. Una flota (varios ids, --tag o --folder) necesita --yes. Una solicitud rechazada o fallida, y una repetición exacta de la misma solicitud, no cuentan para el límite por pantalla de 2 solicitudes de clear-cache, restart-app y update-software en conjunto cada 10 minutos.
screen command cancel#
Cancelar un comando que sigue en cola para una pantalla sin conexión.
screen command cancel <id> <command_id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
<command_id> | string | sí | ninguno | Un id de commands en screen show, o el reboot_id, reload_id o command_id con el que respondió la solicitud. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen command cancel scr_01EXAMPLESCREEN00000000 rbt_01EXAMPLEREBOOT00000000Solo se puede cancelar un comando en cola. Uno que ya se envió (sent o done) responde 409 resource_conflict con "The command was already sent.", uno que ya no está en cola (expired, cancelled o superseded) responde 409 resource_conflict con "The command is no longer queued.", y un id que la pantalla no lista responde 404 not_found. La respuesta es la pantalla con el comando cancelled, y la revisión de la pantalla no cambia.
screen display#
Encienda o apague la pantalla de un dispositivo o de una flota ahora, o borre esa anulación.
screen display [set] (<id>... | --tag TAG) --power on|off [--until TIME | --for DURATION] [--expect-rev REVISION]
screen display clear (<id>... | --tag TAG) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_. Un on o off final después de los IDs es igual que --power. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--power on|off | string | sí, para set | ninguno | El poder para aplicar ahora. |
--until TIME | string | no | el próximo límite del horario del monitor | Un instante RFC 3339 estricto, estrictamente en el futuro y a lo sumo 7 días adelante. |
--for DURATION | string | no | el próximo límite del horario del monitor | 30m, 2h o 3d, hasta 6d23h59m. No con --until. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen display scr_LOBBY --power off --for 2h
screenrig screen display --tag Lobby --power on
screenrig screen display clear --tag Lobbyscreen display es una anulación manual del horario de pantalla. Sin --until o --for termina en el siguiente límite del horario; un cambio posterior de horario de pantalla o zona horaria mueve ese fin al nuevo límite. Sin límite en los próximos ocho días, por ejemplo sin horario habilitado, se mantiene hasta screen display clear o un reemplazo. screen display clear termina la anulación, para que el horario de pantalla se aplique de nuevo; sin uno, la pantalla está encendida. El Player aplica cada cambio a la vez e informa la potencia que logró.
screen display-schedule#
Mostrar, configurar o borrar cuándo está encendida la pantalla de un monitor.
screen display-schedule show <id>
screen display-schedule set (<id>... | --tag TAG) --file FILE [--expect-rev REVISION]
screen display-schedule clear (<id>... | --tag TAG) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_; show toma uno. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--file FILE | ruta | sí, para set | ninguno | El horario de pantalla, o - para entrada estándar. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen display-schedule set scr_LOBBY --file hours.json
screenrig screen display-schedule set --tag Cafe --file hours.jsonUna programación de pantalla lista de 1 a 16 ventanas cuando la pantalla está encendida, en la zona horaria de la pantalla; fuera de cada ventana la pantalla entra en espera. El Player la evalúa en el dispositivo, por lo que sigue funcionando sin conexión. Una ventana cuyo end es igual o anterior a su start cruza medianoche, y una ventana sin start ni end cubre todo el día. enabled: false mantiene las ventanas y deja la pantalla encendida. La salida guardada de display-schedule show puede editarse y enviarse con set --file.
{"enabled": true, "windows": [{"days": ["mon", "tue", "wed", "thu", "fri"], "start": "07:00", "end": "19:00"}, {"days": ["sat"]}]}screen show --human imprime Display: con la potencia solicitada, su fuente (anulación manual, programación de pantalla o predeterminada) y hasta cuándo en la zona horaria de la pantalla, las ventanas de programación y la potencia reportada por el Player, marcada como obsoleta tras 35 minutos sin informe.
screen display-idle#
Oscurezca el vidrio de una pantalla tras un tiempo sin uso, o desactive esa función.
screen display-idle <id> --after SECONDS --wake WAKE [--expect-rev REVISION]
screen display-idle <id> --off [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--after SECONDS | integer | uno de --after o --off | ninguno | Oscurecer la pantalla tras esta cantidad de segundos sin uso, de 30 a 86400. Requiere --wake. |
--wake WAKE | string | con --after | ninguno | Lo que vuelve a encender la pantalla: touch, presence o touch,presence. La presencia lee la cámara del dispositivo en el propio dispositivo; ninguna imagen sale de él. |
--off | boolean | uno de --after o --off | apagado | Desactive el oscurecimiento por inactividad. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen display-idle scr_LOBBY --after 300 --wake touch
screenrig screen display-idle scr_LOBBY --after 600 --wake touch,presence --expect-rev 4
screenrig screen display-idle scr_LOBBY --offLa pantalla se oscurece tras --after segundos sin un toque ni una tecla o, cuando --wake incluye presence, sin nadie frente a la pantalla. Mientras está oscura, el Player deja la reproducción en pausa, sin reproducciones ni anuncios, e informa de que la energía del monitor está apagada; un evento de activación enciende la pantalla de inmediato y la reproducción se reanuda, y el toque que activa una pantalla oscura no se transmite a la página. Un horario o una anulación de pantalla que mantiene el panel apagado prevalece, y también una aplicación que mantiene device.display mientras su página está en pantalla. Solo cambia display.idle. Un Player lo aplica cuando screen show incluye display_power.idle entre sus capacidades del host; el ajuste se guarda en ambos casos, y screen show lo lista como Display idle. El acceso Propose no puede cambiarlo (insufficient_access), y una pantalla de una carpeta protegida lo rechaza (protected_target).
screen brightness#
Defina si el brillo de una pantalla sigue el sensor de luz del dispositivo.
screen brightness <id> --mode auto|fixed [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--mode auto|fixed | string | sí | ninguno | auto ajusta el brillo según el sensor de luz del dispositivo; fixed mantiene el brillo del operador, que es el valor predeterminado. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen brightness scr_LOBBY --mode auto
screenrig screen brightness scr_LOBBY --mode fixed --expect-rev 4Solo cambia display.brightness. Un Player aplica auto cuando screen show incluye brightness.auto entre sus capacidades del host, que un dispositivo declara solo si tiene un sensor de luz; una aplicación que establece el brillo del monitor prevalece mientras su página se muestra. El ajuste se guarda en ambos casos, y screen show lo lista como Display brightness. Se aplican las reglas de acceso de screen display-idle.
screen kiosk-lock#
Fije el Player de una pantalla a la pantalla, o libérelo.
screen kiosk-lock <id> (--on | --off) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--on, --off | boolean | uno de los dos | ninguno | --on fija el Player a la pantalla; --off lo libera. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. Omitir para escribir el recurso actual. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar. |
screenrig screen kiosk-lock scr_LOBBY --on
screenrig screen kiosk-lock scr_LOBBY --off --expect-rev 4--on usa la fijación de pantalla de Android: la persona que está frente a la pantalla lo confirma la primera vez, y la barra de estado, el botón de inicio y las aplicaciones recientes quedan bloqueados mientras el Player está fijado. El panel de configuración del operador puede salir del bloqueo hasta que el siguiente manifiesto o reinicio lo aplique de nuevo. Un Player lo aplica cuando screen show incluye kiosk_lock entre sus capacidades del host; el ajuste se guarda en ambos casos, y screen show lista Kiosk lock mientras está activado. Se aplican las reglas de acceso de screen display-idle.
screen reboot-schedule#
Mostrar, definir o borrar cuándo el backend reinicia el dispositivo de una pantalla.
screen reboot-schedule show <id>
screen reboot-schedule set (<id>... | --tag TAG) (--window SPEC... | --file FILE) [--enabled | --disabled] [--expect-rev REVISION]
screen reboot-schedule clear (<id>... | --tag TAG) [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id>... | string | uno de <id> o --tag | ninguno | Uno o más ID de pantalla scr_; show toma uno. |
--tag TAG | string | uno de <id> o --tag | ninguno | Cada pantalla activa que lleva esta etiqueta. |
--window SPEC | string | uno de --window o --file, para set | ninguno | Reiniciar al inicio de esta ventana semanal, DAYS HH:MM-HH:MM en la zona horaria de la pantalla, como "Mon-Sun 04:00-04:30" (DAYS@HH:MM-HH:MM también funciona). Repita hasta 16 veces; cada ventana dura de 5 minutos a 24 horas. |
--file FILE | ruta | uno de --window o --file, para set | ninguno | La programación de reinicio como JSON, o - para stdin, en lugar de --window. |
--enabled, --disabled | boolean | no | --enabled | --disabled conserva las ventanas y no reinicia nada. No con --file. |
--expect-rev REVISION | string | no | ninguno | Solo un ID de pantalla. Condición de revisión opcional. |
screenrig screen reboot-schedule set scr_LOBBY --window "Mon-Sun 04:00-04:30"
screenrig screen reboot-schedule set --tag Cafe --window "Mon-Fri 04:00-04:30" --window "Sat,Sun 05:00-06:00"
screenrig screen reboot-schedule set scr_LOBBY --file reboots.json --expect-rev 4Al inicio de cada ventana, en la zona horaria de la pantalla, screenRIG emite el mismo reinicio que screen reboot, por lo que "Mon-Sun 04:00-04:30" reinicia la pantalla a las 04:00 hora local todos los días. commands en screen show lo lista con source schedule, y screen show y reboot-schedule show imprimen next_reboot_at. Una ventana cuyo final es igual o anterior a su inicio cruza la medianoche, y una ventana sin horas cubre todo el día. La salida guardada de reboot-schedule show se puede editar y volver a enviar con set --file:
{"enabled": true, "windows": [{"days": ["mon", "tue", "wed", "thu", "fri", "sat", "sun"], "start": "04:00", "end": "04:30"}]}A una pantalla en línea se le envía el reinicio de inmediato. Una pantalla sin conexión lo mantiene en cola solo hasta que termina su ventana, de modo que un reinicio nunca cae fuera de la ventana: una pantalla que vuelve después no recibe ninguno. Un inicio dentro de un salto por cambio de hora de primavera se ejecuta en el primer minuto válido de la ventana, y una repetición por cambio de hora de otoño se ejecuta una vez por ventana y fecha local. Un reinicio programado nunca reemplaza uno solicitado por una persona que aún espera a la pantalla; la repetición se omite con screen.reboot_skipped (reboot_pending). La pantalla necesita una zona horaria almacenada y un Player que declare reboot; una pantalla que pierde reboot más tarde omite cada ventana y conserva su programación. Cambiar la zona horaria mueve next_reboot_at a la nueva zona. Un reinicio enviado por una programación no genera ninguna alerta de desconexión, como bajo screen reboot. screen.reboot_schedule_changed registra cada definición o borrado. En una flota, cada resultado es el de esa pantalla: reboot_unsupported para una pantalla cuyo Player no puede reiniciar.
screen uptime#
Lea la disponibilidad diaria de una pantalla en días UTC.
screen uptime <id> [--day-from YYYY-MM-DD] [--day-to YYYY-MM-DD]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--day-from YYYY-MM-DD | string | no | 29 días antes de --day-to | Primer día UTC, inclusive. |
--day-to YYYY-MM-DD | string | no | hoy | Último día UTC, inclusive. Como máximo 366 días después de --day-from. |
screenrig screen uptime scr_01EXAMPLESCREEN00000000
screenrig screen uptime scr_01EXAMPLESCREEN00000000 --day-from 2026-09-01 --day-to 2026-09-30data.items lista una fila por día UTC con un estado registrado, el más antiguo primero: online_s, offline_s, availability (en línea durante el tiempo registrado; null cuando no se registró nada), coverage (la proporción del día con un estado registrado), intervals y live para un día que incluye el intervalo abierto hasta ahora. El tiempo sin estado registrado reduce coverage y nunca es tiempo de inactividad. Los días sin registros no tienen fila.
screen presence#
Listar transiciones en línea y fuera de línea de una pantalla, las más recientes primero.
screen presence <id> [--since TIME] [--until TIME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--since TIME | string | no | 30 días antes de --until | Inicio inclusivo del tiempo de transición: un instante RFC 3339 con segundos y un desplazamiento (normalizado a UTC), now, o una antigüedad como 7d, 12h o 30m. |
--until TIME | string | no | ahora | Fin exclusivo, en las mismas formas. Máximo 366 días después de --since. |
screenrig screen presence scr_01EXAMPLESCREEN00000000 --since 7d
screenrig screen presence scr_01EXAMPLESCREEN00000000 --since 2026-09-01T00:00:00Z --until 2026-09-08T00:00:00Zdata.items lleva at, state y detected_on_reconnect en un servidor sin conexión que solo se detectó cuando la pantalla se reconectó (at es entonces cuando terminó su arrendamiento de presencia). La CLI sigue next_cursor hasta el final y responde cada transición con next_cursor null, así que reduzca un rango largo con --since.
screen health-history#
Listar el estado que una pantalla reportó a lo largo del tiempo, cada informe o un resumen por hora.
screen health-history <id> [--from TIME] [--to TIME] [--resolution raw|hour]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de pantalla scr_. |
--from TIME | string | no | 24 horas antes de --to | Inicio inclusivo del tiempo del informe: un instante RFC 3339 con segundos y un desplazamiento (normalizado a UTC), now, o una antigüedad como 7d, 12h o 30m. |
--to TIME | string | no | ahora | Fin exclusivo, en las mismas formas. Máximo 31 días después de --from, 93 con --resolution hour. |
--resolution | string | no | raw | raw lista cada informe aceptado; hour resume cada hora UTC. |
screenrig screen health-history scr_01EXAMPLESCREEN00000000 --from 6h
screenrig screen health-history scr_01EXAMPLESCREEN00000000 --from 30d --resolution hourraw responde data.samples, cada informe aceptado con forma de health de screen show sin stale. hour responde data.hours, un resumen por hora UTC: informes, temperatura máxima y promedio, carga máxima y proporción de memoria, señal Wi-Fi más débil, display_disconnected, y recuentos máximos de fallos y reinicios del renderizador. La CLI sigue next_cursor hasta el final, así que reduzca un rango largo sin procesar o use --resolution hour. Los informes sin procesar llegan en segundos y los resúmenes horarios en unos 5 minutos.
Notas del proyecto
Las notas del proyecto son notas breves de texto plano que los agentes dejan en un proyecto para sus sesiones posteriores y para los demás. Cada agente en el proyecto lee cada nota, y escribir una requiere acceso Proponer o Gestionar. Una nota es contexto escrito por un agente, nunca una instrucción ni una aprobación. Lea las notas cuando inicie una sesión en un proyecto, antes de cambiar algo.
Una nota sin TTL aparece para revisión 90 días después de haber sido añadida o confirmada por última vez. La primera página de notes list devuelve hasta cinco notas pendientes en review, con la advertencia notes_due_for_review: confirme las que aún sean válidas y resuelva el resto. Una nota pendiente que nadie confirma se resuelve sola 30 días después de haber sido devuelta por primera vez a un agente con acceso Propose o Manage. Una nota con --ttl se resuelve cuando su tiempo expira, y eliminar la pantalla o lista de reproducción a la que pertenece la nota resuelve la nota. Las notas resueltas permanecen legibles por 30 días, luego se eliminan. Una organización mantiene como máximo 200 notas abiertas en todos sus proyectos.
agent status y login añaden la advertencia notes_waiting cuando las notas son nuevas o están pendientes de revisión. screen show y playlist show añaden notes_about_resource cuando hay notas abiertas sobre esa pantalla o lista de reproducción. Añadir una nota añade note.added al registro de eventos y resolver una añade note.resolved; ninguna incluye el texto de la nota. Leer notas no descuenta del medidor.
notes list#
Leer las notas del proyecto, las más recientes primero. screenrig notes ejecuta el mismo comando.
notes list [--all | --resolved] [--about ID] [--author AGENT_ID] [--limit N] [--after CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--all | bandera | no | notas abiertas | Incluya notas resueltas. |
--resolved | bandera | no | notas abiertas | Solo notas resueltas. |
--about ID | string | no | cada nota | Solo notas sobre una pantalla o lista de reproducción: screen:ID, playlist:ID, o el id. |
--author AGENT_ID | string | no | cada autor | Solo notas que este agente escribió. |
--limit N | integer | no | 50 | Tamaño de página, de 1 a 200. |
--after CURSOR | string | no | la primera página | El next_cursor de la página anterior. |
screenrig notesCada nota lleva su author (el nombre y tipo del agente), created_at, about y dos indicadores: new para una nota que otro agente escribió desde su última lectura, y due para una nota pendiente de revisión. La primera página de notas abiertas sin --about ni --author es su lectura: mueve su marcador de lectura (la lectura de un agente Solo lectura no mueve nada), así que new y counts.new describen lo que cambió desde su lectura anterior.
notes show#
Lea una nota, abierta o resuelta.
notes show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de nota nte_. |
screenrig notes show nte_01EXAMPLENOTE000000000notes add#
Escriba una nota para los agentes del proyecto.
notes add <text> [--about ID] [--ttl DURATION] [--replaces ID]
notes add --file FILE [--about ID] [--ttl DURATION] [--replaces ID]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<text> | string | uno de los dos | ninguno | La nota: de 1 a 2000 caracteres de texto plano después de recortar. |
--file FILE | ruta | uno de los dos | ninguno | Leer la nota desde un archivo, o - para entrada estándar. |
--about ID | string | no | todo el proyecto | Vincule la nota a una pantalla o lista de reproducción: screen:ID, playlist:ID o el id. |
--ttl DURATION | string | no | revisión después de 90 días | Resolver la nota automáticamente después de este tiempo, en horas o días desde 1h hasta 365d, por ejemplo 12h o 3d. |
--replaces ID | string | no | ninguno | Una nota abierta que esta reemplaza; se resuelve como reemplazada. |
screenrig notes add "The lobby screen is mounted in portrait: design for 1080x1920." --about screen:scr_01EXAMPLESCREEN00000000Escriba hechos sobre los que otro agente actuaría, nunca informes de progreso o chat. Una nota cuyo texto (ignorando mayúsculas y espacios) y asunto repiten una nota abierta confirma esa nota en lugar de añadir una, con la advertencia note_matched_open. Texto con forma de credencial se rechaza con note_contains_credential, y texto que parece una instrucción a un modelo con note_rejected; nada se almacena. La nota abierta número 201 en los proyectos de la organización se rechaza con note_limit_reached, cuyo detalle nombra notas para resolver primero.
notes confirm#
Indica que una nota abierta aún se mantiene. Su próxima revisión es dentro de 90 días.
notes confirm <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id nte_ de una nota abierta. |
screenrig notes confirm nte_01EXAMPLENOTE000000000notes resolve#
Resolver una nota abierta que es incorrecta o ya no es válida.
notes resolve <id> <reason>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id nte_ de una nota abierta. |
<reason> | string | sí | ninguno | Qué es cierto ahora, de 1 a 500 caracteres. |
screenrig notes resolve nte_01EXAMPLENOTE000000000 "The lobby screen was remounted in landscape."Una nota resuelta se rechaza con note_not_open.
Operaciones
Las cargas y las publicaciones se ejecutan como operaciones. media upload, media replace y app upload esperan la suya de forma predeterminada; estos comandos sirven para terminar una que dejó en ejecución con --no-wait.
operations show#
Lea el estado actual de una operación.
operations show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de operación del sobre que la inició. |
screenrig operations show op_01EXAMPLEOPERATION00000operations wait#
Consulte una operación hasta que finalice.
operations wait <id> [--timeout MS] [--poll-ms MS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de operación. |
--timeout MS | integer | no | 120000 | Fecha límite para la espera. También limita cada solicitud subyacente. |
--poll-ms MS | integer | no | 1000 | Intervalo entre sondeos de operación mientras espera. |
screenrig operations wait op_01EXAMPLEOPERATION00000operations cancel#
Pida al plano de control que cancele una operación.
operations cancel <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de operación. |
screenrig operations cancel op_01EXAMPLEOPERATION00000Eventos
El registro de eventos del proyecto registra lo que hizo el proyecto y lo que hizo la flota. Una versión publicada añade application.published; una app que llama a screenrig.emit(code) añade su propio evento, que es la evidencia más directa de que se ejecutó en una pantalla.
La presencia también está en el registro. screen.offline se escribe una vez que una pantalla ha estado sin conexión por 60 segundos, y screen.online cuando vuelve; una reconexión dentro de esos 60 segundos no escribe ninguno. screen.offline lleva details.offline_since y, cuando la pantalla ha estado en línea antes, details.last_online_at. screen.online lleva details.last_online_at, más details.offline_at cuando la pantalla estuvo sin conexión antes de volver. Como cada evento screen.*, son gratuitos en el flujo de escucha, por lo que un agente puede mantener events follow abierto para observar una flota.
events list#
Lea una página finita de eventos del proyecto.
events list [--after CURSOR] [--limit N] [--type TYPE] [--screen-id ID] [--app-id ID]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--after CURSOR | string | no | el inicio de la ventana de página | Reanudar después de este cursor. |
--limit N | integer | no | el tamaño de página del servidor | Tamaño de página solicitado. |
--type TYPE | string | no | cada tipo | Un tipo de evento, o una familia por un prefijo que termina en un punto, como note.. |
--screen-id ID | string | no | cada pantalla | Eventos cuyo recurso es esta pantalla, incluidos los emitidos por el SDK. |
--app-id ID | string | no | todas las aplicaciones | Eventos del recurso de aplicación, sus versiones y sus entradas K/V; excluye los eventos emitidos por el SDK. |
screenrig events list --limit 25
screenrig events list --type application.event --screen-id scr_SCREENLos métodos emit() y emitConfirmed() del SDK añaden registros application.event cuyo recurso es la pantalla. Léalos con --type application.event y, opcionalmente, --screen-id. Los campos details.primitive_id y details.code devueltos identifican la primitiva emisora y la acción con nombre. --app-id selecciona eventos del recurso de aplicación, sus versiones y sus entradas K/V, por lo que excluye estos eventos de pantalla.
La salida predeterminada es un sobre JSON para la página. Con --human, la salida es una línea logfmt por evento: at=, type=, severity= y detalles escalares.
events follow#
Manténgase en la transmisión de eventos e imprima los eventos a medida que llegan.
events follow [--after CURSOR] [--timeout MS] [--type TYPE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--after CURSOR | string | no | el final en vivo | Reanudar desde este cursor. |
--timeout MS | integer | no | sin fecha límite | Finaliza todo el seguimiento, incluyendo la reconexión con retroceso. |
--type TYPE | string | no | cada tipo | Un tipo de evento, o una familia por un prefijo que termina en un punto, como note.. |
screenrig events followUna desconexión o fallo transitorio se reconecta con retroceso y reanuda desde el último id de evento. La reproducción tras reconexión es gratuita. Problemas de autorización y no encontrado detienen el comando en lugar de reintentarlo.
Con --type, la transmisión aún lleva cada evento y la CLI imprime solo los que coinciden: screenrig events follow --type note. observa notas del proyecto.
La salida predeterminada es NDJSON: un sobre por evento en su propia línea, en lugar de un solo sobre. Use --human para líneas logfmt.
Notificaciones
Una notificación avisa a una persona, o a otro sistema, cuando una pantalla cambia de estado. Una notificación por correo envía un correo a cada destinatario, una notificación webhook envía un POST HTTPS firmado y una notificación de Slack, Teams, PagerDuty o Telegram publica un mensaje en un chat o en un sistema de guardia. Una organización tiene como máximo 50 entre todos los canales y todos sus proyectos, y cada proyecto empieza con un correo a su propietario cuando una pantalla lleva 10 minutos sin conexión.
Una notificación vigila las condiciones que usted nombra:
| Condición | Comienza cuando | Termina cuando |
|---|---|---|
screen_offline | El Player ha estado sin conexión durante 60 segundos. | La pantalla vuelve a estar en línea. |
display_disconnected | El Player informa que su monitor está desconectado. | El monitor se reconecta. |
running_hot | El dispositivo informa una temperatura igual o superior al umbral de calor. | La temperatura vuelve a la normalidad. |
on_battery | Un dispositivo con batería informa de que funciona con la batería, desenchufado. | El dispositivo informa de otra fuente de alimentación. |
storage_full | El almacenamiento del Player no puede albergar su contenido. | La falta de espacio desaparece. |
content_stuck | La actualización de contenido de la pantalla está en reintento, fallida, bloqueada o parcial. | La actualización pasa a cualquier otro estado. |
not_playing | El Player muestra un error en lugar de su contenido. El almacenamiento lleno es storage_full. | El estado del Player ya no es un error. |
loop_stalled | Una pantalla en línea, dentro de su horario y con contenido al día no ha iniciado ninguna imagen ni vídeo durante más tiempo del que permite su bucle. | Una imagen o un vídeo vuelve a empezar, o screenRIG deja de juzgar la pantalla. |
glass_blank | Las capturas que tomó screenRIG durante una serie que cubre todo el bucle eran todas de un solo tono plano. | Dos capturas seguidas muestran una imagen, o screenRIG deja de juzgar la pantalla. |
glass_frozen | Las capturas que tomó screenRIG durante una serie que cubre todo el bucle eran todas la misma imagen. | Dos capturas seguidas muestran una imagen en movimiento, o screenRIG deja de juzgar la pantalla. |
crashing | El Player falló o reinició su renderizador repetidamente. | Nunca: cada pico es su propio aviso. |
source_failed | Falló la actualización de una fuente de datos. | Una actualización funciona. |
source_stale | Una fuente de datos siguió fallando hasta que caducaron sus datos. | Una actualización funciona. |
card_data_stale | Los datos de una tarjeta, escritos con una caducidad, la alcanzaron mientras una pantalla muestra la tarjeta y nada los renovó. | Una escritura en los datos de la tarjeta se completa. |
reach_dropped | Una campaña alcanza menos pantallas que cuando se publicó por última vez, porque las pantallas salieron de sus etiquetas o carpetas, o fueron archivadas o eliminadas. | La campaña vuelve a alcanzar tantas pantallas, o se publica de nuevo. |
group_empty | Una etiqueta o carpeta de la audiencia de una campaña no coincide con ninguna pantalla. | La etiqueta o carpeta vuelve a coincidir con una pantalla, o una publicación la quita de la audiencia. |
Una condición notifica una vez que ha durado --hold minutos (10 por defecto), para que una reconexión rápida no genere avisos. Si termina antes, no se envía nada; si termina después de que se haya enviado un aviso, sigue un aviso de resolución. crashing se envía de inmediato. Un aviso también se omite cuando alguien reconoce o pospone la alerta de la pantalla durante el tiempo de espera, o cuando un silenciamiento cubre la pantalla. --tag limita una notificación a las pantallas que llevan esa etiqueta; sin ella, se consideran todas las pantallas.
Cada aviso tiene una gravedad. Un aviso abierto es error para screen_offline y warning para cualquier otra condición, y un aviso resuelto o una prueba es info. --min-severity LEVEL (info, warning o error) no crea ningún aviso abierto por debajo de ese nivel, y un aviso resuelto sigue a su aviso abierto. --severity CONDITION=LEVEL, repetible, define el nivel de una condición para esta notificación, como --severity not_playing=error; cuenta para --min-severity y es la gravedad que muestran Teams y PagerDuty. El texto de correo, Slack y Telegram nombra la gravedad, y el cuerpo de un webhook incluye severity.
--active-hours SPEC envía los avisos abiertos solo dentro de ventanas semanales, leídas en --timezone ZONE, que lo requiere. SPEC es DAYS HH:MM-HH:MM, como "Mon-Fri 08:00-22:00"; repítalo hasta 16 veces. Con --outside-hours hold, el valor predeterminado, un aviso que vence fuera del horario espera a la siguiente ventana y se envía entonces si su condición sigue vigente, de modo que una condición que se despeja antes no envía nada. Con drop el aviso se omite como outside_hours, que notifications deliveries lista. Un aviso resuelto de un aviso abierto que se envió siempre se envía, crashing sigue el horario como cualquier otra condición, primero se comprueba un aplazamiento, y notifications test ignora el horario, la gravedad y la audiencia.
--audience FILE (JSON en línea, un archivo o - para stdin) elige las pantallas con las reglas de una audiencia de campaña, como {"all":[{"tag":"level2"},{"tag":"overhead"}]} para las pantallas que llevan ambas etiquetas; --all-tags TAG y --any-tag TAG son las abreviaturas de una regla all y una regla any de etiquetas, y --tag significa cualquiera de las etiquetas. --tag, --any-tag, --all-tags y --audience se excluyen entre sí.
loop_stalled, glass_blank y glass_frozen son veredictos que screenRIG saca de los informes de reproducción y las capturas de pantalla que recibe, y dejan fuera lo que no pueden juzgar: una pantalla sin conexión, con la pantalla apagada, bajo una toma de control o suspendida, que muestra una sola imagen fija o un muro de vídeo, o cuyo Player no envía números de reproducción. Cuando screenRIG deja de juzgar una pantalla que había encontrado en uno de ellos, la alerta se cierra, pero el correo, Slack, Teams y Telegram no envían aviso de resolución, porque nada mostró que la pantalla se recuperara; PagerDuty sí resuelve su incidente.
source_failed y source_stale vigilan las fuentes de datos del proyecto, no sus pantallas: un aviso nombra la fuente y enlaza su página, y --tag nunca coincide con una fuente.
card_data_stale vigila una tarjeta, no una pantalla. Escriba los datos de una tarjeta con una caducidad ajustada al calendario de quien los escribe (card data put --ttl 30m), y cuando el trabajo o el agente que los renueva se detiene, los datos caducan, la tarjeta queda en blanco en cada pantalla que la muestra, y esta condición se lo avisa. El aviso nombra la tarjeta y cuándo caducaron sus datos, y enlaza el editor de páginas en una página que la coloca. Los documentos de una fuente de datos nunca se anuncian aquí (source_stale los cubre), ni tampoco una tarjeta que ninguna pantalla muestra, datos escritos sin caducidad o datos eliminados. --tag nunca coincide con una tarjeta.
reach_dropped y group_empty vigilan una campaña, no una pantalla. El aviso nombra la campaña y las pantallas que alcanzaba antes y que alcanza ahora, o la etiqueta o carpeta vacía, y enlaza al calendario de la campaña. Una campaña pertenece al proyecto, por lo que --tag, --any-tag, --all-tags y --audience nunca limitan a estos dos; --min-severity, --severity, --active-hours y --hold se aplican como en cualquier condición, y ambos están warning de forma predeterminada. --reach-drop-screens N y --reach-drop-percent P envían un aviso reach_dropped solo por una caída de al menos N pantallas y de al menos P por ciento de las pantallas que la campaña alcanzaba cuando se publicó; una caída debe cumplir ambos, y sin ellos cualquier caída genera un aviso. Requieren reach_dropped en --conditions. Cada etiqueta o carpeta vacía de una campaña es su propio aviso, y notifications deliveries lo muestra como audience_group (tag:Lobby o folder:sfd_…). Una publicación que quita un grupo vacío de la audiencia cierra un incidente de PagerDuty y la alerta de un webhook, pero no envía correo electrónico ni mensaje de chat de recuperación.
El correo electrónico se envía a la dirección verificada de cada destinatario, un correo por destinatario para todo lo que vence en unos dos minutos, con un enlace a cada pantalla y a la notificación en el panel. Los destinatarios son owner, quien sea propietario del proyecto cuando se envía el aviso, y los ids de usuario de los miembros del proyecto. Se omite a un destinatario sin dirección verificada o que ha salido del proyecto. Los correos electrónicos de notificación y los avisos de pantalla son gratuitos.
Cada correo incluye un enlace para cancelar la suscripción de su propio destinatario: el botón de cancelar suscripción de las aplicaciones de correo y un enlace en el pie. Al seguirlo, los correos de esa notificación dejan de llegar a esa única persona, sin iniciar sesión, y la página que se abre tiene un botón Resubscribe. Los demás destinatarios no se ven afectados, y la persona sigue entre los destinatarios. notifications show muestra quién canceló la suscripción con unsubscribed, y notifications resubscribe vuelve a enviarle correos. Un aviso sin nadie a quien enviar correo se omite como no_recipients.
Una notificación de webhook envía por POST cada aviso como JSON, que usted verifica como se describe en Verificar una entrega. Con --events también envía por POST eventos del proyecto sin procesar a medida que ocurren; esas entregas se miden como se describe en Webhooks.
Una notificación de Slack, Teams, PagerDuty o Telegram publica un mensaje por caída y por pantalla: la pantalla, qué cambió, desde cuándo, el proyecto, un enlace a la pantalla y, cuando vuelve una pantalla sin conexión, su causa probable si ya se conoce. Un mensaje de recuperación llega cuando se envió el primero y, en PagerDuty, resuelve el incidente que abrió el primero. La credencial se da una sola vez (--slack toma la URL de un webhook entrante, --teams la URL de un webhook de Workflows, --pagerduty una clave de enrutamiento de la API Events v2, --telegram un token de bot con --telegram-chat); queda sellada, no se vuelve a mostrar y destination_hint solo muestra su final enmascarado. Un - la lee desde una línea de stdin para que no quede en el historial de tu shell. Una publicación fallida se reintenta durante 24 horas, y una notificación que falla durante 72 horas se desactiva.
| Código de problema | Salir | Significado |
|---|---|---|
webhook_url_rejected | 8 | La URL no es https en el puerto 443 o 8443, o su host no resuelve solo a direcciones públicas de Internet. error.detail lleva la razón del servidor. No se creó ni cambió nada. |
notification_destination_rejected | 8 | El destino no corresponde a su canal, o es la URL de un conector de Office 365 retirado. error.detail indica la forma que corresponde. No se creó ni se cambió nada. |
notification_limit_reached | 5 | La organización ya tiene 50 notificaciones. Elimine una primero. |
revision_conflict | 6 | La revisión --expect-rev estaba obsoleta. Ejecute notifications show y luego intente de nuevo. |
rate_limited | 7 | Más de 20 llamadas notifications test en un minuto para esta organización. |
notifications create#
Crea una notificación por correo, webhook, Slack, Teams, PagerDuty o Telegram.
notifications create (--email RECIPIENTS | --webhook URL | --slack URL | --teams URL | --pagerduty KEY
| --telegram TOKEN --telegram-chat CHAT_ID) [--conditions LIST] [--events TYPES]
[--tag TAG... | --any-tag TAG... | --all-tags TAG... | --audience FILE] [--hold MINUTES]
[--min-severity LEVEL] [--severity CONDITION=LEVEL]... [--active-hours SPEC]...
[--timezone ZONE] [--outside-hours hold|drop] [--reach-drop-screens N] [--reach-drop-percent P]
[--description TEXT] [--disabled]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--email RECIPIENTS | string | un indicador de canal | ninguno | Enviar correo electrónico a estos destinatarios separados por comas: owner, o el id de usuario de un miembro del proyecto, máximo 20. |
--webhook URL | string | un indicador de canal | ninguno | Una URL https en el puerto 443 (el predeterminado) o 8443 cuyo host se resuelve solo a direcciones públicas de Internet. El servidor la verifica en cada escritura y nuevamente antes de cada entrega. Se rechaza localmente una URL que lleva credenciales (user:pass@ o token@) o un fragmento # con salida 2. |
--conditions LIST | string | sí, salvo en un webhook | ninguno | Condiciones separadas por comas de la tabla anterior. Un webhook necesita esto, --events, o ambos. |
--slack URL | string | un indicador de canal | ninguno | Publica en Slack con la URL de un webhook entrante de hooks.slack.com, o - para leerla desde una línea de stdin. |
--teams URL | string | un indicador de canal | ninguno | Publica en Teams con la URL de un webhook de Workflows (el desencadenador «Cuando se recibe una solicitud de webhook de Teams»), o - para stdin. Las URL de conectores de Office 365 están retiradas y se rechazan. |
--pagerduty KEY | string | un indicador de canal | ninguno | Dispara y resuelve incidentes de PagerDuty con una clave de enrutamiento de la API Events v2, o - para stdin. |
--telegram TOKEN | string | un indicador de canal | ninguno | Publica en Telegram con un token de bot, o - para stdin. Necesita --telegram-chat. |
--telegram-chat CHAT_ID | string | con --telegram | ninguno | El chat donde publicar: su id numérico, como -1001234567890, o @channelname. |
--events TYPES | string | no | ninguno | Solo webhook. Enviar también por POST estos eventos del proyecto sin procesar: de 1 a 32 tipos exactos separados por comas, como screen.online, o prefijos que terminan en .*, como screen.*. |
--tag TAG | string | no | cada pantalla | Solo pantallas que llevan esta etiqueta. Repita la bandera o sepárelas con comas, hasta 16 etiquetas. |
--hold MINUTES | integer | no | 10 | Cuánto tiempo debe durar una condición antes de notificar, de 0 a 1440. crashing nunca espera. |
--all-tags TAG | string | no | ninguno | Solo las pantallas que llevan todas las etiquetas listadas. Repita la opción o sepárelas con comas. |
--any-tag TAG | string | no | ninguno | Solo las pantallas que llevan al menos una etiqueta listada, como --tag. Repita la opción o sepárelas con comas. |
--audience FILE | string | no | cada pantalla | Las pantallas como una regla de audiencia de campaña en JSON: en línea, un archivo o - para stdin. No con las opciones de etiquetas. |
--min-severity LEVEL | string | no | ninguno | info, warning o error: los avisos abiertos por debajo de ese nivel no se envían. |
--severity CONDITION=LEVEL | string | no | los valores predeterminados | Define la gravedad de una condición para esta notificación. Repita la opción. |
--active-hours SPEC | string | no | always | Envíe los avisos abiertos solo dentro de esta ventana semanal, DAYS HH:MM-HH:MM como "Mon-Fri 08:00-22:00". Repita hasta 16 veces. Requiere --timezone. |
--timezone ZONE | string | con --active-hours | ninguno | La zona IANA en la que se lee el horario, como America/Los_Angeles. |
--outside-hours MODE | string | no | hold | hold espera a la siguiente ventana; drop omite el aviso. |
--reach-drop-screens N | integer | no | cualquier caída | Solo con reach_dropped: enviar un aviso solo cuando la campaña haya perdido al menos N pantallas (1 o más). |
--reach-drop-percent P | integer | no | cualquier caída | Solo con reach_dropped: exigir además una pérdida de al menos P por ciento (1 a 100) de las pantallas que la campaña alcanzaba cuando se publicó. |
--description TEXT | string | no | ninguno | Máximo 200 caracteres. |
--stale-after DURATION | string | no | según el tipo | Cuánto tiempo conserva la tarjeta los últimos datos buenos cuando la fuente no puede actualizarse, de 1m a 7d, como mínimo el doble de --refresh; none los conserva hasta la próxima actualización. Después, los datos caducan en todas las pantallas. momentus es 30m por defecto. |
--disabled | boolean | no | apagado | Créela deshabilitada. No se envía nada hasta notifications update --enable. |
screenrig notifications create --email owner --conditions screen_offline,display_disconnected --tag Lobbyscreenrig notifications create --webhook https://hooks.example.com/screenrig --conditions screen_offline,crashingscreenrig notifications create --slack - --conditions screen_offline,crashing < slack-url.txtEl sobre es la notificación. El de un webhook lleva su secreto de firma en data.secret (whsec_…) con la advertencia webhook_secret_shown_once. Guarde el secreto en el almacén de secretos del receptor de inmediato. Solo notifications rotate-secret lo devuelve de nuevo, y la CLI nunca lo escribe en su configuración, registro de operaciones o estado de recuperación de escritura. Después de una creación interrumpida o ambigua, vuelva a ejecutar el mismo comando dentro de 24 horas: reutiliza la clave de idempotencia guardada, y el servidor devuelve la misma respuesta, incluido el secreto. Los avisos comienzan con el primer evento posterior a la creación de la notificación.
notifications list#
Listar las notificaciones de este proyecto, nunca sus secretos.
notifications listscreenrig notifications listPor debajo del acceso Administrar, la url de un webhook está vacía y url_redacted es true.
notifications show#
Inspeccionar una notificación y su estado de entrega.
notifications show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de notificación ntf_ (cualquier canal salvo webhook) o whk_ (webhook). |
screenrig notifications show ntf_01EXAMPLENOTICE00000status es active, failing mientras ninguna entrega ha tenido éxito desde failing_since, o disabled. Después de 72 horas de fallo continuo, la notificación se deshabilita con disabled_reason: delivery_failures y el registro de eventos registra notification.disabled. snoozed_until está presente mientras hay una pausa establecida. last_success_at y last_failure_at informan los últimos resultados.
notifications update#
Cambia los destinatarios, la URL, el destino, las condiciones, las pantallas, la espera, la pausa o el estado de activación de una notificación.
notifications update <id> [--email RECIPIENTS | --url URL | --destination VALUE] [--telegram-chat CHAT_ID]
[--conditions LIST | --clear-conditions]
[--events TYPES | --clear-events] [--tag TAG... | --any-tag TAG... | --all-tags TAG... | --audience FILE | --all-screens]
[--hold MINUTES] [--min-severity LEVEL | --clear-min-severity]
[--severity CONDITION=LEVEL]... [--clear-severity]
[--active-hours SPEC]... [--timezone ZONE] [--outside-hours hold|drop] [--clear-active-hours]
[--reach-drop-screens N] [--reach-drop-percent P] [--clear-reach-drop]
[--description TEXT | --clear-description] [--enable | --disable]
[--snooze WHEN] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de notificación ntf_ (cualquier canal salvo webhook) o whk_ (webhook). |
--email RECIPIENTS | string | al menos un cambio | sin cambios | Notificaciones por correo electrónico: reemplaza los destinatarios. |
--url URL | string | al menos un cambio | sin cambios | Notificaciones de webhook: reemplaza la URL, verificada como create. |
--destination VALUE | string | al menos un cambio | sin cambios | Notificaciones de Slack, Teams, PagerDuty y Telegram: sustituye la credencial, comprobada como en create. - la lee desde una línea de stdin. |
--telegram-chat CHAT_ID | string | al menos un cambio | sin cambios | Notificaciones de Telegram: sustituye el chat. |
--conditions LIST | string | al menos un cambio | sin cambios | Reemplaza las condiciones. |
--clear-conditions | boolean | al menos un cambio | apagado | Eliminar todas las condiciones. Entonces un webhook necesita --events. |
--events TYPES | string | al menos un cambio | sin cambios | Notificaciones de webhook: reemplaza los eventos del proyecto sin procesar. |
--clear-events | boolean | al menos un cambio | apagado | Notificaciones de webhook: deja de enviar por POST los eventos del proyecto sin procesar. Entonces necesita condiciones. |
--tag TAG | string | al menos un cambio | sin cambios | Reemplaza las etiquetas de pantalla. |
--all-screens | boolean | al menos un cambio | apagado | Quitar las etiquetas de pantalla y la audiencia; la notificación cubre todas las pantallas. |
--hold MINUTES | integer | al menos un cambio | sin cambios | De 0 a 1440. |
--all-tags TAG | string | al menos un cambio | sin cambios | Reemplaza las pantallas por las que llevan todas las etiquetas listadas. |
--any-tag TAG | string | al menos un cambio | sin cambios | Reemplaza las pantallas por las que llevan al menos una etiqueta listada, como --tag. |
--audience FILE | string | al menos un cambio | sin cambios | Reemplaza las pantallas con una regla de audiencia de campaña en JSON: en línea, un archivo o - para stdin. |
--min-severity LEVEL | string | al menos un cambio | sin cambios | info, warning o error. |
--clear-min-severity | boolean | al menos un cambio | apagado | Quitar el filtro de gravedad. |
--severity CONDITION=LEVEL | string | al menos un cambio | sin cambios | Reemplaza las anulaciones de gravedad por estas. Repita la opción. |
--clear-severity | boolean | al menos un cambio | apagado | Quitar todas las anulaciones de gravedad. |
--active-hours SPEC | string | al menos un cambio | sin cambios | Reemplaza las ventanas por estas. Repita hasta 16 veces. --timezone es por defecto la zona que la notificación ya tiene. |
--timezone ZONE | string | al menos un cambio | sin cambios | La zona IANA en la que se lee el horario. Solo, conserva las ventanas actuales. |
--outside-hours MODE | string | al menos un cambio | sin cambios | hold o drop. Solo, conserva las ventanas actuales. |
--clear-active-hours | boolean | al menos un cambio | apagado | Quitar el horario activo. Los avisos que se retuvieron por él se vuelven a juzgar de inmediato. |
--reach-drop-screens N | integer | al menos un cambio | sin cambios | Reemplaza el menor número de pantallas que un aviso reach_dropped exige que la campaña haya perdido. |
--reach-drop-percent P | integer | al menos un cambio | sin cambios | Reemplaza el menor porcentaje de su alcance publicado que la campaña debe haber perdido. |
--clear-reach-drop | boolean | al menos un cambio | apagado | Quita el umbral, de modo que cualquier caída genera un aviso. Quite reach_dropped de --conditions solo junto con él. |
--description TEXT | string | al menos un cambio | sin cambios | Máximo 200 caracteres. |
--clear-description | boolean | al menos un cambio | apagado | Eliminar la descripción. |
--enable | boolean | al menos un cambio | apagado | Borra el estado de fallo y comienza en el evento que registra el cambio; no se envía nada de lo ocurrido mientras estuvo deshabilitada. |
--disable | boolean | al menos un cambio | apagado | Detiene los avisos; los avisos pendientes fallan con webhook_disabled. |
--snooze WHEN | string | al menos un cambio | sin cambios | No enviar nada hasta entonces: una duración como 30m, 1h o 2d (menos de 30 días), un instante RFC 3339 con segundos y un desplazamiento, o off para terminar la pausa. Los avisos que vencen mientras tanto se omiten, no se envían después. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig notifications update ntf_01EXAMPLENOTICE00000 --snooze 2hupdate cambia solo los campos que pase. El canal nunca cambia.
notifications delete#
Eliminar una notificación. Sus avisos pendientes fallan con webhook_deleted.
notifications delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de notificación ntf_ (cualquier canal salvo webhook) o whk_ (webhook). |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig notifications delete ntf_01EXAMPLENOTICE00000notifications rotate-secret#
Sustituye el secreto de firma de una notificación webhook y devuelve el nuevo una sola vez. Cualquier otro canal no tiene secreto.
notifications rotate-secret <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de notificación ntf_ (cualquier canal salvo webhook) o whk_ (webhook). |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig notifications rotate-secret whk_01EXAMPLEWEBHOOK00000El sobre lleva el nuevo secreto en data.secret con la advertencia webhook_secret_shown_once; guárdelo de inmediato. El secreto anterior deja de firmar, pero como máximo un intento ya en curso aún puede llegar firmado con él, así que acepte ambos por un corto tiempo. Después de una rotación interrumpida o ambigua, vuelva a ejecutar el mismo comando dentro de 24 horas para recuperar el mismo secreto.
notifications test#
Envía un correo de prueba, un POST de prueba firmado o un mensaje de chat solo a esta notificación.
notifications test <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de notificación ntf_ (cualquier canal salvo webhook) o whk_ (webhook). |
screenrig notifications test ntf_01EXAMPLENOTICE00000El sobre es la entrega en cola. Se intenta una vez sin reintentos, funciona con una notificación deshabilitada o en pausa y nunca cambia el estado de fallo de la notificación. Máximo 20 entregas de prueba por minuto por organización; más es rate_limited (salida 7). Lea el resultado con notifications deliveries.
Una prueba de PagerDuty dispara un evento informativo con la clave screenrig:test:DELIVERY_ID y lo resuelve de inmediato, así que no queda ningún incidente abierto.
notifications resubscribe#
Vuelve a enviar los correos de una notificación a una persona que canceló su suscripción.
notifications resubscribe <id> --user USER_ID| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id ntf_ de una notificación por correo electrónico. |
--user USER_ID | string | sí | ninguno | El id de usuario de la persona, tal como notifications show lo muestra en unsubscribed. |
screenrig notifications resubscribe ntf_01EXAMPLENOTICE00000 --user usr_01EXAMPLEPERSON0000El sobre es la notificación. Una persona que no canceló su suscripción no cambia nada. Volver a suscribir a una persona aumenta la revisión y agrega notification.updated. Una notificación de otro canal o proyecto es not_found (salida 4).
notifications deliveries#
Leer el registro de entregas de una notificación, con las más recientes primero.
notifications deliveries <id> [--before CURSOR] [--limit N]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de notificación ntf_ (cualquier canal salvo webhook) o whk_ (webhook). |
--before CURSOR | string | no | el evento más reciente | El next_cursor (whc1_…) de la página anterior. |
--limit N | integer | no | 50 | Filas por página, de 1 a 200. |
screenrig notifications deliveries ntf_01EXAMPLENOTICE00000 --limit 20Cada fila es un evento, o un aviso de una condición en una pantalla: event_type, state (pending, succeeded, failed o skipped), attempts, last_status y una clase fija last_error como http_status, timeout, connection_failed, tls_failed, dns_failed, url_rejected, email_failed o email_rejected. Un aviso de pantalla agrega condition, phase (opened o resolved), screen_id, screen_name y since, y un aviso por correo electrónico agrega emailed, el número de personas alcanzadas. Un aviso que nunca necesitó enviarse es skipped, con su motivo en last_error: condition_cleared (la pantalla salió del estado antes de que terminara el tiempo de espera), not_opened (no se envió ningún aviso que resolver), snoozed (la notificación está en pausa), acknowledged (alguien reconoció o pospuso la alerta de la pantalla durante el tiempo de espera), muted (un silenciamiento cubre la pantalla), no_recipients (ningún destinatario es miembro del proyecto con una dirección verificada que no se haya dado de baja), grouped (la pantalla pasó a la condición junto con otras, y un solo aviso en otra fila las nombra todas) o no_longer_judged (una condición loop_stalled, glass_blank o glass_frozen terminó porque screenRIG dejó de juzgar la pantalla, así que no se anunció ninguna recuperación). El aviso que comunicó un grupo de pantallas lleva group (id, attribute, value y count), y cada otra pantalla del grupo lleva group_id; --human muestra ambos en una columna GROUP. Las filas nunca incluyen la respuesta del receptor. next_cursor es null al final del registro. Un intento fallido se reintenta con retroceso, 30 segundos duplicándose hasta una hora, durante 24 horas, luego la fila es failed.
Verificar una entrega
El cuerpo de un aviso de pantalla es JSON: type (alert.opened o alert.resolved), id (el id de entrega), notification_id, project_id, condition, screen (id y name), since (cuando comenzó la condición), at (cuando duró lo suficiente, o se resolvió) y event_id. Un evento sin procesar de --events es el mismo objeto JSON que events list devuelve. Los encabezados son ScreenRig-Webhook-Id (el id de la notificación), ScreenRig-Event-Id (estable entre reintentos: el id de entrega para un aviso, el cursor del evento para un evento) y ScreenRig-Signature: t=<unix seconds>,v1=<hex>, donde v1 es HMAC-SHA256 sobre "<t>.<raw body>" con la cadena secreta como clave. Calcúlelo sobre los bytes sin procesar antes de analizar JSON, compárelo en tiempo constante, rechace un t antiguo y deduplique en ScreenRig-Event-Id, porque la entrega es al menos una vez y sin orden. Responda 2xx en 10 segundos; no se siguen las redirecciones.
import { createHmac, timingSafeEqual } from "node:crypto";
// rawBody: the request body bytes (Buffer) exactly as received.
function verify(rawBody, signatureHeader, secret, toleranceSeconds = 300) {
if (typeof signatureHeader !== "string" || !signatureHeader) return false;
const parts = Object.fromEntries(signatureHeader.split(",").map((part) => part.split("=", 2)));
const t = Number(parts.t);
if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
const expected = createHmac("sha256", secret).update(`${t}.`).update(rawBody).digest();
const given = Buffer.from(parts.v1 ?? "", "hex");
return given.length === expected.length && timingSafeEqual(given, expected);
}Informes
reports show KIND genera un informe (fleet_health, uptime, publishing, alerts, alert_log o proof_of_play) y, con --format csv, xlsx o pdf y --output FILE, lo escribe en un archivo; reports subscriptions envía un informe por correo a los miembros del proyecto según una programación; project export DIR escribe los datos del proyecto con el resultado de cada sección. Informes y exportaciones describe cada uno.
Registro de auditoría
audit list|show|head|verify|export lee el registro de auditoría del proyecto: audit list busca los cambios de configuración por actor, origen, recurso, acción y campo, audit show muestra una entrada con el antes y el después de cada campo modificado, audit head muestra la cabecera de la cadena para conservarla como ancla, audit verify recalcula la cadena (opcionalmente contra un ancla) y termina con el código 13 cuando no se verifica, y audit export escribe el registro filtrado en un archivo CSV, XLSX o PDF. Registro de auditoría describe cada uno de ellos.
Alertas
Una alerta es un problema en una pantalla mientras dura. Se abre cuando una pantalla entra en una condición de notificación distinta de crashing, la vigile o no una notificación, y se resuelve cuando la condición termina. Una pantalla tiene como máximo una alerta abierta por condición, y un pico de fallos es un aviso, nunca una alerta. alerts list muestra lo que está abierto ahora.
Una alerta abierta necesita atención hasta que alguien la reconoce o la pospone, o hasta que un silenciamiento cubre su pantalla. Reconocer significa que alguien se está ocupando: la alerta sigue abierta, registra quién la reconoció y cuándo, y no necesita atención hasta que se resuelve. Posponer reconoce hasta una hora como máximo 30 días en el futuro, y la alerta vuelve a necesitar atención entonces si sigue abierta. Un reconocimiento o aplazamiento posterior reemplaza al anterior. Mientras una alerta está reconocida o pospuesta, se omite el aviso de una notificación sobre ella que aún está en su tiempo de espera.
Un silenciamiento sirve para el mantenimiento: nombra pantallas, etiquetas o ambas, y termina en un momento como máximo 30 días en el futuro. Cubre una pantalla mientras su id figure en la lista o lleve una etiqueta de la lista, de modo que una pantalla etiquetada después queda cubierta y una que pierde la etiqueta deja de estarlo. Las alertas de una pantalla silenciada siguen abriéndose y resolviéndose, marcadas muted, pero nunca necesitan atención, y todas las notificaciones omiten sus avisos. Una organización tiene como máximo 50 silenciamientos vigentes en todos sus proyectos.
counts.attention en alerts list es el número que el panel muestra junto a Alertas. Abrir, resolver y reconocer una alerta agrega screen.alert_opened, screen.alert_resolved y screen.alert_acknowledged al registro de eventos del proyecto, y crear y finalizar un silenciamiento agrega alert_mute.created y alert_mute.deleted. Como todo evento screen.*, son gratuitos en el flujo de escucha. Las alertas resueltas siguen en la lista durante la retención de eventos del plan. Leer alertas y silenciamientos requiere el acceso Solo lectura; reconocer, posponer, silenciar y quitar el silencio requieren el acceso Administrar.
| Código de problema | Salir | Significado |
|---|---|---|
alert_not_open | 5 | La alerta ya se resolvió, así que no hay nada que reconocer ni posponer. Ejecute alerts list y use una abierta. |
alert_mute_limit_reached | 5 | La organización ya tiene 50 silenciamientos vigentes. Termine uno con alerts unmute, o cubra más pantallas con un solo silenciamiento por etiqueta. |
invalid_request | 8 | El instante --until está a más de 30 días en el futuro. No se cambió nada. |
not_found | 4 | Ninguna alerta ni silenciamiento del proyecto tiene este id. Una alerta resuelta desaparece tras la retención de eventos del plan, y un silenciamiento cuando termina. |
alerts list#
Listar las alertas de este proyecto, primero las abiertas.
alerts list [--state open|resolved|all] [--screen-id ID] [--before CURSOR] [--limit N]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--state STATE | string | no | open | open, resolved o all. |
--screen-id ID | string | no | cada pantalla | Solo las alertas de esta pantalla. |
--before CURSOR | string | no | la primera página | El next_cursor de la página anterior. |
--limit N | integer | no | 100 | Filas por página, de 1 a 200. |
screenrig alerts listscreenrig alerts list --state all --screen-id scr_01EXAMPLESCREEN00000000Cada fila es una alerta: id (alr_…), screen_id, screen_name, condition, state (open o resolved), since (cuándo empezó la condición), resolved_at una vez resuelta, acknowledged_at y acknowledged_by (kind, id y name de la persona o del agente) una vez reconocida, snoozed_until mientras está pospuesta, muted y attention. Las alertas abiertas van primero, las más recientes primero. counts contiene open y attention de todo el proyecto, sea cual sea la página y los filtros, y next_cursor es null al final.
alerts show#
Mostrar una alerta.
alerts show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de alerta alr_. |
screenrig alerts show alr_01EXAMPLEALERT000000El sobre es la alerta, con la forma de una fila de alerts list.
alerts ack#
Reconocer una alerta abierta: alguien se está ocupando de ella.
alerts ack <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de alerta alr_. |
screenrig alerts ack alr_01EXAMPLEALERT000000La alerta sigue abierta y no necesita atención hasta que se resuelve; acknowledged_by nombra a la persona o al agente y acknowledged_at la hora. Se omite el aviso de una notificación que aún está en su tiempo de espera. Reconocer de nuevo reemplaza el reconocimiento o aplazamiento anterior. Una alerta resuelta devuelve alert_not_open (salida 5). El sobre es la alerta, y el registro de eventos registra screen.alert_acknowledged.
alerts snooze#
Reconocer una alerta abierta hasta una hora, para que vuelva a necesitar atención entonces.
alerts snooze <id> (--for DURATION | --until TIME)| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de alerta alr_. |
--for DURATION | duración | uno de --for, --until | ninguno | Cuánto tiempo posponer a partir de ahora: una duración como 30m, 4h o 2d, como máximo 29d23h59m. |
--until TIME | string | uno de --for, --until | ninguno | Cuándo termina el aplazamiento: un instante RFC 3339 con segundos y un desplazamiento, como 2026-11-01T09:00:00-07:00, como máximo 30 días en el futuro. |
screenrig alerts snooze alr_01EXAMPLEALERT000000 --for 4hsnoozed_until es la hora en que termina el aplazamiento. Hasta entonces la alerta no necesita atención y se omite el aviso de una notificación que aún está en su tiempo de espera, igual que con alerts ack; si la alerta sigue abierta en ese momento, vuelve a necesitar atención. Una alerta resuelta devuelve alert_not_open (salida 5).
alerts mute#
Silenciar pantallas por mantenimiento.
alerts mute [--screen-id ID]... [--tag TAG]... (--for DURATION | --until TIME) [--note TEXT]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--screen-id ID | string | al menos uno de --screen-id, --tag | ninguno | Un scr_ id de pantalla. Repítalo o liste ids separados por comas; máximo 100. |
--tag TAG | string | al menos uno de --screen-id, --tag | ninguno | Cada pantalla que lleve esta etiqueta. Repítalo o liste etiquetas separadas por comas; máximo 16. |
--for DURATION | duración | uno de --for, --until | ninguno | Cuánto dura el silenciamiento a partir de ahora: una duración como 30m, 4h o 2d, como máximo 29d23h59m. |
--until TIME | string | uno de --for, --until | ninguno | Cuándo termina el silenciamiento: un instante RFC 3339 con segundos y un desplazamiento, como 2026-11-01T09:00:00-07:00, como máximo 30 días en el futuro. |
--note TEXT | string | no | ninguno | Por qué las pantallas están silenciadas, para quienes ven el silenciamiento; como máximo 200 caracteres. |
screenrig alerts mute --tag Lobby --for 2h --note "Rewiring the lobby displays"El sobre es el silenciamiento: id (amt_…), screen_ids, tags, until, note, created_by y created_at. Las alertas de cada pantalla cubierta muestran muted de inmediato, incluidas las que ya estaban abiertas. Una organización tiene como máximo 50 silenciamientos vigentes en todos sus proyectos; uno más es alert_mute_limit_reached (salida 5), y un silenciamiento que terminó ya no cuenta. Tras un silenciamiento interrumpido o ambiguo, lea primero alerts mutes: repetir el mismo comando con --until dentro de 24 horas devuelve el mismo silenciamiento, mientras que repetirlo con --for cuenta desde un nuevo momento y crea otro.
alerts mutes#
Listar los silenciamientos que no han terminado, primero el que termina antes.
alerts mutesscreenrig alerts mutesCada fila es un silenciamiento tal como lo imprime alerts mute.
alerts unmute#
Terminar un silenciamiento ahora.
alerts unmute <mute-id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<mute-id> | string | sí | ninguno | El id de silenciamiento amt_. |
screenrig alerts unmute amt_01EXAMPLEMUTE0000000Las alertas abiertas de esas pantallas vuelven a necesitar atención, y los avisos posteriores ya no se omiten por estar silenciados. Un silenciamiento que terminó devuelve not_found (salida 4). El registro de eventos registra alert_mute.deleted.
Webhooks
Un webhook envía los eventos propios de este proyecto a un endpoint HTTPS que usted ejecuta como POST firmados, para que un evento coincidente pueda despertar a un agente, a un bot o a su propio servicio. Cada evento coincidente llega como el mismo objeto JSON que events list devuelve. Un webhook es una notificación en su forma original: cuenta para las 50 notificaciones de la organización, y notifications list lo muestra. El trabajo nuevo usa notifications, que también envía correo electrónico y avisos de pantalla.
Cada intento de entrega se mide como un evento de transmisión de escucha facturado: 1 crédito después de la asignación mensual de 10,000 API y transmisión de escucha. Los mismos eventos que son gratuitos en la transmisión de escucha también lo son aquí: screen.*, runtime.*, application.event, playback.page_failed y agent.command. Un intento rechazado antes de enviar cualquier cosa no se factura.
webhooks create --url URL --event-types TYPES [--description TEXT] [--disabled]
webhooks list
webhooks show <id>
webhooks update <id> [--url URL] [--event-types TYPES] [--description TEXT | --clear-description]
[--enable | --disable] [--expect-rev REVISION]
webhooks delete <id> [--expect-rev REVISION]
webhooks rotate-secret <id> [--expect-rev REVISION]
webhooks test <id>
webhooks deliveries <id> [--before CURSOR] [--limit N]webhooks create responde webhook_limit_reached (salida 5) cuando la organización ya tiene 50 notificaciones, mientras que notifications create responde notification_limit_reached. Una URL rechazada es webhook_url_rejected (salida 8) en ambos casos.
Enlaces de flota
Un enlace de flota es una URL de Player que coloca en un administrador de dispositivos, como una app kiosco en la consola de Google Admin. Cada dispositivo que la abre se convierte en su propia pantalla en este proyecto, sin código de vinculación. Una organización tiene como máximo 50 enlaces de flota en todos sus proyectos.
Cada nueva pantalla recibe las etiquetas y la lista de reproducción del enlace, y una etiqueta del dispositivo: su ID de activo de administrador, luego su ubicación, de lo contrario la siguiente etiqueta predeterminada. Un dispositivo mantiene su única pantalla a través de recargas y reinicios. Después de un restablecimiento total o reinstalación, un dispositivo que informa el número de serie o DUID de una pantalla creada por un enlace de flota de este proyecto recupera esa pantalla en lugar de crear otra, una vez que su clave anterior ha estado inactiva durante diez minutos. screen show devuelve fleet_link_id para una pantalla creada por un enlace de flota, y --human imprime Created by fleet link: flk_…. El id. permanece después de eliminar el enlace.
La URL, https://play.screenrig.ai/player/#fleet=srfl_…, es una credencial que crea pantallas. Proporciónela solo al administrador del dispositivo. El secreto viaja en el fragmento de la URL, que los navegadores nunca envían a un servidor. Una credencial solo lectura recibe data.url vacía con url_redacted: true, y la salida humana dice URL: withheld from a Read only credential. De lo contrario, la salida humana imprime la URL bajo una etiqueta Sensitive fleet link URL, y fleet-links list --human nunca la imprime. El CLI verifica una URL devuelta antes de imprimirla: HTTPS, la ruta /player/ y el secreto solo en #fleet=. Retiene una URL que falla la verificación, con la advertencia fleet_link_url_withheld, y mantiene las respuestas de enlace de flota fuera de su registro de operaciones.
| Código de problema | Salir | Significado |
|---|---|---|
fleet_link_limit_reached | 5 | La organización ya tiene 50 enlaces de flota. No se creó nada. Elimine uno primero. |
invalid_request | 8 | Se rechazó un campo, como un --playlist-id que no nombra ninguna lista de reproducción en este proyecto. error.next es playlist list para una lista de reproducción desconocida. |
not_found | 4 | Ningún enlace de flota tiene este ID en el proyecto. |
revision_conflict | 6 | La revisión --expect-rev estaba obsoleta. Ejecute fleet-links show y luego intente de nuevo. |
fleet-links create#
Crear un enlace de flota y recibir su URL de Player.
fleet-links create --name NAME [--tag TAG]... [--playlist-id ID] [--max-screens N] [--disabled]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | El nombre del enlace, de 1 a 80 caracteres sin caracteres de control. |
--tag TAG | string | no | sin etiquetas | Una etiqueta para cada pantalla nueva, de 1 a 32 letras o dígitos. Repítala o liste etiquetas separadas por comas; máximo 16. |
--playlist-id ID | string | no | ninguno | La lista de reproducción pl_ asignada a cada pantalla nueva. |
--max-screens N | integer | no | sin límite | El máximo de pantallas que crea el enlace, de 1 a 10000. |
--disabled | boolean | no | apagado | Créelo deshabilitado. No crea pantallas hasta fleet-links update --enable. |
screenrig fleet-links create --name "Lobby displays" --tag Lobby --tag Floor2 --playlist-id pl_01EXAMPLEPLAYLIST000000El sobre es el enlace de la flota con su URL de Player en data.url. Ponga esa URL en el administrador de dispositivos. Después de una creación interrumpida o ambigua, vuelva a ejecutar el mismo comando dentro de 24 horas: reutiliza la clave de idempotencia guardada, y el servidor devuelve el mismo enlace en lugar de crear otro.
fleet-links list#
Listar los enlaces de flota de este proyecto, los más antiguos primero.
fleet-links listscreenrig fleet-links listUna credencial de solo lectura recibe cada data.items[].url vacío con url_redacted: true. --human imprime ID, LABEL, ENABLED, SCREENS, TAGS y LAST_USED, y nunca la URL. SCREENS es el número de pantallas que creó el enlace, o creado/máximo con --max-screens; las recuperaciones no se cuentan.
fleet-links show#
Inspeccionar un enlace de flota y recibir su URL de Player.
fleet-links show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
screenrig fleet-links show flk_01EXAMPLELINK0000screens_created cuenta las pantallas que creó el enlace, y last_used_at es la última vez que creó o recuperó una.
fleet-links update#
Cambiar lo que un enlace de flota da a las pantallas que crea a partir de ahora.
fleet-links update <id> [--name NAME] [--enable | --disable] [--tag TAG]... [--clear-tags]
[--playlist-id ID | --clear-playlist] [--max-screens N | --clear-max-screens]
[--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--name NAME | string | al menos un cambio | sin cambios | De 1 a 80 caracteres. |
--enable | boolean | al menos un cambio | apagado | El enlace crea y recupera pantallas nuevamente. |
--disable | boolean | al menos un cambio | apagado | El enlace no crea ni recupera pantallas; un dispositivo que lo abre muestra su código de asociación en su lugar. |
--tag TAG | string | al menos un cambio | sin cambios | Reemplaza todo el conjunto de etiquetas. Repítalo o liste etiquetas separadas por comas; máximo 16. |
--clear-tags | boolean | al menos un cambio | apagado | Las nuevas pantallas no reciben etiquetas. |
--playlist-id ID | string | al menos un cambio | sin cambios | La lista de reproducción pl_ para pantallas nuevas. |
--clear-playlist | boolean | al menos un cambio | apagado | Las nuevas pantallas no reciben lista de reproducción. |
--max-screens N | integer | al menos un cambio | sin cambios | La mayoría de pantallas que el enlace crea en total, de 1 a 10000. |
--clear-max-screens | boolean | al menos un cambio | apagado | Eliminar el límite. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig fleet-links update flk_01EXAMPLELINK0000 --playlist-id pl_01EXAMPLEPLAYLIST000000update cambia solo los campos que pase, y solo para pantallas que el enlace cree a partir de ahora. Las pantallas ya creadas mantienen sus etiquetas, lista de reproducción y etiqueta. La URL no cambia; use rotate para reemplazarla.
fleet-links rotate#
Reemplazar la URL de un enlace de flota y recibir la nueva.
fleet-links rotate <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig fleet-links rotate flk_01EXAMPLELINK0000El sobre lleva la nueva URL en data.url. La URL antigua deja de funcionar de inmediato: un dispositivo que la abre muestra su código de vinculación. Las pantallas que ya crearon el enlace siguen reproduciéndose, porque un Player vinculado nunca presenta el enlace de nuevo. Ponga la nueva URL en el administrador de dispositivos.
fleet-links delete#
Eliminar un enlace de flota. Su URL deja de funcionar de inmediato y las pantallas que creó permanecen.
fleet-links delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de enlace de flota flk_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig fleet-links delete flk_01EXAMPLELINK0000Las pantallas cuyo enlace se creó mantienen sus listas de reproducción y etiquetas.
Disparadores de alertas CAP
Un disparador permite que un sistema de notificación de emergencia, como Everbridge, Rave, Alertus o un relé IPAWS, tome el control de las pantallas con alertas CAP 1.2. Cada disparador tiene su propia URL, nombre de usuario y contraseña, que debe ingresar en el sistema de envío como destino CAP HTTP POST con autenticación HTTP Basic. Una organización tiene como máximo 20 disparadores en todos sus proyectos.
Los activadores son de dos tipos. Un activador CAP, descrito aquí, recibe las alertas de un sistema de emergencias. Un activador de superposición muestra lo que publica cualquier remitente, como Home Assistant, un concentrador de sensores o una herramienta de alertas, como una franja sobre lo que se reproduce o como una toma de control; triggers create --kind overlay crea uno, y triggers update, triggers deliveries, triggers clear y triggers rotate-secret sirven a los dos tipos.
Un disparador apunta a una etiqueta, resuelta cuando llega cada alerta, o hasta 500 ids de pantalla. Cada alerta se convierte en una toma de la lista de reproducción propia del disparador: una tarjeta a pantalla completa con el color de su gravedad, con el evento, titular, descripción e instrucción. Un ejercicio añade un banner EXERCISE. La toma se mantiene hasta el <expires> de la alerta, o el --for predeterminado del disparador (1 minuto a 7 días, 1 hora a menos que se establezca), y nunca más de 7 días. Una actualización redibuja la tarjeta, y una cancelación o AllClear devuelve cada pantalla a lo que mostraba antes. Una alerta nueva reemplaza a la que se muestra. Se ignoran mensajes de prueba, sistema y borrador, mensajes de acuse y error y alertas expiradas; un remitente e identificador repetidos son duplicados. Una pantalla necesita una lista de reproducción predeterminada para ser tomada; otras pantallas se omiten.
La contraseña, srtg_…, se muestra solo por triggers create y triggers rotate-secret, con la advertencia trigger_password_shown_once. La CLI la mantiene fuera de su configuración, registro de operaciones y estado de recuperación. La URL y el nombre de usuario no son secretos.
| Código de problema | Salir | Significado |
|---|---|---|
trigger_limit_reached | 5 | La organización ya tiene 20 disparadores. No se creó nada. Elimine uno primero. |
resource_conflict | 5 | triggers test o triggers delete mientras una alerta está activa. next es triggers clear. |
not_found | 4 | Ningún disparador tiene este id en el proyecto. |
revision_conflict | 6 | La revisión --expect-rev estaba obsoleta. Ejecute triggers show y luego intente de nuevo. |
triggers create#
Crear un disparador y recibir su URL, nombre de usuario y contraseña.
triggers create --name NAME [--kind cap|overlay] (--tag TAG | --screen-id ID...) [--for DURATION] [--pull FILE]
[--show bar|takeover] [--edge bottom|top] [--style FILE] [--map FILE] [--signing]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--name NAME | string | sí | ninguno | El nombre del trigger, de 1 a 80 caracteres sin caracteres de control. |
--kind KIND | cap o overlay | no | cap | cap recibe las alertas CAP 1.2 de un sistema de emergencias. overlay recibe unas pocas palabras de cualquier remitente y necesita --show. |
--tag TAG | string | uno de --tag o --screen-id | ninguno | Cada pantalla activa con esta etiqueta cuando llega una alerta. |
--screen-id ID | string | uno de --tag o --screen-id | ninguno | Un scr_ id de pantalla. Repítalo o liste ids separados por comas; máximo 500. |
--for DURATION | duración | no | 1h (superposición 10m) | Cuánto tiempo una alerta sin <expires>, o un envío de superposición sin duration, mantiene las pantallas, por ejemplo 30m, 2h o 1d; de 1 minuto a 7 días para un activador CAP, de 10 segundos a 7 días para uno de superposición. |
--pull FILE | ruta | no | ninguno | Un objeto JSON, desde un archivo o - para stdin, que también tiene la plataforma para leer fuentes de alerta CAP para el disparador. Sus miembros son los parámetros de la tarjeta cap-alert, listados a continuación. |
--show SHOW | bar o takeover | con --kind overlay | ninguno | bar dibuja una franja sobre lo que se reproduce en las pantallas de destino. takeover reproduce la alerta a pantalla completa. |
--edge EDGE | bottom o top | no | bottom | El borde que ocupa una franja. Solo con --show bar. |
--style FILE | ruta | no | ninguno | Un objeto JSON, de un archivo o de - para la entrada estándar, con el estilo de la tarjeta de texto: theme, accent, background, backgroundColor, textColor y align. |
--map FILE | ruta | no | ninguno | Una plantilla JSON, de un archivo o de - para la entrada estándar, que construye la publicación de superposición a partir del cuerpo que envía el remitente; consulte los activadores de superposición. |
--signing | bandera | no | apagado | Exigir también una cabecera ScreenRig-Signature en cada envío y mostrar el secreto de firma una sola vez. |
screenrig triggers create --name "Campus alerts" --tag Campus
screenrig triggers create --name "Campus alerts" --tag Campus --pull pull.json
screenrig triggers create --name "Lobby sensors" --kind overlay --show bar --tag Lobby
screenrig triggers create --name "Doorbell" --kind overlay --show takeover --tag Lobby --for 30sEl sobre es el activador con data.url (https://api.screenrig.ai/api/triggers/<id>/cap, o .../overlay para un activador de superposición), data.username (el id del activador) y data.password. Introdúzcalos ahora en el sistema remitente; el remitente de un activador de superposición necesita la URL y la contraseña (Authorization: Bearer). Con --signing, el sobre incluye también data.signing_secret, que se muestra una sola vez, con la advertencia trigger_signing_secret_shown_once. Tras una creación interrumpida o ambigua, vuelva a ejecutar el mismo comando en 24 horas: reutiliza la clave de idempotencia guardada y el servidor devuelve el mismo activador y la misma contraseña en lugar de crear otro.
--pull añade fuentes que la plataforma lee además de la URL publicada, que sigue funcionando. El objeto contiene sources (hasta 5 URLs http o https de alertas CAP 1.0 a 1.2 o índices ATOM/RSS), publicAlerts, location (name, latitude, longitude, y geocodes como [{name, value}]), minSeverity, maxSeverity, minUrgency, minCertainty, events, excludeEvents, senders, statuses, scopes, languages y areaUnknown; feeds get cap usa los mismos filtros que las banderas. location es obligatorio a menos que se proporcionen sources, y sin sources se leen los feeds públicos que cubren location. Cada fuente se consulta una vez por minuto. La alerta coincidente más grave toma las pantallas como una publicada, y cuando las fuentes no muestran ninguna, una alerta retirada termina; una fuente obsoleta o fallida nunca termina una alerta. Por ejemplo {"location": {"latitude": 49.25, "longitude": -123}, "minSeverity": "moderate"}.
triggers list#
Listar los disparadores de este proyecto y sus últimas alertas, los más antiguos primero.
triggers listscreenrig triggers list--human muestra ID, KIND, LABEL, TARGET, ALERT y LAST_RECEIVED; en un activador de superposición, ALERT indica qué dibuja y cuántas alertas mantiene. Una lista nunca incluye una contraseña ni un secreto de firma.
triggers show#
Inspeccionar un disparador y su última alerta.
triggers show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
screenrig triggers show trg_01EXAMPLETRIGGER00data.alert es la última alerta: sus campos CAP, state active o ended (con ended_reason cancelled, all_clear, cleared o expired), until y screens con targeted, taken_over, cleared, skipped, failed y pending. pending es verdadero mientras se siguen escribiendo pantallas, y las pantallas fallidas se reintentan. screen show informa de una alerta como una toma de control de la lista de reproducción del activador. En un activador de superposición, data.overlay contiene show, edge, enabled, signing, card_id, alerts (las alertas activas, la más reciente primero; la primera es la que se muestra), screens con targeted, holding, taken_over, removed, edge_taken, skipped y failed, y pending.
triggers test#
Mostrar una alerta de ejercicio de 60 segundos en las pantallas del disparador.
triggers test <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
screenrig triggers test trg_01EXAMPLETRIGGER00El sobre es el recibo: data.outcome shown y data.alert. La respuesta llega antes de que se escriban todas las pantallas; triggers show informa de los recuentos. Un activador de superposición muestra la alerta screenrig-test (etiqueta Test, título Test overlay) durante 60 segundos, y el recibo es el que recibe un envío (data.alert_id, data.until, data.active). Ambos tipos rechazan una prueba mientras se muestra una alerta.
triggers update#
Cambiar un activador sin cambiar su URL ni su secreto.
triggers update <id> [--name NAME] [--tag TAG | --screen-id ID...] [--for DURATION] [--pull FILE | --no-pull]
[--edge bottom|top] [--style FILE | --clear-style] [--map FILE | --clear-map] [--enable | --disable]
[--signing | --no-signing] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
--name NAME | string | no | ninguno | Cambiar el nombre del activador. |
--tag TAG, --screen-id ID | string | no | ninguno | Un nuevo destino, como en triggers create. |
--for DURATION | duración | no | ninguno | Una nueva duración para las alertas que no indican su final. |
--pull FILE, --no-pull | ruta, opción | no | ninguno | Un activador CAP: reemplaza sus fuentes CAP o deja de leerlas. |
--edge EDGE | bottom o top | no | ninguno | Una franja de superposición: moverla a este borde. |
--style FILE, --clear-style | ruta, opción | no | ninguno | Un activador de superposición: reemplaza todo el estilo o lo quita. |
--map FILE, --clear-map | ruta, opción | no | ninguno | Un activador de superposición: reemplaza la plantilla o la quita para que el objeto enviado sea la publicación. |
--stale-after DURATION | string | no | sin cambios | Como en source create; none quita el periodo. |
--enable, --disable | bandera | no | ninguno | Un activador de superposición: un activador desactivado responde a cada envío con el 404 que recibe un secreto incorrecto. |
--signing, --no-signing | bandera | no | ninguno | Un activador de superposición: activa la comprobación de firma (el secreto de firma se muestra una sola vez) o la desactiva. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig triggers update trg_01EXAMPLETRIGGER00 --tag Lobby
screenrig triggers update trg_01EXAMPLETRIGGER00 --edge top --style style.json
screenrig triggers update trg_01EXAMPLETRIGGER00 --map map.json --signingSe necesita al menos una opción además de --expect-rev. Una franja se recoloca en las nuevas pantallas de destino y en el nuevo borde; el nuevo destino de un activador de toma de control se aplica desde la siguiente alerta que empiece. Un activador que ya firma conserva su secreto de firma cuando se repite --signing; triggers rotate-secret --signing lo reemplaza. Tras una actualización interrumpida o ambigua, vuelva a ejecutar el mismo comando: reutiliza la clave de idempotencia guardada.
triggers deliveries#
Leer el registro de envíos de un activador de superposición: por qué cada uno se mostró, se ignoró o se rechazó.
triggers deliveries <id> [--limit N]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
--limit N | integer | no | 100 | Cuántas entregas, las más recientes primero; de 1 a 100. |
screenrig triggers deliveries trg_01EXAMPLETRIGGER00 --limit 20data.items contiene los envíos de los últimos siete días: at, outcome (shown, updated, unchanged, ended, ignored, refused, invalid o handshake), reason para un envío rechazado o no válido (credentials, signature, disabled, body, mapping, field, rate_limited o internal), detail (el miembro o la ruta de mapeo erróneos), status, bytes, alert_id y request_id. El registro nunca conserva un cuerpo, un encabezado ni una credencial. Un secreto incorrecto, una firma incorrecta y un activador desactivado dan todos al remitente el mismo 404, así que este registro es donde se lee cuál fue. Un activador CAP no tiene entregas.
triggers clear#
Finalizar ahora la alerta del disparador.
triggers clear <id> [--alert-id ID]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
--alert-id ID | string | no | ninguno | Un activador de superposición: termina solo esta alerta. Sin esta opción terminan todas las alertas. |
screenrig triggers clear trg_01EXAMPLETRIGGER00
screenrig triggers clear trg_01EXAMPLETRIGGER00 --alert-id front-doorLa alerta termina con ended_reason cleared y sus pantallas vuelven a lo que reproducían antes. Una pantalla cuya toma de control haya reemplazado otra desde entonces se deja como está. Sin alerta activa, no cambia nada. En un activador de superposición, la finalización de una alerta que no está activa no cambia nada, y al terminar la última alerta se baja la franja o se devuelven las pantallas de la toma de control.
triggers rotate-secret#
Reemplazar la contraseña de un disparador.
triggers rotate-secret <id> [--signing] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
--signing | bandera | no | apagado | Un activador de superposición que firma: reemplaza el secreto de firma en lugar de la contraseña. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig triggers rotate-secret trg_01EXAMPLETRIGGER00El sobre incluye la nueva contraseña en data.password. La contraseña anterior deja de funcionar de inmediato, así que introduzca la nueva en el sistema remitente. Con --signing, el sobre incluye en su lugar el nuevo data.signing_secret, que se muestra una sola vez; el anterior deja de funcionar de inmediato, y un activador que no firma responde invalid_request.
triggers delete#
Eliminar un activador. Su URL deja de aceptar alertas y envíos de inmediato; las franjas de un activador de superposición salen de sus pantallas y su tarjeta se elimina. Un activador que muestra una alerta se rechaza con resource_conflict: ejecute primero triggers clear.
triggers delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | El id de activador trg_. |
--expect-rev REVISION | string | no | ninguno | Precondición opcional de revisión. |
screenrig triggers delete trg_01EXAMPLETRIGGER00Activadores de superposición
Un activador de superposición muestra lo que publica un sistema externo. Home Assistant, un concentrador de sensores de puerta o de movimiento, un sistema de cámaras o una herramienta de alertas envía unas pocas palabras con un HTTP POST, y las pantallas del activador las muestran hasta que caducan o el remitente las termina. Es un activador como uno CAP: triggers create --kind overlay lo crea y cuenta para el mismo límite de 20 por organización.
--show bar dibuja una franja sobre lo que se reproduce en cada pantalla de destino, en el borde inferior o, con --edge top, en el superior. La franja entra cuando empieza una alerta y sale cuando termina la última; la lista de reproducción, sus páginas y sus tiempos no cambian. Una pantalla tiene una franja por borde, así que un activador de superposición cuyo borde ya ocupa otro activador en una pantalla no se muestra allí (triggers show cuenta esas pantallas como edge_taken), y una página que tiene su propia franja con presencia en ese borde la conserva. Una tarjeta de esquina o de ficha en ese borde se desplaza más allá de la altura de la franja, se muestre esta o no. No se dibuja ninguna franja en una página de espacio publicitario ni mientras hay una toma de control. --show takeover reproduce la alerta a pantalla completa en las pantallas de destino que tienen una lista de reproducción predeterminada, desde la primera alerta hasta que termina la última. Un activador de toma de control nunca reemplaza una toma de control que ya está en una pantalla, como la de un operador o una alerta de emergencia, y una alerta CAP la reemplaza.
Un destino por etiqueta se resuelve cuando empieza una alerta; una pantalla etiquetada después recibe la franja con la siguiente alerta que empiece. Una toma de control omite las pantallas sin lista de reproducción predeterminada. Una pantalla sin conexión se pone al día cuando se reconecta.
El remitente envía JSON (o un formulario) a data.url con Authorization: Bearer SECRET, o con HTTP Basic usando el id del activador como usuario y el secreto como contraseña. El secreto nunca va en la URL. Un envío tiene estos miembros; un miembro desconocido se rechaza y se nombra.
| Miembro | Tipo | Notas |
|---|---|---|
alert_id | string | El id de la alerta que elige el remitente, de 1 a 200 caracteres. El mismo id actualiza esa alerta en lugar de apilar otra. Sin id es una sola alerta llamada default. En una finalización, sin id terminan todas las alertas. |
label | string | Una etiqueta breve sobre el título: como máximo 40 caracteres. |
title | string | Máximo 120 caracteres. |
message | string | El texto principal: como máximo 400 caracteres. |
note | string | Una línea discreta al pie: como máximo 120 caracteres. |
duration | número o cadena | Cuánto tiempo mantiene este envío su alerta, desde ahora: de 10 a 604800 segundos, o 10s, 5m, 2h, 1d o until_cleared. Sin valor se usa --for del activador (10 minutos si no se configura). |
clear | booleano o cadena | true (o yes, y, 1, x) termina la alerta; false (o no, n, 0, vacío) la activa. Una finalización ignora los demás miembros. |
state | string | Una palabra de estado del remitente. off, closed, clear, cleared, resolved, ok, normal, inactive y ended, en mayúsculas o minúsculas, terminan la alerta; cualquier otro estado la activa. |
Una activación necesita al menos uno de label, title, message y note. Se rechaza el texto más largo que su límite y también duration fuera del rango de 10 segundos a 7 días, ambos con invalid_request que nombra el miembro. Cada activación o actualización mantiene su alerta durante duration desde ese envío, así que un sensor de movimiento que envía cada pocos segundos mantiene la franja y esta se retira duration después del último envío. Un activador muestra su alerta más reciente; al terminarla se vuelve a mostrar la anterior. Mantiene diez alertas y la undécima reemplaza a la más antigua. Una alerta termina unos diez segundos después de su hora. Una finalización enviada dos veces termina la alerta una sola vez, y la finalización de una alerta que no está activa no cambia nada.
La respuesta es un recibo: outcome (shown, updated, unchanged, ended o ignored), alert_id, until (nulo para una alerta mantenida hasta que se termine) y active, las alertas que mantiene el activador después del envío. Una cabecera Idempotency-Key de 8 a 200 caracteres responde al reintento de un remitente con el primer recibo durante 24 horas. Un activador admite 120 envíos por minuto. Una activación o actualización es una solicitud de API facturada, como un envío a un webhook de clave/valor entrante; una finalización es gratuita y nunca se rechaza por saldo, de modo que siempre se puede retirar una alerta de las pantallas.
curl -X POST https://api.screenrig.ai/api/triggers/trg_01EXAMPLETRIGGER00/overlay \
-H "Authorization: Bearer srtg_YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"alert_id":"front-door","title":"Front door","message":"The front door is open","duration":"10m"}'Una dirección incorrecta, un secreto incorrecto, un activador desactivado, una firma ausente o incorrecta y cualquier GET dan el mismo 404 not_found, de modo que un remitente o la vista previa de un enlace no averigua cuál fue. triggers deliveries muestra al proyecto el motivo, durante los últimos siete días, sin el cuerpo del envío. --style FILE define theme, accent, background, backgroundColor, textColor y align de la tarjeta de texto; use un activador por aspecto.
--map FILE construye la publicación a partir del cuerpo que envía una herramienta de alertas, con el lenguaje de plantillas de los webhooks de tarjetas. Una cadena con {{body.title}} es texto, una cadena que es exactamente un marcador conserva su tipo, {"$text": "{{body.message}}", "$max": 400} recorta el texto y una ruta empieza con body o query. Esta plantilla transforma una alerta de una herramienta de monitorización y la termina cuando su estado es resolved:
{"alert_id": "{{body.groupKey}}", "title": "{{body.title}}", "message": {"$text": "{{body.message}}", "$max": 400}, "state": "{{body.status}}"}--signing también exige ScreenRig-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, con la clave data.signing_secret (whsec_…, que se muestra una sola vez), donde t debe estar a menos de cinco minutos del reloj del servidor. El remitente puede enviar dos valores v1 mientras rota el secreto.
body='{"alert_id":"front-door","title":"Front door","message":"The front door is open"}'
t=$(date +%s)
sig=$(printf '%s.%s' "$t" "$body" | openssl dgst -sha256 -hmac "$SIGNING_SECRET" -hex | sed 's/^.* //')
curl -X POST "$URL" -H "Authorization: Bearer $SECRET" -H "ScreenRig-Signature: t=$t,v1=$sig" \
-H "Content-Type: application/json" -d "$body"Una herramienta de alertas o un proveedor que firma sus propios envíos puede hacer que se verifique su firma en lugar del secreto, y que se responda su handshake de configuración, como en los webhooks de tarjeta: overlay.verify y overlay.handshake van en POST /api/triggers y PATCH /api/triggers/{id}, y null elimina cada uno. Las mismas reglas valen para la contraseña srtg_ del activador y su registro de entregas, y un handshake no cambia ninguna alerta.
Un rest_command de Home Assistant envía al activador. Guarde el secreto en secrets.yaml y dé a cada automatización la alerta que activa o termina:
# secrets.yaml
screenrig_lobby_overlay: "Bearer srtg_YOUR_SECRET"
# configuration.yaml
rest_command:
screenrig_lobby:
url: "https://api.screenrig.ai/api/triggers/trg_01EXAMPLETRIGGER00/overlay"
method: post
headers:
Authorization: !secret screenrig_lobby_overlay
content_type: "application/json"
payload: >-
{{ {"alert_id": alert_id | default(""), "title": title | default(""),
"message": message | default(""), "duration": duration | default("10m"),
"clear": clear | default(false)} | tojson }}
# automations.yaml
- alias: Front door open on the lobby screens
triggers:
- trigger: state
entity_id: binary_sensor.front_door
to: "on"
actions:
- action: rest_command.screenrig_lobby
data: {alert_id: front-door, title: Front door, message: The front door is open, duration: until_cleared}
- alias: Front door closed
triggers:
- trigger: state
entity_id: binary_sensor.front_door
to: "off"
actions:
- action: rest_command.screenrig_lobby
data: {alert_id: front-door, clear: true}
- alias: Driveway motion
triggers:
- trigger: state
entity_id: binary_sensor.driveway_motion
to: "on"
actions:
- action: rest_command.screenrig_lobby
data: {alert_id: driveway, title: Driveway, message: Motion at the driveway, duration: 2m}Dos hechos hacen que esto funcione. Cada envío de movimiento mantiene la franja 2 minutos desde ese envío, así que permanece mientras continúa el movimiento y se retira 2 minutos después del último evento. Y Home Assistant genera la plantilla {{ }} antes de enviar, de modo que el activador recibe JSON simple; la plantilla --map del propio activador es un paso aparte que hace pasar cada envío por ella; por eso, deje --map fuera para un remitente que ya envía los miembros de la superposición, como hace aquí Home Assistant, o dele su propio activador.
Reproducción
La evidencia de reproducción viene en tres formas. playback plays lee una fila por cada inicio visible de una imagen o video en una pantalla, el más antiguo primero por received_at: prueba de reproducción para un informe o un anunciante. playback list lee totales diarios, una fila por pantalla, objeto multimedia y día UTC. playback totals lee conteos de reproducción por día UTC, o clasifica las pantallas o medios más activos. plays y list exportan como CSV, y el panel exporta los mismos archivos.
Las reproducciones se mantienen por la retención de eventos del plan, al menos 30 días.
| Código de problema | Salir | Significado |
|---|---|---|
invalid_request | 8 | Un rango de reproducciones mayor a 31 días, un rango diario mayor a 366 días, o un filtro mal formado. El CLI rechaza la mayoría antes de enviar algo (salida 2). |
rate_limited | 7 | El presupuesto de exportación de reproducción de 30 solicitudes por minuto por organización está agotado. Espere retry_after_seconds. |
Facturación: cada página JSON es una solicitud API facturada, así que --all factura una solicitud por página. Una exportación CSV es una solicitud facturada para todo su rango. Cada solicitud de reproducciones y cada exportación CSV también consume el presupuesto de exportación de reproducción. playback totals es una solicitud API medida y no consume ese presupuesto.
playback plays#
Leer registros por reproducción, una fila por inicio visible.
playback plays [--from TIME] [--to TIME] [--screen-id ID] [--media-id ID] [--tag TAG] [--cursor CURSOR] [--limit N] [--all]
playback plays --format csv [--output FILE] [--from TIME] [--to TIME] [--screen-id ID] [--media-id ID] [--tag TAG]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--from TIME | string | no | 24 horas antes de --to | Límite inclusivo en received_at: un instante RFC 3339 con segundos y un desplazamiento, now, o una antigüedad como 7d, 12h o 30m. |
--to TIME | string | no | ahora | Vinculación exclusiva, en las mismas formas. El rango es de máximo 31 días. |
--screen-id ID | string | no | cada pantalla | Una pantalla scr_. |
--media-id ID | string | no | cada objeto | Un objeto multimedia med_. |
--tag TAG | string | no | cada pantalla | Una etiqueta que la pantalla llevaba cuando se recibió la reproducción. |
--cursor CURSOR | string | no | el inicio del rango | El next_cursor de la página anterior, con los mismos filtros. |
--limit N | integer | no | 200 | Filas por página JSON, máximo 1000. No con --format csv. |
--all | boolean | no | apagado | Siga el cursor hasta el final del rango, 1000 filas por página a menos que --limit indique lo contrario, hasta un máximo de 50 páginas. |
--format csv | string | no | JSON | Transmitir todo el rango como CSV. |
--output FILE | ruta | no | ./playback-plays.csv | Destino CSV, o - solo para salida estándar. |
screenrig playback plays --from 7d --tag Lobby --all
screenrig playback plays --format csv --from 2026-09-01T00:00:00Z --to 2026-10-01T00:00:00Z --output september-plays.csvEl CLI normaliza ambos límites a UTC y los envía en cada solicitud; data.from y data.to los reflejan. Los últimos 5 segundos se retienen hasta estabilizarse, por lo que una reproducción aparece unos 5 segundos después de recibirse, y data.to informa ese fin efectivo. JSON devuelve una página en data.items con data.next_cursor, y data.next.argv es el comando exacto para la siguiente página. --all detiene anticipadamente, con data.next y una advertencia, al límite de páginas (playback_plays_truncated) o cuando se agota el presupuesto de exportación (playback_export_rate_limited), en lugar de gastar solicitudes hasta un rechazo.
El CSV cumple RFC 4180 con la fila fija de encabezado screen_id,playlist_id,page_id,primitive_id,media_id,primitive,started_at,received_at,manifest_revision,playlist_revision, tiempos en RFC 3339 UTC. primitive_id y started_at están vacíos a menos que el reproductor los haya reportado. Una celda que comienza con =, +, -, @, tabulación o retorno de carro lleva un ' inicial para que las hojas de cálculo no lo evalúen. El CLI escribe a través de un archivo temporal privado en el mismo directorio y reemplaza un archivo existente solo después de que la transmisión termina correctamente. --timeout es el límite sin progreso para la transmisión, 60000 ms sin un byte por defecto, no un límite en su duración total. El sobre informa path, bytes, rows, sha256 y last_received_at; el CSV nunca entra en el sobre.
Si una transmisión falla a mitad de camino, el comando sale con código distinto de cero y nunca escribe el archivo destino. Las filas completas ya recibidas permanecen en FILE.partial, y error.next exporta el resto del rango desde el último received_at a un FILE-rest.csv no usado. Las filas recibidas en ese instante exacto aparecen en ambos, así que elimine los duplicados al unirlos.
playback list#
Lea totales diarios de reproducción para este proyecto, días más recientes primero.
playback list [--screen-id ID] [--media-id ID] [--day YYYY-MM-DD | --day-from YYYY-MM-DD --day-to YYYY-MM-DD] [--format csv] [--output FILE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--screen-id ID | string | no | cada pantalla | Debe comenzar con scr_. |
--media-id ID | string | no | cada objeto | Debe comenzar con med_. |
--day YYYY-MM-DD | string | no | cada día | Un día calendario UTC. |
--day-from YYYY-MM-DD | string | no | ninguno | Inicio de un rango de días UTC inclusivo, con --day-to, máximo 366 días. |
--day-to YYYY-MM-DD | string | no | ninguno | Fin de ese rango. |
--format csv | string | no | JSON | Exportar como CSV. Sin rango, los 31 días hasta hoy. |
--output FILE | ruta | no | ./playback-aggregates.csv | Destino CSV, o - solo para salida estándar. |
screenrig playback list --screen-id scr_01EXAMPLESCREEN00000000 --day 2026-08-14
screenrig playback list --format csv --day-from 2026-09-01 --day-to 2026-09-30Una fila por pantalla, objeto multimedia y día UTC. Los filtros seleccionan las filas propias del solicitante. La fila de encabezado CSV es screen_id,media_id,filename,primitive,day,play_count,last_page_id,last_manifest_revision,first_started_at,last_started_at. Una exportación diaria fallida no guarda nada; vuelva a ejecutarla.
playback totals#
Leer conteos de reproducción por día UTC, o clasificar las pantallas o medios más activos.
playback totals [--by day|screen|media|screen_day] [--day-from YYYY-MM-DD] [--day-to YYYY-MM-DD]
[--screen-id ID | --media-id ID] [--top N]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--by GROUPING | string | no | day | day responde una fila por día UTC. screen o media clasifican los más activos. screen_day responde la serie diaria de las pantallas principales. |
--day-from YYYY-MM-DD | string | no | 29 días antes de --day-to | Primer día UTC, inclusive. |
--day-to YYYY-MM-DD | string | no | hoy | Último día UTC, inclusive. |
--screen-id ID | string | no | cada pantalla | Con --by day, cuente solo esta pantalla. No con --media-id. |
--media-id ID | string | no | cada objeto | Con --by day, cuente solo este objeto multimedia. No con --screen-id. |
--top N | integer | no | 10 | Filas de un ranking, de 1 a 100; de 1 a 10 con --by screen_day. Requiere --by; no se aplica a --by day. |
screenrig playback totals
screenrig playback totals --day-from 2026-09-01 --day-to 2026-09-30 --screen-id scr_01EXAMPLESCREEN00000000
screenrig playback totals --by screen --top 5
screenrig playback totals --by media --day-from 2026-09-01 --day-to 2026-09-30
screenrig playback totals --by screen_day --top 3Los conteos provienen de los resúmenes diarios, que siguen la ingestión hasta unos 21 minutos; playback plays muestra inicios más recientes. day responde data.days, screen y media responden data.screens y data.media, y screen_day responde data.screen_days. Una serie diaria abarca como máximo 366 días (92 con --screen-id o --media-id) y un ranking como máximo 92. data.truncated es true cuando un ranking sobre una ventana demasiado grande para una lectura mantuvo solo las mejores claves de cada segmento.
Feeds
Un feed es un dato de terceros que screenRIG obtiene y almacena en caché, como clima, alertas, tarifas y titulares. feeds get lee un documento de feed, el mismo documento que una tarjeta integrada con los mismos parámetros lee. El comando nunca llama a un proveedor externo.
feeds get#
Lea un feed una vez. Un feed sin documento aún responde pending y su tiempo de reintento.
feeds get <family> [--lat DEGREES --lon DEGREES] [--radius-km KM] [--min-magnitude N] [--hours N]
[--basins LIST] [--base CODE] [--symbols IDS] [--currency CODE] [--url URL]...
[--public] [--geocode NAME:VALUE]... [--min-severity LEVEL] [--max-severity LEVEL]
[--min-urgency LEVEL] [--min-certainty LEVEL] [--event NAME]... [--exclude-event NAME]...
[--sender NAME]... [--status STATUS]... [--scope SCOPE]... [--language TAG]...
[--area-unknown hide|show]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<family> | string | sí | ninguno | weather, airquality, alerts, rates, crypto, earthquakes, cyclones, headlines o cap. |
--lat DEGREES | number | por familia | ninguno | Latitud, con --lon. Requerido para weather, airquality, alerts y earthquakes; opcional para cyclones y cap. |
--lon DEGREES | number | por familia | ninguno | Longitud, con --lat. |
--radius-km KM | number | no | 500 para earthquakes | earthquakes radio, o el área cyclones, de 10 a 20000 km. Requiere --lat y --lon. |
--min-magnitude MAGNITUDE | number | no | 2.5 | earthquakes: magnitud mínima, de 0 a 9. |
--hours HOURS | number | no | 24 | earthquakes: ventana en horas, de 1 a 168. |
--basins LIST | string | no | todas las cuencas | cyclones: cuencas separadas por comas at, ep, cp, wp. |
--base CODE | string | no | EUR | rates: moneda base. |
--symbols IDS | string | sí, para crypto | ninguno | IDs o símbolos de criptomonedas separados por comas, máximo 20. |
--currency CODE | string | no | usd | crypto: moneda cotizada. |
--url URL | string | sí, para headlines | ninguno | headlines: URL de un feed RSS o Atom. cap: URL de una alerta CAP o índice ATOM/RSS; repítalo, máximo 5. |
--public | boolean | no | encendido sin --url | cap: también lee los feeds públicos de alertas que cubren --lat y --lon. Requiere --lat y --lon. |
--geocode NAME:VALUE | string | no | ninguno | cap: un código de área de la ubicación, como UGC:WAC033. Repetible. Requiere --lat y --lon. |
--min-severity LEVEL | string | no | ninguno | cap: solo alertas en o por encima de minor, moderate, severe o extreme. |
--max-severity LEVEL | string | no | ninguno | cap: solo alertas en o por debajo de minor, moderate, severe o extreme. |
--min-urgency LEVEL | string | no | ninguno | cap: solo alertas al menos tan urgentes: past, future, expected o immediate. |
--min-certainty LEVEL | string | no | ninguno | cap: solo alertas al menos tan ciertas: unlikely, possible, likely o observed. |
--event NAME | string | no | cualquier evento | cap: solo este evento; * coincide con cualquier secuencia de caracteres. Repetible. |
--exclude-event NAME | string | no | ninguno | cap: omitir este evento. Repetible. |
--sender NAME | string | no | cualquier remitente | cap: solo alertas de este remitente. Repetible. |
--status STATUS | string | no | Actual | cap: estado de alerta para leer: Actual, Exercise, Test o System. Repetible. |
--scope SCOPE | string | no | Public | cap: alcance de alerta para leer: Public, Restricted o Private. Repetible. |
--language TAG | string | no | ninguno | cap: preferencia de idioma; gana la primera presente. Repetible. |
--area-unknown MODE | string | no | hide | cap: una alerta comunicada solo por códigos de área que la ubicación no tiene: hide o show. |
screenrig feeds get weather --lat 49.25 --lon -123
screenrig feeds get rates --base EUR
screenrig feeds get crypto --symbols btc,eth --currency usd
screenrig feeds get earthquakes --lat 49.25 --lon -123 --radius-km 500 --min-magnitude 4 --hours 72
screenrig feeds get cyclones --basins at,ep
screenrig feeds get headlines --url https://example.com/news.xml
screenrig feeds get cap --lat 49.25 --lon -123 --geocode UGC:WAC033 --min-severity moderate --event '*warning'
screenrig feeds get cap --url https://example.com/alerts.atom --url https://example.com/other.xmlweather, airquality, alerts y earthquakes necesitan --lat y --lon, que siempre van juntos; earthquakes también toma --radius-km, --min-magnitude y --hours. cyclones toma --basins, y con --lat, --lon y --radius-km juntos solo las tormentas cerca de ese lugar. rates toma --base, crypto necesita --symbols y toma --currency, y headlines necesita --url.
cap lee las alertas CAP que coinciden con un lugar. Necesita --url (repetible, hasta 5 URLs de índice de alertas CAP o ATOM/RSS) o --lat y --lon, que leen los feeds públicos que cubren la ubicación; --public añade esos feeds públicos a las fuentes --url. Las banderas del filtro reflejan los miembros de un objeto triggers create --pull.
Un documento en caché responde 200 con fetchedAt y attribution: muestre la atribución dondequiera que los datos lo indiquen. Sin documento aún, el sobre informa estado pending, retry_after_seconds y retry_at con salida 0; el CLI no hace bucle, así que ejecute el comando nuevamente después de retry_at. Una organización registra como máximo 50 nuevas claves de feed al día, y rate_limited sigue después de eso. Las tarjetas derivan claves de feed de parámetros estáticos; no escriba claves feed o feed: usted mismo.
Fuentes de datos
Una fuente de datos lee una dirección externa según un horario y escribe el resultado en los datos de una tarjeta, de modo que la tarjeta se mantiene al día sin que nadie vuelva a publicar y las pantallas recuperan el documento cuando cambia. Los tipos son ics, sheets, csv, json, microsoft365, google_calendar, square, shopify, toast y momentus. Una fuente escribe una tarjeta, y una organización tiene hasta 200 en todos sus proyectos. Una sincronización que falla nunca escribe: la tarjeta conserva su último buen documento y el estado de la fuente muestra el error. Los ajustes de cada tipo, los códigos de estado y las reglas de privacidad están en Fuentes de datos.
Una opción predefinida es una fuente json lista para usar y probada para un servicio, como un canal de Slack, una bolsa de trabajo o un tablero de compilaciones: source presets las lista, source presets NAME muestra los campos y secretos de una opción predefinida, y source create --preset NAME crea la fuente.
Dé cada credencial como --secret NAME=@FILE, o NAME=- para la entrada estándar, para que no quede en el historial de su shell ni en la lista de procesos. Los secretos se almacenan sellados y solo se muestran como una pista enmascarada. Los nombres de los secretos son calendar_url.KEY para ics (uno por calendario), token para una dirección csv o json que lo necesite (password, client_secret, header.NAME y query.NAME sirven para las demás formas de iniciar sesión, descritas en Solicitudes, inicio de sesión y páginas), client_secret para microsoft365 y toast, service_account_key para google_calendar, access_token para square y shopify, api_key y api_secret para momentus, y client_secret con el ajuste client_id para una aplicación shopify instalada en la tienda.
--settings recibe todo el objeto de ajustes de la fuente como JSON, @FILE o -. --set KEY=VALUE establece un miembro de primer nivel y se puede repetir; el valor es JSON cuando se puede interpretar (days=14, calendars='[{"key":"lobby"}]') y texto en caso contrario (time_zone=America/Vancouver). Con ambos, los miembros de --set reemplazan los mismos miembros de --settings; source update con solo --set cambia esos miembros de los ajustes guardados. La opción --config de la CLI nombra su archivo de credenciales y no tiene nada que ver con las fuentes.
source list#
Lista las fuentes de datos del proyecto, las más recientes primero, con su estado.
source list [--after CURSOR]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--after CURSOR | string | no | primera página | El data.next_cursor de la página anterior. |
screenrig source listsource show#
Inspecciona una fuente: sus ajustes, sus secretos enmascarados, la última ejecución y el último error.
source show <source_id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<source_id> | string | sí | ninguno | La fuente (src_…). |
screenrig source show src_01EXAMPLESOURCE000000source presets#
Lista las opciones predefinidas de fuente listas para usar, o muestra una con sus campos, secretos y cómo conseguirlos.
source presets [<name>]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<name> | string | no | todas las opciones predefinidas | El nombre de una opción predefinida: palabras en minúsculas unidas por guiones, como slack-channel. |
screenrig source presets
screenrig source presets slack-channelLa lista muestra el título de cada opción predefinida, los tipos de tarjeta que rellena (el primero es aquel para el que está hecha) y su categoría. Un nombre muestra los campos que se definen (--set NAME=VALUE: texto con su patrón y un ejemplo, una elección, o una lista que admite un arreglo JSON), los secretos que se introducen (--secret NAME=@FILE) con el lugar donde el proveedor emite cada uno, con qué frecuencia se actualiza, cuánto tiempo conserva una tarjeta sus últimos datos, y de quién son los datos que lee y bajo qué condiciones. No se crea nada.
source create#
Crea una fuente. Se ejecuta en segundos y después según su horario. Cree primero la tarjeta y haga una vista previa con source test.
source create (--kind KIND | --preset NAME) --card CARD_ID --name NAME [--settings JSON|@FILE|-] [--set KEY=VALUE]...
[--connection-id ID] [--secret NAME=VALUE]... [--refresh DURATION] [--stale-after DURATION|none] [--disabled]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--kind KIND | string | sin --preset | ninguno | ics, sheets, csv, json, microsoft365, google_calendar, square, shopify, momentus o toast. |
--preset NAME | string | sin --kind | ninguno | Crea la fuente a partir de una opción predefinida lista para usar y probada (source presets las lista): --set y --settings indican entonces los campos de la opción predefinida y --secret sus credenciales. No con --kind. |
--card CARD_ID | string | sí | ninguno | La tarjeta (crd_…) que escribe la fuente. Una tarjeta tiene una fuente; source_target_taken responde a una segunda. |
--name NAME | string | sí | ninguno | De 1 a 80 caracteres. |
--settings SETTINGS | string | no | {} | Un ajuste de nivel superior. Repetible. Con --preset, un campo de la opción predefinida: el texto tal como se escribe, salvo que sea un arreglo u objeto JSON (los elementos de un campo de lista). |
--connection-id ID | string | no | ninguno | microsoft365 y google_calendar: leen a través de una conexión del proyecto (pcn_…, connection list) en lugar de un tenant, client_id y un secreto propios de la fuente. Define el ajuste connection_id. |
--set KEY=VALUE | string | no | ninguno | Un ajuste de primer nivel. Repetible. |
--secret NAME=VALUE | string | no | ninguno | Una credencial por nombre: NAME=@FILE, NAME=- (como máximo una opción lee stdin) o NAME=VALUE. Repetible. Con --preset, las credenciales de la opción predefinida. |
--refresh DURATION | string | no | según el tipo | Con qué frecuencia sincronizar, de 30s a 24h. El tipo fija el valor predeterminado y el intervalo más corto: ics sincroniza cada 5 minutos y como mínimo cada minuto, microsoft365 y google_calendar cada 2 minutos, momentus cada minuto y como mínimo cada 30 segundos. Una opción predefinida fija el suyo. |
--stale-after DURATION | string | no | según el tipo | Cuánto tiempo conserva la tarjeta los últimos datos buenos cuando la fuente no puede actualizarse, de 1m a 7d, como mínimo el doble de --refresh; none los conserva hasta la próxima actualización. Después, los datos caducan en todas las pantallas. momentus es 30m por defecto. |
--disabled | boolean | no | apagado | Crea la fuente detenida; no se recupera nada hasta source update --enable. |
screenrig source create --kind ics --card crd_01EXAMPLECARD000000000 --name "Lobby calendar" --set calendars='[{"key":"lobby"}]' --set time_zone=America/Vancouver --secret calendar_url.lobby=@lobby.url
screenrig source create --kind sheets --card crd_01EXAMPLEMENU0000000000 --name "Cafe menu" --settings @menu-sheet.json
screenrig source create --kind json --card crd_01EXAMPLEKPI00000000000 --name "Daily numbers" --settings @kpi-api.json --secret token=@api.token
screenrig source create --kind square --card crd_01EXAMPLEMENU0000000000 --name "Counter menu" --secret access_token=@square.token
screenrig source create --kind microsoft365 --card crd_01EXAMPLEROOMS0000000000 --name "Meeting rooms" --settings @rooms.json --connection-id pcn_01EXAMPLECONNECTION0000
screenrig source create --preset slack-channel --card crd_01EXAMPLEWALL00000000000 --name "Team wall" --set channel=C0123456789 --secret token=@slack.tokensource update#
Cambia una fuente. Un cambio distinto de cambiar el nombre restablece su contador de fallos y la ejecuta de nuevo.
source update <source_id> [--name NAME] [--card CARD_ID] [--settings JSON|@FILE|-] [--set KEY=VALUE]...
[--connection-id ID] [--secret NAME=VALUE]... [--unset-secret NAME]... [--refresh DURATION]
[--stale-after DURATION|none] [--enable | --disable] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<source_id> | string | sí | ninguno | La fuente (src_…). |
--name NAME | string | no | sin cambios | Cambia el nombre de la fuente. |
--card CARD_ID | string | no | sin cambios | Escribir otra tarjeta. |
--settings SETTINGS | string | no | sin cambios | Cambia un ajuste de nivel superior de los guardados. Repetible. Para una fuente creada a partir de una opción predefinida, un campo de la opción predefinida; el valor null elimina un campo opcional. |
--connection-id ID | string | no | sin cambios | Como en source create. Para que una fuente deje de usar sus propias credenciales se requiere --settings sin tenant ni client_id, y --unset-secret client_secret. |
--set KEY=VALUE | string | no | ninguno | Cambia un ajuste de primer nivel de los guardados. Repetible. |
--secret NAME=VALUE | string | no | ninguno | Establece o reemplaza un secreto. Repetible. Un secreto que no envía conserva su valor, salvo que el cambio apunte la fuente a un lugar que ese secreto no cubre (otro origen, tienda, entorno o inquilino): entonces source_secret_required lo vuelve a pedir. |
--unset-secret NAME | string | no | ninguno | Quita un secreto. Repetible. |
--refresh DURATION | string | no | sin cambios | De 30s a 24h; se aplica el intervalo más corto del tipo. |
--stale-after DURATION | string | no | sin cambios | Como en source create; none quita el periodo. |
--enable, --disable | boolean | no | sin cambios | Reanuda el horario, o lo detiene; la tarjeta conserva su último documento. Como máximo una de las dos. |
--expect-rev REVISION | integer | no | la revisión leída | Rechaza el cambio salvo que la fuente esté en esta revisión. --set protege la revisión que leyó, salvo que indique otra. |
Se requiere al menos un cambio.
screenrig source update src_01EXAMPLESOURCE000000 --set days=14
screenrig source update src_01EXAMPLESOURCE000000 --secret calendar_url.lobby=@new.url --refresh 10m
screenrig source update src_01EXAMPLESOURCE000000 --disable
screenrig source update src_01EXAMPLEPRESET0000000 --set channel=C0123456789 --secret token=@new.tokensource test#
Muestra una vista previa de una fuente sin guardar ni escribir nada: obtiene la dirección, da forma a la respuesta para la tarjeta y la comprueba contra la tarjeta. El sobre lleva el documento, valid, la ruta y el motivo cuando la tarjeta lo rechaza, advertencias y recuentos. Pase un <source_id> guardado para probarla con las demás opciones como sustituciones, o --kind (o --preset) y --card para probar una que no está guardada. Un fallo de obtención o de conformado es source_test_failed con el motivo. Como máximo 30 vistas previas por minuto por organización.
source test [<source_id>] [--kind KIND | --preset NAME] [--card CARD_ID] [--settings JSON|@FILE|-] [--set KEY=VALUE]...
[--connection-id ID] [--secret NAME=VALUE]...| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<source_id> | string | no | ninguno | Una fuente guardada para probar. |
--kind KIND | string | sin <source_id> ni --preset | ninguno | Igual que para source create. |
--preset NAME | string | no | ninguno | Muestra una vista previa de una fuente creada a partir de esta opción predefinida, con --set y --settings como sus campos y --secret como sus credenciales, en lugar de --kind. |
--card CARD_ID | string | sin <source_id> | ninguno | La tarjeta que se rellena. |
--settings SETTINGS | string | no | los ajustes guardados | Los ajustes del tipo: JSON, @FILE o - para la entrada estándar. |
--connection-id ID | string | no | ninguno | Igual que para source create. |
--set KEY=VALUE | string | no | ninguno | Un ajuste de primer nivel. Repetible. |
--secret NAME=VALUE | string | no | los secretos guardados | Una credencial para probar. Repetible. |
screenrig source test --kind ics --card crd_01EXAMPLECARD000000000 --set calendars='[{"key":"lobby"}]' --secret calendar_url.lobby=@lobby.url
screenrig source test src_01EXAMPLESOURCE000000
screenrig source test --preset slack-channel --card crd_01EXAMPLEWALL00000000000 --set channel=C0123456789 --secret token=@slack.tokensource refresh#
Sincroniza una fuente ahora y muestra el resultado. Se ejecuta en línea hasta 60 segundos, restablece el contador de fallos y lee la dirección completa. Una sincronización fallida nunca cambia la tarjeta. source_busy (código de salida 5) responde mientras se ejecuta una sincronización programada. Como máximo 6 por minuto y por fuente.
source refresh <source_id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<source_id> | string | sí | ninguno | La fuente (src_…). |
screenrig source refresh src_01EXAMPLESOURCE000000source rooms#
Comprueba cómo se asignan las pantallas a las salas de una fuente de sistema de reservas (momentus). Lee las salas de la última actualización correcta de la fuente y las pantallas del proyecto, y no consulta nada. Lista las salas que ninguna pantalla muestra y cada pantalla que tiene un valor de sala o cuya lista de reproducción lee la clave de sala de la fuente, cada una mapped, missing (la lista lee el campo y la pantalla no tiene ninguno) o unknown (el valor no nombra ninguna sala, con la sala que probablemente quiso decir). Corrige una pantalla con screen update scr_ID --field room=ROOM_KEY.
source rooms <source_id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<source_id> | string | sí | ninguno | Una fuente (src_…) que lee las salas de un sistema de reservas. |
screenrig source rooms src_01EXAMPLESOURCE000000source delete#
Elimina una fuente. La tarjeta conserva el último documento que escribió la fuente.
source delete <source_id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<source_id> | string | sí | ninguno | La fuente (src_…). |
--expect-rev REVISION | integer | no | ninguno | Rechaza la eliminación salvo que la fuente esté en esta revisión. |
screenrig source delete src_01EXAMPLESOURCE000000Conexiones
Una conexión es el acceso guardado del proyecto a Microsoft o Google para el trabajo que se ejecuta sin nadie con la sesión iniciada. Una fuente de datos microsoft365 o google_calendar (source create --connection-id), una conexión de Power BI (bi connection create powerbi --connection-id) y una cuenta de sincronización de medios de SharePoint (media sync account add microsoft365 --connection-id) leen a través de una en lugar de llevar cada una un tenant, un ID de cliente y un secreto. Un ID de conexión empieza por pcn_, y una organización tiene hasta 50 conexiones en todos sus proyectos. Los modos, estados y pasos de aprobación están en Conectar Microsoft y Google.
El modo own_app contiene su propia aplicación: para Microsoft, un registro de aplicación de Microsoft Entra (--tenant-id, --client-id y el valor de un secreto de cliente); para Google, la clave JSON de una cuenta de servicio. El modo screenrig_app usa la propia aplicación de screenRIG y no necesita ningún secreto: create imprime un enlace de consentimiento de un solo uso (data.consent_url, que caduca en data.consent_expires_at) para la persona que lo completa, un administrador de Microsoft 365 que da su consentimiento para el tenant, o el titular de una cuenta de Google que concede acceso de solo lectura al calendario. Envíe el enlace solo a esa persona y lea después status y last_error con connection show. Una conexión de Power BI solo acepta una conexión own_app.
Indique un secreto de cliente con --secret-file FILE y una clave de Google con --service-account-key-file FILE, o - para stdin, nunca como argumento. Leer requiere acceso Read, y cualquier cambio requiere acceso Manage.
connection list#
Lista las conexiones de este proyecto con su estado.
connection listSin parámetros.
screenrig connection listconnection show#
Inspecciona una conexión: su estado, el último error y la última prueba.
connection show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (pcn_…). |
screenrig connection show pcn_01EXAMPLECONNECTION0000connection create microsoft#
Agrega una conexión de Microsoft 365: su propia aplicación de Entra, o la aplicación de screenRIG con un enlace de consentimiento.
connection create microsoft --mode own_app|screenrig_app [--name NAME]
[--tenant-id ID --client-id ID --secret-file FILE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--mode MODE | string | sí | ninguno | own_app: su propio registro de aplicación de Microsoft Entra con un secreto de cliente. screenrig_app: la aplicación de screenRIG, a la que un administrador de Microsoft 365 da su consentimiento mediante el enlace de un solo uso que imprime este comando. |
--name NAME | string | no | Microsoft 365 | De 1 a 80 caracteres. |
--tenant-id ID | string | con own_app | ninguno | Su Directory (tenant) ID de Microsoft Entra, o su dominio principal, como contoso.onmicrosoft.com. Junto con --client-id y --secret-file. |
--client-id ID | string | con own_app | ninguno | El Application (client) ID del registro de la aplicación. |
--secret-file FILE | string | con own_app | ninguno | Lee el valor del secreto de cliente desde este archivo, o - para stdin (nunca un argumento); el archivo contiene solo el valor. |
screenrig connection create microsoft --mode own_app --tenant-id contoso.onmicrosoft.com --client-id 0b1d2f3a-4c5e-4f60-8a7b-9c0d1e2f3a4b --secret-file secret.txt
screenrig connection create microsoft --mode screenrig_app --name "Contoso rooms"El modo screenrig_app no admite ninguno de --tenant-id, --client-id y --secret-file: imprime el enlace de consentimiento (data.consent_url) para el administrador de Microsoft 365, que da su consentimiento a la aplicación de screenRIG para el tenant. El registro de la aplicación enumera Calendars.Read para los calendarios de salas de reuniones, Sites.Selected o Files.Read.All para la sincronización de medios de SharePoint y, para Power BI, los ajustes de tenant y la pertenencia al área de trabajo en lugar de permisos de Graph; connection test informa de qué permisos lleva el token. Un servidor sin la aplicación de screenRIG responde connection_app_not_configured: el modo own_app sigue funcionando.
connection create google#
Agrega una conexión de Google: la clave de su propia cuenta de servicio, o la aplicación de screenRIG con un enlace de inicio de sesión.
connection create google --mode own_app|screenrig_app [--name NAME]
[--service-account-key-file FILE]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--mode MODE | string | sí | ninguno | own_app: la clave de su propia cuenta de servicio. screenrig_app: la aplicación de screenRIG, en la que el titular de una cuenta de Google inicia sesión y concede acceso de solo lectura al calendario mediante el enlace de un solo uso que imprime este comando. |
--name NAME | string | no | Google Calendar | De 1 a 80 caracteres. |
--service-account-key-file FILE | string | con own_app | ninguno | Lee el archivo de clave JSON de la cuenta de servicio desde este archivo, o - para stdin (nunca un argumento). |
screenrig connection create google --mode own_app --service-account-key-file key.json
screenrig connection create google --mode screenrig_app --name "Venue calendars"En modo own_app, comparta cada calendario de sala con la dirección de la cuenta de servicio, o indique un subject en la fuente (delegación en todo el dominio). El modo screenrig_app no recibe ninguna clave e imprime el enlace de inicio de sesión (data.consent_url) para el titular de la cuenta de Google: la cuenta debe ver todos los calendarios de sala que lista una fuente, y esa fuente no puede nombrar un subject. Un servidor sin la aplicación de screenRIG responde connection_app_not_configured: el modo own_app sigue funcionando.
connection update#
Cambia el nombre de una conexión o, en modo own_app, su tenant, aplicación o secreto.
connection update <id> [--name NAME] [--tenant-id ID] [--client-id ID]
[--secret-file FILE] [--service-account-key-file FILE] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (pcn_…). |
--name NAME | string | no | sin cambios | Cambia el nombre de la conexión. |
--tenant-id ID | string | no | sin cambios | Microsoft own_app: el Directory (tenant) ID o el dominio principal. |
--client-id ID | string | no | sin cambios | Microsoft own_app: el Application (client) ID. |
--secret-file FILE | string | no | sin cambios | Microsoft own_app: lee el valor del secreto de cliente desde este archivo, o - para stdin; sustituye el secreto almacenado. |
--service-account-key-file FILE | string | no | sin cambios | Google own_app: lee la clave JSON de la cuenta de servicio desde este archivo, o - para stdin; sustituye la clave almacenada. |
--expect-rev REVISION | integer | no | ninguno | Rechaza el cambio salvo que la conexión esté en esta revisión (revision_conflict, salida 6). |
screenrig connection update pcn_01EXAMPLECONNECTION0000 --secret-file new-secret.txt
screenrig connection update pcn_01EXAMPLECONNECTION0000 --name "Contoso rooms" --expect-rev 2Se requiere al menos un cambio. Un cambio de las credenciales devuelve la conexión a ready, borra su último error y su última prueba, y retira todos los tokens emitidos para las anteriores: pruébela de nuevo. Una conexión screenrig_app solo puede cambiar de nombre: connection connect crea un nuevo enlace de consentimiento para cambiar quién dio su consentimiento. Un secreto omitido se conserva.
connection test#
Inicia sesión con una conexión y comprueba qué permiten sus credenciales.
connection test <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (pcn_…). |
screenrig connection test pcn_01EXAMPLECONNECTION0000Para Microsoft informa de credentials (un token de aplicación para el tenant) y permissions (cuáles de Calendars.Read, Sites.Selected, Files.Read.All, Sites.Read.All y Place.Read.All lleva el token; si no lleva ninguno, falla, y Sites.Selected por sí solo es una advertencia porque cada sitio necesita su propia concesión). Para Google informa de credentials, que nombra la cuenta a la que deben ser visibles los calendarios. Un rechazo pasa la conexión a error con last_error; un éxito la devuelve a ready. La prueba no juzga el uso compartido de un calendario, una política de acceso a buzones ni una concesión de sitio. Como máximo 30 por minuto por organización.
connection connect#
Genera un nuevo enlace de consentimiento de un solo uso para una conexión screenrig_app.
connection connect <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (pcn_…). |
screenrig connection connect pcn_01EXAMPLECONNECTION0000data.consent_url es el enlace para la persona que completa el consentimiento: el administrador de Microsoft 365 o el titular de la cuenta de Google. Sustituye a cualquier enlace anterior. Una conexión que funciona se queda como está hasta que se completa el nuevo consentimiento, así que esto también renueva una que pasó a error (consentimiento retirado, acceso revocado) o la mueve a otro tenant o cuenta. Una conexión en modo own_app no tiene paso de consentimiento. Como máximo 20 por minuto por organización.
connection delete#
Elimina una conexión por la que no lee nada.
connection delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (pcn_…). |
--expect-rev REVISION | integer | no | ninguno | Rechaza la eliminación salvo que la conexión esté en esta revisión (revision_conflict, salida 6). |
screenrig connection delete pcn_01EXAMPLECONNECTION0000
screenrig connection delete pcn_01EXAMPLECONNECTION0000 --expect-rev 2Mientras una fuente de datos, una conexión de Power BI o una cuenta de sincronización de medios lea a través de la conexión, la respuesta es resource_conflict (salida 5), que los nombra. Eliminar no pone fin al acceso del lado del proveedor: un tenant de Microsoft 365 conserva la aplicación de screenRIG hasta que su administrador la quite, y una cuenta de Google conserva su concesión hasta que su titular la revoque.
Conexiones BI
Una conexión BI es el acceso del proyecto a un sistema propio que muestra paneles: para Grafana, su dirección y un token de cuenta de servicio; para Power BI, una aplicación de Microsoft Entra (entidad de servicio) y su secreto de cliente; para Tableau, una aplicación conectada y un usuario; y para una página web, la cuenta de servicio de un sitio que muestra un panel tras un inicio de sesión, o las cookies de un navegador con la sesión iniciada. Un ID de conexión empieza por bic_. Los secretos se sellan en el servidor y nunca se vuelven a mostrar: una lectura muestra secret {set, hint}. Las conexiones pertenecen a un solo proyecto. bi connection list, show y browse requieren acceso Read, y el resto de comandos requieren acceso Manage.
Indique un secreto en un archivo: --token-file para Grafana, --secret-file para Power BI y Tableau, --password-file, --totp-file y --cookies-file para una página web. Cada una admite - para stdin, nunca un argumento, y como máximo una opción de un comando lee stdin.
Una vista reproduce un panel, informe o página de una conexión mediante una primitiva iframe que muestra su embed_url; bi view create --connection-id ID crea una. Mostrar un panel tras un inicio de sesión recorre una conexión web, y la referencia de la API cubre todos los tipos.
bi connection create grafana#
Agrega una conexión de Grafana: su dirección y un token de cuenta de servicio.
bi connection create grafana --url URL --token-file FILE [--name NAME] [--org-id N]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--url URL | string | sí | ninguno | La dirección de Grafana en un host público, con cualquier prefijo de ruta: https://grafana.example.com o https://example.com/grafana. Una dirección privada, de loopback o reservada da invalid_request (salida 8), y Grafana debe responder sin redirigir. |
--token-file FILE | string | sí | ninguno | Lee el token de la cuenta de servicio desde este archivo, o - para stdin (nunca un argumento); el archivo contiene solo el token. |
--name NAME | string | no | el nombre del host | De 1 a 80 caracteres. |
--org-id N | integer | no | 1 | La organización de Grafana a la que pertenece el token: un número entero desde 1. |
screenrig bi connection create grafana --url https://grafana.example.com --token-file token.txt
screenrig bi connection create grafana --url https://example.com/grafana --token-file - --name "Ops Grafana" --org-id 2En Grafana, instale el plugin Grafana Image Renderer o el servicio de renderizado remoto (dibuja los paneles como imágenes; sin él no se renderiza nada), cree después una cuenta de servicio con el rol Viewer y agregue un token. Ejecute bi connection test a continuación.
bi connection create tableau#
Agrega una conexión de Tableau: una aplicación conectada (direct trust), el usuario con el que se muestran las vistas de las pantallas y el valor secreto de la aplicación.
bi connection create tableau --url URL --client-id ID --secret-id ID --username USER
--secret-file FILE [--site SITE] [--name NAME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--url URL | string | sí | ninguno | La dirección https de Tableau Server, o de su pod de Tableau Cloud, como https://10ay.online.tableau.com (el pod, no online.tableau.com). |
--site SITE | string | no | Sitio predeterminado de Tableau Server | La URL de contenido del sitio, la parte posterior a /site/ o /t/ en la dirección de una vista. |
--client-id ID | string | sí | ninguno | El ID de cliente de la aplicación conectada. |
--secret-id ID | string | sí | ninguno | El ID de secreto de un secreto generado para la aplicación conectada. |
--username USER | string | sí | ninguno | El usuario de Tableau con el que se muestran las vistas de las pantallas (una dirección de correo electrónico en Tableau Cloud). |
--secret-file FILE | string | sí | ninguno | Lee el valor del secreto desde este archivo, o - para stdin (nunca un argumento); el archivo contiene solo el valor del secreto, no el ID de secreto. |
--name NAME | string | no | el nombre del host | De 1 a 80 caracteres. |
screenrig bi connection create tableau --url https://10ay.online.tableau.com --site lobby --client-id 11111111-2222-3333-4444-555555555555 --secret-id 66666666-7777-8888-9999-000000000000 --username screens@example.com --secret-file secret.txtConfigúrelo una vez en Tableau: en Settings, Connected Apps, cree una aplicación conectada Direct trust, copie su ID de cliente, genere un secreto y copie el ID de secreto y el valor secreto, y habilite la aplicación y el secreto. Elija o cree el usuario de Tableau con el que se muestran las pantallas y dele acceso solo a las vistas que muestran las pantallas: quien tenga el ticket de una pantalla puede incrustar cualquier vista que ese usuario pueda ver. Después ejecute bi connection show ID e introduzca el host de su embed_origin en la lista de dominios permitidos de la aplicación conectada. Requiere Tableau Cloud o Tableau Server 2023.3 o posterior; las pantallas deben llegar al host de Tableau, y su navegador debe aceptar cookies de terceros de él. Ejecute bi connection test a continuación y luego bi connection browse para encontrar una vista.
bi connection create powerbi#
Agrega una conexión de Power BI: una aplicación de Microsoft Entra (entidad de servicio) y su secreto de cliente, o una conexión de Microsoft de este proyecto.
bi connection create powerbi
(--tenant-id ID --client-id ID --secret-file FILE | --connection-id ID) [--name NAME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--tenant-id ID | string | sin --connection-id | ninguno | Su Directory (tenant) ID de Microsoft Entra, o su dominio, como contoso.onmicrosoft.com; no common, organizations ni consumers. Junto con --client-id y --secret-file. |
--client-id ID | string | sin --connection-id | ninguno | El Application (client) ID del registro de la aplicación. |
--secret-file FILE | string | sin --connection-id | ninguno | Lee el valor del secreto de cliente desde este archivo, o - para stdin (nunca un argumento); el archivo contiene solo el valor del secreto, no el ID del secreto. |
--connection-id ID | string | sin --tenant-id | ninguno | Inicia sesión mediante una conexión de Microsoft (pcn_…) de este proyecto en modo own_app, en lugar de --tenant-id, --client-id y --secret-file. Se rechaza una conexión screenrig_app. No con ellas. |
--name NAME | string | no | Power BI | De 1 a 80 caracteres. |
screenrig bi connection create powerbi --tenant-id 11111111-2222-3333-4444-555555555555 --client-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee --secret-file secret.txt
screenrig bi connection create powerbi --connection-id pcn_01EXAMPLECONNECTION0000 --name "Contoso Power BI"Configúrelo una vez. En Microsoft Entra, cree un registro de aplicación (un solo tenant, sin URI de redirección, sin permisos de API) y un secreto de cliente. Un administrador de Power BI activa, en el portal de administración, en Tenant settings, Developer settings, Embed content in apps y Service principals can call Fabric public APIs, para toda la organización o para un grupo de seguridad que contenga la aplicación. Agregue la aplicación a cada área de trabajo que muestre con el rol Miembro o Administrador; Miembro es el acceso mínimo. Para la inserción en producción, el área de trabajo debe estar en una capacidad Fabric (F), Power BI Embedded (A) o Premium (P/EM). Solo nube comercial. Ejecute bi connection test a continuación y luego bi connection browse para encontrar un área de trabajo y un informe.
bi connection create web#
Agrega una conexión web: una cuenta de servicio de un sitio que muestra un panel tras un inicio de sesión, o las cookies de un navegador con la sesión iniciada.
bi connection create web --login-mode auto|steps|none [--login-url URL] [--username USER]
[--password-file FILE] [--totp-file FILE] [--steps FILE] [--cookies-file FILE] [--name NAME]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--login-mode MODE | string | sí | ninguno | auto rellena el formulario de --login-url con --username y la contraseña. steps ejecuta el script de --steps. none no inicia sesión en ningún sitio, así que las páginas se muestran con el conjunto de cookies de --cookies-file y no admite ninguna de las opciones --login-url, --username, --password-file, --totp-file ni --steps. |
--login-url URL | string | con auto o steps | ninguno | La dirección https de la página de inicio de sesión del sitio, en un host público. La contraseña se escribe solo allí y en los pasos goto del script, nunca en la dirección de una vista. |
--username USER | string | con auto | ninguno | El nombre de usuario de la cuenta de servicio. |
--password-file FILE | string | con auto | ninguno | Lee la contraseña de la cuenta de servicio desde este archivo, o - para stdin (nunca un argumento): se permiten espacios y se descarta un salto de línea final. |
--totp-file FILE | string | no | ninguno | Lee la clave base32 que muestra el sitio para la aplicación de autenticación de la cuenta (de 16 a 128 caracteres), o su dirección otpauth://totp, desde este archivo o -: el servidor calcula los códigos. |
--steps FILE | string | con steps | ninguno | El script de inicio de sesión, un arreglo JSON de como máximo 30 pasos, desde un archivo o -. Acciones: goto (url), fill (selector, value), click y wait_for (selector), press (value, como Enter, selector opcional) y wait_ms (ms). Un valor puede contener {{username}}, {{password}} y {{otp}}, nunca el propio secreto. No con auto. |
--cookies-file FILE | string | no | ninguno | Un conjunto de cookies exportado de un navegador con la sesión iniciada: un arreglo JSON de cookies (la exportación de una extensión de cookies) o un objeto con un arreglo cookies (el storage state de Playwright), desde un archivo o -; como máximo 100. Solo se envían name, value, domain, path, expires, httpOnly, secure y sameSite. |
--name NAME | string | no | el host de inicio de sesión | De 1 a 80 caracteres. |
screenrig bi connection create web --login-mode auto --login-url https://login.example.com/signin --username screens@example.com --password-file password.txt --name "Ops dashboard"
screenrig bi connection create web --login-mode steps --login-url https://login.example.com/signin --username screens@example.com --password-file password.txt --steps steps.json
screenrig bi connection create web --login-mode none --cookies-file cookies.json --name "Signed-in jar"La contraseña, la clave y las cookies se sellan y nunca se vuelven a mostrar: data.secret y data.totp_secret indican si están definidas, y data.session indica en qué punto está el inicio de sesión (idle, active, login_needed, paused, stopped o expired). Use una cuenta de servicio de solo lectura. Un inicio de sesión rechazado espera 5 minutos, luego 15, 60 y 120, y el quinto seguido detiene la conexión hasta que cambien sus credenciales o sus ajustes de inicio de sesión. Un sitio que aprueba inicios de sesión en un teléfono, comprueba dispositivos o muestra un CAPTCHA no se puede automatizar: use un conjunto de cookies. Un servidor sin el renderizador de páginas responde bi_web_unavailable (salida 5). Ejecute bi connection test a continuación.
bi connection list#
Lista las conexiones BI de este proyecto con su tipo, el secreto enmascarado y la última prueba.
bi connection listSin parámetros.
screenrig bi connection listdata.items contiene todas las conexiones del proyecto; no se devuelve ningún secreto.
bi connection show#
Inspecciona una conexión y su última prueba.
bi connection show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (bic_…). |
screenrig bi connection show bic_01EXAMPLECONNECTION0000La respuesta lleva kind, config (url y org_id para Grafana; tenant_id y client_id para Power BI; url, site, client_id, secret_id y username para Tableau), secret {set, hint}, embed_origin (el host de inserción del proyecto, que nombra la lista de dominios permitidos de una aplicación conectada) y last_test.
bi connection update#
Cambia el nombre, la dirección, la organización, el tenant, la aplicación, el sitio, el usuario o el secreto de una conexión o, en una conexión web, su inicio de sesión y sus cookies.
bi connection update <id> [--name NAME] [--url URL] [--org-id N] [--tenant-id ID] [--client-id ID]
[--site SITE | --default-site] [--secret-id ID] [--username USER]
[--token-file FILE | --secret-file FILE | --password-file FILE | --clear-password]
[--login-mode auto|steps|none] [--login-url URL] [--totp-file FILE | --clear-totp]
[--steps FILE] [--cookies-file FILE | --clear-cookies] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (bic_…). |
--name NAME | string | no | sin cambios | Cambia el nombre de la conexión. |
--url URL | string | no | sin cambios | La nueva dirección de Grafana, o del servidor o pod de Tableau. |
--org-id N | integer | no | sin cambios | La organización de Grafana a la que pertenece el token. |
--tenant-id ID | string | no | sin cambios | El tenant de Microsoft Entra de la conexión de Power BI. |
--client-id ID | string | no | sin cambios | El Application (client) ID de la conexión de Power BI, o el ID de cliente de la aplicación conectada de Tableau. |
--site SITE | string | no | sin cambios | La URL de contenido del sitio de la conexión de Tableau. No con --default-site. |
--default-site | boolean | no | apagado | Tableau Server: inicia sesión en el sitio predeterminado. No con --site. |
--secret-id ID | string | no | sin cambios | El ID de secreto de la aplicación conectada de Tableau. |
--username USER | string | no | sin cambios | El usuario de Tableau con el que se muestran las vistas de las pantallas, o la cuenta de servicio de la conexión web. |
--token-file FILE | string | no | sin cambios | Grafana: lee el token de la cuenta de servicio desde este archivo, o - para stdin; sustituye el token almacenado. Como máximo una de --token-file, --secret-file, --password-file y --clear-password. |
--secret-file FILE | string | no | sin cambios | Power BI o Tableau: lee el valor del secreto desde este archivo, o - para stdin; sustituye el secreto almacenado. |
--login-mode MODE | string | no | sin cambios | Web: cómo inicia sesión, auto, steps o none. |
--login-url URL | string | no | sin cambios | Web: la dirección https de la página de inicio de sesión del sitio. Un origen nuevo requiere --password-file en el mismo comando, de modo que la contraseña almacenada nunca se envía a una página a la que usted no se la dio. |
--password-file FILE | string | no | sin cambios | Web: lee la contraseña de la cuenta de servicio desde este archivo, o - para stdin; sustituye la contraseña almacenada. |
--clear-password | boolean | no | apagado | Web: elimina la contraseña almacenada. |
--totp-file FILE | string | no | sin cambios | Web: lee la clave del autenticador desde este archivo, o - para stdin; sustituye la clave almacenada. No con --clear-totp. |
--clear-totp | boolean | no | apagado | Web: elimina la clave del autenticador almacenada. No con --totp-file. |
--steps FILE | string | no | sin cambios | Web: sustituye el script de inicio de sesión, un arreglo JSON de como máximo 30 pasos, desde un archivo o -. |
--cookies-file FILE | string | no | sin cambios | Web: sustituye el conjunto de cookies por uno exportado de un navegador con la sesión iniciada, desde un archivo o - (los formatos que admite bi connection create web). No con --clear-cookies. |
--clear-cookies | boolean | no | apagado | Web: elimina el conjunto de cookies almacenado. No con --cookies-file. |
--expect-rev REVISION | integer | no | ninguno | Rechaza el cambio salvo que la conexión esté en esta revisión (revision_conflict, salida 6). |
screenrig bi connection update bic_01EXAMPLECONNECTION0000 --token-file new-token.txt
screenrig bi connection update bic_01EXAMPLECONNECTION0000 --password-file new-password.txt
screenrig bi connection update bic_01EXAMPLECONNECTION0000 --clear-totp --clear-cookies
screenrig bi connection update bic_01EXAMPLECONNECTION0000 --url https://grafana.example.com --token-file new-token.txt --name "Ops Grafana" --expect-rev 2Se requiere al menos un cambio, y un secreto omitido se conserva. Un cambio de dirección a otro host, esquema o puerto requiere --token-file (Grafana) o --secret-file (Tableau) en el mismo comando: el secreto almacenado solo se envía a la dirección para la que se guardó. Un cambio de dirección, organización, tenant, aplicación, sitio, usuario o secreto borra last_test y retira todos los renderizados en caché de las vistas de la conexión: pruébela de nuevo. Un cambio de credenciales o de ajustes de inicio de sesión reactiva una sesión web detenida.
bi connection test#
Comprueba las credenciales: el token y el Image Renderer de Grafana, la aplicación de Power BI y sus áreas de trabajo, o el inicio de sesión de Tableau.
bi connection test <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (bic_…). |
screenrig bi connection test bic_01EXAMPLECONNECTION0000Grafana: token (Grafana lo acepta) y image_renderer (el plugin figura en la lista; sin él, Grafana solo avisa, porque un servicio de renderizado remoto no aparece como plugin). Power BI: token (Microsoft Entra emitió uno para la aplicación) y workspaces (las áreas de trabajo que la aplicación puede ver; si no ve ninguna, falla, y un rechazo nombra los ajustes de tenant para desarrolladores y el rol Miembro o Administrador de la aplicación en el área de trabajo). Tableau: signin como el usuario de la conexión con un token de lectura de contenido, seguido de un cierre de sesión. Un rechazo es una comprobación fallida que lleva la respuesta propia del proveedor, y el resultado se guarda como last_test. La prueba no juzga la lista de dominios permitidos de Tableau, la capacidad, la seguridad a nivel de fila ni los permisos de un panel: bi view test comprueba una vista de verdad.
bi connection browse#
Lista lo que puede mostrar una conexión: dashboards y paneles de Grafana, áreas de trabajo e informes de Power BI, o vistas de Tableau.
bi connection browse <id> [--query TEXT] [--dashboard UID] [--workspace ID]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (bic_…). |
--query TEXT | string | no | ninguno | Solo los paneles, áreas de trabajo, informes o vistas cuyo nombre coincide. |
--dashboard UID | string | no | ninguno | Grafana: lista en su lugar los paneles de este dashboard. |
--workspace ID | string | no | ninguno | Power BI: lista en su lugar los informes de esta área de trabajo. |
screenrig bi connection browse bic_01EXAMPLECONNECTION0000 --query lobby
screenrig bi connection browse bic_01EXAMPLECONNECTION0000 --dashboard abc123
screenrig bi connection browse bic_01EXAMPLECONNECTION0000 --workspace f089354e-8366-4e18-aea3-4cb4a3a50b48 --query salesdata.items lista, para Grafana, uid, title, folder y tags de cada dashboard que el token puede mostrar o, con --dashboard, id, title y type de sus paneles (las filas se aplanan, así que se lista un panel dentro de una fila contraída); para Power BI, id y name de cada área de trabajo que la aplicación puede ver o, con --workspace, id, name y embed_url de sus informes; para Tableau, path, como Workbook/View, y name de cada vista que el usuario de la conexión puede ver. Use estos valores con bi view create.
bi connection delete#
Elimina una conexión que ninguna vista usa.
bi connection delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La conexión (bic_…). |
--expect-rev REVISION | integer | no | ninguno | Rechaza la eliminación salvo que la conexión esté en esta revisión (revision_conflict, salida 6). |
screenrig bi connection delete bic_01EXAMPLECONNECTION0000Mientras haya vistas que la usen, la respuesta es resource_conflict (salida 5), que las nombra: elimine primero esas vistas.
Vistas BI
Una vista es un dashboard o panel de una conexión de Grafana, un informe de un área de trabajo de Power BI, una vista de un sitio de Tableau, una página de una conexión web, o un enlace público que no necesita conexión: un dashboard público de Grafana, un enlace Publish to web de Power BI o una viz de Tableau Public. Un ID de vista empieza por biv_, y una vista se reproduce solo en pantallas de su propio proyecto.
Ponga el embed_url de la vista en una primitiva iframe con content_fit fill y publique como de costumbre: la lista de reproducción no contiene ninguna credencial. Las vistas de Grafana y web se dibujan en el servidor como una imagen cada --refresh y las comparten todas las pantallas del mismo tamaño, así que diez pantallas de un vestíbulo generan un solo renderizado y la pantalla nunca se comunica con el sistema; la última imagen válida permanece en pantalla mientras falla una captura. Un informe de Power BI y una vista de Tableau se insertan con un token de solo visualización que el servidor genera y renueva, y la pantalla nunca conserva el secreto. Una imagen se dibuja solo mientras el manifiesto de una pantalla nombra la vista.
Leer requiere acceso Read, y cualquier cambio requiere acceso Manage. Cada opción de destino pertenece a un tipo de conexión, y bi connection browse ID lista los valores que se pueden usar.
bi view create#
Agrega una vista de un dashboard, panel, informe o vista de Tableau de una conexión, o de un enlace público.
bi view create (--connection-id ID (--url URL | --dashboard UID | --workspace ID --report ID | --view WORKBOOK/VIEW)
| --public-url URL) [--name NAME] [--refresh DURATION] [--fit contain|cover|fill] [--rotate DURATION]
[--panel ID] [--from TIME] [--to TIME] [--var NAME=VALUE]... [--theme dark|light] [--timezone ZONE]
[--page NAME]... [--all-pages] [--rotate-sheets] [--wait-for CSS] [--wait-ms MS] [--clip CSS]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--connection-id ID | string | sin --public-url | ninguno | La conexión (bic_…) de la que mostrar algo. |
--url URL | string | un destino | ninguno | Una dirección de dashboard en el host de Grafana de la conexión, una dirección de informe de Power BI, una dirección de vista de Tableau o, para una conexión web, la dirección https de la página en un host público. El resto del destino se lee de ella. |
--dashboard UID | string | un destino | ninguno | Grafana: el uid del dashboard, la parte posterior a /d/ en su dirección. |
--workspace ID | string | un destino | ninguno | Power BI: el ID del área de trabajo, con --report. |
--report ID | string | con --workspace | ninguno | Power BI: el ID del informe, con --workspace. |
--view WORKBOOK/VIEW | string | un destino | ninguno | Tableau: la vista, los nombres posteriores a /views/ en su dirección (bi connection browse los lista). |
--public-url URL | string | un destino | ninguno | Un enlace de dashboard público de Grafana, un enlace Publish to web de Power BI o una dirección de viz de Tableau Public. No necesita conexión y se reproduce en vivo desde su host. Indíquelo solo, junto con --name, --refresh, --fit y --rotate-sheets. |
--name NAME | string | no | del destino | De 1 a 80 caracteres. |
--refresh DURATION | string | no | 5m | Grafana: con qué frecuencia se vuelve a dibujar la imagen, de 30s a 24h. Web: con qué frecuencia se vuelve a dibujar la página, de 60s a 24h. Power BI y Tableau: con qué frecuencia el informe o la vista actualiza sus datos, de 60s a 24h, o 0 para ninguna. |
--fit FIT | string | no | contain | Grafana y web: cómo llena la imagen la pantalla, contain, cover o fill. |
--rotate DURATION | string | no | ninguno | Power BI: cuánto tiempo se muestra cada página, de 10s a 1h; obligatorio con dos o más --page o con --all-pages. Tableau: cuánto tiempo se muestra cada hoja; obligatorio con --rotate-sheets. |
--page NAME | string | no | ninguno | Power BI: una página para mostrar, por nombre o nombre para mostrar. Repetible; las páginas se muestran en este orden. |
--all-pages | boolean | no | apagado | Power BI: rota por todas las páginas visibles, con --rotate. |
--rotate-sheets | boolean | no | apagado | Tableau: rota las hojas publicadas del libro de trabajo, con --rotate. |
--panel ID | string | no | todo el dashboard | Grafana: muestra solo este panel en lugar de todo el dashboard. |
--from TIME | string | no | ninguno | Grafana: inicio del intervalo de tiempo, como now-6h. |
--to TIME | string | no | ninguno | Grafana: fin del intervalo de tiempo, como now. |
--var NAME=VALUE | string | no | ninguno | Grafana: una variable del dashboard. Repetible. |
--theme THEME | string | no | dark | Tema de Grafana, dark o light. |
--timezone ZONE | string | no | ninguno | Grafana: zona horaria del dashboard, como Europe/Paris, utc o browser. |
--wait-for CSS | string | no | ninguno | Web: un selector CSS de un elemento que aparece cuando la página está lista, y solo cuando la sesión está iniciada. La captura lo espera y falla con bi_web_timeout si nunca aparece. |
--wait-ms MS | integer | no | ninguno | Web: milisegundos de espera tras estar lista la página, para gráficos tardíos, de 0 a 10000. |
--clip CSS | string | no | toda la página | Web: un selector CSS de la parte de la página que se dibuja. |
screenrig bi view create --connection-id bic_01EXAMPLECONNECTION0000 --url 'https://grafana.example.com/d/abc123/lobby?orgId=1&viewPanel=4' --refresh 5m
screenrig bi view create --connection-id bic_01EXAMPLECONNECTION0000 --dashboard abc123 --panel 4 --from now-6h --to now --var host=web1 --theme light --name "Web CPU"
screenrig bi view create --public-url https://grafana.example.com/public-dashboards/TOKEN --name "Public status"
screenrig bi view create --connection-id bic_01EXAMPLECONNECTION0000 --workspace f089354e-8366-4e18-aea3-4cb4a3a50b48 --report 5b218778-e7a5-4d73-8187-f10824047715 --page Overview --page Detail --rotate 30s --name "Sales rotation"
screenrig bi view create --connection-id bic_01EXAMPLECONNECTION0000 --view Sales/Overview --rotate-sheets --rotate 30s --refresh 0 --name "Sales sheets"
screenrig bi view create --connection-id bic_01EXAMPLECONNECTION0000 --url https://app.example.com/dashboards/42 --refresh 5m --wait-for '#dashboard.loaded' --wait-ms 1500 --clip '#chart-grid'Indique exactamente un destino: --url, --dashboard, --workspace con --report, --view o --public-url. La respuesta lleva data.embed_url. Ejecute bi view test a continuación.
Grafana: --url lee orgId, viewPanel o panelId, from, to, var-* y theme de la dirección. La imagen se dibuja a través del servicio de renderizado de Grafana y la comparten todas las pantallas del mismo tamaño, y una pantalla conserva la última imagen, con la hora del renderizado en una esquina, mientras Grafana está caído. Un enlace de dashboard público se reproduce en vivo desde Grafana, que debe permitir la inserción (allow_embedding = true en sus ajustes): bi view test lo comprueba.
Power BI: --url acepta la dirección de un informe copiada de Power BI, https://app.powerbi.com/groups/WORKSPACE/reports/REPORT, con una página /ReportSection opcional; o indique --workspace y --report. Dos o más páginas requieren --rotate, y --rotate requiere dos o más páginas o --all-pages. --refresh 0 es adecuado para un informe DirectQuery o de actualización automática de página que se actualiza solo. --fit no se aplica. Un enlace Publish to web muestra el informe a cualquiera que tenga el enlace y se reproduce tal como lo sirve Power BI, recargado cada --refresh, sin rotación de páginas.
Tableau: --url acepta la dirección de una vista copiada de Tableau, https://HOST/t/SITE/views/WORKBOOK/VIEW, la de Tableau Cloud, https://HOST/#/site/SITE/views/WORKBOOK/VIEW, o simplemente WORKBOOK/VIEW; la dirección debe estar en el host y el sitio de la conexión. --rotate-sheets y --rotate se requieren mutuamente. --fit no se aplica. Las pantallas deben llegar al host de Tableau y aceptar sus cookies de terceros, y el embed_origin de la vista debe estar en la lista de dominios permitidos de la aplicación conectada. Una viz de Tableau Public (--public-url https://public.tableau.com/app/profile/USER/viz/WORKBOOK/VIEW, o su dirección /views/) no necesita conexión ni token, y --rotate-sheets también funciona ahí.
Web: --url es la dirección de la página, y --wait-for, --wait-ms y --clip se aplican solo a una vista web. La última imagen válida permanece en pantalla cuando falla una captura, y status.last_error indica el motivo: bi_web_login_failed, bi_web_otp_required, bi_web_session_expired, bi_web_login_paused, bi_web_timeout, bi_web_navigation_failed o bi_web_blocked.
bi view list#
Lista las vistas BI de este proyecto con su destino, cadencia y estado.
bi view listSin parámetros.
screenrig bi view listdata.items contiene todas las vistas del proyecto, cada una con su embed_url.
bi view show#
Inspecciona una vista, su embed_url y cómo le fue la última vez en pantalla.
bi view show <id>| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La vista (biv_…). |
screenrig bi view show biv_01EXAMPLEVIEW0000000000La respuesta lleva connection_id, target (view y rotate_sheets para Tableau), refresh_s, rotate_s, fit, status y embed_url. status contiene last_ok_at y last_error con un code y un detail: bi_upstream_refused cuando Grafana rechazó el token, bi_upstream_unavailable cuando no pudo renderizar.
bi view update#
Cambia el nombre, el destino, la cadencia o el ajuste de una vista.
bi view update <id> [--name NAME] [--refresh DURATION] [--fit contain|cover|fill] [--rotate DURATION]
[--url URL | --dashboard UID | --workspace ID | --view WORKBOOK/VIEW | --public-url URL] [--report ID]
[--page NAME]... [--all-pages] [--rotate-sheets] [--panel ID] [--from TIME] [--to TIME]
[--var NAME=VALUE]... [--theme dark|light] [--timezone ZONE] [--wait-for CSS | --clear-wait-for]
[--wait-ms MS] [--clip CSS | --clear-clip] [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La vista (biv_…). |
--name NAME | string | no | sin cambios | Cambia el nombre de la vista. |
--url URL | string | no | sin cambios | La dirección de un dashboard, informe o vista de Tableau, o la dirección de la página de una vista web; sustituye todo el destino. No con las demás opciones de destino. |
--dashboard UID | string | no | sin cambios | Grafana: muestra este dashboard; sustituye todo el destino. |
--workspace ID | string | no | sin cambios | Power BI: muestra un informe de esta área de trabajo, con --report; sustituye todo el destino. |
--report ID | string | no | sin cambios | Power BI: muestra este informe, en --workspace o en el actual. |
--view WORKBOOK/VIEW | string | no | sin cambios | Tableau: muestra esta vista; sustituye todo el destino. |
--public-url URL | string | no | sin cambios | Un enlace público; sustituye todo el destino. |
--rotate-sheets | boolean | no | apagado | Tableau: rota las hojas publicadas del libro de trabajo, con --rotate. |
--page NAME | string | no | sin cambios | Power BI: las páginas que se muestran, por nombre o nombre para mostrar. Repetible; sustituye las páginas actuales. |
--all-pages | boolean | no | apagado | Power BI: rota por todas las páginas visibles. |
--rotate DURATION | string | no | sin cambios | Power BI: cuánto tiempo se muestra cada página, de 10s a 1h, o 0 para una sola página. Tableau: cuánto tiempo se muestra cada hoja, o 0 para dejar de rotarlas. |
--panel ID | string | no | sin cambios | Grafana: muestra solo este panel. |
--from TIME | string | no | sin cambios | Grafana: inicio del intervalo de tiempo. |
--to TIME | string | no | sin cambios | Grafana: fin del intervalo de tiempo. |
--var NAME=VALUE | string | no | sin cambios | Grafana: define una variable del dashboard. Repetible; define una variable y conserva las demás. |
--theme THEME | string | no | sin cambios | Tema de Grafana, dark o light. |
--timezone ZONE | string | no | sin cambios | Grafana: zona horaria del dashboard. |
--refresh DURATION | string | no | sin cambios | Con qué frecuencia se vuelve a dibujar la imagen o se actualiza el informe: Grafana de 30s a 24h; web de 60s a 24h; Power BI y Tableau de 60s a 24h, o 0 para ninguna. |
--fit FIT | string | no | sin cambios | Grafana y web: cómo llena la imagen la pantalla, contain, cover o fill. |
--wait-for CSS | string | no | sin cambios | Web: el elemento que aparece cuando la página está lista y con la sesión iniciada. No con --clear-wait-for. |
--clear-wait-for | boolean | no | apagado | Web: deja de esperar un elemento. No con --wait-for. |
--wait-ms MS | integer | no | sin cambios | Web: milisegundos de espera tras estar lista la página, de 0 a 10000; 0 elimina la espera. |
--clip CSS | string | no | sin cambios | Web: la parte de la página que se dibuja. No con --clear-clip. |
--clear-clip | boolean | no | apagado | Web: vuelve a dibujar la página completa. No con --clip. |
--expect-rev REVISION | integer | no | ninguno | Rechaza el cambio salvo que la vista esté en esta revisión (revision_conflict, salida 6). |
screenrig bi view update biv_01EXAMPLEVIEW0000000000 --wait-for '#dashboard.loaded' --wait-ms 2000
screenrig bi view update biv_01EXAMPLEVIEW0000000000 --clear-wait-for --clear-clip
screenrig bi view update biv_01EXAMPLEVIEW0000000000 --theme light --var host=web2
screenrig bi view update biv_01EXAMPLEVIEW0000000000 --dashboard def456 --panel 2 --expect-rev 3
screenrig bi view update biv_01EXAMPLEVIEW0000000000 --page Overview --page Detail --rotate 45s
screenrig bi view update biv_01EXAMPLEVIEW0000000000 --view Sales/DetailSe requiere al menos un cambio. --url, --dashboard, --workspace y --public-url sustituyen todo el destino, mientras que --panel, --from, --to, --var, --theme y --timezone cambian el destino actual de Grafana de la vista, --report, --page y --all-pages el de Power BI, y --view y --rotate-sheets el de Tableau. --page sustituye la lista de páginas; para vaciarla, indique de nuevo --workspace y --report con --rotate 0. --rotate 0 por sí solo hace que una vista de Tableau deje de rotar sus hojas. Un destino nuevo borra el estado y retira sus renderizados en caché, y las pantallas recogen el cambio en su siguiente actualización sin volver a publicar. Una vista conserva su conexión y su tipo.
bi view test#
Comprueba una vista de verdad: un renderizado de Grafana, un token de inserción de Power BI, una búsqueda de Tableau o un enlace público.
bi view test <id> [--output FILE [--width PIXELS] [--height PIXELS]]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La vista (biv_…). |
--output FILE | string | no | ninguno | Grafana: guarda aquí el PNG renderizado en lugar de ejecutar las comprobaciones. |
--width PIXELS | integer | no | 1920 | Ancho de la imagen guardada, de 1 a 10000. Requiere --output. |
--height PIXELS | integer | no | 1080 | Altura de la imagen guardada, de 1 a 10000. Requiere --output. |
screenrig bi view test biv_01EXAMPLEVIEW0000000000
screenrig bi view test biv_01EXAMPLEVIEW0000000000 --output lobby.png --width 1920 --height 1080Grafana: una vista de conexión se renderiza de verdad, fuera de la caché compartida y sin tocar el estado de la vista. data.ok es false con el motivo de Grafana cuando rechaza el token, no tiene renderizador o no conoce el dashboard; una prueba fallida es un dato, salida 0. Abra el PNG guardado y revíselo antes de publicar. Para un enlace público, la prueba obtiene la página y comprueba que Grafana permite que la página de inserción de la vista la incruste en un marco.
Tableau: una vista de conexión inicia sesión como el usuario de la conexión y busca la vista (signin, view); una vista que el usuario no puede ver, o un nombre con mayúsculas o minúsculas incorrectas, es una comprobación view fallida que nombra la ruta. Una vista de Tableau Public consulta a Tableau Public si existe el libro de trabajo. Power BI: una vista de conexión lee el informe (report) y genera para él un token de inserción real de solo visualización (embed_token); cuando Power BI rechaza, se muestra su propio motivo, como un conjunto de datos con seguridad a nivel de fila, un 401 o 403 (ajuste de tenant o rol del área de trabajo) o un informe que la aplicación no puede ver. Un enlace Publish to web se obtiene y se leen sus encabezados de enmarcado.
La prueba no juzga lo que muestra la imagen, las páginas que nombra la vista, la capacidad ni una lista de dominios permitidos de Tableau.
bi view delete#
Elimina una vista.
bi view delete <id> [--expect-rev REVISION]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<id> | string | sí | ninguno | La vista (biv_…). |
--expect-rev REVISION | integer | no | ninguno | Rechaza la eliminación salvo que la vista esté en esta revisión (revision_conflict, salida 6). |
screenrig bi view delete biv_01EXAMPLEVIEW0000000000
screenrig bi view delete biv_01EXAMPLEVIEW0000000000 --expect-rev 3Una pantalla que aún muestra el embed_url de la vista responde not_found hasta que cambie su lista de reproducción.
Conversaciones de soporte
Cada plan, incluido Standard, incluye soporte por IA a través del CLI y el botón mostaza Soporte del dashboard en la esquina inferior derecha, y Premium, Education y Enterprise pueden pedir una persona. Las conversaciones mantienen su historial. El dashboard resalta respuestas del personal no leídas y renderiza Markdown, incluyendo enlaces clicables, listas y código. Presione Enter para enviar o Shift+Enter para una nueva línea. Las respuestas del personal muestran su nombre y avatar de Slack cuando están disponibles, con el personal de screenRIG y el logo de screenRIG como respaldo; los clientes usan un avatar genérico de persona.
Use la documentación y su agente operativo para diagnosticar y resolver problemas. Use feedback bug o feedback feature para enviar informes.
support status
support submit (--body TEXT | --body-file FILE) [--conversation-id ID] [--human-requested]
support history [--before ID]
support history --conversation-id ID [--after SEQUENCE]
support follow [--conversation-id ID] [--after SEQUENCE] [--timeout MS]
support read --conversation-id ID --sequence SEQUENCE
support close --conversation-id IDComience con support status, que informa chat_allowed (este proyecto puede iniciar o continuar una conversación), human_available (una persona puede unirse si se solicita), staffed (el personal está en su horario ahora) y hours (las horas con personal). support submit acepta un mensaje de 1 a 4000 caracteres. Omitir --conversation-id para iniciar una conversación; use el data.conversation.id devuelto para seguimientos. Mantenga la misma clave de idempotencia al reintentar un envío incierto.
Las páginas de historial contienen hasta 100 filas. Pase data.next de una página de conversación como --before para conversaciones más antiguas, o la última secuencia de mensajes como --after para mensajes más nuevos. support follow transmite respuestas como SSE, reanuda desde la última secuencia del proyecto y suprime la repetición. Un filtro de conversación selecciona qué respuestas imprime mientras avanza ese cursor del proyecto. support read reconoce respuestas del personal hasta la secuencia que ha leído. Termine una conversación resuelta con support close o el botón Terminar conversación del panel. Cerrar conserva su historial; inicie una nueva conversación para más ayuda.
screenrig support submit --body "How do I assign a playlist? Here are the checks I ran."
screenrig support follow --conversation-id sc_CONVERSATION --after 0 --timeout 60000
screenrig support submit --conversation-id sc_CONVERSATION --body "Please ask a human." --human-requestedLuna, el asistente de IA, responde de inmediato en todos los planes. Una persona se une a una conversación a petición solo en Education, Premium y Enterprise (human_available), y pedir una persona pausa la IA en esa conversación; en Standard y Plus la petición se ignora y Luna responde. El horario del personal es de 09:00 a 17:00 de lunes a viernes, hora de Vancouver, excluyendo días festivos oficiales de B.C., y solo determina cuándo responde una persona. Mantenga las credenciales fuera de los mensajes de soporte.
Comentarios
Los informes de errores y solicitudes de funciones están limitados al proyecto y son inmutables. El tipo proviene del comando, nunca de un campo del cuerpo, y una corrección es una nueva presentación en lugar de una edición.
feedback bug#
Reportar un error contra screenRIG.
feedback bug <title> (--body TEXT | --body-file FILE) [--command "GROUP ACTION"] [--no-context]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<title> | string | sí | ninguno | Máximo 120 caracteres. |
--body TEXT | string | uno de los dos | ninguno | Cuerpo en línea, máximo 4000 caracteres. |
--body-file FILE | ruta | uno de los dos | ninguno | Leer el cuerpo desde un archivo, adecuado para un informe multilínea. |
--command | string | no | ninguno | El comando sobre el que trata el informe, solo como ruta de comando: hasta cuatro palabras en minúscula como media upload. Nunca se toma de la línea de comandos que ejecutó. |
--no-context | boolean | no | apagado | Omitir el sobre de diagnóstico, que de otro modo contiene la versión del CLI, la ruta opcional del comando y la plataforma. |
screenrig feedback bug "Playlist stalls after assignment" --body-file ./report.md --command "screen assign"El servidor rechaza, en lugar de redactar, texto que coincida con material de credenciales, y devuelve orientación a nivel de campo para que pueda reescribir y reenviar. Un reintento exacto con la misma clave de idempotencia devuelve la presentación original durante veinticuatro horas.
feedback feature#
Solicitar una función.
feedback feature <title> (--body TEXT | --body-file FILE) [--command "GROUP ACTION"] [--no-context]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
<title> | string | sí | ninguno | Máximo 120 caracteres. |
--body TEXT | string | uno de los dos | ninguno | Cuerpo en línea, máximo 4000 caracteres. |
--body-file FILE | ruta | uno de los dos | ninguno | Leer el cuerpo desde un archivo. |
--command | string | no | ninguno | El comando sobre el que trata la solicitud, solo como ruta de comando. |
--no-context | boolean | no | apagado | Omitir el sobre de diagnóstico. |
screenrig feedback feature "Add a dry-run flag" --body "Preview a change first."feedback list#
Listar las propias presentaciones de este proyecto.
feedback list [--kind bug|feature]| Parámetro | Tipo | Requerido | Predeterminado | Notas |
|---|---|---|---|---|
--kind | string | no | ambos tipos, más recientes primero | bug o feature. Restringir la lista a un tipo. |
screenrig feedback list --kind bugPublicidad
Compre publicidad en una red que lo invitó, o venda pausas publicitarias en pantallas que posee. Cada comando lee primero screenrig project capabilities: comprar requiere la capacidad advertiser, vender requiere pantallas propias. El dinero se informa como cadenas decimales mcr (millicréditos). Ejecute screenrig ads COMMAND --help --json para cada bandera. El flujo de compra y venta está en Inicio; tarifas y cargos en Precios.
ads networks#
Comprador: liste las redes a las que este proyecto fue invitado e inspeccione el inventario y espacios permitidos de una red.
ads networks list
ads networks show <seller-project-id>screenrig ads networks listads network#
Vendedor: inspeccione o cree la red propia de este proyecto y establezca su tarifa predeterminada.
ads network show
ads network create --name NAME
ads network rate --rate-mcr-per-15s MCR --expect-rev REVISIONscreenrig ads network rate --rate-mcr-per-15s 1000 --expect-rev 3La tarifa es por cada 15 segundos de reproducción completada. Una tarifa efectiva cambiada pausa las campañas afectadas hasta que cada comprador acepte una nueva cotización.
ads inventory#
Vendedor: incluya o excluya una pantalla propia de la publicidad y descríbala a compradores invitados.
ads inventory list
ads inventory update <screen-id> [--enabled | --disabled] [--site-name NAME]
[--city CITY] [--region REGION] [--venue-type TYPE] [--audience-tags TOKENS]
[--placement TEXT] [--public-description TEXT]
[--rate-mcr-per-15s MCR | --clear-rate]
[--impressions-per-hour N | --clear-impressions-per-hour] [--expect-rev REVISION]screenrig ads inventory update scr_LOBBY --enabled --venue-type cafeLas banderas omitidas mantienen sus valores actuales. Una nueva fila de inventario necesita --enabled o --disabled. --impressions-per-hour registra su estimación de las impresiones que la pantalla ofrece en una hora: cada reproducción completada cuenta entonces esa estimación multiplicada por los segundos reproducidos y dividida entre 3600 como estimated_impressions en ads reports spend, ads reports delivery y ads direct report.
ads slots#
Vendedor: defina espacios publicitarios reutilizables. Un espacio no cambia nada en la pantalla hasta que su página de espacio publicitario se coloca en una lista de reproducción.
ads slots list
ads slots create --name NAME --accepted-media image,video
[--max-image-duration-ms MS] [--max-video-duration-ms MS]
[--rate-mcr-per-15s MCR] [--enabled | --disabled] [--vast-tag-url URL]
ads slots update <slot-id> --expect-rev REVISION [same fields] [--clear-vast-tag-url]screenrig ads slots create --name "Lobby break" --accepted-media image,video
screenrig ads slots create --name "Lobby video" --accepted-media video --vast-tag-url https://ads.example.com/vast.xml
screenrig ads slots update ads_LOBBY --clear-vast-tag-url --expect-rev 2--vast-tag-url establece la propia etiqueta de anuncio VAST 2-4 del vendedor, que se prueba cuando ninguna campaña invitada llena el espacio en sus propias pantallas; el espacio debe aceptar video. La URL es HTTPS en el puerto 443 o 8443 a un host público. El backend la recupera, sigue hasta cinco Wrappers, ingiere el MP4 o WebM progresivo elegido en los contenidos del proyecto, y dispara Impresión, creativeView y start en un inicio aceptado, complete en una finalización aceptada, y Error en fallo; no hay rastreadores de cuartiles. Las macros [CACHEBUSTING], [TIMESTAMP], [SCREENRIG_SCREEN_ID], [SCREENRIG_SLOT_ID] y [SCREENRIG_PAGE_ID] se expanden, y los compradores nunca ven la etiqueta. En update, --vast-tag-url reemplaza la etiqueta y --clear-vast-tag-url la elimina; los dos no se combinan, y omitir ambos mantiene la etiqueta almacenada. ads slots list muestra vast_tag_url al vendedor propietario.
Advertising invitations#
Utilice los comandos compartidos invitations arriba:
screenrig invitations create --kind ad-buyer --email owner@bakery.example --screen-id scr_LOBBY --policy review_required
screenrig invitations list --kind ad-buyer
screenrig invitations revoke ID
La persona invitada acepta en el dashboard. Una persona conectada selecciona su proyecto de compra y confirma con una prueba de passkey reciente. Una persona sin inicio de sesión crea uno y un proyecto solo para anunciantes durante la aceptación.
ads memberships#
Vendedor: cambie o revoque la política de revisión y el alcance de inventario de un comprador admitido.
ads memberships list
ads memberships update <membership-id> --expect-rev REVISION
[--policy trusted|review_required] [--screen-id IDS] [--slot-id IDS]
ads memberships revoke <membership-id>screenrig ads memberships listLa revocación detiene nuevas reproducciones de anuncios y mantiene el historial financiero.
ads creatives#
Comprador: vincule medios propios listos a una creatividad inmutable con copia aprobada.
ads creatives list
ads creatives create --media-id ID --copy TEXT
ads creatives show <creative-id>screenrig ads creatives create --media-id med_123 --copy "Fresh bread daily"ads campaigns#
Comprador: redacte una campaña, asígnele precio y actívela aceptando la cotización.
ads campaigns list | show <campaign-id>
ads campaigns create <file>
ads campaigns update <campaign-id> <file> --expect-rev REVISION
ads campaigns preview <campaign-id> [--expect-rev REVISION]
ads campaigns activate <campaign-id> --quote-id ID --expect-rev REVISION
ads campaigns pause | resume <campaign-id> --expect-rev REVISION
ads campaigns accept-rates <campaign-id> --quote-id ID --expect-rev REVISIONscreenrig ads campaigns preview cmp_123Un borrador no reserva nada. preview devuelve una cotización con tiempo limitado y no gasta nada; activate requiere esa cotización exacta. Tras un cambio de tarifa del vendedor, solo accept-rates con una cotización nueva reanuda la campaña.
Un borrador de campaña admite un category opcional de la lista de categorías de anunciantes. Dos anuncios de la misma categoría nunca se reproducen en la misma pausa publicitaria de una pantalla.
ads direct#
Vendedor: reserve sus propios acuerdos para anunciantes ajenos a screenRIG en sus propias pantallas.
ads direct list | show <campaign-id>
ads direct create <file>
ads direct update <campaign-id> <file> --expect-rev REVISION
ads direct pause | resume | end <campaign-id> --expect-rev REVISION
ads direct availability <file>
ads direct report <campaign-id> [--from TIMESTAMP] [--to TIMESTAMP] [--format json|csv] [--output FILE|-]screenrig ads direct create campaign.jsonUn borrador indica name, advertiser, un category opcional, flight_start y flight_end, media_ids (sus propias imágenes o videos listos), un goal_plays opcional, un price opcional (cpm por mil reproducciones o flat, con un amount y un currency ISO 4217) y la segmentación: screen_ids, slot_ids, venue_types, cities, tags y dayparts, donde una lista vacía significa todas las pantallas o espacios inscritos. Una campaña directa llena una pausa publicitaria antes que los compradores invitados. Un objetivo se reparte de forma uniforme durante la vigencia y se reproduce primero mientras va atrasado; una campaña sin objetivo toma cada espacio apto durante su vigencia. No se mueven créditos: usted factura al anunciante y el precio da valor al informe.
availability lee una consulta con la misma segmentación y vigencia y estima las reproducciones que aún puede reservar: las ocurrencias recientes de espacios publicitarios de las pantallas seleccionadas, menos las reproducciones que sus otros objetivos directos aún necesitan. Un objetivo por encima de la estimación devuelve goal_overbooked a menos que el borrador establezca "overbook": true. report enumera las reproducciones frente al objetivo, el ritmo, el valor, las reproducciones que no se emitieron y filas por día UTC, pantalla, espacio y medio; end es definitivo.
ads reviews#
Vendedor: apruebe, rechace o solicite cambios a versiones creativas exactas enviadas por compradores en review_required.
ads reviews list
ads reviews show <review-id>
ads reviews approve <review-id>
ads reviews reject <review-id> --reason TEXT
ads reviews request-changes <review-id> --note TEXTscreenrig ads reviews request-changes arv_123 --note "Use the new logo"request-changes envía su nota al comprador. Para enviar la revisión, vincule el contenido multimedia revisado a una nueva creatividad, agréguela a una nueva campaña y ejecute preview y activate con la nueva cotización. La campaña de reemplazo tiene su propio presupuesto e historial de revisiones. Pause la campaña original antes de activar su reemplazo para evitar emisiones superpuestas. Las personas deciden sobre las creatividades en la página Revisiones del panel, junto con los cambios de listas de reproducción y pantallas.
ads reports#
Leer gastos como comprador o entregas como vendedor.
ads reports spend --campaign-id ID
ads reports delivery --from TIMESTAMP --to TIMESTAMP
ads reports fill [--from TIMESTAMP] [--to TIMESTAMP]screenrig ads reports delivery --from 2026-09-01T00:00:00Z --to 2026-10-01T00:00:00ZInformes de entrega brutos, tarifa de servicio y neto para el período. Un informe de comprador nunca muestra otros ingresos del vendedor. fill muestra, para hasta 35 días, cuántas ocurrencias de espacios publicitarios pidieron sus pantallas, cuántas llenaron las campañas directas, los compradores invitados y su etiqueta VAST, y por qué el resto quedó vacío: no_demand, ineligible, separated o capped.
Preparar, publicar y editar listas de reproducción
Para imágenes y videos listos, prepare una lista de reproducción a pantalla completa en orden de reproducción:
screenrig playlist init med_POSTER med_VIDEO --name "Lobby loop" --screen-id scr_LOBBY --output lobby.json
screenrig playlist validate lobby.json
screenrig screen publish scr_LOBBY lobby.json
screenrig screen screenshot scr_LOBBYValide el documento, publíquelo y luego mire la pantalla real con screen screenshot. playlist init acepta archivos locales de imagen/video, IDs de med_ listos, versiones de aplicaciones rel_ fijadas y URLs HTTP o HTTPS de iframe en orden de reproducción, incluyendo entradas mixtas:
screenrig playlist init ./poster.png med_VIDEO rel_APP https://example.com --name Lobby --screen-id scr_LOBBY --output lobby.jsonLa carga de archivos locales se realiza a través de la ruta normal de medios y espera a que estén listos. Esto requiere ffmpeg y ffprobe a menos que se proporcione --no-transcode. La preparación escribe el documento local y puede cargar medios; no crea una lista de reproducción remota ni asigna una pantalla. Los medios existentes deben estar listos. Las URL HTTP y HTTPS pueden incluir hosts de la red local y credenciales integradas y no se recuperan durante la preparación. La aplicación web del Player requiere URL HTTPS sin nombre de usuario ni contraseña.
Para preparación de archivos reintentable, elija --idempotency-key en el primer intento y reutilícelo con archivos idénticos y orden de entrada dentro de la ventana de repetición del servidor. Cada ocurrencia de archivo obtiene sus propias claves de carga. Sin clave explícita, una nueva invocación obtiene nuevas claves. Los medios cargados sobreviven a un fallo posterior de preparación; inspeccione media list y reutilice esos IDs al conciliar un resultado parcial.
Cada entrada se convierte en una página de pantalla completa con fondo negro y una transición cruzada de 200 ms. Las imágenes y videos usan --fit contain|cover|fill (predeterminado contain). Los videos están silenciados, no se repiten y avanzan al finalizar. Otras páginas usan --duration-ms (predeterminado 8000). Las aplicaciones e iframes usan fill; las versiones de la aplicación se fijan con avance programado y sin privilegios de control. Edite el documento para el avance controlado por la aplicación. Verifique la preparación de la versión y la reproducción real a través del servidor y el Player previsto. Al publicar se pueden inspeccionar los encabezados de respuesta de las páginas iframe HTTPS públicas elegibles. Una página cuyo X-Frame-Options o frame-ancestors rechaza el encuadre no puede mostrarse en el Player web ni en los Players macOS, Samsung Tizen o BrightSign. Cuando la publicación detecta un rechazo, la escritura igualmente se completa: screen publish y playlist create|update|patch imprimen una advertencia iframe_framing_refused que nombra la página y la primitiva, y events list muestra una advertencia playlist.iframe_framing_refused.
Proporcione --screen-id para leer las dimensiones y la revisión objetivo. El resultado incluye data.screen_id, data.screen_revision y data.publish.argv. Pase este arreglo de argumentos al lanzador empaquetado screenrig sin dividir en shell: preserva rutas, configuración y origen de API. Agregue --expect-rev explícitamente para protegerse contra cambios posteriores en la pantalla. Los metadatos objetivo permanecen fuera del documento creado.
Para anular el lienzo, proporcione tanto --target-width como --target-height. Estos también funcionan sin pantalla, en cuyo caso no se devuelven argumentos de publicación. Las superficies desconocidas o múltiples reportadas requieren dimensiones explícitas. Los archivos de salida son exclusivos por defecto; use --overwrite para reemplazar un archivo de autoría existente de forma atómica. Los directorios principales se crean automáticamente. Las entradas de URL e ID de lanzamiento con dimensiones explícitas funcionan sin inicio de sesión.
screen publish <screen-id> <file> crea una nueva lista de reproducción, la asigna con una protección opcional de revisión pantalla, y lee la asignación. No actualiza una lista de reproducción existente por nombre. Los nombres de pantalla pueden repetirse; use el ID de la lista para una playlist update explícita. Su resultado JSON informa playlist_id, playlist_revision, screen_id, screen_revision, assignment_verified y playback_verified. La verificación de asignación no prueba la reproducción; solicite e inspeccione una captura de pantalla y evidencia de reproducción relevante por separado.
Cuando el proyecto requiere revisión para cambios de agente, o la sesión tiene acceso Propose, screen publish se detiene una vez que se propone la lista de reproducción o su asignación: stage es pending_review, el resultado nombra ambas revisiones, y el sobre permanece ok: true. Nada se reproduce hasta que una persona aprueba. Añada --note TEXT para informar al revisor qué cambió; vea Revisiones.
Publicar guarda automáticamente un diario local privado. Tras un fallo ambiguo, repita el comando idéntico y la entrada con la misma configuración para reanudar. Si la creación de la lista de reproducción tuvo éxito antes de que fallara la asignación, el error identifica la lista creada. No la elimine ni inicie otra creación para recuperarla. Un conflicto de revisión requiere inspeccionar la pantalla y reconciliar la asignación prevista; una lista ya creada puede asignarse explícitamente con screen assign. Publicar nunca actualiza silenciosamente la revisión esperada. La recuperación no terminada se detiene tras la ventana de idempotencia del servidor de 24 horas; inspeccione y reconcilie antes de hacer más escrituras.
Para editar una lista de reproducción existente:
screenrig playlist show pl_EXISTING --output lobby.json
screenrig playlist update pl_EXISTING lobby.jsonplaylist show --output escribe el documento editable {name, pages} y devuelve su ruta, playlist_id y la fuente revision en stdout. Opcionalmente pase esa revisión con --expect-rev para proteger la actualización. Conserva selectores dinámicos, programaciones, movimiento y lanzamientos de aplicaciones fijados, eliminando medios y campos de tiempo derivados del servidor. Los comentarios permanecen separados. playlist show simple es una respuesta de inspección; --editable sin --output devuelve data.document, data.playlist_id y data.revision. Actualizar una lista de reproducción afecta a todas las pantallas asignadas. En revisión, playlist update propone el nuevo documento, y playlist show sigue devolviendo la versión en vivo hasta que una persona lo apruebe.
K/V y comentario escriben aceptando --file - para stdin. Use playlist show ID --editable --human para el documento editable en stdout. Los nombres de aplicación y playlist pueden repetirse; use IDs de recurso para actualizaciones.
Reemplazar una versión de aplicación
Después de un app update exitoso, tome data.application.release_id e identifique la lista de reproducción, página y primitiva de aplicación exactas para cambiar. Previsualice el reemplazo:
screenrig playlist replace-release pl_EXISTING --page board-page --primitive board --release-id rel_NEWEsta es una revisión de impacto solo de lectura. Inspeccione data.previous_release_id, data.release_id y data.affected_screens, incluyendo asignaciones archivadas. Aplique directamente con --apply. Para optar por esta revisión de impacto, también proporcione --expect-impact con el data.impact de la vista previa:
screenrig playlist replace-release pl_EXISTING --page board-page --primitive board --release-id rel_NEW --applySe conservan otros primitivos y configuraciones. La actualización afecta a todas las pantallas asignadas a esta lista de reproducción compartida; las pantallas archivadas retienen el nuevo pin para uso posterior. Cuando se suministra --expect-impact, un reemplazo, revisión o impacto observado en la pantalla requiere una vista previa nueva. La aplicación directa omite la encuesta de pantalla; se omite affected_screens. Un lanzamiento ya fijado tiene éxito sin escritura. Las asignaciones pueden cambiar después de la instantánea: el servidor verifica la revisión de la lista de reproducción atómicamente solo cuando se suministra --expect-rev. El servidor valida la disponibilidad y propiedad del lanzamiento al aplicar. Los pines existentes permanecen sin cambios hasta la aplicación; después, verifique las revisiones del manifiesto y la reproducción en las pantallas afectadas. En revisión, --apply propone el nuevo pin; agregue --note TEXT para el revisor.
Los comandos playlist validate, create, update y screen publish aceptan - como archivo de entrada para leer stdin. Los sobres JSON nunca se escriben en archivos creados. --expect-rev protege una revisión. Omita la bandera para escribir el recurso actual sin una precondición de revisión. Una revisión obsoleta suministrada aún devuelve revision_conflict.
La generación acepta --prompt TEXT o --prompt-file FILE, incluyendo --prompt-file - para stdin. El archivo es el prompt completo, sin recortes; se aplica el límite existente de 4000 caracteres. Los prompts se excluyen de los diagnósticos.
Mantener la ruta corta
- Comenzar con el plugin oficial
- Abrir un Player
- Elija una ruta de autoría
- Instale el plugin oficial
- Ver funciones
El CLI incluido usa api.screenrig.ai; los Players usan play.screenrig.ai; el panel está en screenrig.ai/dashboard; los lanzamientos usan orígenes aislados bajo apps.screenrig.ai. Los paquetes nativos de Player permanecen privados y mediadas por servidor. La referencia de transporte interna sigue disponible para herramientas de transporte.
Filtros de etiquetas y lotes de reproducción
Los medios llevan hasta 32 etiquetas únicas, cada una de 1 a 32 letras o dígitos. Reemplace todo el conjunto con screenrig media update med_ID --tags Summer,Drinks. --tag Summer lo reemplaza con una etiqueta; --clear-tag borra todas las etiquetas. media list --tag Summer coincide con la membresía en cualquier parte del conjunto. Las etiquetas distinguen mayúsculas y minúsculas y nunca son autorización.
Un selector dinámico puede usar un tag o un objeto filtro tags:
{
"by": "tag",
"tags": { "all": ["Summer", "Drinks"], "any": ["Lobby", "Patio"], "none": ["Expired"] },
"order": "random",
"one_at_a_time": false,
"batch_size": 3
}
all requiere todas las etiquetas listadas, any requiere al menos una, y none excluye cualquier etiqueta listada. Los grupos presentes se combinan con AND; los grupos omitidos no imponen condición. Proporcione al menos un grupo no vacío. Cada grupo acepta hasta 32 etiquetas únicas. tag y tags son mutuamente excluyentes. Un filtro solo none selecciona todos los medios listos de ese primitivo excepto las etiquetas excluidas. Los selectores de imagen seleccionan imágenes y los de video seleccionan videos.
La piscina de candidatos contiene hasta 1,024 medios listos por selector, con 1,024 referencias de medios en toda la instantánea del ciclo completo. Un emparejamiento mayor devuelve un error; reduzca los filtros. batch_size es un límite separado de 1–1,024 elementos por visita de página. En una página media_end, one_at_a_time: false reproduce el siguiente lote en secuencia; omitir batch_size reproduce el resto del pase. one_at_a_time: true reproduce un elemento por aparición y solo permite un tamaño de lote omitido o batch_size: 1. La duración, la aplicación y las páginas audio_end requieren one_at_a_time: true. Las imágenes en media_end también requieren dwell_ms; los videos no pueden repetirse en esa página.
El reproductor resuelve cada primitiva multimedia dinámica en una solicitud al iniciar la lista de reproducción y en cada límite de ciclo. La membresía se congela durante el ciclo. Las cargas, eliminaciones, cambios de etiquetado y límites de disponibilidad no regeneran el manifiesto. En la siguiente actualización, los elementos eliminados o excluidos salen de la cola pendiente; las nuevas coincidencias se unen cuando termina el pase actual. Un lote final puede contener menos que el número solicitado; no se rellena con el siguiente pase. El orden de nombre de archivo ordena por nombre de archivo, luego ID de medio. El orden aleatorio mezcla una vez por pase completo, preservando el orden restante entre actualizaciones del ciclo. El orden ponderado sigue sus pesos, más abajo. El cursor es local a la pantalla, lista de reproducción, página y primitiva, persiste tras reinicio y se reinicia al cambiar filtro, orden o política de lote. La reproducción sin conexión usa la última instantánea exitosa. Las coincidencias vacías omiten la primitiva y cualquier página vacía resultante.
Guarde el objeto selector arriba como selector.json, luego inspeccione su catálogo de candidatos actual antes de publicar:
screenrig media selector-preview selector.json --primitive video
La vista previa devuelve matched_count, ordenado por nombre de archivo candidates con IDs de medios y etiquetas, y la política selector normalizada. Con orden aleatorio muestra el grupo y la política de mezcla; no elige la mezcla del reproductor, avanza un cursor, crea un permiso de reproducción ni cambia un manifiesto. Con orden ponderado devuelve, para cada candidato, weight y share_percent, además de cycle. --rect WxH (API rect: {width, height}) es el tamaño del espacio y es obligatorio con fit: "aspect"; las coincidencias que deja fuera se listan en excluded con el motivo aspect_mismatch. Los selectores de imágenes pasan --primitive image. La API es POST /api/selectors/preview con { "primitive": "video", "selector": ... }. Usa el proyecto autenticado y las mismas reglas de coincidencia que la reproducción. Los cambios en el catálogo después de la vista previa se resuelven en el siguiente ciclo de reproducción.
La exportación de paquete estático congela las coincidencias dinámicas como IDs exactos. Preserva la reproducción uno a la vez o de pase completo; una secuencia de tiempo de ejecución limitada usando batch_size con one_at_a_time: false requiere eliminar ese campo o elegir IDs explícitos antes de exportar. Esto evita perder silenciosamente un cursor de lote en tiempo de ejecución en un paquete estático.
Rotación ponderada y ajuste por aspecto
order: "weighted" rota las creatividades de un espacio según su peso, de modo que cada patrocinador conserva su parte de reproducciones. weights asigna un ID de medio (med_...) o tag:NAME a un entero de 1 a 1000, con un máximo de 64 claves. Funciona con by igual a all, tag o folder:
{
"by": "all",
"order": "weighted",
"one_at_a_time": true,
"weights": { "tag:Acme": 50, "tag:Globex": 30, "tag:Initech": 20 },
"fit": "aspect"
}
Pesos de 50, 30 y 20 entregan exactamente 5, 3 y 2 de cada 10 reproducciones, en cada ciclo, y un reinicio continúa a mitad de ciclo. El peso de un elemento es su clave de ID de medio cuando existe; si no, la primera clave tag:NAME, en orden alfabético, entre las etiquetas que lleva, repartida por igual entre los elementos de la selección que la comparten, de modo que la parte de un patrocinador se mantiene sea cual sea el número de creatividades; si no, el elemento cuenta como su propio grupo con peso 1. Un ciclo tiene como máximo 4096 reproducciones; las partes se redondean a él solo cuando la proporción exacta exige un ciclo más largo.
El orden ponderado reproduce un elemento por visita, así que defina one_at_a_time: true o batch_size: 1. weights es obligatorio con el orden ponderado y solo se permite con él; de lo contrario, la escritura devuelve invalid_request. Los reproductores web, Android, Apple, Windows y Linux implementan el orden ponderado desde las versiones que declaran la capacidad de host selector.weighted. Un reproductor anterior reproduce el selector en orden aleatorio, y los diagnósticos del manifiesto incluyen selector_order_downgraded.
fit: "aspect" en un selector dinámico conserva solo los archivos cuya relación ancho/alto está dentro del 5 % de la del rectángulo del espacio, incluido un muro de video o marco de pantalla, leída cuando el selector se resuelve. Un espacio vertical nunca reproduce un archivo horizontal. No requiere ningún cambio en el reproductor.
screenrig media selector-preview imprime la proporción esperada de cada selector ponderado o ajustado por aspecto, y el editor de páginas del panel muestra la misma tabla en el inspector. La exportación de paquete estático congela un selector ponderado como IDs exactos en orden de nombre de archivo; los pesos no se conservan.
Tokens de pantalla en selectores de etiquetas
El tag de un selector de etiquetas, y cada entrada de su filtro tags, puede ser {screen.field.NAME} o {screen.id}, el identificador de la pantalla sin su prefijo scr_, que es una etiqueta. El servidor rellena el token para cada pantalla al construir el manifiesto y la instantánea de selectores de esa pantalla, así que una lista de reproducción reproduce los medios propios de cada pantalla. Etiquete los medios Lobby o Garage, defina el campo de cada pantalla con screenrig screen update scr_ID --field zone=Lobby y asigne al espacio este selector:
{ "by": "tag", "tag": "{screen.field.zone}", "one_at_a_time": true }
El valor rellenado sigue las reglas de las etiquetas: de 1 a 32 letras o dígitos. Una pantalla sin el campo, o cuyo valor no es una etiqueta, no selecciona nada: no reproduce ningún archivo de ese espacio, y los diagnósticos del manifiesto incluyen screen_fact_missing o screen_fact_invalid. Cambiar un campo regenera el manifiesto de esa pantalla. Un selector con token no se puede previsualizar (media selector-preview necesita una etiqueta concreta) ni congelar con playlist export.
Tokens de pantalla en direcciones de iframe y params de aplicación
El iframe y el src de un fallback_src pueden llevar tokens de pantalla en la ruta, la consulta o el fragmento de una dirección http o https, y también el params opcional de una primitiva application: hasta 16 nombres de 1 a 32 letras minúsculas, dígitos o guiones bajos (ticket y policy están reservados) con valores de hasta 512 caracteres. El servidor los rellena para cada pantalla:
| Token | Valor |
|---|---|
{screen.id} | El identificador de la pantalla sin su prefijo scr_. |
{screen.name} | El nombre de la pantalla. |
{screen.timezone} | La zona horaria IANA almacenada de la pantalla. |
{screen.field.NAME} | El campo NAME de la pantalla, de 1 a 32 letras minúsculas, dígitos o guiones bajos. |
{screen.location.lat}, {screen.location.lon} | Su ubicación en grados decimales. |
{screen.location.name}, {screen.location.address} | Su nombre de lugar y dirección postal. |
{
"primitive": "iframe",
"src": "https://maps.example.com/directory?kiosk={screen.field.kiosk_id}&level={screen.field.level}",
"title": "Directory"
}
La escritura guarda la plantilla tal como está escrita, con las llaves incluidas. El manifiesto de cada pantalla lleva su propia dirección, con cada valor codificado en porcentaje para su lugar en la URL: un kiosk_id de B 2&3 se convierte en B%202%263. Un token en el esquema, las credenciales, el host o el puerto, o en un enlace de YouTube, un enlace de documento de Google o Microsoft o una dirección de vista de BI, se invalid_request en src (o fallback_src). La publicación omite la comprobación de marcos para un src con plantilla, y las vistas previas muestran la plantilla tal como está escrita.
Una pantalla a la que le falta un valor (un campo sin definir, sin ubicación), o cuyos valores forman una dirección de más de 2048 caracteres o con un segmento de ruta de . o .., no recibe ese iframe ni aplicación, y los diagnósticos de su manifiesto llevan screen_fact_missing o screen_fact_invalid; una página que queda vacía se descarta. Toda escritura que llega a una pantalla así (una escritura de lista de reproducción, screen assign, screen update, una asignación de flota, una revisión aprobada) responde con una advertencia screen_fact_missing que nombra los tokens, los primeros 20 ids de pantalla y cuántas hay. Cambiar un campo o la ubicación vuelve a emitir el manifiesto de las pantallas a las que afecta.
Para una aplicación, cada param rellenado se añade a la dirección de lanzamiento después de ticket, codificado en porcentaje, con un máximo de 4096 caracteres en conjunto, de modo que la aplicación lo lee desde location.search (SDK). Los params de lanzamiento llegan al Player web y a los Players que lo ejecutan (Samsung Tizen, BrightSign, LG webOS y Vega); los Players Qt, Android, Apple y Windows cargan la aplicación desde su paquete local y no envían ninguno. El campo url de una plantilla puede ser un src de iframe completo, y su valor puede llevar a su vez tokens de pantalla, que se rellenan cuando se construye el manifiesto. Un selector de etiquetas usa {screen.id} y {screen.field.NAME} del mismo modo (arriba). Las tarjetas conservan sus propios tokens {screen.…}.
Disponibilidad de medios
screenrig media availability med_ID --file rule.json define cuándo los selectores dinámicos (all, tag y folder) pueden elegir un archivo. --clear elimina la regla y --expect-rev N protege la revisión del medio. La API es PATCH /api/media/{id}/availability con If-Match y { "availability": {...} | null }. Definir una regla requiere acceso Manage; una credencial Propose recibe insufficient_access.
La regla es la gramática horaria del calendario, leída en la zona horaria de cada pantalla, y contiene al menos un miembro: from y until (civil YYYY-MM-DDTHH:MM, until exclusivo), windows (semanal {days, start, end}), monthly ({day} o {nth, weekday}, cada uno con start y end opcionales), dates ({date, start, end}) y except (fechas que eliminan una ocurrencia, incluidas las colas después de medianoche). No tiene data ni interaction. La creatividad de un patrocinador para el fin de semana largo, disponible solo en las tardes entre semana dentro del periodo:
{
"from": "2026-11-27T00:00",
"until": "2026-11-30T23:59",
"windows": [{ "days": ["mon", "tue", "wed", "thu", "fri"], "start": "17:00", "end": "22:00" }]
}
Solo los selectores leen la regla: un selector explícito con id o ids la ignora, igual que las referencias de medios de las tarjetas, el audio de la banda sonora y las creatividades publicitarias. Un archivo sale de la selección y vuelve en el siguiente ciclo de lista de reproducción de cada pantalla, en aproximadamente un minuto desde el límite. No cambia ninguna revisión de lista de reproducción ni de manifiesto, y un reproductor sin conexión conserva su última selección hasta que se reconecta. screenrig media selector-preview --timezone ZONE (UTC por defecto) lista en excluded los archivos fuera de su regla en ese momento, con el motivo outside_window.
Comentarios
Un comentario es el propio objeto JSON del agente adjunto a una pantalla, una lista de reproducción o una página de lista. El UTF-8 compacto de ese objeto es como máximo 1 KiB, y el valor debe ser un objeto. screenRIG nunca lo lee, nunca lo envía a los Players, y nunca lo trata como autorización. No aparece en el manifiesto en tiempo de ejecución ni incrementa una revisión, por lo que estos comandos no toman
--expect-rev: gana la última escritura.comment show#Leer el objeto de comentario en una pantalla, una lista de reproducción o una página de lista de reproducción.
<id>scr_opl_, que coincide con la palabra objetivo.--page PAGE_IDUn comentario no establecido se lee como
{ "comments": null }.screen showyplaylist showincluyencommentscuando el servidor lo envía.comment set#Escriba el objeto comentario.
<id>scr_opl_.--json-value JSON--file FILE--page PAGE_IDCrear y actualizar lista de reproducción no puede establecer comentarios; para eso están estos comandos.
comment delete#Eliminar el objeto comentario.
<id>scr_opl_.--page PAGE_ID