Documentación

Medios: comandos CLI

Suba, reemplace, versione, etiquete, mueva y elimine imágenes, video y audio, con carpetas, selectores dinámicos y reglas de disponibilidad.

Cada comando se ejecuta como describe la referencia de la CLI: banderas globales, salida JSON, códigos de salida, revisiones y reintentos.

Multimedia

Un objeto multimedia es una imagen fija, un clip o una pista de audio MP3, almacenado como exactamente una versión. No hay alternativa por dispositivo, así que cada pantalla tiene que decodificar lo que guarde media upload.

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 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ámetroTipoRequeridoPredeterminadoNotas
<file>rutasíningunoLa 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 TYPEstringnoel tipo de la extensión del archivoDeclare el tipo de medio de la fuente para un archivo cuya extensión no lo indica. Un tipo que no coincide con los bytes del archivo se rechaza (usage_error, salida 2) antes de cualquier conversión.
--tag TAGstringnoningunoDe 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 IDstringnoraíz de la bibliotecaUna carpeta de medios mfd_ existente, verificada antes de comenzar cualquier trabajo. El archivo llega a ella cuando está listo, nada se mueve después, y data.folder_id la reporta. Funciona con --no-wait. Un usuario de carga debe nombrar una de sus carpetas; vea Usuarios de carga.
--no-waitbooleannoapagadoDevolver tan pronto como se acepte el compromiso. El objeto aún no está listo; termine con operations wait.
--poll-ms MSintegerno1000Intervalo entre sondeos de operación mientras espera.
--timeout MSintegerno120000Fecha límite para la espera. También limita cada solicitud subyacente.
--no-transcodebooleannoapagadoSuba los bytes de origen sin cambios. ffmpeg, ffprobe y cwebp no se ejecutan. El archivo ya debe ser un PNG, JPEG, WebP, GIF, MP4, WebM o MP3, y WebP sin pérdida sigue siendo rechazado. No se puede combinar con --codec, --max-fps, --max-edge, --webp-quality, --preset ni --no-audio.
--codecstringnoh264h264 o hevc. Use hevc solo cuando todas las pantallas que reproducirán el clip sean Player nativos.
--max-fps Nnumberno30Velocidad 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 PIXELSintegerno3840Lí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-qualityintegerno90Calidad de imagen fija para la codificación WebP, de 1 a 100.
--presetstringnono establecidosignage-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-audiobooleannoapagadoOmitir la pista de audio en la entrega de video. Solo video; no se puede combinar con --no-transcode.
--no-progressbooleannoapagadoNo 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 LobbyLoop

El vídeo se convierte en MP4: perfil High H.264 en nivel 4.2, 5.1 o 5.2, el más bajo que se ajuste al tamaño y la frecuencia, o perfil Main H.265 en nivel 5.1 o 5.2 con --codec hevc, en yuv420p etiquetado Rec. 709, con un máximo de 3840 por 2160 píxeles por fotograma. 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 medio listo con los mismos bytes, nombre de archivo y etiqueta se devuelve en lugar de subirse de nuevo (data.reused es true), por lo que repetir una subida interrumpida devuelve su ID de medio. data.timing informa los milisegundos por etapa: prepare_ms (conversión y hash), declare_ms, transfer_ms, commit_ms y processing_ms (hasta que está listo, tan fino como --poll-ms; ausente con --no-wait).

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-audio
screenrig media upload ./menu.png --folder mfd_01EXAMPLEFOLDER000000000

media upload-batch --folder coloca cada elemento subido en la carpeta de la misma manera.

Una imagen o un vídeo puede tener hasta 16383 píxeles de ancho o de alto y 67 108 864 píxeles (8192 por 8192) en un fotograma; uno mayor se rechaza con invalid_request. La conversión por defecto ajusta cada lado a 3840 píxeles, así que suba un máster ultraancho como 9216 por 2160 o 12000 por 540 con --no-transcode. Una subida de vídeo puede ser como máximo el vídeo más grande que permite el plan del proyecto, que project capabilities informa como media_video_bytes (vea Precios); un vídeo mayor se rechaza antes de leerlo, así que recorte primero el clip. La CLI codifica el vídeo con una calidad fija, por lo que un vídeo largo aún puede superar el límite tras la codificación y entonces se rechaza; con --no-transcode, el propio archivo debe cumplir el límite.

Una transferencia al almacenamiento que se interrumpe se intenta hasta 4 veces mientras su URL de subida sea válida. Si sigue fallando, el error nombra el operation_id de la subida y esta se cancela para no ocupar almacenamiento; con --idempotency-key se conserva para la repetición. Ejecute de nuevo el mismo comando.

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.

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ámetroTipoRequeridoPredeterminadoNotas
<manifest.json>rutasíninguno{ "items": [ { "path": "./a.png", "tag"?: "Lobby", "content_type"?: "image/png" } ] } con 1 a 1000 elementos. Las rutas son relativas al archivo manifiesto.
--state FILErutanoarchivo privado junto a la configuraciónUn archivo JSON 0600 indexado por el SHA-256 de los bytes locales de cada archivo fuente; por defecto, un archivo por proyecto, dirección de API y manifiesto. Los elementos ya presentes con un media_id se reportan como resumed. No comparta un archivo de estado entre proyectos.
--concurrency Nintegerno4Subidas paralelas, de 1 a 8.
--no-transcodebooleannoapagadoSuba los bytes de origen sin cambios, como hace media upload. No se puede combinar con --codec, --max-fps, --max-edge, --webp-quality, --preset ni --no-audio.
--poll-ms MSintegerno1000Intervalo entre sondeos de operación mientras espera.
--timeout MSintegerno120000Fecha límite para la espera. También limita cada solicitud subyacente.
--codecstringnoh264h264 o hevc. Use hevc solo cuando todas las pantallas que reproducirán el clip sean Player nativos.
--max-fps Nnumberno30Velocidad 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 PIXELSintegerno3840Lí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-qualityintegerno90Calidad de imagen fija para la codificación WebP, de 1 a 100.
--presetstringnono establecidosignage-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-audiobooleannoapagadoOmitir la pista de audio en la entrega de video. Solo video; no se puede combinar con --no-transcode.
--tag TAGstringnoningunoAplicado cuando un elemento omite su propia etiqueta.
--folder IDstringnoraíz de la bibliotecaUna carpeta de medios mfd_ existente, verificada antes de comenzar cualquier trabajo. Cada elemento llega a ella cuando está listo, y data.folder_id la reporta. Un usuario de carga debe nombrar una de sus carpetas.
--no-progressbooleannoapagadoNo emitir salida de progreso.
screenrig media upload-batch ./images.json --state ./upload-state.json

El 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, cada uno con su path y su problem; data.accepted, data.resumed, data.attempts, data.rate_limited, data.wait_ms y data.transfer_ms cuentan la ejecución. Un elemento se intenta hasta 8 veces, con espera entre intentos, mientras la respuesta sea un límite de tasa o un error del servidor.

Si hay fallos, el código de salida sigue al último elemento fallido: 7 para un límite de tasa, 9 para un error del servidor, 2 para un error de uso, y en otro caso 8. Ejecute de nuevo el mismo comando con el mismo manifiesto para subir solo lo que no llegó.

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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
<file>rutasíningunoLa 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 REVISIONstringnoningunoPrecondició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 TEXTstringnoningunoSe conserva con la nueva versión y se muestra a la persona que la revisa. Como máximo 280 caracteres.
--content-type TYPEstringnodetectado a partir de los bytes subidosDeclare usted mismo el tipo de contenido en lugar de dejar que la CLI lo detecte.
--no-waitbooleannoapagadoDevolver tan pronto como se acepte el reemplazo. El archivo nuevo aún no está en uso; termine con operations wait.
--poll-ms MSintegerno1000Intervalo entre sondeos de operación mientras espera.
--timeout MSintegerno120000Fecha límite para la espera. También limita cada solicitud subyacente.
--no-transcodebooleannoapagadoSuba los bytes de origen sin cambios. ffmpeg, ffprobe y cwebp no se ejecutan. El archivo ya debe ser un PNG, JPEG, WebP, GIF, MP4, WebM o MP3, y WebP sin pérdida sigue siendo rechazado. No se puede combinar con --codec, --max-fps, --max-edge, --webp-quality, --preset ni --no-audio.
--codecstringnoh264h264 o hevc. Use hevc solo cuando todas las pantallas que reproducirán el clip sean Player nativos.
--max-fps Nnumberno30Velocidad 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 PIXELSintegerno3840Lí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-qualityintegerno90Calidad de imagen fija para la codificación WebP, de 1 a 100.
--presetstringnono establecidosignage-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-audiobooleannoapagadoOmitir la pista de audio en la entrega de video. Solo video; no se puede combinar con --no-transcode.
--no-progressbooleannoapagadoNo 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 archivo conserva su ID, sus etiquetas y su carpeta, así que cada lista de reproducción y programación que lo nombra reproduce el archivo nuevo en el siguiente manifiesto, y los selectores por etiqueta, carpeta y all también lo recogen. No se reprograma nada. El comando ejecuta los mismos pasos que media upload (conversión, el límite de bytes de video del plan, los límites de dimensiones, el límite de almacenamiento del plan, la transferencia firmada) y luego reemplaza en lugar de añadir un archivo nuevo. No acepta --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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--limit Nintegernocada páginaLeer una página de esta cantidad de versiones, de 1 a 100.
--cursor CURSORstringnoningunoLeer la página que sigue al data.next_cursor de la página anterior.
screenrig media versions med_01EXAMPLEIMAGE0000000000

data.items tiene una entrada por cada archivo que ha tenido el contenido multimedia: number, current, filename, source_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), restored_from y created_at. 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--number NintegersíningunoEl número de la versión que se va a volver a poner en uso, tal como lo enumera media versions.
--expect-rev REVISIONstringnoningunoPrecondición de revisión opcional. Un valor obsoleto suministrado es revision_conflict: lea media show ID y ejecute de nuevo el comando.
--note TEXTstringnoningunoSe 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--number NintegersíningunoEl número de la versión que se va a eliminar, tal como lo enumera media versions.
screenrig media version delete med_01EXAMPLEIMAGE0000000000 --number 2

El 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
screenrig media show med_01EXAMPLEIMAGE0000000000

media download#

Escriba una versión almacenada en disco para inspección. Nunca imprima los bytes.

media download <id> [--output FILE]
ParámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--output FILErutano./<id>.<ext> en el directorio actualUna 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.webp

La respuesta informa media_id, path, bytes, sha256, content_type, primitive, filename, source_filename opcional y width / height. Nunca incluye píxeles. Úsela para revisar una imagen antes de que llegue a la pantalla.

media list#

Listar objetos multimedia, opcionalmente filtrados por etiqueta, primitivo y carpeta.

media list [--tag TAG] [--primitive image|video|audio] [--folder ID|root] [--library]
ParámetroTipoRequeridoPredeterminadoNotas
--tag TAGstringnoningunoCoincidir ^[A-Za-z0-9]{1,32}$. Los objetos sin etiqueta se omiten siempre que este filtro esté presente.
--primitivestringnotodoimage, video o audio. Restringe la lista a imágenes fijas, clips o pistas de banda sonora.
--folder ID|rootstringnocada carpetaSolo 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.
--librarybooleannoapagadoEnumera 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 --library

Cada fila lleva folder_id, que está ausente en la raíz de la biblioteca.

media selector-preview#

Previsualizar qué archivos listos coinciden ahora con un selector dinámico de medios, sin publicar una lista de reproducción ni avanzar un Player.

media selector-preview <selector.json> --primitive image|video [--rect WxH] [--timezone IANA]
ParámetroTipoRequeridoPredeterminadoNotas
<selector.json>rutasíningunoUn archivo JSON con un selector de medios all, tag o folder, o - para stdin. Una etiqueta con un token de pantalla no puede previsualizarse.
--primitivestringsíningunoimage o video: el tipo de archivo que coincide con el selector.
--rect WxHstringcon fit: "aspect"ningunoEl tamaño del rectángulo del primitivo, como 1080x1920, con ambos números mayores que 0.
--timezone IANAstringnoUTCLa zona horaria en la que se leen las reglas de disponibilidad de los archivos, como America/New_York.
screenrig media selector-preview selector.json --primitive video
screenrig media selector-preview selector.json --primitive image --timezone America/New_York

Las claves del selector (order, batch_size, one_at_a_time, weights y fit) se describen en Filtros de etiquetas y lotes de reproducción y Rotación ponderada y ajuste por aspecto.

La respuesta incluye matched_count, los candidates ordenados por nombre de archivo (media_id, filename, tags, width, height), el selector normalizado y, en excluded, los archivos descartados con su reason: aspect_mismatch para fit: "aspect", y outside_window para un archivo cuya regla de disponibilidad no se cumple ahora. Con order: "weighted", cada candidato incluye weight y share_percent, y cycle es el número de reproducciones tras las cuales cada elemento ha sonado exactamente su peso. Más de 1024 coincidencias es invalid_request. Basta con acceso de lectura. La vista previa lee el proyecto autenticado, nunca avanza un cursor ni cambia un manifiesto, y un cambio del catálogo posterior se recoge en el siguiente límite de ciclo de cada Player.

media update#

Reemplazar o borrar las etiquetas de 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--tag TAGstringuno de los tresningunoLa etiqueta de reemplazo, de una a 32 letras o dígitos. Pasa a ser la única etiqueta del objeto.
--tags TAG1,TAG2stringuno de los tresningunoEl conjunto de etiquetas de reemplazo: de 1 a 32 etiquetas únicas separadas por comas, cada una de una a 32 letras o dígitos.
--clear-tagbooleanuno de los tresapagadoElimina todas las etiquetas y deja el objeto sin etiquetar.
--expect-rev REVISIONstringnoningunoPrecondició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 LobbyLoop
screenrig media update med_01EXAMPLEIMAGE0000000000 --tags Summer,Drinks

Con 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--file FILErutauno de los dosningunoUna regla de disponibilidad JSON, o - para stdin.
--clearbooleanuno de los dosapagadoElimina la regla; el archivo siempre está disponible.
--expect-rev REVISIONstringnorevisión actualPrecondición opcional de revisión. Si se omite, el comando lee primero la revisión actual del medio. Un valor obsoleto suministrado es revision_conflict: volver a obtener, reaplicar, reintentar.
screenrig media availability med_01EXAMPLEIMAGE0000000000 --file rule.json

Los miembros y el comportamiento de la regla están en Disponibilidad de medios. Un archivo a la espera de la revisión de una persona se rechaza con media_pending_review: decida primero esa revisión.

media delete#

Eliminar un objeto multimedia.

media delete <id> [--expect-rev REVISION]
ParámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de objeto med_.
--expect-rev REVISIONstringnoningunoPrecondició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_01EXAMPLEIMAGE0000000000

media 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ámetroTipoRequeridoPredeterminadoNotas
<id>...stringsíningunoUno o más ID de archivo med_ y ID de carpeta mfd_, como máximo 1000 en total.
--folder IDstringuno de los dosningunoLa carpeta de destino mfd_.
--rootbooleanuno de los dosapagadoMover a la raíz de la biblioteca.
screenrig media move med_01EXAMPLEIMAGE0000000000 med_01EXAMPLEVIDEO0000000000 --folder mfd_01EXAMPLEFOLDER000000000
screenrig media move mfd_01EXAMPLEFOLDER000000000 --root

El 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ámetroTipoRequeridoPredeterminadoNotas
--librarybooleannoapagadoEnumera 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 --library

Devuelve 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de carpeta mfd_.
screenrig media folder show mfd_01EXAMPLEFOLDER000000000

El 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ámetroTipoRequeridoPredeterminadoNotas
--name NAMEstringsíningunoDe 1 a 100 caracteres, recortados. Los nombres pueden repetirse.
--parent IDstringnoraíz de la bibliotecaLa carpeta mfd_ para crearla.
screenrig media folder create --name Menus
screenrig media folder create --name Lunch --parent mfd_01EXAMPLEFOLDER000000000

Una 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de carpeta mfd_.
--name NAMEstringal menos uno de --name, --parent, --rootsin cambiosEl nuevo nombre, de 1 a 100 caracteres.
--parent IDstringal menos uno de --name, --parent, --rootsin cambiosMueva la carpeta, con todo su contenido, a esta carpeta mfd_. No con --root.
--rootbooleanal menos uno de --name, --parent, --rootapagadoMueva la carpeta a la raíz de la biblioteca. No con --parent.
--expect-rev REVISIONstringnoningunoPrecondició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 --root

Una 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ámetroTipoRequeridoPredeterminadoNotas
<id>stringsíningunoEl id de carpeta mfd_.
--expect-rev REVISIONstringnoningunoPrecondició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_01EXAMPLEFOLDER000000000

Elimina 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.

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.

Un selector folder, { "by": "folder", "folder_id": "mfd_…" }, reproduce los archivos listos que están directamente dentro de una carpeta multimedia y ninguno de sus subcarpetas; media folder list muestra los ids. Admite los mismos order, one_at_a_time y batch_size que all y tag, y al eliminar una carpeta sus archivos suben un nivel y el selector queda vacío.

El conjunto de candidatos contiene hasta 1024 medios listos por selector, con 1024 referencias de medios en la instantánea completa del ciclo. Una escritura cuenta cada selector all, tag o folder como 32 de esas referencias y un selector ids como su longitud. Una coincidencia mayor devuelve un error; restrinja los filtros. batch_size es un límite aparte de 1–1024 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 pase restante. one_at_a_time: true reproduce un elemento por aparición y solo permite un tamaño de lote omitido o batch_size: 1. En las páginas de duración, de aplicación y audio_end, todo selector all, tag, folder y ids de varios ids requiere one_at_a_time: true, y se rechaza dwell_ms. 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 y mezcla una vez un selector random. 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. La rotación ponderada es una función de Plus: sin ella, una escritura que fija un peso que un elemento aún no tiene recibe feature_not_in_plan, mientras que la rotación igual, conservar los pesos guardados y quitarlos siguen disponibles. Todos los Players reproducen el orden ponderado. A un Player que no declara la capacidad de host selector.weighted se le envía random, y los diagnósticos del manifiesto llevan 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 archivo de un selector ponderado y, con fit: aspect, enumera los archivos que deja fuera; 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. Un token puede ir junto a letras y dígitos en una plantilla de hasta 128 caracteres. 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:

TokenValor
{screen.id}El identificador de la pantalla sin su prefijo scr_.
{screen.name}El nombre de la pantalla.
{screen.timezone}La zona horaria IANA efectiva de la pantalla: su anulación, si no la zona que informa su Player, si no UTC.
{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, los params rellenados, de un máximo de 4096 caracteres en conjunto una vez codificados en porcentaje, le llegan en context.params en todos los Players (SDK). La app web del Player y los Players que la ejecutan (Samsung Tizen, BrightSign, LG webOS y Vega) también añaden cada uno a la dirección de lanzamiento después de ticket, codificado en porcentaje, de modo que la aplicación puede leer location.search. 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.…}.

Las primitivas de aplicación de una misma lista de reproducción que fijan la misma versión llevan los mismos params.

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. Sin --expect-rev, el comando lee primero la revisión actual del medio. Un archivo a la espera de la revisión de una persona se rechaza con media_pending_review.

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), con hasta 16 windows, 16 entradas monthly, 100 dates y 100 fechas except. 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. media selector-preview con --timezone ZONE (UTC por defecto) lee las reglas en esa zona y lista en excluded los archivos fuera de su regla en ese momento, con el motivo outside_window.

Otros grupos de comandos