Cada comando é executado da mesma forma
screenrig [--json | --human] [--api-url URL] [--config PATH] [--request-id ID]
[--project-id ID] [--idempotency-key KEY] [--timeout MS] [--beta-key KEY] <command> [args]Flags globais
| Sinalizar | Tipo | Padrão | Notas |
|---|---|---|---|
--json | boolean | JSON para operações | Saída JSON explícita, mantida para compatibilidade. Também seleciona ajuda estruturada. Não pode ser combinado com --human. |
--human | boolean | desligado | Selecione saída operacional legível. Não pode ser combinado com --json. |
--project-id ID | string | último projeto usado | Corrija esta invocação para um projeto em cache sem alterar a seleção. Cada comando mantém seu alvo e estado de recuperação durante toda a execução. |
--api-url URL | string | https://api.screenrig.ai | Origem do plano de controle. SCREENRIG_API_URL define a mesma coisa. |
--config PATH | caminho | o arquivo de configuração do usuário | Use um arquivo de configuração específico. SCREENRIG_CONFIG define a mesma coisa. |
--request-id ID | string | gerado por execução | Seu próprio ID de solicitação, retornado como request_id. Mantenha-o nos relatórios. |
--idempotency-key KEY | string | derivado por gravação | Reutilize a mesma chave para tentar novamente uma gravação ambígua. O servidor retorna o resultado original por vinte e quatro horas; um corpo diferente sob a mesma chave é idempotency_mismatch. |
--timeout MS | integer | 30000 por solicitação | Limita cada requisição HTTP. Em um comando que espera uma operação, é o prazo de espera, e o padrão é 120000. |
--beta-key KEY | string | não definido | Enviado somente quando o plano de controle solicitar um. SCREENRIG_BETA_KEY define a mesma coisa. |
--help, -h | boolean | desligado | Imprime ajuda focada para o comando ou grupo e sai. Adicione --json para ajuda estruturada. |
--version, -V | boolean | desligado | Imprime a versão do CLI empacotada e sai. Igual ao comando version. |
Ambiente
| Variável | Efeito |
|---|---|
SCREENRIG_API_URL | Origem do plano de controle, substituindo a configuração armazenada. |
SCREENRIG_CONFIG | Caminho para o arquivo de configuração. |
XDG_CONFIG_HOME | Base do diretório de configuração. Caso contrário %APPDATA%\screenrig no Windows, ou ~/.config/screenrig. |
SCREENRIG_BETA_KEY | Chave beta, quando o plano de controle solicitar uma. |
SCREENRIG_FFMPEG | Caminho absoluto para ffmpeg, quando media upload não deve obtê-lo de PATH. |
SCREENRIG_FFPROBE | Caminho absoluto para ffprobe. |
SCREENRIG_CWEBP | Caminho absoluto para cwebp, o codificador de fallback ainda. |
SCREENRIG_CLIENT_ID | Execute como este cliente de serviço (scl_…), com exatamente um dos dois seguintes. |
SCREENRIG_CLIENT_KEY_FILE | O arquivo da chave privada do cliente de serviço, um JWK ou PEM, assinado em uma asserção private_key_jwt. |
SCREENRIG_CLIENT_SECRET | O segredo do cliente de serviço, enviado com HTTP Basic. |
Não há flag de token nem variável de ambiente de token. O CLI lê a sessão que o plugin armazenou para esta instalação, em um arquivo privado do usuário que sobrevive a uma atualização do plugin, e a renova sozinho. Com SCREENRIG_CLIENT_ID definido, ele entra como esse cliente de serviço em vez disso, mantém o token na memória e nunca lê ou escreve a configuração armazenada.
Saída
Comandos operacionais escrevem JSON no stdout por padrão, incluindo erros. Um único resultado carrega um envelope: ok, depois data, request_id, operation_id e warnings[] em caso de sucesso, ou error em caso de falha. Progresso, URLs seguras e notas humanas vão para stderr. events follow emite NDJSON: um envelope JSON por evento, em sua própria linha. Redirecionar stdout não altera o formato.
Use --human para inspeção manual. Comandos de evento então imprimem uma linha logfmt por evento. Ajuda e grupos de comandos simples permanecem texto legível por padrão; use screenrig --json playlist --help para descoberta estruturada. --json e --human não podem ser combinados.
Pacotes de plugin mais antigos podem exigir --json explícito para resultados operacionais. Verifique a ajuda do CLI instalado ao trabalhar com um pacote antigo. Arquivos de autoria de playlist continuam sendo documentos JSON; um envelope de resultado de comando não é um documento de playlist editável.
Um envelope de erro carrega error.status, um error.code estável, e frequentemente error.next.command nomeando exatamente o que executar a seguir. Ramifique-se nesses em vez de no texto.
Uma alteração que aguarda a revisão de uma pessoa é um sucesso, não um erro: ok: true, sair 0, data.status: pending_review com o review, um aviso pending_review nomeando a URL da revisão, e data.next apontando para reviews show ID. Uma retag de mídia aprovada sob revisão é ok, sair 0, com o aviso media_review_pending em vez disso: sua revisão aparece em reviews list em poucos segundos. Veja Revisões.
Códigos de saída
| Código | Significado |
|---|---|
0 | Sucesso. |
1 | Falha inesperada. |
2 | Erro de uso. Nada foi enviado. |
3 | Problema de credencial. Esta instalação não pode autenticar. |
4 | Não encontrado. |
5 | Conflito. |
6 | Pré-condição falhou, incluindo revision_conflict: a revisão --expect-rev estava obsoleta. |
7 | Limite de taxa. Honre Retry-After, exibido como retry_after_seconds. |
8 | Outra rejeição do lado do cliente. |
9 | Erro do servidor. |
10 | Falha de rede. |
11 | Tempo esgotado. |
12 | Erro de configuração. |
13 | A operação em si falhou. |
Códigos comuns de problema no envelope:
| Código | Significado | Próximo passo |
|---|---|---|
not_enrolled | Esta instalação ainda não possui credencial de projeto. | Criar um projeto com screenrig agent enroll --email ADDRESS --organization NAME, ou entrar nesta instalação em um projeto ao qual você pertence com screenrig login. |
session_ended | O login foi revogado, expirou ou terminou. | screenrig login, aprovado por uma pessoa no dashboard. |
insufficient_access | O nível de acesso da sessão não permite isso: Somente leitura não altera nada, e Propor não pode excluir, controlar telas ou gastar. | screenrig agent status mostra effective_access. Quando access_limited_by nomeia project ou person, o proprietário do projeto altera a configuração de avaliação; caso contrário screenrig login --access manage, aprovado por uma pessoa. |
approver_required | Só o proprietário do projeto ou um membro que possa aprovar pode fazer isso, como dar a um agente acesso Gerenciar. | Peça ao proprietário do projeto para ativar Pode aprovar, ou escolher Somente leitura ou Propor. |
playlist_not_approved | A playlist ainda não tem uma versão aprovada, então nenhuma tela pode exibí-la. | Aguarde a revisão (screenrig reviews show ID), ou escolha uma playlist aprovada. |
review_not_pending | A revisão já foi decidida, retirada ou substituída. | screenrig reviews show ID para seu estado. |
login_denied, login_expired | A pessoa negou o login, ou seu código de 24 horas expirou. | Execute screenrig login novamente. |
client_auth_failed | A chave, segredo ou id de um cliente de serviço foi recusado. | Compare o arquivo de chave ou de segredo com que a configuração entra (login --client-id ID --client-key-file FILE ou --client-secret-file FILE) com screenrig service-client show ID. |
capability_required | O projeto não tem a capacidade que este comando precisa, como screens ou advertiser. | screenrig project capabilities, então escolha o --intent correspondente para um novo projeto ou altere o propósito do projeto. |
rate_limited | Muitas solicitações na janela atual. | Aguarde retry_after_seconds, depois tente novamente. |
free_organization_limit | A pessoa já possui sua organização Standard gratuita, então project create não pode iniciar outra. | Adicione o projeto à organização indicada nos detalhes: screenrig project create NAME --organization-id ID. Outra organização precisa de Plus, Premium ou Enterprise pelo formulário de contato em https://screenrig.ai/contact#message. |
organization_plan_required | A organização não admite novas telas até que um plano pague por elas. | O proprietário move o projeto com screenrig project moves e screenrig project move --organization-id ID, ou a organização contrata Plus, Premium ou Enterprise pelo formulário de contato em https://screenrig.ai/contact#message. |
Revisões e tentativas
Guardas de revisão são opcionais. Omitir --expect-rev para gravar o recurso atual sem uma leitura prévia da revisão. Forneça com um revision conhecido para rejeitar gravações obsoletas. Em revision_conflict, recupere o recurso, reaplique a alteração e tente novamente com a revisão retornada. Em uma falha de transporte ambígua, tente novamente com o mesmo --idempotency-key; o plano de controle retorna o resultado original em vez de gravar duas vezes.
Créditos
O plano de controle mede um crédito por comando autenticado faturado e um por evento de fluxo de projeto faturado. Esses comandos do plano de controle não debitam crédito e continuam funcionando com saldo zero: project show, agent status, notes list, notes show, screen reload, screen toast e screen screenshot. Abrir events follow custa um crédito como a inscrição, e a reprodução após uma reconexão é gratuita. Um comando de frota, screen assign, screen reload, screen toast ou screen tag com vários ids de tela ou --tag, é uma ação faturada sem limite de contagem de telas, incluindo todas as continuações, então um recarregamento ou toast de frota é faturado, mesmo que um único seja gratuito. screen screenshot --tag segue todas as páginas de lista, cada uma faturada, para resolver as telas marcadas; as capturas em si são gratuitas. Os e-mails de notificação e os avisos de tela são gratuitos. Cada tentativa de entrega de webhook de um evento do projeto é medida como um evento faturado do stream de escuta. Cada página JSON de playback plays ou playback list é uma requisição faturada, e uma exportação CSV de reprodução é uma requisição faturada para todo o seu intervalo.
Superfície CLI integrada
Os comandos são agrupados da mesma forma que o CLI os agrupa. Instalação e primeiro uso são abordados em Início; a escolha entre upload, geração, cartões e seletores é abordada em Compor.
Nomes de comandos e descoberta
Use show para inspecionar um recurso, list para coleções e kv get / kv set para valores. Use --name para nomes de exibição, --screen-id, --app-id, --playlist-id e --release-id para seletores de recursos, --expect-rev para guardas de revisão e --after para cursores de eventos. O grupo é app; “application” é o nome do recurso. Comentários mantêm comment ACTION screen|playlist ID.
Use screenrig help --all para o inventário completo ou screenrig playlist init
--help para ajuda focada. Adicione --json para metadados de argumentos, escolhas, padrões, exemplos, aliases e relações de opções. Os grupos exactlyOne, atLeastOne e together são verificados antes da configuração ou acesso à rede; requires significa que a primeira opção requer todas as opções restantes. Leia stdin apenas onde a ajuda do comando explicitamente suporta -.
Criar um novo projeto
screenrig agent enroll --email ADDRESS --organization "Screens"
agent enroll cria uma identidade, organização, projeto Screens e associação, e armazena credenciais de identidade e projeto privadamente. Reutilize o nome da organização já fornecido, ou use Screens sem prompt de escolha. --organization é obrigatório; --name nomeia separadamente o agente. Use o e-mail de contato real da pessoa. A inscrição envia um convite de membro do projeto por e-mail; não divulga se esse endereço já tem login. A pessoa abre o convite e cria um login com passkey, ou entra para adicionar o projeto ao login existente. A aceitação move o projeto para a organização que detém o domínio de e-mail verificado da pessoa, caso contrário para a organização Standard gratuita que já possui, renomeada em caso de conflito de nome.
Adicione --intent advertising para um projeto que compra anúncios em vez de parear telas. --force substitui o estado de inscrição ou conexão pendente desta instalação ao criar intencionalmente outro projeto.
agent enroll --email ADDRESS --organization NAME [--name NAME]
[--intent signage|advertising] [--force]
Faça login com AgentID
Um agente com um AgentID faz login em https://api.screenrig.ai/agentid/start, recebe um código de reivindicação, instala o plugin oficial e executa screenrig agent enroll --agentid-claim CODE --organization NAME. O e-mail verificado do proprietário recebe o convite do dashboard.
Faça login em uma conta existente
screenrig loginlogin registra esta instalação em uma conta que já existe. Imprime um endereço do dashboard e um código, então espera até 24 horas. Uma pessoa abre o endereço, que carrega o código, verifica se corresponde, ajusta o projeto, Somente leitura, Propor ou Gerenciar, ou as áreas de capacidade se desejar, e pressiona Conectar uma vez; um login no dashboard da última hora é a prova, então não há segundo prompt de passkey. O CLI armazena a sessão, seleciona o projeto aprovado e retorna status: signed_in com o projeto, organização e access.
login [--project ID] [--access read|propose|manage] [--name NAME] [--no-wait] [--resume ID]
logout--access solicita um nível; o padrão é manage, e a pessoa decide. --project sugere o projeto. --no-wait retorna status: pending com o verification_uri_complete, o user_code e um identificador login_ que não contém segredo; login --resume ID aguarda aprovação posterior. Execute login novamente em uma instalação conectada para adicionar outro projeto ou para elevar um projeto Somente leitura ou Propor para Gerenciar.
Cada sessão carrega áreas de capacidade: screens, content, playlists, advertising, reports e project. Uma sessão executa apenas comandos em suas áreas; reports também lê qualquer área. Um comando fora delas retorna 403 forbidden com o detalhe This agent credential lacks the <name> capability.. Sessões somente leitura listam e leem. Sessões de proposta também enviam mídia, escrevem notas e propõem alterações de mídia, playlist e tela, que aguardam a revisão de uma pessoa. Uma alteração além do nível da sessão retorna 403 insufficient_access.
logout revoga o login no servidor e remove os tokens armazenados. Uma falha que pode não ter alcançado o servidor os mantém, então reexecutar logout é seguro. doctor mostra quando a sessão termina: 90 dias após seu último uso, e no máximo um ano após o login. Veja Autenticação.
Ciclo de vida do projeto e organização
O projeto atual é o último usado. Cada envelope JSON inclui contexto de organização e projeto; a saída humana nomeia ambos. Credenciais de identidade são limitadas pela associação do projeto selecionado. O estado de nova tentativa permanece separado por projeto.
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 membros acessíveis. project use seleciona um. Criar requer um nome único em sua organização e padrão para a organização do projeto atual, depois para a organização que você administra; quando nenhuma é nomeada, a organização que detém o domínio de e-mail verificado do proprietário vem primeiro. A pessoa responsável torna-se proprietária. Cada plano limita quantos projetos uma organização pode conter; cada pessoa tem uma organização Standard gratuita, e uma segunda requer Plus, Premium ou Enterprise. Sem projeto atual e sem organização nomeada, o servidor posiciona o projeto da mesma forma. --organization NAME inicia uma nova organização apenas para uma pessoa que não possui uma gratuita; caso contrário, a criação é recusada com free_organization_limit, cujo detalhe nomeia a organização a usar. A inscrição é governada por limites de taxa.
O proprietário pode mover para um destino retornado por project moves, ou transferir a propriedade para um membro verificado existente. Uma movimentação carrega telas, e uma organização de destino que já tem tantos projetos quanto o plano permite a recusa com project_limit_reached. A exclusão usa o nome atual exato e revisão positiva de sua prévia. Requer zero telas não arquivadas, nenhum plano próprio, nenhuma obrigação de carteira e nenhuma publicidade ativa. Envia e-mail aos membros e mantém uma lápide.
Nomes de organizações podem se repetir; use IDs explícitos ao renomear uma organização que você administra. Uma organização tem administradores designados e membros que a têm como organização principal; administradores convidam outros administradores e membros por e-mail pelo dashboard. organization list marca organizações free e plan_required e relata new_organization_allowed. Sua lista de projetos não concede acesso ao conteúdo do projeto. A organização paga: seu dinheiro e cotas são compartilhados por seus projetos; o uso permanece atribuído aos projetos e cobranças históricas mantêm seu pagador original.
login --project ID solicita esse projeto na mesma identidade. Apenas aprovação explícita desta solicitação concede uma associação. agent disconnect --yes revoga uma associação; agent revoke-identity --yes revoga separadamente a identidade e todas as associações. Uma resposta ambígua mantém credenciais locais e estado de tentativa para reconciliação.
Relatórios de publicidade mantêm fatos de liquidação além da retenção de eventos. Leia seus metadados de cobertura: execuções históricas ausentes ou duração aprovada desconhecida são desconhecidas, nunca zero. Um relatório pode ter totais financeiros completos e histórico de resultados incompleto.
Projetos, convites e diagnósticos
Comandos do projeto listam associações, selecionam um projeto, criam projetos e gerenciam seus nomes, proprietários, transferências e exclusão. Convites trazem pessoas para projetos ou redes de anúncios.
project show#
Ler o registro do projeto e seu crédito restante.
project show
Sem parâmetros.
screenrig project show
data.credit_remaining é uma contagem inteira de créditos. Abaixo de 1000 o envelope pode carregar um aviso credits_low. Até 1º de jan de 2027 o uso é gratuito dentro do razoável, então crédito restante é um medidor inteiro que um agente pode ler, não uma instrução de desligamento.
project rename#
Defina o nome que as pessoas veem no seletor de projetos do dashboard.
project rename NAME
project capabilities#
Ler o plano do projeto, flags de recurso independentes screens e advertiser, e conjunto de capacidades efetivas. Uma negação de rota prevalece sobre uma leitura de capacidade desatualizada.
project capabilities
project uptime#
Ler a disponibilidade diária de telas do projeto ao longo dos dias UTC.
project uptime [--day-from YYYY-MM-DD] [--day-to YYYY-MM-DD]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--day-from YYYY-MM-DD | string | não | 29 dias antes de --day-to | Primeiro dia UTC, inclusivo. |
--day-to YYYY-MM-DD | string | não | hoje | Último dia UTC, inclusivo. No máximo 366 dias após --day-from. |
screenrig project uptime
screenrig project uptime --day-from 2026-09-01 --day-to 2026-09-30Intervalo e padrões são os de screen uptime. data.items lista uma linha por dia UTC, do mais antigo para o mais recente: online_s e offline_s somados sobre as telas com estado registrado naquele dia, availability, coverage (a parte do dia dessas telas com estado registrado) e screens (quantas tiveram estado registrado). A linha de hoje cobre intervalos que terminaram até agora; screen list mostra quem está online agora.
project health-trend#
Ler a saúde da frota por hora UTC: telas reportando, quente, display desconectado, travando.
project health-trend [--from TIME] [--to TIME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--from TIME | string | não | 24 horas antes de --to | Início inclusivo da hora: um instante RFC 3339 com segundos e um deslocamento (normalizado para UTC), now, ou uma idade como 7d, 12h ou 30m. |
--to TIME | string | não | agora | Fim exclusivo, nas mesmas formas. No máximo 93 dias após --from. |
screenrig project health-trend
screenrig project health-trend --from 7ddata.items lista a saúde da frota por hora UTC: hour, screens_reporting, hot (temperatura máxima igual ou acima de 80 °C), display_disconnected, e crashing (3 ou mais falhas em 24 horas). O CLI segue next_cursor até o fim e responde a cada hora com next_cursor null. As horas seguem os relatórios com até cerca de 5 minutos de atraso.
invitations#
Criar, listar ou revogar convites para membros do projeto e compradores de anúncios.
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 padrão para member. Entrega por e-mail é padrão e expira após sete dias. --email aceita destinatários separados por vírgula, até cinquenta por solicitação. --link é somente para membros, requer exatamente um destinatário pretendido, e retorna uma URL de convite de vinte e quatro horas uma vez para entrega direta. Nunca coloque essa URL em logs, notas ou transcrição compartilhada. Listas nunca a retornam.
Compradores de anúncios usam apenas e-mail e precisam de escopo de tela ou slot próprio (ou ambos). --screen-id e --slot-id aceitam IDs separados por vírgula; --policy seleciona trusted ou review_required. Filtros de status são queued, sent, issued, accepted, revoked, expired e 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
Agentes não aceitam convites. A pessoa convidada abre o e-mail, faz login ou cria uma passkey, e aceita no dashboard. O cadastro por link verifica o e-mail primeiro. Revogar um convite aceito não desfaz uma associação; use os controles de associação do comprador para revogar o acesso à publicidade.
agent status#
Relatar se esta instalação possui uma credencial utilizável.
agent status
Sem parâmetros.
screenrig agent status
Somente leitura. Nunca altera estado local ou do servidor, e não custa nada. O resultado carrega o access da sessão, seu effective_access e, quando a configuração de revisão do projeto ou um membro que não pode aprovar mantém isso baixo, access_limited_by (project ou person).
login#
Faça login desta instalação em uma conta existente, com aprovação de uma pessoa no dashboard.
login [--project ID] [--access read|propose|manage] [--name NAME] [--no-wait] [--resume ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--project ID | string | não | nenhum | Sugira o projeto que a pessoa aprova. |
--access LEVEL | string | não | gerenciar | read, propose ou manage. A pessoa faz a escolha final. |
--name NAME | string | não | nenhum | Nomeie esta instalação, no máximo 80 caracteres. |
--no-wait | boolean | não | desligado | Retornar status: pending com o endereço, o código e um identificador login_. |
--resume ID | string | não | nenhum | Aguarde o login pendente que --no-wait iniciou. |
screenrig login --access readImprime o endereço do dashboard e um código de oito letras no stderr, depois espera até 24 horas. A pessoa verifica se o código corresponde e pressiona Conectar uma vez, sem segundo prompt de passkey após login no dashboard na última hora. O envelope reporta status: signed_in, o projeto, a organização e access. Executar novamente em uma instalação logada adiciona um projeto ou eleva de Somente leitura ou Propor projeto para Gerenciar. Negação é login_denied e expiração é login_expired.
logout#
Encerrar o login desta instalação e remover seus tokens.
logoutSem parâmetros.
screenrig logoutRevoga o login no servidor, depois remove os tokens armazenados e reporta status: signed_out. Uma falha que pode não ter alcançado o servidor mantém os tokens, então executar novamente é seguro. Execute screenrig login para entrar novamente.
dashboard#
Abra a URL comum do dashboard. Este comando não gera um link de login, cria uma sessão ou precisa de credencial de agente.
dashboard [open]
screenrig dashboard
O dashboard mostra os projetos da pessoa após o login. A seleção de projeto no navegador não altera o projeto vinculado a um agente.
dashboard reset-sign-in#
Solicitar um e-mail de redefinição de login sem credencial de agente.
dashboard reset-sign-in --email ADDRESS
O reconhecimento não revela se o e-mail tem um login. O reset enviado por e-mail expira após uma hora; a pessoa cria uma nova passkey. A conclusão substitui suas credenciais de login e revoga outras sessões.
doctor#
Verifique esta instalação e relate cada verificação pelo nome.
doctor [--repair-config]
| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--repair-config |
boolean | não | desligado | Aperte as permissões em um arquivo de configuração existente que é legível por grupo ou outros. |
screenrig doctor
data.checks nomeia cada verificação e seu status: o runtime Node, o caminho de configuração resolvido e suas permissões, a origem do plano de controle e suas rotas de serviço, a capacidade feedback anunciada, e a cadeia de ferramentas de mídia opcional (ffmpeg, ffprobe, encoder_libx264, encoder_libx265, encoder_libwebp, cwebp, filter_hdr_tonemap).
Qualquer verificação falhada faz doctor sair com código diferente de zero, então leia os nomes individuais antes de chamar a instalação de não saudável. Uma cadeia de ferramentas de mídia ausente afeta apenas media upload.
version#
Imprime a versão do CLI empacotada e seu adaptador de protocolo.
version
Sem parâmetros.
screenrig version
Execute isto primeiro em uma sessão. Um envelope bem-sucedido prova que o launcher resolveu o CLI incluído. --version e -V fazem a mesma coisa de qualquer lugar na linha de comando.
Clientes de serviço
Um cliente de serviço é um servidor, script ou tarefa de CI pertencente ao projeto, que entra com sua própria chave ou segredo em vez da aprovação de uma pessoa. Para criar ou alterar um cliente, o agente precisa de acesso Gerenciar para sua identidade com o escopo identity, de sua própria autorização Gerenciar com a capacidade project no projeto de destino e de uma pessoa responsável verificada que administre a organização desse projeto. Um cliente de serviço nunca gerencia clientes. Para executar comandos como o cliente, defina SCREENRIG_CLIENT_ID com SCREENRIG_CLIENT_KEY_FILE ou SCREENRIG_CLIENT_SECRET. Veja Clientes de serviço.
service-client list#
Listar os clientes de serviço deste projeto, ativos e revogados, com suas chaves, IDs secretas e uso.
service-client listSem parâmetros.
screenrig service-client listNunca retorna um segredo.
service-client show#
Exiba um cliente de serviço.
service-client show ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
ID | string | sim | nenhum | O id do cliente, scl_…. |
screenrig service-client show scl_IDLista o kid de cada chave e o css_ de cada segredo para rotação.
service-client create#
Criar um cliente de serviço pertencente a este projeto.
service-client create --name NAME [--capability NAME]... [--access read|propose|manage] [--key-file PATH] [--secret-file PATH]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | No máximo 80 caracteres. |
--capability NAME | string | não | todos os seis | Repetível: screens, content, playlists, advertising, reports, project, cada um dentro do seu. |
--access LEVEL | string | não | ler | read, propose ou manage. propose envia alterações de playlist e tela para a revisão de uma pessoa. |
--key-file PATH | caminho | um destes | nenhum | Um JWK ou PEM: Ed25519, EC P-256 ou RSA de pelo menos 2048 bits. Apenas a metade pública é enviada. |
--secret-file PATH | caminho | um destes | nenhum | Gerar um segredo e gravá-lo neste novo arquivo 0600. Ele é exibido uma vez. |
screenrig service-client create --name "Nightly report" --access read --capability reports --key-file screenrig-client.pemRequer as autorizações de identidade, projeto e administração da organização descritas acima. No máximo 50 clientes ativos por organização, contados em todos os seus projetos. Uma chave sem seu próprio kid é identificada pela impressão digital RFC 7638.
service-client add-key#
Registre uma segunda chave pública para uma rotação sem tempo de inatividade.
service-client add-key ID --key-file PATH| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
ID | string | sim | nenhum | O id do cliente. |
--key-file PATH | caminho | sim | nenhum | A nova chave pública, um JWK ou PEM. |
screenrig service-client add-key scl_ID --key-file new.pemUm cliente possui no máximo duas chaves.
service-client add-secret#
Gerar um segundo segredo para uma rotação sem tempo de inatividade.
service-client add-secret ID --secret-file PATH| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
ID | string | sim | nenhum | O id do cliente. |
--secret-file PATH | caminho | sim | nenhum | Um novo arquivo 0600 que recebe o segredo. |
screenrig service-client add-secret scl_ID --secret-file new-secretUm cliente possui no máximo dois segredos. O atual continua funcionando até que você o remova.
service-client remove-key#
Remover uma chave; tokens emitidos com ela param de funcionar em segundos.
service-client remove-key ID --kid KID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
ID | string | sim | nenhum | O id do cliente. |
--kid KID | string | sim | nenhum | O id da chave de service-client show. |
screenrig service-client remove-key scl_ID --kid KIDUm cliente mantém pelo menos uma chave ou segredo.
service-client remove-secret#
Remover um segredo; tokens emitidos com ele param de funcionar em segundos.
service-client remove-secret ID --secret-id css_ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
ID | string | sim | nenhum | O id do cliente. |
--secret-id ID | string | sim | nenhum | O id secreto css_ de service-client show. |
screenrig service-client remove-secret scl_ID --secret-id css_IDservice-client revoke#
Revogar permanentemente um cliente de serviço.
service-client revoke ID --yes| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
ID | string | sim | nenhum | O id do cliente. |
--yes | boolean | sim | desligado | Confirme a revogação permanente. |
screenrig service-client revoke scl_ID --yesExclui suas chaves e segredos; seus tokens param de funcionar em segundos. O registro permanece para auditoria.
Mídia
Um objeto de mídia é uma imagem estática, um clipe ou uma faixa de áudio MP3, armazenado como exatamente uma versão. Não há fallback por dispositivo, então o que media upload ou media generate armazenam é o que toda tela tem que decodificar.
Pastas de mídia organizam a biblioteca. Um ID de pasta começa com mfd_ e um ID de arquivo com med_. Um upload cai na raiz da biblioteca a menos que --folder nomeie uma pasta, media move e media folder update reorganizem a árvore, e um seletor de playlist by:folder reproduza os arquivos diretamente dentro de uma pasta, não os de suas subpastas. Uma organização contém no máximo 1000 pastas em todos os seus projetos, aninhadas em até 10 níveis, com nomes de 1 a 100 caracteres.
Uma mídia mantém seu ID quando o arquivo muda: media replace troca o arquivo no lugar, de modo que cada playlist e agenda que a usa reproduz o novo, e media versions lista todos os arquivos que o item já teve.
media generate#
Gerar uma imagem estática apresentável de página inteira para a loja de mídia do projeto.
media generate --prompt TEXT [--aspect-ratio RATIO] [--quality low|medium|high] [--tag TAG]
[--no-progress]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--prompt TEXT | string | sim | nenhum | 1 a 4000 caracteres. Coloque todos os fatos e todo o texto no prompt para que o modelo de imagem os componha. |
--aspect-ratio RATIO | string | não | 16:9 | 1:1, 16:9, 9:16, 4:3, 3:4, 3:2 ou 2:3. |
--quality | string | não | medium | low, medium, ou high. Altera o nível de detalhe da imagem estática. |
--tag TAG | string | não | nenhum | Mesma tag de 1 a 32 letras ou dígitos do upload. |
--no-progress | boolean | não | desligado | Suprimir a linha iniciada no 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 LobbyMenuO comando armazena um WebP com perda na loja de mídia do projeto e retorna data.media_id (med_…). Não reenvie os bytes. Nunca imprima pixels ou o prompt. A árvore de autoria e o contrato do prompt vivem em Compose.
media upload#
Converter um arquivo local em bytes de entrega, enviá-lo e aguardar até que o objeto esteja pronto.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<file> | caminho | sim | nenhum | O quadro estático, clipe ou faixa de áudio de origem. O nome do arquivo torna-se o identificador humano em listagens, playlists e relatórios de reprodução, então nomeie-o pelo que mostra. |
--content-type TYPE | string | não | detectado a partir dos bytes enviados | Declare o tipo de mídia você mesmo em vez de deixar o CLI detectá-lo. |
--tag TAG | string | não | nenhum | De um a 32 letras ou dígitos, correspondendo a ^[A-Za-z0-9]{1,32}$. Hífens são rejeitados. Uma tag é o que torna media list --tag TAG um mapa confiável de nome de arquivo para id. |
--folder ID | string | não | raiz da biblioteca | Uma pasta de mídia mfd_ existente, verificada antes de qualquer trabalho começar. O upload pronto é movido para ela e data.folder_id o reporta. Recusado com --no-wait (usage_error, saída 2), porque o ID da mídia ainda não existe: execute media move uma vez que o objeto esteja pronto. |
--no-wait | boolean | não | desligado | Retornar assim que o commit for aceito. O objeto ainda não está pronto; finalize com operations wait. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
--timeout MS | integer | não | 120000 | Prazo para a espera. Também limita cada solicitação subjacente. |
--no-transcode | boolean | não | desligado | Envie os bytes da fonte sem alterações. ffmpeg, ffprobe e cwebp não são executados. WebP sem perdas ainda é rejeitado. |
--codec | string | não | h264 | h264 ou hevc; avc e h265 são aceitos como aliases. Use hevc somente quando todas as telas que reproduzirão o clipe forem Players nativos. |
--max-fps N | number | não | 30 | Taxa constante de quadros de saída. Todo vídeo é codificado exatamente nessa taxa, independentemente da taxa de origem, para que clipes consecutivos nunca mudem de taxa. Maior que 0 e no máximo 240. |
--max-edge PIXELS | integer | não | 3840 | Limite aplicado a cada borda, de 16 a 3840. A proporção é preservada e uma fonte menor nunca é ampliada. |
--webp-quality | integer | não | 90 | Qualidade da imagem estática para codificação WebP, de 1 a 100. |
--preset | string | não | não definido | signage-1080p30 ou signage-4k30. Tamanho de vídeo orientado e constante de 30 fps. --max-edge e --max-fps podem ajustar um preset, mas não ampliá-lo. Apenas vídeo; não pode combinar com --no-transcode. |
--no-audio | boolean | não | desligado | Omitir a faixa de áudio da entrega de vídeo. Apenas vídeo; não pode ser combinado com --no-transcode. |
--no-progress | boolean | não | desligado | Não emitir saída de progresso. O progresso sempre vai para stderr; stdout permanece reservado para o único envelope de resultado. |
screenrig media upload ./lobby-welcome-loop.mp4 --tag LobbyLoopVídeo torna-se um MP4: perfil alto H.264 nível 4.2 por padrão, ou H.265 com --codec hevc, em yuv420p marcado Rec. 709. Uma fonte HDR é mapeada para Rec. 709. Áudio, quando presente na fonte, é AAC a 192 kbit/s, 48 kHz, estéreo.
Imagens estáticas tornam-se WebP com perdas na qualidade 90, mantendo alfa onde a fonte tem. Fonte animada repete para sempre. WebP que já cabe no limite de tamanho é passado sem reencodificação.
Áudio vira MP3 para trilha sonora da playlist. Fonte MP3 é enviada sem alteração; fontes WAV, AAC, M4A, OGG e FLAC são convertidas para MP3 128 kb/s, que precisa de uma build ffmpeg com libmp3lame. Uma faixa dura de 1 segundo a 3 horas. playlist init transforma entradas de áudio em faixas de trilha sonora em vez de páginas. O objeto pronto é um objeto de mídia audio com duração. Não pode ser colocado numa página; nomeie na playlist audio trilha sonora em vez disso.
O id do objeto pronto é data.media_id. O mesmo valor é data.id e data.operation.result.media_id. Esse id é o que um seletor de playlist usa.
Um nome de arquivo com pouca informação como video.mp4 adiciona um aviso consultivo generic_filename ao envelope. O upload ainda é bem-sucedido e o CLI nunca renomeia o arquivo; escolha o nome antes de executar o comando.
A conversão executa ffmpeg e ffprobe de PATH, ou dos caminhos absolutos em SCREENRIG_FFMPEG e SCREENRIG_FFPROBE. Imagens fixas preferem o codificador ffmpeg libwebp e recorrem a cwebp em PATH ou SCREENRIG_CWEBP. Execute doctor antes do primeiro upload de uma sessão.
--preset signage-1080p30 limita a borda longa a 1920, a borda curta a 1080, e a taxa a 30 fps constante. signage-4k30 limita a borda longa a 3840, a borda curta a 2160, e a taxa a 30 fps constante. Ambos funcionam com conteúdo paisagem, retrato e quadrado. --no-audio omite codificação de áudio para clipes silenciosos. Essas opções aplicam-se apenas a vídeo.
screenrig media upload ./lobby.mov --preset signage-1080p30 --no-audioscreenrig media upload ./menu.png --folder mfd_01EXAMPLEFOLDER000000000O upload chega na raiz da biblioteca e se move para a pasta assim que estiver pronto. media upload-batch --folder move todos os itens carregados da mesma forma.
Com acesso Propor, ou quando o projeto exige revisão para alterações do agente, um novo envio espera pela revisão de uma pessoa antes que uma tag, pasta ou seletor all seja exibido; veja Revisões.
media upload-batch#
Enviar muitos arquivos locais a partir de um manifesto, retomando de um arquivo de estado necessário.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<manifest.json> | caminho | sim | nenhum | { "items": [ { "path": "./a.png", "tag"?: "Lobby", "content_type"?: "image/png" } ] } com 1 a 1000 itens. Os caminhos são relativos ao arquivo de manifesto. |
--state FILE | caminho | não | arquivo privado ao lado da configuração | Um arquivo JSON 0600 indexado pelo SHA-256 dos bytes locais de cada arquivo fonte. Itens já presentes com um media_id são reportados como resumed. Não compartilhe um arquivo de estado entre projetos. |
--concurrency N | integer | não | o padrão do CLI | Uploads paralelos. |
--no-transcode | boolean | não | desligado | Envie os bytes da fonte sem alterações, como media upload faz. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
--timeout MS | integer | não | 120000 | Prazo para a espera. Também limita cada solicitação subjacente. |
--codec | string | não | h264 | h264 ou hevc; avc e h265 são aceitos como aliases. Use hevc somente quando todas as telas que reproduzirão o clipe forem Players nativos. |
--max-fps N | number | não | 30 | Taxa constante de quadros de saída. Todo vídeo é codificado exatamente nessa taxa, independentemente da taxa de origem, para que clipes consecutivos nunca mudem de taxa. Maior que 0 e no máximo 240. |
--max-edge PIXELS | integer | não | 3840 | Limite aplicado a cada borda, de 16 a 3840. A proporção é preservada e uma fonte menor nunca é ampliada. |
--webp-quality | integer | não | 90 | Qualidade da imagem estática para codificação WebP, de 1 a 100. |
--preset | string | não | não definido | signage-1080p30 ou signage-4k30. Tamanho de vídeo orientado e constante de 30 fps. --max-edge e --max-fps podem ajustar um preset, mas não ampliá-lo. Apenas vídeo; não pode combinar com --no-transcode. |
--no-audio | boolean | não | desligado | Omitir a faixa de áudio da entrega de vídeo. Apenas vídeo; não pode ser combinado com --no-transcode. |
--tag TAG | string | não | nenhum | Aplicado quando um item omite sua própria tag. |
--folder ID | string | não | raiz da biblioteca | Uma pasta de mídia mfd_ existente. Todo item enviado é movido para ela após o upload, e data.folder_id o reporta. |
--no-progress | boolean | não | desligado | Não emitir saída de progresso. |
screenrig media upload-batch ./images.json --state ./upload-state.jsonO envelope carrega data.items[] na ordem do manifesto, cada um com path, source_filename, sha256, outcome (accepted ou resumed), e media_id. data.failed[] carrega itens que não foram entregues.
media replace#
Substituir o arquivo de uma mídia no lugar. Seu ID, suas playlists e suas agendas continuam 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
<file> | caminho | sim | nenhum | A nova imagem, clipe ou faixa de áudio. Ela deve ser do mesmo tipo que a mídia: imagem por imagem, vídeo por vídeo, áudio por áudio. Verificado antes de qualquer trabalho começar (usage_error, código de saída 2). |
--expect-rev REVISION | string | não | nenhum | Pré-condição de revisão opcional. Um valor obsoleto fornecido é revision_conflict e o upload declarado é cancelado: leia media show ID e execute o comando novamente. |
--note TEXT | string | não | nenhum | Guardada com a nova versão e mostrada à pessoa que a revisa. No máximo 280 caracteres. |
--content-type TYPE | string | não | detectado a partir dos bytes enviados | Declare o tipo de mídia você mesmo em vez de deixar o CLI detectá-lo. |
--no-wait | boolean | não | desligado | Retornar assim que a substituição for aceita. O novo arquivo ainda não está em uso; finalize com operations wait. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
--timeout MS | integer | não | 120000 | Prazo para a espera. Também limita cada solicitação subjacente. |
--no-transcode | boolean | não | desligado | Envie os bytes da fonte sem alterações. ffmpeg, ffprobe e cwebp não são executados. WebP sem perdas ainda é rejeitado. |
--codec | string | não | h264 | h264 ou hevc; avc e h265 são aceitos como aliases. Use hevc somente quando todas as telas que reproduzirão o clipe forem Players nativos. |
--max-fps N | number | não | 30 | Taxa constante de quadros de saída. Todo vídeo é codificado exatamente nessa taxa, independentemente da taxa de origem, para que clipes consecutivos nunca mudem de taxa. Maior que 0 e no máximo 240. |
--max-edge PIXELS | integer | não | 3840 | Limite aplicado a cada borda, de 16 a 3840. A proporção é preservada e uma fonte menor nunca é ampliada. |
--webp-quality | integer | não | 90 | Qualidade da imagem estática para codificação WebP, de 1 a 100. |
--preset | string | não | não definido | signage-1080p30 ou signage-4k30. Tamanho de vídeo orientado e constante de 30 fps. --max-edge e --max-fps podem ajustar um preset, mas não ampliá-lo. Apenas vídeo; não pode combinar com --no-transcode. |
--no-audio | boolean | não | desligado | Omitir a faixa de áudio da entrega de vídeo. Apenas vídeo; não pode ser combinado com --no-transcode. |
--no-progress | boolean | não | desligado | Não emitir saída de progresso. O progresso sempre vai para stderr; stdout permanece reservado para o único envelope de resultado. |
screenrig media replace med_01EXAMPLEIMAGE0000000000 ./menu-v2.png
screenrig media replace med_01EXAMPLEVIDEO0000000000 ./intro.mp4 --expect-rev 3 --note "Spring cut"A mídia mantém seu ID, suas tags e sua pasta, de modo que cada playlist e agenda que a nomeia reproduz o novo arquivo no próximo manifesto, e os seletores de tag, pasta e all também o incorporam. Nada é reagendado. O comando executa as mesmas etapas de media upload (conversão, limite de bytes de vídeo do plano, limites de dimensões, cota de armazenamento, transferência assinada) e depois substitui em vez de adicionar mídia nova. Ele não aceita --tag nem --folder.
Por padrão, o comando aguarda o processamento. data.media_id e data.id são o ID da mídia, data.version é o número do novo arquivo em media versions, e data.revision é a nova revisão da mídia. data.warnings, data.operation, data.upload, data.transcode e os tempos são informados como em media upload, e o ID da operação está no envelope. Com --no-wait, data.operation é a operação aceita, e data.version e data.warnings estão ausentes.
Uma proporção de tela alterada é permitida. O envelope traz um aviso aspect_ratio_changed, e data.warnings[].playlists nomeia as playlists que usam a mídia, então confira como elas ficam. Um arquivo com os mesmos bytes do atual é recusado com resource_conflict (código de saída 13).
Cada arquivo anterior permanece no histórico da mídia e conta nos bytes armazenados até que sua versão seja excluída; veja media versions.
Com acesso Propose, ou quando o projeto exige revisão para alterações do agente, a substituição aguarda uma pessoa e o comando tem sucesso (código de saída 0): data.status é pending_review, data.review_id nomeia a revisão, o aviso pending_review dá a URL dela e data.next é screenrig reviews show ID. A mídia continua reproduzindo o arquivo atual até que uma pessoa aprove; avise que ela está aguardando e não repita a gravação. Uma substituição mais recente da mesma mídia substitui a que aguarda. Veja Revisões.
media versions#
Lista os arquivos que uma mídia já teve, com o arquivo em uso primeiro.
media versions <id> [--limit N] [--cursor CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--limit N | integer | não | cada página | Ler uma página com esta quantidade de versões, de 1 a 100. |
--cursor CURSOR | string | não | nenhum | Ler a página seguinte ao data.next_cursor da página anterior. |
screenrig media versions med_01EXAMPLEIMAGE0000000000data.items tem uma entrada para cada arquivo que a mídia já teve: number, current, filename, content_type, sha256, bytes, width, height, duration_ms, codecs, source (upload, replace, sync ou restore), note, by (tipo person, agent, client ou sync, com ID e nome) e restored_from. O arquivo em uso vem primeiro (current: true), depois os demais, do mais recente ao mais antigo. A versão 1 é o primeiro upload; cada substituição, restauração ou alteração da sincronização de mídia adiciona o número seguinte.
Sem --limit e --cursor, todas as páginas são lidas e data.next_cursor é null. Com qualquer um dos dois, uma página é lida: enquanto data.next_cursor for uma string, execute o comando novamente com --cursor definido com esse valor. O acesso somente leitura basta. Os bytes de uma versão anterior permanecem armazenados e contam nos bytes armazenados do projeto até que media version delete os remova; não há limite de quantas versões são mantidas, e os bytes armazenados acima do armazenamento gratuito do plano são cobrados como qualquer outro armazenamento.
media restore#
Colocar uma versão anterior de volta em uso como nova versão.
media restore <id> --number N [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--number N | integer | sim | nenhum | O número da versão a colocar de volta em uso, como media versions a lista. |
--expect-rev REVISION | string | não | nenhum | Pré-condição de revisão opcional. Um valor obsoleto fornecido é revision_conflict: leia media show ID e execute o comando novamente. |
--note TEXT | string | não | nenhum | Guardada com a nova versão e mostrada à pessoa que a revisa. No 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"A mídia mantém seu ID e passa para uma nova revisão, e cada playlist e agenda que a nomeia reproduz esse arquivo novamente. A versão que ela copia permanece no histórico e compartilha seus bytes; a nova versão conta nos bytes armazenados como qualquer outra. data.media é a mídia e data.warnings traz aspect_ratio_changed, que nomeia as playlists que usam a mídia, quando o arquivo restaurado tem outra proporção de tela.
A versão em uso não pode ser restaurada (resource_conflict, código de saída 5), e uma versão desconhecida é not_found (código de saída 4). Com acesso Propose, ou quando o projeto exige revisão para alterações do agente, a restauração aguarda uma pessoa e o comando tem sucesso (código de saída 0): data.status é pending_review com data.review, o aviso pending_review dá a URL dela e data.next é screenrig reviews show ID. A mídia continua reproduzindo o arquivo atual até que uma pessoa aprove, então não repita a gravação.
media version delete#
Excluir uma versão anterior e seus bytes armazenados.
media version delete <id> --number N| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--number N | integer | sim | nenhum | O número da versão a excluir, como media versions a lista. |
screenrig media version delete med_01EXAMPLEIMAGE0000000000 --number 2O registro da versão some e seus bytes saem imediatamente dos bytes armazenados do projeto. O objeto armazenado é removido após 24 horas, a menos que outra versão ou o arquivo em uso contenha o mesmo arquivo. Uma versão excluída não pode ser restaurada. A versão em uso não pode ser excluída, e nenhuma versão pode ser excluída enquanto uma substituição da mídia aguarda revisão; ambos são resource_conflict (código de saída 5), e media versions ID mostra qual versão está em uso. Uma versão desconhecida é not_found (código de saída 4). Excluir exige acesso Manage: uma credencial Propose é recusada com insufficient_access, e a exclusão nunca é proposta para revisão.
media show#
Leia um objeto de mídia, incluindo sua revisão atual.
media show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
screenrig media show med_01EXAMPLEIMAGE0000000000media download#
Escreva uma versão armazenada no disco para inspeção. Nunca imprima os bytes.
media download <id> [--output FILE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--output FILE | caminho | não | ./<id>.<ext> no diretório atual | Um caminho de arquivo, não um diretório. Um arquivo existente é sobrescrito. A extensão segue o tipo de conteúdo. |
screenrig media download med_01EXAMPLEIMAGE0000000000 --output ./lobby.webpO envelope informa media_id, path, bytes, sha256, content_type, primitive, filename, opcional source_filename, e width / height. Nunca carrega pixels. Use isso para comprovar uma imagem gerada antes de ir para o monitor.
media list#
Listar objetos de mídia, opcionalmente filtrados por tag e primitivo.
media list [--tag TAG] [--primitive image|video|audio] [--folder ID|root] [--library]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--tag TAG | string | não | nenhum | Corresponder ^[A-Za-z0-9]{1,32}$. Objetos sem tag são omitidos sempre que este filtro estiver presente. |
--primitive | string | não | todos | image, video ou audio. Restringe a listagem a stills, clipes ou faixas de trilha sonora. |
--folder ID|root | string | não | toda pasta | Só arquivos diretamente dentro desta pasta mfd_, não suas subpastas, ou com root apenas arquivos na raiz da biblioteca. A API aplica o filtro. |
--library | boolean | não | desligado | Lista, em vez disso, as mídias da Biblioteca da organização, somente leitura: as linhas trazem library: true. Use os IDs delas nas páginas da playlist; altere-as apenas no projeto Biblioteca. |
screenrig media list --tag LobbyLoop --primitive video
screenrig media list --folder mfd_01EXAMPLEFOLDER000000000
screenrig media list --libraryCada linha carrega folder_id, que está ausente na raiz da biblioteca.
media update#
Alterar ou limpar a tag em um objeto. A regra de disponibilidade dele é definida com media availability.
media update <id> (--tag TAG | --tags TAG1,TAG2 | --clear-tag) [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--tag TAG | string | um dos dois | nenhum | A tag de substituição, de uma a 32 letras ou dígitos. |
--clear-tag | boolean | um dos dois | desligado | Envie null e deixe o objeto sem marcação. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig media update med_01EXAMPLEIMAGE0000000000 --tag LobbyLoopCom acesso Propor, ou quando o projeto exige revisão para alterações do agente, retagging de mídia aprovada responde ok com o aviso media_review_pending: as telas continuam exibindo com suas tags aprovadas até que uma pessoa aprove a alteração, e uma rejeição restaura as tags. A revisão aparece em reviews list em segundos; um retag que não altera nenhuma playlist aprovada nem playlist aguardando revisão aplica-se sozinho. Veja Revisões.
media availability#
Define ou limpa quando os seletores dinâmicos podem escolher um arquivo.
media availability <id> (--file FILE | --clear) [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--file FILE | string | um dos dois | nenhum | Uma regra de disponibilidade em JSON. |
--clear | boolean | um dos dois | desligado | Remove a regra; o arquivo fica sempre disponível. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig media availability med_01EXAMPLEIMAGE0000000000 --file rule.jsonOs membros e o comportamento da regra estão em Disponibilidade de mídia.
media delete#
Excluir um objeto de mídia.
media delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do objeto med_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig media delete med_01EXAMPLEIMAGE0000000000media move#
Mover arquivos e pastas de mídia para uma pasta, ou de volta para a raiz da biblioteca.
media move <id>... (--folder ID | --root)| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | sim | nenhum | Um ou mais IDs de arquivo med_ e IDs de pasta mfd_, no máximo 1000 no total. |
--folder ID | string | um dos dois | nenhum | A pasta de destino mfd_. |
--root | boolean | um dos dois | desligado | Mover para a raiz da biblioteca. |
screenrig media move med_01EXAMPLEIMAGE0000000000 med_01EXAMPLEVIDEO0000000000 --folder mfd_01EXAMPLEFOLDER000000000
screenrig media move mfd_01EXAMPLEFOLDER000000000 --rootA movimentação é uma solicitação tudo ou nada. Uma pasta não pode se mover para dentro de si mesma ou de uma pasta dentro dela, e pastas aninham no máximo 10 níveis. Itens já no destino permanecem como estão. data.media e data.folders contam o que foi movido.
Mover arquivos altera o que os seletores by:folder das suas pastas antiga e nova reproduzem, a partir da resolução do próximo seletor de cada tela; mover uma pasta não altera os arquivos próprios de nenhuma pasta. Sob Propor acesso, ou quando o projeto requer revisão para mudanças de agente, cada arquivo movido espera a revisão de uma pessoa (reviews list) e playlists aprovadas continuam a reproduzi-lo pela pasta com que foi aprovado; veja Revisões.
media folder list#
Listar as pastas de mídia do projeto.
media folder list [--library]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--library | boolean | não | desligado | Lista, em vez disso, as pastas da Biblioteca da organização, somente leitura: as linhas trazem library: true, e um seletor by:folder pode nomear uma para reproduzir seus arquivos. |
screenrig media folder list
screenrig media folder list --libraryRetorna todas as pastas do projeto, no máximo 1000, ordenadas por nome: data.items com id, name, parent_id (null na raiz da biblioteca) e revision. Construa a árvore a partir de parent_id. A pasta de um arquivo é folder_id em media list e media show; está ausente na raiz da biblioteca.
media folder show#
Leia uma pasta de mídia.
media folder show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da pasta mfd_. |
screenrig media folder show mfd_01EXAMPLEFOLDER000000000O envelope carrega o name, parent_id e revision da pasta.
media folder create#
Criar uma pasta de mídia na raiz da biblioteca ou dentro de outra pasta.
media folder create --name NAME [--parent ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | 1 a 100 caracteres, aparados. Nomes podem se repetir. |
--parent ID | string | não | raiz da biblioteca | A pasta mfd_ para criá-la. |
screenrig media folder create --name Menus
screenrig media folder create --name Lunch --parent mfd_01EXAMPLEFOLDER000000000Uma organização mantém no máximo 1000 pastas em todos os seus projetos, aninhadas em até 10 níveis. Uma playlist toca os arquivos de uma pasta com um seletor by:folder.
media folder update#
Renomear uma pasta de mídia ou movê-la com tudo dentro para outra pasta.
media folder update <id> [--name NAME] [--parent ID | --root] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da pasta mfd_. |
--name NAME | string | pelo menos um de --name, --parent, --root | inalterado | O novo nome, de 1 a 100 caracteres. |
--parent ID | string | pelo menos um de --name, --parent, --root | inalterado | Mover a pasta, com tudo dentro, para esta pasta mfd_. Não com --root. |
--root | boolean | pelo menos um de --name, --parent, --root | desligado | Mover a pasta para a raiz da biblioteca. Não com --parent. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig media folder update mfd_01EXAMPLEFOLDER000000000 --name Archive
screenrig media folder update mfd_01EXAMPLEFOLDER000000000 --rootUma pasta não pode se mover para dentro de si mesma ou de uma pasta dentro dela, e uma movimentação deve manter todas as pastas dentro de 10 níveis. Enviar os valores atuais é uma operação sem efeito.
media folder delete#
Excluir uma pasta de mídia. Seus arquivos e pastas sobem um nível.
media folder delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da pasta mfd_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig media folder delete mfd_01EXAMPLEFOLDER000000000Exclui apenas a pasta. Seus arquivos e pastas sobem para o pai, ou para a raiz da biblioteca quando não tem pai. Um seletor by:folder que a nomeia não corresponde a nada, então redirecione essas playlists primeiro.
Sincronização de mídia
Uma sincronização de mídia mantém uma pasta de mídia em sincronia com uma pasta do SharePoint, do OneDrive for Business, do Dropbox ou do Google Drive. Cada execução importa as imagens (png, jpeg, webp, gif), os vídeos (mp4, webm) e o áudio (mp3) diretamente dentro da pasta de origem; as subpastas são ignoradas. Um arquivo alterado substitui seus bytes sob o mesmo ID de mídia, então toda playlist que o reproduz é atualizada, e um arquivo removido ou movido para fora na origem deixa de ser reproduzido: sua mídia é excluída ou, enquanto uma tela ainda a exibe, movida para uma subpasta Removed e excluída quando nada a mantém. Os outros arquivos são listados como ignorados com o motivo: mostre um arquivo do Office ou um PDF com um link de documento em uma playlist e exporte MOV e semelhantes como MP4 H.264. Uma playlist reproduz a pasta com um seletor by:folder.
Toda sincronização lê por meio de uma conta do projeto. Um ID de conta começa com msa_ e um ID de sincronização com msy_. media sync account add microsoft365 armazena seu próprio aplicativo do Microsoft Entra ou nomeia uma conexão da Microsoft do projeto; media sync account add dropbox imprime um link de uso único para a pessoa dona da conta do Dropbox; media sync account add google-drive lê as pastas compartilhadas com o endereço de uma conta de serviço, a do screenRIG ou a sua própria. Teste a conta e depois crie uma sincronização a partir do endereço de uma pasta: ela está pronta para ser executada de imediato.
Informe um segredo de cliente com --secret-file FILE e uma chave do Google Drive com --key-file FILE, ou - para stdin, nunca como argumento. Os segredos são selados no servidor e mostrados de volta apenas como data.secret {set, hint}. A leitura exige acesso Read, e toda alteração exige acesso Manage.
media sync account add microsoft365#
Adiciona seu próprio aplicativo do Microsoft Entra, ou uma conexão da Microsoft do projeto, para que uma sincronização possa ler uma pasta do SharePoint ou do OneDrive for Business.
media sync account add microsoft365 --name NAME
(--tenant-id TENANT --client-id ID --secret-file FILE | --connection-id ID)| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | 1 a 80 caracteres. |
--tenant-id TENANT | string | sem --connection-id | nenhum | O ID do diretório (tenant) da sua organização, ou o domínio primário dele, como contoso.onmicrosoft.com; nunca common, organizations ou consumers. Junto com --client-id e --secret-file. |
--client-id ID | string | sem --connection-id | nenhum | O ID do aplicativo (cliente) do registro de aplicativo, um GUID. |
--secret-file FILE | string | sem --connection-id | nenhum | Lê o Valor do segredo de cliente deste arquivo, ou - para stdin (nunca como argumento); o arquivo contém apenas o Valor. |
--connection-id ID | string | sem --tenant-id | nenhum | Faz login por meio de uma conexão da Microsoft (pcn_…) do projeto, em qualquer um dos modos, em vez de --tenant-id, --client-id e --secret-file. Não com eles. |
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_01EXAMPLECONNECTION0000No centro de administração do Microsoft Entra, registre um aplicativo de locatário único sem URI de redirecionamento, adicione um segredo de cliente (copie o Valor, não o ID do segredo), adicione a permissão de aplicativo Sites.Selected do Microsoft Graph (e depois conceda ao aplicativo acesso de leitura a cada site) ou Files.Read.All, e conceda o consentimento do administrador. O aplicativo pertence a este projeto. Execute media sync account test em seguida.
media sync account add dropbox#
Adiciona uma conta do Dropbox e imprime o link de uso único que seu dono abre, logado no Dropbox, para conectá-la.
media sync account add dropbox --name NAME [--app-key KEY]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | 1 a 80 caracteres. |
--app-key KEY | string | não | o aplicativo do Dropbox do screenRIG | A chave do seu próprio aplicativo do Dropbox (app key): de 1 a 64 letras e dígitos, nunca o segredo do aplicativo. |
screenrig media sync account add dropbox --name "Marketing Dropbox"
screenrig media sync account add dropbox --name "Marketing Dropbox" --app-key YOURAPPKEYdata.authorize_url é o link e data.authorize_expires_at sua expiração. O CLI nunca abre um navegador: envie o link à pessoa dona da conta do Dropbox, que permite acesso somente leitura (files.metadata.read, files.content.read, account_info.read). Execute media sync account show até que data.state seja ready (começa como pending_consent) e depois media sync create dropbox. Seu próprio aplicativo do Dropbox precisa ter essas permissões ativadas e o redirect URI que a saída imprime.
media sync account add google-drive#
Adiciona uma conta do Google Drive, pronta de imediato, e imprime o endereço da conta de serviço com o qual as pastas são compartilhadas.
media sync account add google-drive --name NAME [--key-file FILE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | 1 a 80 caracteres. |
--key-file FILE | string | não | a conta de serviço do screenRIG | Lê a chave JSON da sua própria conta de serviço do Google Cloud deste arquivo, ou - para stdin (nunca como 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 é o endereço com o qual compartilhar cada pasta; Viewer basta. Pela conta de serviço do screenRIG, uma pasta só sincroniza quando um membro deste projeto com e-mail verificado a compartilhou ou é o proprietário dela (media_sync_sharer_not_member caso contrário). Com sua própria chave, qualquer pasta compartilhada com a conta de serviço sincroniza.
media sync account list#
Lista as contas de sincronização de mídia deste projeto com o tipo, o estado e o último teste de cada uma; nenhum segredo é devolvido.
media sync account listSem parâmetros.
screenrig media sync account listmedia sync account show#
Inspeciona uma conta: seu tenant e ID de cliente, o estado, o segredo mascarado e o último teste.
media sync account show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conta (msa_…). |
screenrig media sync account show msa_01EXAMPLEACCOUNT0000000Uma conta do Dropbox também mostra quem a conectou e seu app_key; uma conta do Google Drive mostra seu service_account_email.
media sync account update#
Renomeia uma conta, altera o tenant, o ID do aplicativo ou o segredo de cliente de um aplicativo da Microsoft, ou substitui a chave própria de uma conta do 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conta (msa_…). |
--name NAME | string | não | inalterado | Renomeia a conta. |
--tenant-id TENANT | string | não | inalterado | O ID do diretório ou o domínio primário do tenant. |
--client-id ID | string | não | inalterado | O ID do aplicativo (cliente) do registro de aplicativo. |
--secret-file FILE | string | não | inalterado | Lê o Valor do novo segredo de cliente deste arquivo, ou - para stdin; ele substitui o segredo armazenado. Um segredo omitido é mantido. |
--key-file FILE | string | não | inalterado | Lê a chave JSON própria de uma conta do Google Drive deste arquivo, ou - para stdin; ela deve pertencer à mesma conta de serviço. Não com --secret-file. |
--expect-rev REVISION | integer | não | nenhum | Recusa a alteração a menos que a conta esteja nesta revisão (revision_conflict, código de saída 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 2Pelo menos uma alteração é obrigatória. Uma alteração de credenciais limpa last_test: teste a conta de novo. Os segredos de cliente do Entra expiram, então substitua o segredo aqui antes que isso aconteça.
media sync account connect#
Cria um novo link de uso único para conectar, ou reconectar, uma conta do Dropbox.
media sync account connect <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conta (msa_…). |
screenrig media sync account connect msa_01EXAMPLEACCOUNT0000000data.authorize_url e data.authorize_expires_at trazem o link, que substitui o anterior. Envie-o à pessoa dona da conta do Dropbox. Use-o quando a pessoa não concluiu ou a conta está em reconnect_required (o Dropbox não honra mais a conexão). Uma conta conectada permanece conectada até que o novo consentimento seja concluído, e outra conta do Dropbox que faça login assume a conexão.
media sync account test#
Verifica uma conta: o login e as permissões do Graph de um aplicativo da Microsoft, ou a conexão ou a chave de uma conta do Dropbox ou do Google Drive.
media sync account test <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conta (msa_…). |
screenrig media sync account test msa_01EXAMPLEACCOUNT0000000A resposta é armazenada como last_test. Para um aplicativo da Microsoft, informa credentials (a Microsoft emitiu um token; uma recusa traz o código AADSTS, como AADSTS7000215 para um segredo que é o ID em vez do Valor) e permissions (as permissões de aplicativo do Graph que o token carrega). Sites.Selected sozinha é um aviso: cada site ainda precisa de sua concessão, e um link de compartilhamento precisa de Files.Read.All. O teste não avalia a concessão de um site nem uma pasta: media sync create lê a pasta que você nomeia. Uma verificação que falha é data.ok false com código de saída 0.
media sync account delete#
Exclui uma conta que nenhuma sincronização usa.
media sync account delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conta (msa_…). |
--expect-rev REVISION | integer | não | nenhum | Recusa a exclusão a menos que a conta esteja nesta revisão (revision_conflict, código de saída 6). |
screenrig media sync account delete msa_01EXAMPLEACCOUNT0000000Enquanto sincronizações usam a conta, a resposta é resource_conflict (código de saída 5), nomeando-as: exclua-as primeiro.
media sync create dropbox#
Sincroniza uma pasta do Dropbox com uma pasta de mídia.
media sync create dropbox --account-id ID --url URL|PATH [--folder-id ID] [--every DURATION] [--name NAME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--account-id ID | string | sim | nenhum | A conta do Dropbox conectada pela qual ler (msa_…). |
--url URL | string | sim | nenhum | O endereço da pasta no Dropbox (https://www.dropbox.com/home/...), um link de pasta compartilhada que a conta adicionou ao seu Dropbox, ou um caminho que começa com /. Uma pasta do espaço da equipe é lida a partir da raiz da equipe. |
--folder-id ID | string | não | uma nova pasta de mídia com o nome da pasta de origem | A pasta de mídia (mfd_…) em que os arquivos são colocados. |
--every DURATION | string | não | 15m | Com que frequência procurar alterações, de 5 minutos a 24 horas: 15m, 1h, 6h ou segundos simples (300 a 86400). |
--name NAME | string | não | o nome da pasta de origem | 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 execução continua da posição salva do Dropbox na pasta e lê apenas o que mudou. Uma pasta que a conta não consegue abrir é media_sync_source_refused, e uma conexão que o Dropbox não honra mais é dropbox_reconnect_required (media sync account connect): ambas com código de saída 5, nada armazenado.
media sync create google-drive#
Sincroniza com uma pasta de mídia uma pasta do Google Drive compartilhada com a conta de serviço de uma conta.
media sync create google-drive --account-id ID --url URL|ID [--folder-id ID] [--every DURATION] [--name NAME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--account-id ID | string | sim | nenhum | A conta do Google Drive pela qual ler (msa_…). |
--url URL | string | sim | nenhum | O endereço da pasta (https://drive.google.com/drive/folders/ID) ou o ID dela. Compartilhe primeiro a pasta com o service_account_email da conta; Viewer basta. |
--folder-id ID | string | não | uma nova pasta de mídia com o nome da pasta de origem | A pasta de mídia (mfd_…) em que os arquivos são colocados. |
--every DURATION | string | não | 15m | Com que frequência procurar alterações, de 5 minutos a 24 horas: 15m, 1h, 6h ou segundos simples (300 a 86400). |
--name NAME | string | não | o nome da pasta de origem | 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 1AbCdEfGhIjKlMnOpQrStUvWxYzPela conta de serviço do screenRIG, a pasta só sincroniza quando um membro deste projeto com e-mail verificado a compartilhou ou é o proprietário dela (media_sync_sharer_not_member, código de saída 3, nada armazenado). Cada execução verifica isso de novo, e uma pasta que perde esse compartilhador interrompe a sincronização no estado error com a mídia mantida: compartilhe-a de novo a partir da conta do Google de um membro e depois execute media sync update ID --resume. Arquivos do Google Docs, Sheets e Slides são ignorados como unsupported_type. Uma pasta que o endereço não consegue abrir é media_sync_source_refused (código de saída 5): compartilhe-a com a conta de serviço.
media sync list#
Lista as sincronizações de mídia deste projeto com a pasta de mídia, a cadência, o estado e o status da última execução de cada uma.
media sync listSem parâmetros.
screenrig media sync listmedia sync show#
Inspeciona uma sincronização e o resumo da última execução dela.
media sync show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A sincronização (msy_…). |
screenrig media sync show msy_01EXAMPLESYNC000000000data.last_run traz status (ok, partial ou error), added, updated, removed, pending_delete (arquivos removidos que uma tela ainda mantém, aguardando na pasta Removed) e skipped com o motivo de cada arquivo (unsupported_type, too_large, storage, subfolder, download_failed, unreadable, in_use); uma execução com falha traz error com um code e um detail que indicam a correção. data.source acrescenta path para o Dropbox e shared_by para o Google Drive.
Uma sincronização no estado error precisa de reparo. Sua pasta de mídia foi excluída: aponte-a para outra com media sync update --folder-id. Sua pasta de origem foi excluída ou movida: exclua a sincronização e crie uma. Para o Google Drive pela conta de serviço do screenRIG, a pasta perdeu o compartilhador verificado (sharer_not_member): compartilhe-a de novo a partir da conta do Google de um membro do projeto e depois media sync update ID --resume. Uma execução do Dropbox falha com reconnect_required quando o Dropbox deixa de honrar a conexão (media sync account connect).
media sync update#
Altera o nome, a cadência ou a pasta de mídia de uma sincronização, ou a pausa e a retoma.
media sync update <id> [--name NAME] [--every DURATION] [--folder-id ID]
[--pause | --resume] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A sincronização (msy_…). |
--name NAME | string | não | inalterado | Renomeia a sincronização. |
--every DURATION | string | não | inalterado | Com que frequência procurar alterações, de 5 minutos a 24 horas. |
--folder-id ID | string | não | inalterado | Preenche esta pasta de mídia (mfd_…) no lugar da atual. A próxima execução lê toda a origem de novo e coloca nela todos os arquivos sincronizados. |
--pause | boolean | não | desligado | Para de executar até ser retomada. Não com --resume. |
--resume | boolean | não | desligado | Executa de novo; também reinicia uma sincronização que um erro interrompeu. Não com --pause. |
--expect-rev REVISION | integer | não | nenhum | Recusa a alteração a menos que a sincronização esteja nesta revisão (revision_conflict, código de saída 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 3Pelo menos uma alteração é obrigatória.
media sync run#
Executa uma sincronização agora em vez de no próximo horário dela.
media sync run <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A sincronização (msy_…). |
screenrig media sync run msy_01EXAMPLESYNC000000000A sincronização é executada em cerca de 30 segundos, e media sync show então mostra a última execução dela. Uma sincronização pausada deve ser retomada primeiro.
media sync delete#
Interrompe uma sincronização; a mídia e a pasta dela permanecem.
media sync delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A sincronização (msy_…). |
--expect-rev REVISION | integer | não | nenhum | Recusa a exclusão a menos que a sincronização esteja nesta revisão (revision_conflict, código de saída 6). |
screenrig media sync delete msy_01EXAMPLESYNC000000000A sincronização esquece qual arquivo de origem virou qual mídia. A mídia importada e a pasta de mídia permanecem, e nada é removido.
Aplicativos
Uma aplicação é um diretório estático já construído com uma raiz index.html. O empacotador injeta o SDK do navegador em _screenrig/runtime.js e adiciona sua tag de script, então o app alcança window.screenrig sem etapa de build e nada a adicionar às suas dependências. Nada no diretório é construído ou executado durante o empacotamento.
app pack#
Empacote um diretório estático em um arquivo determinístico sem enviá-lo.
app pack <directory> [--output FILE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<directory> | caminho | sim | nenhum | O diretório estático construído. Precisa de uma raiz index.html. |
--output FILE | caminho | não | nada está escrito | Também escreva o arquivo neste caminho. Sem ele, o comando relata o arquivo e o mantém na memória. |
screenrig app pack ./lobby-board --output ./lobby-board.tgzO envelope informa sha256, compressed_bytes, expanded_bytes, file_count, a lista de entradas, e se o tempo de execução do SDK foi injetado. app upload empacota o diretório em si, então use este comando apenas quando quiser inspecionar o arquivo primeiro.
Aplicativos rodam sob política de segurança de conteúdo que bloqueia código inline. Empacotamento move blocos de estilo e script inline para arquivos sob _screenrig/inline/ e os vincula. Handlers de evento inline como onclick= e URLs javascript: não podem ser movidos; empacotamento os recusa e nomeia arquivo e linha.
app upload#
Empacote um diretório, publique-o como uma nova versão do aplicativo e aguarde a publicação ser bem-sucedida.
app upload <directory> [--name NAME] [--no-wait] [--poll-ms MS] [--timeout MS]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<directory> | caminho | sim | nenhum | O diretório estático construído. |
--name NAME | string | não | nenhum | Nome do aplicativo, no máximo 120 caracteres. |
--no-wait | boolean | não | desligado | Retornar antes que a operação de publicação termine. Execute operations wait antes de fixar a versão em uma playlist. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
--timeout MS | integer | não | 120000 | Prazo para a espera. Também limita cada solicitação subjacente. |
screenrig app upload ./lobby-board --name "Lobby board"Ler três campos: data.operation.state é succeeded, data.application.release_id é o id rel_ um primitivo application fixa, e data.application.id é o id app_ que os comandos kv usam. Uma operação bem-sucedida, não um id de release sozinho, significa que a release é utilizável.
Cada app upload cria um novo aplicativo e uma primeira versão imutável. Para publicar uma versão posterior do mesmo app, use app update. Uma playlist continua servindo a versão que já fixa até você editar esse primitivo.
app update#
Publicar uma nova versão de um aplicativo existente, preservando identidade, nome e K/V do aplicativo.
app update <id> <directory> [--expect-rev REVISION] [--no-wait] [--poll-ms MS]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da aplicação app_. |
<directory> | caminho | sim | nenhum | O diretório estático construído. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
--no-wait | boolean | não | desligado | Retornar antes que a operação de publicação termine. Execute operations wait antes de fixar a versão em uma playlist. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
screenrig app update app_01EXAMPLEAPP00000000000 ./lobby-boardAguarde data.operation.state: "succeeded", depois use playlist replace-release para revisar a página exata, primitivo, nova versão e telas afetadas. Aplique com o token de impacto retornado e um controle de revisão opcional conforme descrito no fluxo de trabalho da playlist. Os pins existentes da playlist permanecem inalterados até a aplicação. Em caso de conflito de revisão, leia o app novamente antes de decidir se deve tentar novamente; não crie um aplicativo substituto apenas para contornar o conflito.
app list#
Listar os aplicativos do projeto.
app listSem parâmetros.
screenrig app listapp show#
Leia um aplicativo.
app show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da aplicação app_. |
screenrig app show app_01EXAMPLEAPP00000000000latest_ready_release está ausente até que uma primeira publicação fique pronta. O estado da publicação vive na operação e no lançamento, não no aplicativo.
app delete#
Excluir um aplicativo e todas as suas versões.
app delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da aplicação app_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig app delete app_01EXAMPLEAPP00000000000Não há exclusão por lançamento. Enquanto uma tela mostra um dos lançamentos da aplicação, a exclusão responde application_in_use: dê a essas telas outro conteúdo primeiro. A exclusão não verifica playlists que fixam um lançamento sem mostrá-lo, então atualize ou exclua essas playlists também.
Chave/valor do aplicativo
O armazenamento chave/valor pertence a um aplicativo e é seguro para binários. Cada comando usa --app-id com o ID app_ de app upload, nunca um ID de lançamento. Use exatamente um modo de valor por gravação.
kv list#
Listar as chaves armazenadas para um aplicativo.
kv list --app-id ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
screenrig kv list --app-id app_01EXAMPLEAPP00000000000kv get#
Leia uma chave.
kv get --app-id ID <key>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
<key> | string | sim | nenhum | A chave para ler. |
screenrig kv get --app-id app_01EXAMPLEAPP00000000000 menukv set#
Escreva uma chave do JSON, um arquivo ou 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
<key> | string | sim | nenhum | A chave para escrever. |
--json-value JSON | string | um modo | nenhum | Um valor JSON, canonizado antes de ser enviado, sempre armazenado como application/json. Um tipo de conteúdo application/json explícito também é aceito. |
--file FILE | caminho | um modo | nenhum | Ler os bytes de valor de um arquivo, ou stdin com -. Padrão para application/octet-stream. |
--value-base64 BASE64 | string | um modo | nenhum | Base64 padrão canônica preenchida sem espaços em branco, no máximo 1.398.104 caracteres. Padrão é application/octet-stream. |
--content-type TYPE | string | não | application/octet-stream para bytes | De um a 127 caracteres. |
--expect-rev REVISION | string | não | nenhum | Escreva somente se a entrada armazenada ainda estiver nesta revisão. |
screenrig kv set --app-id app_01EXAMPLEAPP00000000000 menu --json-value '{"soup":"lentil"}'kv delete#
Excluir uma chave.
kv delete --app-id ID <key> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
<key> | string | sim | nenhum | A chave para excluir. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig kv delete --app-id app_01EXAMPLEAPP00000000000 menuWebhooks chave/valor
Um webhook chave/valor é uma URL que grava uma chave de um aplicativo, então qualquer sistema externo, como um ponto de venda, um script de planilha ou um cron job, envia dados para telas com um único POST HTTP. Um aplicativo que se inscreve com kv.onChange atualiza em segundos em todas as telas que o executam. Um aplicativo tem no máximo 20 webhooks.
O remetente autentica-se com o segredo do webhook, srkw_…, como Authorization: Bearer <secret>, ou com HTTP Basic usando o id do webhook como nome de usuário e o segredo como senha; um segredo na URL ou string de consulta nunca é aceito. O corpo bruto, no máximo 1 MiB, torna-se o valor da chave e Content-Type seu tipo de conteúdo. Cada post é uma requisição API cobrada, medida e contada para armazenamento como kv set, eleva a revisão e responde com os novos metadados da chave, nunca seu valor. Um cabeçalho Idempotency-Key opcional deduplica as tentativas do remetente por 24 horas. Um webhook aceita no máximo 120 posts por minuto, e um segredo ausente ou errado ou um webhook desconhecido responde 401. Enviar dados de outro sistema tem exemplos curl.
O segredo é mostrado apenas por kv webhook create e kv webhook rotate-secret. A URL não é secreta. Criar, rotacionar e excluir um webhook adiciona kv_webhook.created, kv_webhook.secret_rotated e kv_webhook.deleted ao log de eventos do projeto, e cada post adiciona kv.updated como qualquer escrita.
| Código do problema | Sair | Significado |
|---|---|---|
kv_webhook_limit_reached | 5 | O aplicativo já tem 20 webhooks. Nada foi criado. Exclua um primeiro. |
not_found | 4 | O aplicativo não está neste projeto, ou nenhum webhook tem esse id nele. |
kv webhook create#
Criar um webhook que grava uma chave e receber sua URL e segredo uma vez.
kv webhook create <key> --app-id ID [--description TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<key> | string | sim | nenhum | A chave que cada postagem escreve, de 1 a 256 caracteres: uma letra ou dígito primeiro, depois letras, dígitos, ., _, :, / ou -. A chave pode ainda não existir. |
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
--description TEXT | string | não | nenhum | O que enviar para ele, no máximo 200 caracteres. Não deve conter credenciais. |
screenrig kv webhook create menu --app-id app_01EXAMPLEAPP00000000000 --description "Point of sale menu feed"O envelope é o webhook: data.id (kvw_…), data.key, data.url (https://api.screenrig.ai/api/applications/<app_id>/kv-webhooks/<id>/write) e data.secret (srkw_…). Insira a URL e o segredo no sistema de envio agora. Nenhum comando posterior mostrará este segredo novamente.
kv webhook list#
Listar webhooks de um aplicativo, do mais antigo para o mais recente.
kv webhook list --app-id ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
screenrig kv webhook list --app-id app_01EXAMPLEAPP00000000000Cada item possui id, key, description, url, created_at e, após ser gravado, last_used_at. Uma lista nunca carrega um segredo.
kv webhook delete#
Excluir um webhook. Sua URL para de funcionar imediatamente, e a chave mantém seu valor.
kv webhook delete <webhook_id> --app-id ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<webhook_id> | string | sim | nenhum | O id do webhook kvw_. |
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
screenrig kv webhook delete kvw_01EXAMPLEWEBHOOK00000 --app-id app_01EXAMPLEAPP00000000000kv webhook rotate-secret#
Substituir o segredo de um webhook e receber o novo uma vez.
kv webhook rotate-secret <webhook_id> --app-id ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<webhook_id> | string | sim | nenhum | O id do webhook kvw_. |
--app-id ID | string | sim | nenhum | O id da aplicação app_. |
screenrig kv webhook rotate-secret kvw_01EXAMPLEWEBHOOK00000 --app-id app_01EXAMPLEAPP00000000000O envelope carrega o novo segredo em data.secret. O segredo antigo para de funcionar imediatamente, então insira o novo no sistema de envio.
Webhooks de cartão
Um webhook de cartão é uma URL que grava o documento de dados de um cartão, de modo que um sistema externo, como um CMS, um ponto de venda ou um script, envia dados para um cartão com um único POST HTTP. kv webhook create, list, rotate-secret e delete aceitam --card CARD_ID no lugar de --app-id; update e deliveries abaixo funcionam apenas com cartões. Um cartão tem no 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_IDCriar um webhook de cartão não exige chave. --map FILE (ou - para stdin) é o mapeamento e --signing ativa a assinatura. A resposta traz data.secret e, quando o webhook assina, data.signing_secret, cada um exibido uma única vez.
O remetente se autentica como em um webhook de aplicativo: Authorization: Bearer <secret> com o segredo srkw_…, ou HTTP Basic com o ID do webhook como nome de usuário, então https://kvw_ID:srkw_…@api.screenrig.ai/… serve para um remetente que aceita apenas uma URL. O corpo, de no máximo 1 MiB, é JSON ou application/x-www-form-urlencoded; um nome de formulário repetido vira um array. Sem mapeamento, o objeto enviado é o documento de dados do cartão.
Um mapeamento é um modelo JSON que constrói o documento a partir do corpo. Uma string com marcadores como {{body.alert.title}} ou {{body.items[0].name}} é texto, e uma string que é exatamente um marcador mantém o tipo do valor. Um caminho começa com body ou query (os parâmetros de consulta da URL), e um caminho que não contém nada fica vazio no texto e omite um valor isolado. $each mapeia um array com item e index no escopo, $group com $by agrupa na ordem da primeira ocorrência, $number lê 1,234.50, $3.50, 3,50 € ou 12% (adicione "$decimal": "," para uma vírgula decimal), $bool lê true, yes, y, 1 e x, e $text com $max corta o texto. O modelo é verificado ao salvar: invalid_request indica o lugar que falhou.
{
"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 envio é verificado como os dados do próprio cartão: card_data_invalid indica o caminho e nada é gravado. Um documento igual ao atual do cartão responde unchanged e não grava nada, então nenhuma tela é acordada. Um envio aceito é uma requisição de API cobrada, um webhook aceita no máximo 120 envios por minuto, e um cabeçalho Idempotency-Key desduplica as novas tentativas de um remetente por 24 horas.
Um endereço errado, um segredo errado ou ausente, um webhook desativado, uma assinatura ausente ou errada e todo GET recebem a mesma resposta 404, então uma pré-visualização de link ou um palpite não revela nada. kv webhook deliveries informa o motivo.
Com --signing, cada envio também deve levar ScreenRig-Signature: t=<unix seconds>,v1=<hex>, em que v1 é o HMAC-SHA256 de t, um ponto e o corpo bruto com o segredo de assinatura whsec_…, e t deve estar a no máximo cinco minutos do relógio do servidor. É o formato das assinaturas de webhook do próprio screenRIG.
Assinaturas e handshakes dos fornecedores
Os fornecedores assinam suas postagens do seu jeito, e alguns não conseguem enviar o seu segredo de jeito nenhum. Um webhook de cartão pode verificar a assinatura do fornecedor no lugar do segredo e responder ao handshake de configuração do fornecedor, então GitHub, Stripe, Shopify, Slack, Linear, Vercel, Asana, Microsoft Graph, monday.com, Trello e Azure Event Grid postam direto nele, sem intermediário. Qualquer outro remetente que assine com HMAC também funciona. Defina verify e handshake pela API ao criar ou alterar o webhook (POST /api/cards/{id}/kv-webhooks, depois PATCH /api/cards/{id}/kv-webhooks/{webhook_id}).
verifyé{vendor, secret}, mais, parageneric_hmac, oheader, oencoding(hexoubase64), umtimestamp_headeretolerance_seconds(300 por padrão). Uma postagem que traz a assinatura válida do fornecedor é aceita sem o segredosrkw_do próprio webhook, que continua funcionando ao lado. O segredo do fornecedor é armazenado selado e mostrado apenas comosete seus quatro últimos caracteres. Uma alteração que enviaverifysemsecretmantém o armazenado enquanto o fornecedor for o mesmo, everify: nullremove a verificação.verifye--signingse excluem.handshakeémicrosoft_graph,monday,trelloouazure_event_grid, enullo remove. O Slack e o Asana respondem aos próprios handshakes porverify.vendor.
verify.vendor | Cabeçalho | O que é assinado | Carimbo de data e hora |
|---|---|---|---|
github | X-Hub-Signature-256 | HMAC-SHA256 do corpo | Nenhum |
stripe | Stripe-Signature | HMAC-SHA256 do carimbo de data e hora, um ponto e o corpo; qualquer v1 pode corresponder | 5 minutos |
shopify | X-Shopify-Hmac-Sha256 | HMAC-SHA256 do corpo, em base64 | Nenhum |
slack | X-Slack-Signature | HMAC-SHA256 de v0:, o carimbo de data e hora, dois-pontos e o corpo | X-Slack-Request-Timestamp, 5 minutos |
linear | Linear-Signature | HMAC-SHA256 do corpo | webhookTimestamp no corpo, 1 minuto |
vercel | x-vercel-signature | HMAC-SHA1 do corpo | Nenhum |
asana | X-Hook-Signature | HMAC-SHA256 do corpo, com o X-Hook-Secret do handshake como chave | Nenhum |
generic_hmac | O header que você nomeia | HMAC-SHA256 do corpo ou, com um timestamp_header, do carimbo de data e hora, um ponto e o corpo | tolerance_seconds |
A chave de cada HMAC é o texto do segredo como o fornecedor o mostra (o do Stripe inclui whsec_). Uma assinatura é conferida no corpo exatamente como chegou, em tempo constante, antes de a postagem consumir orçamento de escrita, e é julgada antes do seu carimbo de data e hora: timestamp_stale sempre significa que o segredo estava certo. Um corpo pode ser JSON, um formulário ou multipart/form-data, em que um campo de texto é body.FIELD e os arquivos são contados, não lidos.
| Fornecedor | O screenRIG responde | Postagens seguintes |
|---|---|---|
Slack (verify.vendor slack) | O url_verification assinado com o seu challenge; uma pessoa que testa com curl pode enviar o segredo do webhook no lugar | Assinadas com o segredo de assinatura |
Asana (asana) | O X-Hook-Secret do handshake, que ele guarda selado como chave de cada X-Hook-Signature. O mesmo segredo de novo é uma nova tentativa; um diferente é recusado como handshake_invalid | X-Hook-Signature |
Microsoft Graph (microsoft_graph) | O ?validationToken= decodificado como text/plain | Levam o segredo do webhook |
monday.com (monday) | O challenge que ele posta, devolvido como JSON | Levam o segredo do webhook |
Trello (trello) | Uma verificação HEAD responde 200 sem corpo, só para este webhook | Levam o segredo do webhook |
Azure Event Grid (azure_event_grid) | {"validationResponse": "CODE"} | Levam o segredo do webhook |
Um handshake só é respondido para um webhook configurado para esse fornecedor, antes de qualquer credencial ser pedida, a uma solicitação que é esse handshake, e nunca por um webhook desativado. Ele não grava nada, nunca é cobrado e não gasta orçamento de taxa. O Microsoft Graph, o monday.com, o Trello e o Azure Event Grid não enviam nenhum cabeçalho que o screenRIG verifique, então as entregas deles só são aceitas com o segredo do webhook. O Azure Event Grid o leva como um cabeçalho de entrega estático, Authorization: Bearer srkw_…, marcado como segredo, e seus eventos chegam como um array, então um mapeamento lê body[0].
| Fornecedor | Nas configurações do fornecedor |
|---|---|
| GitHub | Settings, Webhooks, Add webhook: a Payload URL é a url do webhook, o tipo de conteúdo é application/json, e o mesmo segredo. O ping do GitHub é assinado e aceito |
| Stripe | Workbench, Webhooks: adicione a url e revele o segredo de assinatura dela. Enquanto o Stripe faz a rotação de um segredo, ele envia um v1 para cada um e qualquer um é aceito; depois substitua o segredo armazenado com um PATCH |
| Shopify | Assine com a url no formato JSON. O segredo é o segredo de cliente do aplicativo |
| Slack | A Request URL da Events API é a url, e o segredo é o segredo de assinatura do aplicativo. Um comando de barra posta um formulário: {{body.text}}, {{body.user_name}} |
| Linear | Nas configurações da API, crie um webhook com a url e copie o segredo de assinatura dele. O webhookTimestamp do corpo precisa estar a até um minuto do relógio do servidor |
| Vercel | Team settings, Webhooks: crie um com a url. O Vercel mostra o segredo uma única vez |
| Asana | Crie o webhook com {"verify": {"vendor": "asana"}}: ele ainda não tem segredo e recusa eventos como secret_pending. Depois crie o webhook do Asana com target definido como a url, e o handshake define o segredo. Para adotar um novo segredo, PATCH com verify nulo, depois de novo com o fornecedor |
| Microsoft Graph | Crie a assinatura com notificationUrl definido como a url |
| monday.com | Execute create_webhook com a url |
| Trello | POST /1/webhooks com callbackURL definido como a url |
| Azure Event Grid | Crie a assinatura de eventos com a url como endpoint do webhook, e adicione o cabeçalho de entrega acima |
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}}"}}'
Um remetente que assina com o próprio HMAC nomeia o cabeçalho, a codificação e, se assina um carimbo de data e hora, o cabeçalho do carimbo:
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"
Toda falha dá o mesmo 404 de qualquer outra recusa. kv webhook deliveries mostra o motivo, e um handshake aparece com o resultado handshake:
| Motivo | Significado |
|---|---|
signature_missing | verify está definido e a postagem não trazia nem o segredo nem o cabeçalho do fornecedor |
signature_invalid | O cabeçalho está malformado ou não corresponde ao corpo |
timestamp_missing | A assinatura precisa de um carimbo de data e hora que a postagem não trazia |
timestamp_stale | A assinatura é válida e o carimbo de data e hora dela está fora da janela |
secret_pending | Uma verificação do Asana ainda está esperando o handshake |
handshake_invalid | A solicitação é o handshake de um fornecedor e não pode ser respondida |
kv webhook update#
Alterar um webhook de cartão: sua descrição, mapeamento, estado ativado ou assinatura.
kv webhook update <webhook_id> --card CARD_ID [--description TEXT] [--map FILE|-] [--clear-map]
[--enable|--disable] [--signing|--no-signing]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<webhook_id> | string | sim | nenhum | O id do webhook kvw_. |
--card CARD_ID | string | sim | nenhum | O ID de cartão crd_. |
--description TEXT | string | não | nenhum | O que enviar para ele, no máximo 200 caracteres. Não deve conter credenciais. |
--map FILE | caminho | não | nenhum | Substituir o mapeamento por um objeto JSON lido de um arquivo, ou - para stdin. |
--clear-map | boolean | não | desligado | Remover o mapeamento: o objeto enviado passa a ser o documento. |
--enable / --disable | boolean | não | desligado | --disable responde a cada envio como a um segredo errado até --enable. |
--signing / --no-signing | boolean | não | desligado | --signing exige o cabeçalho de assinatura e imprime o segredo de assinatura uma vez; --no-signing deixa de exigi-lo. |
screenrig kv webhook update kvw_01EXAMPLEWEBHOOK00000 --card crd_01EXAMPLEBOARD0000000000 --map alert-map.jsonO envelope é o webhook. data.signing_secret aparece uma única vez, na resposta que ativou a assinatura.
kv webhook deliveries#
Ler o log de entregas de um webhook de cartão, do mais recente para o mais antigo, dos últimos sete dias.
kv webhook deliveries <webhook_id> --card CARD_ID [--limit N]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<webhook_id> | string | sim | nenhum | O id do webhook kvw_. |
--card CARD_ID | string | sim | nenhum | O ID de cartão crd_. |
--limit N | number | não | 100 | Quantas entregas retornar, de 1 a 100. |
screenrig kv webhook deliveries kvw_01EXAMPLEWEBHOOK00000 --card crd_01EXAMPLEBOARD0000000000Cada item tem at, outcome (written, unchanged, refused, invalid ou handshake), reason (por exemplo credentials, signature, disabled, body, mapping, card_data_invalid ou rate_limited), detail, status, bytes, revision e request_id. Nenhum corpo, cabeçalho ou credencial é armazenado, e uma postagem para um endereço errado não deixa linha.
Playlists
Uma playlist é um documento JSON de páginas. playlist init prepara um documento de tela cheia a partir de entradas ordenadas. playlist create e playlist update leem esse documento de um arquivo; a forma é resumida nos comandos.
playlist init#
Prepare uma playlist de tela cheia editável a partir de arquivos de mídia locais, IDs de mídia prontos, IDs de lançamento de aplicativo ou URLs HTTP ou 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<inputs...> | arquivos, med_ IDs, rel_ IDs ou URLs HTTP ou HTTPS | sim | nenhum | Ordem de reprodução. Arquivos locais de imagem/vídeo são enviados e aguardam prontidão, a menos que --no-transcode. Mídias existentes devem já estar prontas. URLs HTTP e HTTPS podem incluir hosts da rede local e credenciais embutidas e não são buscadas. O aplicativo web do Player exige URLs HTTPS sem nome de usuário ou senha. |
--name NAME | string | sim | nenhum | Nome de exibição da playlist. |
--output FILE | caminho | sim | nenhum | Escreva o documento editável {name, pages}. Diretórios pai são criados. Exclusivo por padrão. |
--overwrite | boolean | não | desligado | Substituir um arquivo de saída existente de forma atômica. |
--screen-id ID | string | não | nenhum | Ler as dimensões e revisão da tela alvo. |
--target-width PX / --target-height PX | integer | juntos | não definido | Substituir tamanho da tela. Ambos ou nenhum. Obrigatório quando nenhuma tela é fornecida ou a tela reporta superfícies desconhecidas ou múltiplas. |
--duration-ms MS | integer | não | 8000 | Duração para páginas não de vídeo. |
--fit | string | não | contain | contain, cover ou fill para páginas de imagem e vídeo. Aplicativos e iframes usam fill. |
--no-transcode | boolean | não | desligado | Bytes do arquivo enviado aceitos sem alterações. |
--no-progress | boolean | não | desligado | Suprimir progresso de upload no stderr. |
--poll-ms MS | integer | não | 1000 | Enviar intervalo de polling. |
screenrig playlist init med_POSTER med_VIDEO --name "Lobby loop" --screen-id scr_LOBBY --output lobby.jsonA preparação grava o documento local e pode enviar mídia; ela não cria uma playlist remota nem atribui uma tela. Inspecione o documento e depois screen publish. Veja Preparar, publicar e editar playlists.
playlist validate#
Valide um documento de playlist localmente antes de criar ou atualizar. Sem rede.
playlist validate <file>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<file> | caminho | sim | nenhum | O documento da playlist. |
screenrig playlist validate ./lobby-loop.jsonErros nomeiam caminhos JSON exatos. Uma aprovação significa que a forma local e a semântica cruzada são válidas; autorização, prontidão de mídia, contagens de seletor dinâmico, durações e disponibilidade remota ainda requerem verificações no servidor. Criação e atualização executam essa verificação antes da gravação. O resultado também traz achados lint de geometria que não reprovam a verificação: motion_overuse, collision, safe_margin e adjacent_repeat. Para ver como uma página fica, publique-a e execute screen screenshot.
playlist create#
Cria uma playlist a partir de um documento JSON, de um modelo ou do modelo integrado 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
[file] | caminho | não | nenhum | O documento da playlist. Informe-o, ou --from-template, ou --starter. |
--from-template ID | string | não | nenhum | Cria a playlist a partir deste modelo (um id pl_): as suas páginas atuais com os valores de --set, verificada como qualquer playlist. |
--name NAME | string | com --from-template | nenhum | O nome da nova playlist. |
--set NAME=VALUE | string | não | nenhum | Com --from-template: o valor de um campo; para um campo de mídia, o id de uma imagem ou de um vídeo pronto. Pode ser repetido. |
--dry-run | boolean | não | desligado | Com --from-template: verifica os valores e informa o número de páginas sem criar nada. |
--starter KEY | string | não | nenhum | Adicionar um modelo integrado: urgent-notice, um título e uma mensagem para anúncios rápidos. |
--format-region REGION | string | não | nenhum | header, footer ou side: transforma a playlist em uma faixa desenhada sobre a página ao longo dessa borda e substitui um format no arquivo. Informe-a junto com --format-orientation. Veja faixas. |
--format-orientation ORIENTATION | string | com --format-region | nenhum | landscape ou portrait: a orientação do display para o qual a faixa é feita, como o espectador a vê. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig playlist create ./lobby-loop.jsonscreenrig playlist create --from-template pl_01EXAMPLETEMPLATE00000 --name "Monday notice" --set headline="Open late"data.id do envelope é o id pl_ que screen assign recebe. Quando a alteração aguarda revisão, data é {status: pending_review, review, playlist}: a playlist existe com approved_revision: 0 e nenhuma tela pode exibi-la até que uma pessoa aprove (playlist_not_approved). Um modelo é uma playlist que declara fields; nunca é exibido em uma tela (playlist_is_template), e uma playlist criada a partir dele é uma playlist comum, que se pode atribuir, agendar e revisar.
playlist update#
Substituir um documento de playlist.
playlist update <id> <file> [--format-region REGION --format-orientation ORIENTATION] [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
<file> | caminho | sim | nenhum | O documento de substituição. |
--format-region REGION | string | não | nenhum | header, footer ou side: transforma a playlist em uma faixa desenhada sobre a página ao longo dessa borda e substitui um format no arquivo. Informe-a junto com --format-orientation. Veja faixas. |
--format-orientation ORIENTATION | string | com --format-region | nenhum | landscape ou portrait: a orientação do display para o qual a faixa é feita, como o espectador a vê. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig playlist update pl_01EXAMPLEPLAYLIST000000 ./lobby-loop.jsonQuando a alteração aguarda revisão, a playlist ao vivo continua tocando sem mudanças até que uma pessoa aprove a proposta.
playlist show#
Leia uma playlist, incluindo sua revisão atual.
playlist show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
screenrig playlist show pl_01EXAMPLEPLAYLIST000000Retorna a versão ao vivo. approved_revision é 0 para uma playlist que nenhuma pessoa aprovou ainda, e approval nomeia a revisão aberta enquanto uma mudança espera; reviews show ID retorna a proposta.
playlist list#
Listar as playlists do projeto.
playlist list [--templates] [--library]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--templates | boolean | não | desligado | Somente modelos: playlists que declaram campos. |
--library | boolean | não | desligado | Lista, em vez disso, as playlists da Biblioteca da organização, somente leitura: atribua-as a telas, agendamentos e pilhas, ou copie uma com playlist create --from-template; altere-as apenas no projeto Biblioteca. |
screenrig playlist list --templates
screenrig playlist list --libraryplaylist fields#
Mostra os campos de um modelo ou os valores de uma cópia, ou altera os valores e atualiza a cópia.
playlist fields <id> [--set NAME=VALUE...] [--clear NAME...] [--refresh] [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id pl_ de um modelo ou de uma playlist criada a partir de um. |
--set NAME=VALUE | string | não | nenhum | Define o valor de um campo. Pode ser repetido. |
--clear NAME | string | não | nenhum | Limpa o valor de um campo opcional. Pode ser repetido. |
--refresh | boolean | não | desligado | Recria as páginas a partir da revisão atual do modelo, quaisquer que sejam os valores. |
--expect-rev REVISION | string | não | nenhum | Exige opcionalmente esta revisão do recurso. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração. |
screenrig playlist fields pl_01EXAMPLECOPY00000000 --set headline="Closed today"Sem opções, mostra os campos de um modelo e quantas playlists foram criadas a partir dele, ou os valores de uma cópia, a revisão do modelo de que foi criada e se o modelo tem uma mais recente. Cada alteração, e --refresh sozinho, recria as páginas da cópia a partir da revisão atual do modelo, e é assim que uma mudança de marca feita no modelo chega às cópias existentes; nada é enviado automaticamente. Os valores são verificados como na criação. Com acesso Propose, uma alteração vira uma revisão.
playlist instances#
Lista as playlists criadas a partir de um modelo e a revisão do modelo de que cada uma foi criada.
playlist instances <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id pl_ do modelo. |
screenrig playlist instances pl_01EXAMPLETEMPLATE00000outdated marca uma playlist criada a partir de uma revisão mais antiga do modelo; playlist fields ID --refresh a atualiza.
playlist revisions#
Listar as revisões de uma playlist, da mais recente para a mais antiga.
playlist revisions <id> [--after CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
--after CURSOR | string | não | nenhum | O next_cursor da página anterior. |
screenrig playlist revisions pl_01EXAMPLEPLAYLIST000000Cada revisão diz o que a criou (created, edited, promoted com a revisão copiada, ou baseline, a revisão que a playlist tinha quando seu histórico começou), quem a fez, quando, quantas páginas tem e se é a atual. Uma página tem 50 revisões; next_cursor lê a próxima.
playlist revision show#
Ler uma revisão e a playlist como estava nela.
playlist revision show <id> --revision N| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
--revision N | integer | sim | nenhum | A revisão a ler. |
screenrig playlist revision show pl_01EXAMPLEPLAYLIST000000 --revision 3playlist promote#
Tornar uma revisão anterior atual novamente, copiando-a como uma nova revisão.
playlist promote <id> --revision N --expect-rev CURRENT| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
--revision N | integer | sim | nenhum | A revisão a copiar. |
--expect-rev CURRENT | string | sim | nenhum | A revisão atual da playlist (playlist show). Um valor obsoleto é revision_conflict: leia a playlist novamente e tente de novo. |
screenrig playlist promote pl_01EXAMPLEPLAYLIST000000 --revision 3 --expect-rev 9As páginas, a trilha sonora e o formato da revisão passam a ser a próxima revisão. O nome continua o mesmo, as revisões anteriores continuam na lista e toda tela que mostra a playlist é atualizada. Promover exige uma credencial que publica ao vivo; uma cujas alterações aguardam revisão recebe forbidden. Uma revisão cujo conteúdo já é o atual não muda nada.
playlist delete#
Excluir uma playlist.
playlist delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig playlist delete pl_01EXAMPLEPLAYLIST000000playlist export#
Exporta arquivos de imagem e vídeo, áudio da trilha sonora e URLs de iframe como um pacote portátil de playlist.
playlist export <id> --output DIRECTORY [--skip-applications]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da playlist pl_. |
--output DIRECTORY | caminho | sim | nenhum | Diretório de destino. Não deve existir; o pacote é escrito por meio de um irmão temporário e renomeado para o lugar. |
--skip-applications | flag | não | desligado | Remove primitivas de aplicativo e páginas vazias ou controladas por um aplicativo. Deve restar pelo menos uma página. O resultado lista os IDs das primitivas e páginas ignoradas. |
screenrig playlist export pl_01EXAMPLEPLAYLIST000000 --output ./lobby-bundleO pacote contém um manifesto, o documento da playlist e arquivos de imagem, vídeo e áudio da trilha sonora endereçados por conteúdo. Os seletores dinâmicos all, tag e folder são fixados em IDs exatos, as URLs de iframe são preservadas e os comentários são excluídos.
Cartões, streams e páginas adslot interrompem a exportação antes do download dos arquivos de mídia. Aplicativos também a interrompem por padrão; --skip-applications remove as primitivas de aplicativo e as páginas vazias ou controladas por um aplicativo, informando os IDs das primitivas e páginas ignoradas. Deve restar pelo menos uma página. Cartões, streams e páginas adslot continuam interrompendo a exportação com essa opção.
Para obter um documento editável que preserve as referências a cartões e aplicativos, use screenrig playlist show pl_01EXAMPLEPLAYLIST000000 --output playlist.json. O documento usa recursos existentes do mesmo projeto.
playlist import#
Criar uma playlist a partir de um diretório de pacote ou atualizar uma existente a partir dele.
playlist import <directory> [--name NAME] [--update ID [--expect-rev REVISION] [--note TEXT]]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<directory> | caminho | sim | nenhum | Um diretório de pacote escrito por playlist export. |
--name NAME | string | não | o nome da playlist do pacote | 1 a 120 caracteres. Importe o pacote como uma nova playlist com este nome. |
--update ID | string | não | uma nova playlist é criada | Atualizar esta playlist pl_ em vez de criar uma nova. Aceita --expect-rev opcional. |
--expect-rev REVISION | string | não | nenhum | A revisão atual da playlist de destino. |
--note TEXT | string | não | nenhum | Com --update: uma nota para a pessoa que revisa a alteração, no máximo 280 caracteres. |
screenrig playlist import ./lobby-bundle
screenrig playlist import ./lobby-bundle --name "Lobby loop (copy)"Nomes de exibição da playlist podem se repetir. A importação cria uma playlist separada mesmo quando o nome coincide; use --update com um ID para substituir uma playlist existente.
Importação valida todo o pacote localmente antes de tocar no projeto: manifesto, documento, caminhos, tipos de mídia, tamanhos e hashes. Mídias existentes são reutilizadas com correspondência exata de nome de arquivo, tipo de mídia, tamanho em bytes, hash e tag; o resto é enviado sem conversão, e a playlist é escrita somente após todos os objetos estarem prontos.
Importação nunca exclui ou poda mídia remota. Se uma etapa posterior falhar após o início do upload, o erro lista os objetos confirmados prontos e informa se a escrita da playlist começou. Repetir o mesmo pacote reutiliza esses objetos.
O documento da playlist
Uma playlist é name mais pages, com uma trilha sonora audio opcional. Cada página contém id, canvas, transition, advance, visibility opcional, audio_cue opcional e primitives.
Um modelo adiciona fields ao documento, [{name, label, type, required, max_length?}] com type igual a text, media ou url, e pode marcar qualquer primitiva como locked: true. Uma página lê um campo como {field.NAME} nos params de um cartão (campos de texto e de endereço), como selector.media_id de uma imagem ou de um vídeo (um campo de mídia) ou como src inteiro de um iframe (um campo de endereço). Cada marcador deve nomear um campo declarado do tipo certo, cada campo deve ser lido e uma primitiva bloqueada não lê nenhum; playlist validate verifica isso offline. Só o proprietário ou um membro que possa aprovar altera uma primitiva bloqueada (primitive_locked).
As seis primitivas são image, enviadas video, ao vivo stream, web iframe e application, e card. Texto e chrome não são tipos de fio: coloque um card para texto ao vivo ou envie uma imagem estática finalizada (media generate cria uma) e coloque-a como imagem.
Um stream usa uma ou duas fontes ordenadas com protocolos únicos e uma imagem pronta do mesmo projeto como fallback_media_id. Use no máximo um stream por página e avanço baseado em duração. HLS usa uma URL HTTPS pública; os Players Android e Qt se conectam diretamente aos feeds RTSP das câmeras, incluindo as credenciais. Consulte os detalhes dos transportes de câmera para saber quais formatos de URL cada Player abre; o multicast UDP/MPEG-TS direto opcional no Android e Qt usa um grupo IPv4 em 239/8 e uma porta. Uma fonte pode informar apenas sua url e deixar o esquema definir o protocolo. Outros Players selecionam a alternativa HLS ou exibem o fallback. Bytes do stream não são armazenados em cache para reprodução. Áudio padrão é mudo. A importação e a exportação de pacote de playlist não suportam streams.
{
"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"
}Use este primitivo em uma página com advance: {"mode":"duration","after_ms":30000}. Substitua o feed de exemplo e o ID de fallback. Requisitos do Player e configuração do transporte.
Cada primitivo é plano: id, primitive, os próprios campos desse primitivo, depois rect, layer, content_fit e opcional enter. Não há objeto de conteúdo aninhado.
Primitivas de imagem e vídeo exigem selector. selector.by é id com um media_id pronto e one_at_a_time false, ids com 1 a 1.024 media_ids prontos únicos, all para todo objeto pronto dessa primitiva, tag correspondente a ^[A-Za-z0-9]{1,32}$, ou folder com o folder_id de uma pasta de mídia mfd_ existente, que reproduz diretamente os arquivos prontos dentro dela e nenhuma de suas subpastas. Não coloque media_id na própria primitiva nem envie itens resolvidos pelo servidor. Uma primitiva application fixa um release_id e uma primitiva iframe recebe um src e um título, então nenhuma delas aceita um seletor. src é qualquer página http ou https que a tela consiga alcançar, inclusive uma página da LAN ou atrás de um login; um link do YouTube é armazenado como seu embed com reprodução automática. src, e o fallback_src opcional de um iframe, podem trazer tokens de tela como {screen.field.kiosk_id}, e uma primitiva application pode trazer params com os mesmos tokens, de modo que uma playlist dá a cada tela sua própria página. Os Players Android, Amazon Signage Stick, Linux, Raspberry Pi e Windows abrem a própria página. O app web do Player e os Players macOS, Samsung Tizen, LG webOS e BrightSign a enquadram, então uma página que envia X-Frame-Options (DENY, SAMEORIGIN ou o obsoleto ALLOW-FROM), ou uma lista Content-Security-Policy frame-ancestors sem a origem do Player, mostra um quadro bloqueado neles, e o app web do Player mostra apenas páginas https sem login no endereço. Quando a publicação detecta uma página HTTPS pública que recusa enquadramento, a escrita ainda tem sucesso e a CLI imprime a entrada warnings do servidor: código iframe_framing_refused, o page_id, primitive_id e src, o cabeçalho que recusou e o próximo passo (use uma página que permita enquadramento a partir da origem do Player, ou peça ao seu responsável que permita essa origem). O servidor também acrescenta um aviso playlist.iframe_framing_refused ao registro de eventos, um por página que recusa, que events list imprime com primitive_id. Uma página da LAN, uma página http e uma página que o servidor não alcança em alguns segundos não são verificadas. Um Player informa uma playlist como em reprodução quando seu manifesto está na tela, então uma publicação verificada não prova que uma página iframe foi renderizada: aja sobre o aviso ou olhe a tela. As duas primitivas web exigem content_fit de fill, porque nenhuma delas tem tamanho intrínseco.
advance.mode é duration com after_ms, que em uma página com exatamente um vídeo do YouTube (nem playlist nem transmissão ao vivo) também pode levar until definido como video_end para que a página dure até o vídeo terminar e after_ms seja por quanto tempo ela é exibida quando a tela não consegue ler a duração do vídeo, media_end em uma página com exatamente uma primitiva de imagem ou vídeo, audio_end em uma página cujo audio_cue nomeia uma faixa sonora, ou application com max_ms quando o app termina sua própria vez chamando window.screenrig.nextPage(). Uma página application precisa de exatamente uma primitiva marcada controller; todo outro modo a proíbe.
transition.type é um entre crossfade, swipe-left, swipe-right, swipe-up, swipe-down, dip, wipe-left, wipe-right, wipe-up, wipe-down, slide-left, slide-right, slide-up, slide-down ou stinger. duration_ms é obrigatório, de 0 a 60000. A página padrão é uma transição crossfade de 200 ms. Swipe move ambas as páginas juntas como um carrossel. Slide move a página que entra sobre a que sai, que se desloca um quarto da distância. Wipe revela a página que entra atrás de uma borda dura em movimento. Dip desvanece a página que sai para uma cor sólida e depois para a página que entra; color é um #RRGGBB opcional, padrão #000000, e válido apenas em dip. Os nomes das direções indicam o sentido do movimento: wipe-left é uma borda movendo-se para a esquerda. ease é opcional: linear, in, out ou in-out; o padrão é linear para crossfade e swipe-* e in-out para dip, wipe-* e slide-*; não é permitido em stinger. A página que entra controla sua transição. A primeira página de uma playlist não tem transição.
Um stinger é um gráfico temático em tela cheia que cobre a página de saída, troca pela página de entrada enquanto a tela está coberta, e então a descobre. Use-o para nomear uma seção de uma playlist: coloque-o na primeira página da seção. O objeto stinger é obrigatório para type: "stinger" e não permitido em outros tipos. Todos os seus membros são opcionais. theme é um dos neomustard (o padrão), cyanotype, propaganda, signal, avant-garde, bloom ou primetime, e corresponde aos temas dos cartões. title tem até 40 caracteres e subtitle até 60, definidos no tipo de exibição do tema. logo é media: mais o id de uma imagem pronta no projeto, por exemplo media:med_01EXAMPLE. accent é um #RRGGBB opcional que substitui o destaque do tema. duration_ms para um stinger é de 2000 a 6000 e cobre todo o bumper; durações típicas são de 2700 a 4000. O título permanece totalmente exibido por hang_ms, de 0 a 6000, padrão 1000 (um segundo), e hang_ms é no máximo 60% de duration_ms; um tempo maior requer um duration_ms maior. Um Player que não pode desenhar um stinger reproduz um crossfade da mesma duração. Veja a página ao vivo Cartão Stinger para assistir à transição.
O exemplo a seguir mostra uma transição de página stinger:
{ "type": "stinger", "duration_ms": 3500, "stinger": { "theme": "primetime", "title": "BREAKFAST", "subtitle": "Served until 11", "logo": "media:med_01EXAMPLE", "hang_ms": 1000 } }Um objeto enter opcional em um primitivo adiciona uma animação de objeto: fade-up, fade-down, fade-left, fade-right, fade-in, zoom-in ou zoom-out.
Um objeto de página visibility opcional limita quando a página é exibida: um booleano enabled obrigatório, limites civis from e until opcionais, e até 16 windows recorrentes de dias e horários civis. Cada playlist mantém pelo menos uma página sem campo visibility algum, e uma tela executando uma playlist programada precisa de um fuso horário. Defina esse fuso horário primeiro; screen assign e playlist update recusam localmente sem um e nomeiam o comando que corrige isso.
Uma condição visibility.data de página, {key, path?, equals?}, mostra a página apenas enquanto um documento de dados de cartão corresponde: key é uma chave de dados de cartão ou um ID de cartão, path um ponteiro RFC 6901 dentro do documento, e equals uma string, um número, um booleano ou null (omita-o para testar se o valor existe). A chave {screen.weather} lê o clima da localização própria de cada tela, que screen update ID --location LAT,LON define: {"enabled":true,"data":{"key":"{screen.weather}","path":"/condition","equals":"rain"}} mostra a página apenas enquanto chove onde essa tela está. O documento do clima tem condition (clear, cloud, fog, rain, snow, storm ou wind), band (freezing abaixo de 0 °C, cold de 0 a 9, mild de 10 a 17, warm de 18 a 24, hot a partir de 25), temperatureC em graus inteiros e isDay. É o clima atual da célula de 0,25 grau da tela, atualizado cerca de uma vez por hora, não uma previsão. Uma tela sem localização nunca mostra a página, e a publicação recusa um path ou um equals que o documento não pode conter, como cloudy em vez de cloud. Mantenha uma página comum sem visibility como reserva.
Um objeto audio opcional de nível superior adiciona uma trilha sonora que toca continuamente enquanto as páginas mudam. tracks lista de 1 a 128 entradas na ordem de reprodução, cada uma com um id único (o padrão de id da página) e o media_id de um objeto de mídia audio pronto. loop padrão é true e reinicia na primeira faixa após a última; volume padrão é 1 e varia de 0 a 1, multiplicado pelo volume do Player; cued padrão é false, e true para a trilha sonora após cada faixa para que uma faixa toque apenas quando uma página audio_cue a iniciar. Uma página comum pode conter audio_cue com um id track dessa lista e um booleano restart opcional (padrão false): quando a página aparece, o Player muda para essa faixa desde o início, reiniciando-a apenas quando já está tocando e restart é true. Cues são dicas, páginas de adslot não podem contê-las, e um cue sem trilha sonora é rejeitado. Uma página com advance {"mode":"audio_end"} termina quando a faixa que seu audio_cue nomeia termina, então requer esse cue e uma trilha sonora, não aceita after_ms, e segue as regras duration para primitivos de imagem e vídeo; um primitivo stream ainda precisa de uma página duration, e um aplicativo na página nunca é seu controlador; max_ms é uma dica opcional que o servidor substitui. playlist update substitui o documento inteiro, então omitir audio remove a trilha sonora. Criação de trilha sonora.
Cartões
Conheça os tipos de cartões, crie uma instância e atualize seus dados ao vivo. Uma playlist posiciona o ID do cartão retornado.
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.pngTelas
Uma tela é um Player. Esses comandos a leem, apontam para uma playlist e gerenciam sua vida. Pré-condições de revisão são opcionais em gravações.
Tags agrupam telas em frotas. Cada tela carrega de 0 a 16 tags únicas de 1 a 32 letras ou dígitos, definidas com screen tag. screen assign, screen reload, screen toast, screen tag e screen screenshot recebem um id de tela, vários ids ou --tag TAG, e uma resposta de frota informa cada tela: veja Resultados da frota.
As pastas de telas agrupam as telas por local, uma pasta por tela. Um comando de frota também aceita --folder ID: veja Pastas de telas.
screen pair#
Pareie um Player com o código exibido na tela dele.
screenrig screen pair "$PAIRING_CODE" --name "Lobby"screen list#
Listar telas. Telas arquivadas são omitidas, a menos que você as solicite.
screen list [--state archived] [--tag TAG] [--folder ID|root]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--state | string | não | telas ativas | O único valor aceito é archived, que lista somente telas arquivadas. |
--tag TAG | string | não | tela inteira | Lista apenas telas que possuem esta tag exata. |
--folder ID|root | string | não | tela inteira | Lista apenas as telas diretamente dentro desta pasta de telas sfd_, não as de suas subpastas, ou com root apenas as telas fora de qualquer pasta. |
screenrig screen list --tag Lobby
screenrig screen list --folder sfd_01EXAMPLEFOLDER000000000Cada linha carrega o tags da tela. Com --human, a tabela adiciona uma coluna TAGS quando qualquer tela listada possui tags.
screen show#
Leia uma tela, incluindo revisão, atribuição e estado online.
screen show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
screenrig screen show scr_01EXAMPLESCREEN00000000tags lista as tags da frota da tela. effective_playlist, takeover e playlist_schedule reportam o que a tela reproduz e por quê; veja Programações e takeover. health e as capacidades do host do Player estão em Saúde e energia do dispositivo. online é verdadeiro enquanto um Player está conectado, incluindo uma breve janela de reconexão. last_online_at e last_ip opcionais aparecem após a primeira conexão. observation opcional reporta as superfícies que um Player pintou: id, width, height, pixel_ratio e presentation. Todos são somente leitura; screen update não pode enviá-los, e uma tela arquivada ainda retorna sua linha.
commands lista os últimos 10 reinícios, recarregamentos, limpezas de cache, reinícios do app e atualizações da tela, do mais antigo para o mais recente, cada um com seu type, seu state (queued, sent, done, failed, expired, cancelled ou superseded), seu source (schedule para um reinício emitido por uma programação de reinício; ausente para um pedido por uma pessoa), seu expires_at e quando foi enviado ou concluído. reboot_schedule e next_reboot_at informam a programação de reinício da tela e o início de sua próxima janela de reinício. Uma limpeza de cache, reinício do app ou atualização que o Player finalizou também traz seu cause e um detail curto, que --human imprime como uma coluna CAUSE e uma linha abaixo da tabela. suspension traz o message e o since de uma tela suspensa. Uma tela arquivada por screen replace informa replaced_by, a tela para a qual seu dispositivo foi movido. Com --human, screen show imprime cada um deles.
last_outage informa a última queda da tela: offline_since, back_at e duration_s e, quando um relatório de saúde a determina, uma likely_cause entre device_restart, app_crash, app_restart, network ou platform; ela está ausente quando o screenRIG não consegue determiná-la. Uma reinicialização é decidida quando a tela volta, enquanto uma causa de rede ou do screenRIG espera o próximo relatório de saúde do Player, que pode levar até quinze minutos. glass traz os veredictos que o screenRIG tirou dos relatórios de reprodução e das capturas de tela. Com --human, screen show imprime Last outage e Likely cause, e Playlist stalled, Blank screen ou Frozen picture para um veredicto que encontrou um problema; Notificações diz o que os veredictos deixam de fora.
screen update#
Altere o nome da tela, atribuição de playlist ou fuso horário em uma única chamada.
screen update <id> [--name NAME] [--playlist-id ID] [--timezone ZONE] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--name NAME | string | não | inalterado | Nome da tela. |
--playlist-id ID | string | não | inalterado | A playlist pl_ que esta tela deve executar. |
--timezone ZONE | string | não | inalterado | Um identificador de zona IANA como America/Los_Angeles. Validado contra o banco de dados de zonas do servidor. Um patch nunca limpa uma zona. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen update scr_01EXAMPLESCREEN00000000 --name "Lobby"Em revisão, uma alteração apenas de --playlist-id é proposta como screen assign; uma sessão Propor não pode alterar outros campos.
screen publish#
Criar uma nova playlist a partir de um arquivo preparado e atribuí-la a uma tela.
screen publish <id> <file> [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
<file> | caminho | sim | nenhum | O documento da playlist preparado, ou - para stdin. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão de tela. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig screen publish scr_LOBBY lobby.jsonIsto cria uma nova playlist e a atribui. Não atualiza uma playlist existente pelo nome. Inspecione primeiro o documento preparado. Repita a entrada idêntica para retomar uma falha ambígua. A leitura da atribuição não prova a reprodução; solicite uma captura de tela separadamente. Em revisão, retorna stage: pending_review com ambas as revisões. Veja Preparar, publicar e editar playlists.
screen assign#
Aponte uma tela, ou uma frota de telas, para uma playlist.
screen assign (<id>... | --tag TAG) --playlist-id ID [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--playlist-id ID | string | sim | nenhum | A playlist pl_ para executar. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig screen assign scr_01EXAMPLESCREEN00000000 --playlist-id pl_01EXAMPLEPLAYLIST000000
screenrig screen assign --tag Lobby --playlist-id pl_01EXAMPLEPLAYLIST000000Se a playlist agendar qualquer página e a tela não tiver fuso horário, o CLI recusa antes de enviar qualquer coisa e nomeia o comando screen set-timezone para executar. Nenhuma revisão é consumida por essa recusa. Em uma frota, cada tela aplica essa regra por conta própria: uma tela sem fuso horário falha em seu resultado e as outras são atribuídas.
Para publicar em uma frota, crie a playlist uma vez com playlist create, depois execute screen assign --tag TAG --playlist-id ID. screen publish direciona uma tela.
screen set-timezone#
Defina o fuso horário civil em que uma playlist programada é lida.
screen set-timezone <id> --timezone ZONE [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--timezone ZONE | string | sim | nenhum | Um identificador de zona IANA como Europe/Berlin. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen set-timezone scr_01EXAMPLESCREEN00000000 --timezone America/Los_AngelesProgramações da página são horários civis, portanto sem sentido sem um fuso. Alterar o fuso renova a revisão do manifesto.
screen archive#
Ocultar uma tela e escurecer seu vidro.
screen archive <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen archive scr_01EXAMPLESCREEN00000000Arquivar oculta a tela da listagem padrão e escurece o vidro. Não desvincula o Player.
screen unarchive#
Restaure uma tela arquivada para a listagem padrão.
screen unarchive <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen unarchive scr_01EXAMPLESCREEN00000000Um Player também pode arquivar sua própria tela: um reset confirmado em um Player que mantém uma chave, ou desparear um Player de navegador pareado por cookie. screen show então reporta archive_reason como device_reset ou device_unpair (project para um arquivo que você solicitou), com archived_at. A tela mantém sua vinculação de dispositivo por todos os motivos, então um Player que ainda mantém essa chave ou cookie de dispositivo permanece escuro e retoma na desarquivação sem novo pareamento. O Player que foi resetado ou despareado descarta sua chave ou cookie e pareia novamente como uma nova tela. Uma chave substituída por uma recuperação de tela confirmada permanece aposentada.
Uma tela arquivada como replaced por screen replace não mantém vinculação de dispositivo, então desarquivar recusa essa tela e screen delete a remove.
screen suspend#
Mostrar um aviso em uma tela no lugar do conteúdo dela, até que seja retomada.
screen suspend <id> --message TEXT [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--message TEXT | string | sim | nenhum | O aviso que a tela mostra: 1 a 280 caracteres após aparar. O avanço de linha é o único caractere de controle, e o Player quebra o texto automaticamente e mantém seus avanços de linha. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen suspend scr_01EXAMPLESCREEN00000000 --message "Closed for stocktake. Back at 9am."Uma tela suspensa mostra a mensagem no lugar do conteúdo dela. Nada mais muda: sua playlist, programação, takeover e controle de exibição permanecem e continuam evoluindo, e screen resume mostra o que a tela estaria mostrando agora. screen show reporta suspension com o message e o since; suspender uma tela já suspensa substitui a mensagem e mantém since. Suspender aumenta a revisão da tela, e o Player busca novamente de imediato. Uma tela arquivada responde screen_archived.
screen resume#
Encerrar a suspensão de uma tela para que ela volte a mostrar seu próprio conteúdo.
screen resume <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen resume scr_01EXAMPLESCREEN00000000Retomar volta a mostrar o conteúdo próprio da tela, a partir do que a tela estaria mostrando agora, e o Player busca novamente de imediato. Uma tela que não está suspensa responde inalterada, sem mudança de revisão. Uma tela arquivada responde screen_archived.
screen delete#
Excluir uma tela.
screen delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen delete scr_01EXAMPLESCREEN00000000Excluir remove uma tela apenas enquanto nenhuma chave de Player estiver vinculada a ela, e screen show reporta deletable: true para essa tela. Um Player que pareia por código, seja nativo ou de navegador, mantém uma chave, e a chave permanece vinculada à sua tela, então excluir essa tela responde 409 screen_archive_required (código de saída 5): arquive-a em vez disso. Somente um Player de navegador pareado por cookie não mantém chave, e sua tela pode ser excluída esteja pareada ou ainda pendente.
screen replace#
Mover para esta tela o dispositivo pareado como outra tela, mantendo as configurações e o histórico desta tela.
screen replace <id> --with ID [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A tela scr_ a ser mantida. |
--with ID | string | sim | nenhum | A tela scr_ cujo dispositivo pareado assume o lugar. Deve ser outra tela do projeto. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão da tela a ser mantida. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen replace scr_01EXAMPLESCREEN00000000 --with scr_01EXAMPLENEWSCREEN000000Pareie primeiro o novo hardware como sua própria tela e depois substitua. A chave do dispositivo, ou a credencial de um Player de navegador, agora dá acesso a <id>, que mantém seu nome, tags, fuso horário, playlist, programações, takeover, programação e substituição de exibição, video wall, comentários, campos, localização e histórico, e assume o host e o Player da tela substituta. Sua saúde, status, armazenamento e comandos na fila recomeçam do zero. A tela indicada em --with é arquivada com archive_reason replaced e replaced_by apontando para <id>. Ela não mantém vinculação de dispositivo, então screen unarchive não pode restaurá-la e screen delete a remove. A chave que <id> mantinha é aposentada após uma janela de tolerância de quinze minutos; depois disso, o dispositivo antigo é recusado. Ambas as telas devem estar ativas e ter um Player pareado: uma tela que ainda aguarda pareamento responde resource_conflict, uma arquivada responde screen_archived, e um video wall precisa de um Player substituto que declare display.wall (wall_unsupported). O pedido sempre traz uma chave de idempotência, e uma nova tentativa exata retorna a resposta original.
screen rotate-public-id#
Emitir um novo ID público para uma tela.
screen rotate-public-id <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen rotate-public-id scr_01EXAMPLESCREEN00000000screen link create#
Criar o link de uma tela, ou substituí-lo, e imprimir sua URL do Player.
screen link create <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O ID da tela scr_. A tela está ativa: seu Player foi pareado uma vez com seu código. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen link create scr_01EXAMPLESCREEN00000000Imprime data.url, a URL do Player (https://play.screenrig.ai/player/#screen=…) para colar como URL de uma fonte de navegador no vMix ou no OBS, que não guarda armazenamento e, de outro modo, perderia o pareamento a cada carregamento. O Player roda a partir da URL a cada carregamento: a URL é todo o pareamento. Criar o link de novo o substitui (data.replaced é true): a URL antiga para de funcionar imediatamente e o Player aberto a partir dela mostra um aviso sem conteúdo. A URL é uma credencial que abre a tela: é impressa sob um rótulo sensível, mantida fora do log de operação e exibida de novo por screen link show. Abra-a em um único lugar. Uma tela que não foi pareada responde resource_conflict (código de saída 5), e uma tela arquivada responde screen_archived. Após uma requisição interrompida, execute de novo o mesmo comando: ele reutiliza a chave de idempotência salva e retorna o mesmo link.
screen link show#
Imprimir o link de uma tela e sua URL do Player.
screen link show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
screenrig screen link show scr_01EXAMPLESCREEN00000000Imprime data.url sob um rótulo sensível com data.hint (os quatro últimos caracteres do segredo), data.created_at e data.last_used_at depois que um Player abre o link. Uma credencial somente leitura recebe url vazio com url_redacted true, e a saída humana informa que a URL foi retida; um login Manage a recebe. Uma tela sem link responde screen_link_not_found (código de saída 4) e nomeia o comando que cria um. screen show imprime Screen link: on (…HINT) para uma tela que tem um, e nunca sua URL.
screen link delete#
Desativar o link de uma tela.
screen link delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen link delete scr_01EXAMPLESCREEN00000000A URL para de funcionar imediatamente e toda sessão que ela abriu termina: uma fonte de navegador que ainda a exibe mostra um aviso e nenhum conteúdo até receber uma nova URL. A tela, seu pareamento e seu conteúdo não são alterados. Tem sucesso, sem alterar nada, quando a tela não tem link.
screen reload#
Peça ao Player de uma tela, ou a todos os Players de uma frota, para recarregar uma vez.
screen reload (<id>... | --tag TAG) [--expires-in DURATION] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--expires-in DURATION | string | não | 24h, aplicado pelo servidor | Por quanto tempo o pedido espera que uma tela offline fique online: 90s, 30m, 2h ou 1d, de 60s a 24h. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen reload scr_01EXAMPLESCREEN00000000
screenrig screen reload scr_01EXAMPLESCREEN00000000 --expires-in 2h
screenrig screen reload --tag LobbyA resposta traz um reload_id, um state e um expires_at. Uma tela online recebe o recarregamento imediatamente (state sent); uma tela offline o mantém como queued e o recebe quando fica online antes de expires_at, 24 horas após o pedido, a menos que --expires-in diga o contrário. Um recarregamento mais recente substitui um que ainda está na fila; screen show lista os commands da tela e screen command cancel cancela um que ainda está na fila. Em uma frota, o reload de cada resultado traz o mesmo state. Um Player web recarrega na próxima troca de página; um Player nativo reconecta, refaz o manifesto e verifica atualizações. Um Player ignora um recarregamento dentro de dez minutos do último que executou. Recarregar funciona em telas ativas e arquivadas e não altera a revisão da tela.
screen toast#
Publique uma mensagem transitória como chrome de palco em uma tela ao vivo ou em uma frota.
screen toast (<id>... | --tag TAG) --text TEXT [--level info] [--duration-ms MS]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--text TEXT | string | sim | nenhum | De um a 120 caracteres, quebra de linha como única quebra, no máximo três linhas. |
--level LEVEL | string | não | info | info, alert ou error. O Player hospedado mostra notificações de erro. Info e alert são níveis de diagnóstico que podem ser suprimidos; o sucesso do comando não garante visibilidade. |
--duration-ms MS | integer | não | 10000, aplicado pelo servidor | Entre 2000 e 60000 quando fornecido. |
screenrig screen toast scr_01EXAMPLESCREEN00000000 --text "Lobby closed"
screenrig screen toast --tag Lobby --text "Closing in ten minutes"Um toast não é um primitivo: não ocupa slot de canvas, não tem camada, e não participa de prontidão ou crossfade. O último vence, não há fila nem cancelamento, e o envelope aceito é só { expires_at }. Nunca coloque credenciais ou outro material secreto no texto.
screen identify#
Mostrar o nome de uma tela sobre o conteúdo dela por um tempo, para encontrá-la no local.
screen identify <id> [--duration DURATION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--duration DURATION | string | não | 60s, aplicado pelo servidor | Por quanto tempo a sobreposição permanece na tela, contado a partir de quando o Player recebe o pedido: 30s, 2m ou 1m30s, de 2s a 10m. |
screenrig screen identify scr_01EXAMPLESCREEN00000000
screenrig screen identify scr_01EXAMPLESCREEN00000000 --duration 2mO Player desenha uma sobreposição em tela cheia sobre seu conteúdo, com o nome da tela bem grande e o id dela pequeno logo abaixo. A reprodução continua por baixo, e uma identificação mais recente substitui a sobreposição. O envelope aceito traz identify_id, duration_ms e um expires_at 60 segundos após o pedido, de modo que uma tela offline nunca a mostra depois. Somente um Player que declara a capacidade identify mostra a sobreposição: qualquer outra tela responde 409 identify_unsupported (código de saída 5) e nada é enviado; atualize o Player ou mostre o nome com screen toast. Uma tela arquivada responde screen_archived e uma tela que ainda aguarda pareamento responde resource_conflict. Identificar não altera a revisão da tela.
screen screenshot#
Capture uma imagem estática de uma tela ativa, ou de todas as telas de uma frota, e grave no 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag, sem limite de contagem de telas. |
--output FILE | caminho | não | ./<id>.webp | Para uma tela, um caminho de arquivo; um arquivo existente é sobrescrito sem aviso. Para vários IDs ou --tag, um diretório, criado se ausente, que recebe um <screen_id>.webp por tela. |
--concurrency N | integer | não | 4 | Capturas em voo simultâneas para vários ids ou --tag, de 1 a 8. |
--timeout MS | integer | não | 35000 | Quanto tempo esperar pela captura. |
--poll-ms MS | integer | não | 500 | Intervalo entre pesquisas de status de captura. |
screenrig screen screenshot scr_01EXAMPLESCREEN00000000 --output ./lobby.webpscreenrig screen screenshot --tag Lobby --output ./lobby-shotsO comando bloqueia até que o WebP esteja no disco; não há --no-wait. O envelope relata screen_id, capture_id, path, bytes, sha256, width e height, e nunca bytes da imagem. O mais recente vence: uma requisição posterior substitui uma captura em andamento. Uma captura de tela do Player web desenha cada página iframe como um bloco cinza-escuro com o rótulo “Embedded web page” e cada aplicativo como ele mesmo se renderiza; a imagem não traz marcação do bloco, então não prova que uma página iframe foi renderizada.
Para vários IDs ou --tag, a resposta é um resultado da frota com action: "screenshot", o selector, e o diretório output; cada resultado ok carrega path, bytes, sha256, width e height. Com --tag, o CLI lista primeiro as telas marcadas, seguindo cada página da lista; cada página é cobrada e as capturas são gratuitas, e vários IDs não precisam de lista. --idempotency-key é recusado nesta forma, pois cada captura usa sua própria chave. Se uma captura falhar inesperadamente, o resultado dessa tela é unexpected_error, nenhuma nova captura começa, as telas ainda aguardando relatam not_attempted, e o código de saída é 1.
screen tag#
Definir, adicionar, remover ou limpar as tags em uma tela ou frota.
screen tag (<id>... | --tag TAG) (--set TAGS | --add TAGS | --remove TAGS | --clear) [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--set TAGS | string | exatamente uma ação | nenhum | Substituir o conjunto inteiro por essas tags separadas por vírgulas, como Lobby,Floor2. |
--add TAGS | string | exatamente uma ação | nenhum | Adicione essas tags separadas por vírgula. |
--remove TAGS | string | exatamente uma ação | nenhum | Remover estas tags separadas por vírgula. |
--clear | boolean | exatamente uma ação | desligado | Remover todas as tags. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen tag scr_01EXAMPLESCREEN00000000 --set Lobby,Floor2
screenrig screen tag scr_01EXAMPLESCREEN00000000 --add Spring
screenrig screen tag --tag Lobby --add SpringUma tag tem de 1 a 32 letras ou dígitos, e uma tela carrega no máximo 16 tags únicas. Tags selecionam frotas; nunca são autorização e nunca chegam ao Player. Mudar tags atualiza a revisão da tela, não a do manifesto. Para uma tela o envelope é a tela atualizada. --add e --remove leem a tela primeiro e escrevem o novo conjunto protegido por --expect-rev ou a revisão recém-lida, então uma mudança concorrente retorna revision_conflict (exit 6) ao invés de ser sobrescrita; execute o comando novamente. Em uma frota, --add e --remove aplicam-se atomica e individualmente ao conjunto armazenado de cada tela, e uma tela que ultrapassaria 16 tags falha em seu próprio resultado com invalid_request.
Sempre que as tags mudam (screen tag, uma atualização de tela pela API, o editor de tags do painel), o levels da resposta lista, em gained e lost, as campanhas cujo público de tag a tela passou a integrar ou deixou, cada uma com seu source (campaign), id, a contagem de screens e, quando a campanha tem alcance, reach_before e reach_after. Um screen tag da frota os soma em toda a frota. Leia levels.lost antes de chamar uma edição de tag de inofensiva: remover a última tag correspondente das telas de uma campanha esvazia esse grupo e dispara as notificações reach_dropped e group_empty.
Resultados da frota
Com vários IDs de tela ou --tag, screen assign, screen reload, screen toast e screen tag executam uma ação medida sem limite de contagem de telas. O CLI segue automaticamente páginas de resultados limitadas, espera quando os orçamentos de controle são esgotados e mantém a mesma chave e frota selecionada durante todo o processo. --tag seleciona apenas telas ativas; os IDs podem nomear qualquer tela. Um ID de tela mantém a resposta de tela única. Comandos de frota não aceitam --expect-rev, pois as proteções de revisão são por tela. Cada comando de frota carrega uma chave de idempotência. Após uma requisição interrompida, como uma conexão perdida, execute novamente o comando idêntico para reproduzir as telas finalizadas sem repetir seus efeitos colaterais. Após uma resposta definitiva com falhas, tente novamente apenas os IDs que falharam: executar o comando inteiro novamente age em todas as telas. Reutilizar o mesmo --idempotency-key explícito dentro de 24 horas retorna a resposta registrada em vez disso.
O envelope mantém ok: true. Sucesso parcial é uma resposta normal, não um erro 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." }]
}Um resultado ok carrega o resultado de uma única tela: revision para assign, revision e tags para alterações de tag, reload para recarregar e toast para toast. Um resultado failed carrega o problema que a própria solicitação da tela teria retornado. Limites por tela ainda se aplicam dentro de uma ação de frota, então um recarregamento ou toast de frota pode relatar rate_limited para uma tela que acabou de ser recarregada ou tostada; tente novamente esse ID de tela depois. Os limites por tela são 6 recarregamentos e 20 toasts por minuto. Recarregamentos e toasts de frota também consomem um orçamento de organização de 600 telas por minuto: o servidor pausa quando o orçamento restante se esgota, e o CLI respeita Retry-After antes de continuar automaticamente.
| Resultado | Código de saída | Aviso |
|---|---|---|
| Cada tela combinada teve sucesso | 0 | nenhum |
| Algumas ou todas as telas falharam | O código da primeira tela com falha, como 4 para not_found ou 6 para revision_conflict | fleet_partial_failure |
| Nenhuma tela corresponde | 0 | fleet_no_match |
| Seletor ou ação malformada | 2 ou o código próprio da solicitação; sem alterações na tela | nenhum |
Pastas de telas
Uma pasta de telas organiza as telas por local. O id de uma pasta começa com sfd_, e uma tela fica em no máximo uma pasta, informada como folder_id em screen show e screen list e ausente na raiz do projeto. Uma organização mantém no máximo 1000 pastas em todos os seus projetos, aninhadas em até 10 níveis, com nomes de 1 a 100 caracteres que são únicos entre as pastas irmãs. As tags continuam para grupos que cruzam os locais.
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 retorna todas as pastas em data.items com id, name, parent_id (null na raiz do projeto), default_playlist_id quando definido, screens (as telas ativas diretamente dentro) e revision. screen move aceita ids de telas e de pastas em qualquer combinação, no máximo 1000 em uma única requisição tudo ou nada; uma pasta se move com tudo o que há dentro e não pode ser movida para dentro de si mesma nem de uma pasta que ela contém. screen list --folder ID lista apenas as telas diretamente dentro de uma pasta.
Em cada comando de frota que aceite --tag TAG, --folder ID seleciona cada tela ativa dessa pasta e de cada pasta dentro dela. Uma campanha aceita o mesmo: --folder ID em campaign create e campaign update, ou uma regra {"folder":"sfd_…"} em --audience, que se combina com regras de tag como em {"all":[{"folder":"sfd_BUILDING"},{"tag":"overhead"}]}.
A playlist padrão de uma pasta é o que suas telas exibem quando não têm uma playlist própria. Vale a pasta mais próxima acima de uma tela que defina uma, e effective_playlist informa source folder com o id da pasta como entry_id. Um takeover, uma campanha, uma programação e a playlist atribuída à própria tela têm precedência sobre ela; veja Agendamentos e takeover. A playlist deve estar aprovada (playlist_not_approved, exit 5).
Mover telas ou uma pasta, ou alterar a playlist padrão de uma pasta, resolve novamente as telas afetadas em cerca de 15 segundos. O levels da resposta lista, em gained e lost, as campanhas cujo público de pasta essas telas passaram a integrar ou deixaram e as playlists padrão de pasta que passaram ou deixaram de exibir, cada uma com seu source (campaign ou folder), seu id e a contagem de screens. Excluir uma pasta não exclui nada dentro dela: suas telas e pastas sobem para a pasta pai, e resource_conflict (exit 5) recusa a exclusão enquanto um público de campanha nomear a pasta. A exclusão responde 200 com levels, como uma movimentação.
As gravações precisam de acesso Gerenciar e nunca aguardam revisão: uma sessão Propor responde 403 insufficient_access. Cada gravação acrescenta screen.folder_created, screen.folder_updated, screen.folder_deleted ou screen.moved aos eventos do projeto.
Agendamentos e takeover
As campanhas de uma tela e as entradas de programação da playlist são níveis de uma mesma pilha. O servidor decide o que cada tela reproduz a partir do topo: seu takeover, as campanhas que a alcançam (--priority primeiro, depois a mais nova), as entradas da programação própria da tela em ordem, a playlist atribuída com screen assign e, por fim, a playlist padrão da pasta de telas mais próxima que define uma. O primeiro nível que vale é reproduzido. As trocas ocorrem em cerca de um minuto após um limite, e os players não precisam de atualização. Uma planilha com linhas de programação para muitas telas é importada em uma única etapa: veja Importação de programação.
Um nível vigora enquanto todas as suas regras vigoram: from e until, windows semanais, regras monthly, dates, datas except, uma condição data e uma condição interaction. Uma regra monthly é um day do mês (de 1 a 31; um mês sem esse dia a ignora) ou o dia da semana de posição nth (de 1 a 4, ou -1 para o último) com um weekday; um item dates é uma única date; ambos aceitam horários start e end opcionais e, sem eles, cobrem o dia inteiro. Uma data except remove toda ocorrência que começa nela, incluindo as continuações noturnas, e uma ocorrência noturna pertence à data em que começa. data é {key, path?, equals?} e vigora enquanto esses dados do cartão existirem ou forem iguais ao escalar. interaction é {idle_s} (de 5 a 3600, padrão 60): o nível é reproduzido enquanto alguém usa a tela por toque ou clique e volta atrás após idle_s segundos sem entrada, como uma página interativa sobre um loop de atração. displays lista as saídas do videowall (de 1 a 12) nas quais o nível é reproduzido. start é next_item (padrão), que espera o item atual terminar, ou on_time, que o interrompe no instante exato. Um Player que resolve a própria pilha reproduz os níveis interaction, data e displays; campaign explain reporta o nível para qualquer outro Player como off com o motivo stack_only (precisa de um Player que resolva a própria pilha).
screen show, screen list, e todo comando abaixo retornam effective_playlist ({id, source, entry_id?, until?}, onde source é takeover, campaign, schedule, default ou folder), takeover e playlist_schedule. entry_id é o id da campanha para campaign, o id da entrada para schedule e o id da pasta para folder. until é o próximo momento em que a escolha é conhecida para mudar. screen show --human imprime isso no fuso horário da tela, como em Assigned: pl_LUNCH (schedule entry lunch until 2026-08-14 15:00 America/Los_Angeles) ou Assigned: pl_LUNCH (campaign cmp_LUNCH until 2026-08-14 15:00 America/Los_Angeles) (UTC, rotulado, quando a tela não tem zona); a saída JSON mantém instantes RFC 3339. Tabelas de programação humanas são rotuladas com o fuso horário da tela, e screen list --human adiciona uma coluna ASSIGNED quando qualquer tela listada reproduz algo diferente de sua playlist padrão.
| Código do problema | Sair | Significado |
|---|---|---|
invalid_request | 8 | A tela não tem playlist padrão atribuída (next é screen assign), uma programação de exibição direciona uma tela sem fuso horário (next é screen set-timezone), ou uma playlist nomeada não pode ser atribuída. |
screen_archived | 5 | Uma tela arquivada recusa programações e takeovers. next é screen unarchive. |
revision_conflict | 6 | A revisão --expect-rev estava desatualizada. |
rate_limited | 7 | Agendamentos e ações de takeover compartilham limites por minuto: 600 por organização, 20 por tela e 60 por IP. Aguarde retry_after_seconds. |
Com um ID de tela, esses comandos retornam a tela atualizada e --expect-rev protege sua revisão. Vários IDs ou --tag executam como uma requisição de frota com o envelope e regras de saída da frota; cada tela falha individualmente, e o CLI pausa e retoma automaticamente quando o orçamento do projeto é esgotado.
screen schedule show#
Mostrar a programação da playlist de uma tela e a playlist que ela seleciona atualmente.
screen schedule show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
screenrig screen schedule show scr_CAFEA saída JSON pode ir direto para screen schedule set --file.
screen schedule set#
Substituir a programação da playlist em uma tela ou frota.
screen schedule set (<id>... | --tag TAG) --file FILE [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--file FILE | caminho | sim | nenhum | O documento de programação, ou - para stdin. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig screen schedule set scr_CAFE --file dayparts.json
screenrig screen schedule set --tag Cafe --file dayparts.jsonCada playlist nomeada em uma programação é validada como uma atribuição, e a tela precisa de um fuso horário e uma playlist padrão atribuída. Quando nenhuma entrada vigora, a playlist atribuída é reproduzida. Se uma playlist programada não puder ser exibida depois, suas entradas são puladas e screen.playlist_unavailable é registrado.
screen schedule clear#
Remover a programação da playlist de uma tela ou frota.
screen schedule clear (<id>... | --tag TAG) [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig screen schedule clear --tag Cafescreen schedule preview#
Mostrar o que mudaria ao substituir o cronograma de playlists de uma tela, sem fazê-lo.
screen schedule preview <id> --file FILE [--calendar-from INSTANT] [--calendar-to INSTANT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--file FILE | caminho | sim | nenhum | O documento de cronograma como screen schedule set o aceita, ou - para stdin. O JSON de screen schedule show é aceito de volta. |
--calendar-from INSTANT | string | não | agora | Inicie os calendários neste instante com fuso, como 2026-12-01T00:00:00Z. |
--calendar-to INSTANT | string | não | uma semana após o início | Termine os calendários neste instante com fuso, no máximo 93 dias após o início. |
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:00ZNada é gravado. As entradas são verificadas como screen schedule set as verifica, então uma prévia recusa o que o set recusa. data.gained e data.lost dizem se a tela ganharia ou perderia níveis do seu cronograma; uma entrada com "paused": true não está em nenhuma tela, então publicá-la a ganha. data.calendar.before e data.calendar.after são o calendário da tela como está e como ficaria de --calendar-from a --calendar-to.
screen schedule revisions#
Listar as revisões do cronograma de playlists de uma tela, a mais recente primeiro.
screen schedule revisions <id> [--after CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--after CURSOR | string | não | a primeira página | Continue a partir do data.next_cursor da página anterior. |
screenrig screen schedule revisions scr_LOBBY
screenrig screen schedule revisions scr_LOBBY --after CURSORdata.items contém no máximo 50 revisões, cada uma com revision (a revisão da tela na gravação, por isso os números têm lacunas onde a tela mudou de outra forma), created_at, change, current, author quando conhecido e entries, o cronograma inteiro após essa gravação (none significa que a tela não tinha cronograma). change é edited (um set, um clear ou uma importação de cronograma), restored (uma cópia da revisão anterior que restored_from nomeia) ou baseline. Enquanto data.next_cursor for uma string, restam revisões mais antigas: execute o comando de novo com --after definido com esse valor. As revisões somem com a exclusão definitiva da tela. Acesso somente leitura basta.
screen schedule restore#
Colocar de volta numa tela o cronograma de uma revisão anterior copiando-o para a frente.
screen schedule restore <id> --revision N [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--revision N | integer | sim | nenhum | A revisão a copiar para a frente, como screen schedule revisions a numera. |
--expect-rev REVISION | string | não | a revisão recém-lida | Exigir esta revisão atual da tela, não N. Sem ela, o CLI lê a tela logo antes da gravação e envia essa revisão; uma mudança no meio é revision_conflict (exit 6). |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig screen schedule restore scr_LOBBY --revision 4
screenrig screen schedule restore scr_LOBBY --revision 4 --expect-rev 9As entradas da revisão N tornam-se o cronograma da tela, a mesma gravação que screen schedule set com essas entradas (ou screen schedule clear quando essa revisão não tinha nenhuma), verificadas como são verificadas agora: uma playlist excluída desde então a recusa. Com acesso Propose, ou em um projeto que exige revisão das mudanças dos agentes, a restauração aguarda uma pessoa como o set, e nada muda na tela até que ela aprove. As revisões anteriores ficam como estavam.
screen takeover#
Exiba uma playlist em uma tela ou frota antes de campanhas, da programação e da atribuição.
screen takeover [set] (<id>... | --tag TAG) --playlist-id ID [--until TIME | --for DURATION] [--reason TEXT] [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--playlist-id ID | string | sim | nenhum | A playlist pl_ para mostrar. |
--until TIME | string | não | mantido até ser liberado | Um instante RFC 3339 estrito com segundos e um deslocamento, na forma YYYY-MM-DDTHH:MM:SSZ ou YYYY-MM-DDTHH:MM:SS-07:00, enviado normalizado para UTC; estritamente no futuro e no máximo 7 dias à frente. Ou none para segurar até screen takeover clear. |
--for DURATION | string | não | mantido até ser liberado | 30m, 2h, ou 3d, até 6d23h59m, convertido para um until a partir do relógio deste computador. 7d é recusado localmente; use --until para um total de 7 dias. Não com --until. |
--reason TEXT | string | não | nenhum | Uma nota do operador sobre a tomada e seus eventos. Limitada a no máximo 120 caracteres, sem caracteres de controle. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
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 é a abreviação de screen takeover set ID. Um takeover novo substitui o anterior. Quando termina, a tela retorna automaticamente a uma campanha em vigor, à sua programação ou à sua playlist atribuída. Um takeover cuja playlist não pode ser exibida termina. Uma reexecução --for após uma falha ambígua calcula um novo fim e é enviada como uma nova solicitação.
screen takeover clear#
Encerrar a tomada de controle em uma tela ou frota.
screen takeover clear (<id>... | --tag TAG) [--expect-rev REVISION] [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
--note TEXT | string | não | nenhum | Uma nota para a pessoa que revisa a alteração: texto simples, no máximo 280 caracteres. Ignorada quando a alteração é aplicada imediatamente. |
screenrig screen takeover clear --tag LobbyO arquivo de programação
Um cronograma lista de 1 a 32 entradas em ordem de prioridade; a primeira entrada que vigora vence. Uma entrada define pelo menos uma regra de um nível: windows, monthly, dates, except, data, interaction, from ou until, e opcionalmente displays, start e paused. windows tem de 1 a 16 itens no fuso horário da tela: days usa mon a sun, e start e end são HH:MM; omita ambos para o dia inteiro. Um end em ou antes de start cruza a meia-noite e pertence ao dia inicial. from (inclusivo) e until (exclusivo) são opcionais, minutos civis como 2026-12-24T18:00, sem deslocamento. Um id omitido torna-se entry_N. Uma entrada com "paused": true é um rascunho: não está na pilha de nenhuma tela, screen schedule show a marca e o calendário a desenha tracejada. Envie o cronograma de novo sem paused para publicá-la. O CLI verifica essa forma antes de enviar qualquer coisa. Partes do dia café da manhã, almoço e jantar:
{
"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" }] }
]
}Um cardápio que toca enquanto alguém usa a tela, acima de um brunch do primeiro domingo que pula uma data:
{
"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"] }
]
}Uma programação de playlist escolhe entre playlists; a página visibility dentro de uma playlist ainda escolhe entre suas páginas.
Agendar e assumir eventos
events list e events follow imprimem screen.playlist_switched (playlist_id, previous_playlist_id, source, entry_id, until), screen.takeover_started (playlist_id, until, onde none significa mantido até ser limpo, e reason), screen.takeover_ended (reason expired, cleared, replaced, playlist_deleted, ou playlist_unavailable), e o aviso screen.playlist_unavailable (playlist_id, entry_ids, e code playlist_deleted ou playlist_unavailable).
Excluir uma playlist que qualquer tela, incluindo as arquivadas, ainda pode exibir falha com resource_conflict (exit 5): atribuída, nomeada por uma entrada de programação, mantida por um takeover, exibida por uma campanha, ou efetiva. next aponta para screen list.
Campanhas
Uma campanha muda todas as telas de um público-alvo para uma playlist enquanto suas regras vigoram, e as muda de volta quando deixam de vigorar. Uma campanha executa cardápios de almoço em todas as lojas north, e uma tela marcada com north mais tarde também a recebe. Sem nenhuma regra definida, ela vigora sempre.
Por tela, o servidor escolhe o takeover dela, ou a primeira campanha em vigor (--priority de 0 a 100, maior primeiro, depois a mais recente), ou a programação de playlist, ou a playlist atribuída; veja Programações e takeover para a pilha e as regras. Uma campanha alcança uma tela que tem uma playlist padrão (screen assign). Uma campanha com uma regra de data ou horário também precisa do fuso horário da tela (screen set-timezone), porque esses são horários civis lidos no fuso horário próprio de cada tela. As telas mudam em cerca de um minuto, e os Players não precisam de atualização.
Uma campanha em pausa é um rascunho: não está em nenhuma tela até que campaign publish a publique, se quiser primeiro numa pasta de teste ou em poucas telas de teste, e depois campaign promote coloca o público dela nela. campaign preview mostra uma mudança antes de ela ser feita, e campaign revisions e campaign restore guardam e recuperam versões anteriores. Os mesmos rascunhos, prévias e histórico existem para as entradas de cronograma abaixo; veja rascunhos, teste e promoção, histórico.
Os comandos de campanha usam a capacidade screens. As gravações precisam de acesso Gerenciar e nunca aguardam revisão: uma sessão Propor responde 403 insufficient_access. Uma organização tem no máximo 100 campanhas em todos os seus projetos (campaign_limit_reached, exit 5), e a playlist deve estar aprovada (playlist_not_approved, exit 5). Cada gravação acrescenta campaign.created, campaign.updated ou campaign.deleted aos eventos do projeto, e uma tela que uma campanha move registra screen.playlist_switched com source campaign e o id da campanha como entry_id. ads campaigns compram tempo de anúncio em outras telas e são um recurso diferente.
campaign list#
Listar as campanhas do projeto na ordem em que as telas as leem.
campaign listSem parâmetros.
screenrig campaign listdata.items contém no máximo 100 campanhas, maior prioridade primeiro e, dentro de uma prioridade, a mais recente primeiro. Uma campanha pausada é listada e não se aplica em lugar nenhum.
campaign show#
Leia uma campanha.
campaign show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
screenrig campaign show cmp_LUNCHRetorna name, playlist_id, audience (a regra exata), priority, paused, os from, until, windows, monthly, dates, except, interaction, displays e start que estão definidos, e revision, o valor para --expect-rev em uma gravação posterior. reach informa quantas telas o público-alvo reúne: published quando a campanha foi publicada pela última vez (criada, ou atualizada com um novo público-alvo, playlist ou estado de pausa), current e at para a contagem mais recente, e empty_groups, as folhas tag:NAME e folder:ID do público-alvo que não correspondem a nenhuma tela. Uma tag, pasta, arquivamento ou exclusão que muda a contagem é recontada em cerca de 15 segundos; campaign list também traz reach, e as notificações reach_dropped e group_empty a observam. Um id de ads campaigns list responde not_found (saída 4) aqui.
campaign create#
Mudar as telas de um público-alvo para uma playlist, sempre ou enquanto suas regras vigoram.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | Um nome de 1 a 120 caracteres. |
--playlist-id ID | string | sim | nenhum | A playlist pl_ que as telas do público-alvo exibem enquanto a campanha vigora. Deve estar aprovada. |
--tag TAG | string | uma opção de público-alvo | nenhum | Telas que têm esta tag. Repita ou separe por vírgulas para exigir todas as tags listadas. |
--any-tag TAG | string | uma opção de público-alvo | nenhum | Telas que têm pelo menos uma destas tags. Repita ou separe por vírgulas. |
--screen-id ID | string | uma opção de público-alvo | nenhum | Estas telas. Repita ou separe por vírgulas. |
--folder ID | string | uma opção de público-alvo | nenhum | As telas desta pasta de telas sfd_ e de cada pasta dentro dela. Para combinar uma pasta com tags, use --audience. |
--all-screens | boolean | uma opção de público-alvo | desligado | Todas as telas do projeto. |
--audience RULE | string | uma opção de público-alvo | nenhum | Uma regra em JSON, @FILE para lê-la de um arquivo, ou - para stdin. |
--from TIME | string | não | sem início | Iniciar neste horário civil no fuso horário de cada tela, YYYY-MM-DDTHH:MM sem deslocamento. |
--until TIME | string | não | sem fim | Encerrar antes deste horário civil no fuso horário de cada tela, no mesmo formato e posterior a --from. |
--window SPEC | string | não | nenhum | Vigorar apenas nesta janela semanal, DAYS ou DAYS@HH:MM-HH:MM, como mon-fri@09:00-17:00 ou sat,sun. Repita até 16 vezes; a campanha vigora em qualquer uma delas. |
--monthly SPEC | string | não | nenhum | Vigorar apenas nesta ocorrência mensal: um dia do mês (15 ou day15; um mês sem esse dia a ignora) ou o enésimo dia da semana (1st-mon, 2nd-tue, 3rd-wed, 4th-thu, last-sun), cada um com um @HH:MM-HH:MM opcional. Repita até 16 vezes. |
--date SPEC | string | não | nenhum | Vigorar apenas neste dia, YYYY-MM-DD ou YYYY-MM-DD@HH:MM-HH:MM. Repita até 100 vezes. |
--except DATE | string | não | nenhum | Pula estas datas, YYYY-MM-DD, repetidas ou separadas por vírgulas, até 100. Uma exceção remove toda ocorrência que começa nessa data, incluindo as continuações noturnas. |
--on-touch [IDLE_S] | integer | não | desligado | Vigorar apenas enquanto alguém usa a tela por toque ou clique, até que se passem IDLE_S segundos, de 5 a 3600 (padrão 60), sem entrada. |
--displays N[,N] | string | não | todas as saídas | Reproduzir apenas nestas saídas do videowall, de 1 a 12, separadas por vírgulas. |
--start WHEN | string | não | next-item | on-time troca no momento exato e interrompe o item atual; next-item espera ele terminar. |
--covers WHERE | string | não | full | Onde a playlist toca: full (a página), main ou header, footer ou side, uma faixa desenhada sobre a página que precisa de uma playlist feita para essa região. Veja faixas. |
--priority N | integer | não | 0 | De 0 a 100. O número maior vence quando duas campanhas vigoram na mesma tela. |
--paused | boolean | não | desligado | Criar pausada: um rascunho que não está em nenhuma tela até campaign publish ou 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,2Tags têm de 1 a 32 letras ou dígitos. DAYS é daily, um dia (mon), um intervalo (mon-fri; fri-mon atravessa o fim da semana) ou uma lista separada por vírgulas (sat,sun). Sem um horário, a janela é o dia inteiro, e um fim igual ou anterior ao início cruza a meia-noite e pertence ao dia de início. Em uma regra --audience, cada membro tem exatamente um entre all, any, tag, screen_id ou folder, os grupos se aninham em no máximo 3 níveis, um público-alvo tem no máximo 500 regras, e {"all":[]} equivale a todas as telas.
Após uma criação interrompida ou ambígua, execute novamente o comando idêntico dentro de 24 horas: ele reutiliza a chave de idempotência salva, e o servidor retorna a mesma campanha em vez de criar outra.
campaign update#
Alterar uma campanha; as telas do seu público-alvo antigo e do novo são resolvidas novamente em até um 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--name NAME | string | não | inalterado | Renomear a campanha. |
--playlist-id ID | string | não | inalterado | Exibir esta playlist no lugar. Deve estar aprovada. |
--tag, --any-tag, --screen-id, --folder, --all-screens, --audience | string | não | inalterado | No máximo uma, escrita como em campaign create. Substitui o público-alvo inteiro. |
--from TIME, --until TIME | string | não | inalterado | Um horário civil como em campaign create. --from deve ficar antes de --until, caso contrário invalid_request (exit 8). |
--clear-from, --clear-until | boolean | não | desligado | Remover o início ou o fim. |
--window SPEC | string | não | inalterado | Substitui todas as janelas por estas. Repita até 16 vezes. |
--clear-windows | boolean | não | desligado | Remover todas as janelas. |
--monthly SPEC, --date SPEC, --except DATE | string | não | inalterado | Como em campaign create; cada uma substitui todas as regras do seu tipo. |
--on-touch [IDLE_S], --displays N[,N], --start WHEN | string | não | inalterado | Como em campaign create; --on-touch sem valor são 60 segundos. |
--clear-monthly, --clear-dates, --clear-except, --clear-on-touch, --clear-displays | boolean | não | desligado | Remove-os. Uma campanha sem nenhuma regra vigora sempre. |
--covers WHERE | string | não | inalterado | full, main, header, footer ou side, como em campaign create. |
--priority N | integer | não | inalterado | De 0 a 100. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
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-displaysPasse pelo menos uma alteração; apenas os campos que você passar mudam. Um novo --playlist-id é verificado como na criação. Após uma solicitação interrompida ou ambígua, execute novamente o comando idêntico: ele reutiliza a chave de idempotência salva, e o servidor retorna a atualização que já aconteceu em vez de aplicá-la novamente.
campaign pause#
Interromper uma campanha em todas as telas sem excluí-la.
campaign pause <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig campaign pause cmp_LUNCHAs telas que a exibiam voltam ao que exibiriam sem ela em até um minuto. campaign resume a inicia novamente.
campaign resume#
Iniciar novamente uma campanha pausada.
campaign resume <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig campaign resume cmp_LUNCHToda tela do público-alvo à qual a campanha pode se aplicar muda para a playlist da campanha em até um minuto enquanto a campanha vigora.
campaign delete#
Excluir uma campanha.
campaign delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig campaign delete cmp_LUNCHA campanha não volta. Toda tela que a exibe volta ao que exibiria sem ela em até um minuto; playlists, telas e tags permanecem. campaign pause interrompe uma campanha e a mantém.
campaign screens#
Mostrar as telas que uma campanha alcança e a situação de cada uma.
campaign screens <id> [--limit N] [--cursor CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--limit N | integer | não | 100 | Telas por página, de 1 a 500. |
--cursor CURSOR | string | não | a primeira página | O data.next_cursor da página anterior. |
screenrig campaign screens cmp_LUNCHdata.counts cobre todas as telas ativas do público-alvo: audience, depois uma contagem por situação presente. data.items é uma página dessas telas em ordem de id da tela, cada uma com o status da campanha. data.next_cursor está ausente na última página. Em uma tela cujo Player resolve a própria pilha, a situação é a que essa pilha dá à campanha: uma campanha de faixa ou main é reproduzida na sua região, e uma campanha --displays, nos seus displays.
| Status | Significado |
|---|---|
playing | A tela exibe a playlist da campanha. |
pending | Deve ser exibida, e a troca ocorre em até um minuto. |
waiting | Fora de --from, --until e das janelas agora; next_start quando começa em até oito dias. |
ended | --until já passou. |
outranked | Está em vigor, mas um takeover da tela (reason takeover) ou outra campanha (reason campaign, com by) prevalece. |
conditional | Está em vigor pelo horário e é reproduzida enquanto alguém usa a tela (reason interaction) ou enquanto sua condição de dados se cumpre (reason data). Só o Player vê sua entrada e seus dados de cartões. |
paused | A campanha está pausada. |
blocked | Não pode ser exibida aqui. reason é no_default_playlist (screen assign), no_timezone (screen set-timezone), playlist_unavailable (a playlist está ausente, não está aprovada ou não se adequa à tela), region_not_laid_out (não cabe em nenhum display da tela: sua faixa não cabe em nenhum, ou seu --displays não nomeia nenhum, e a campanha fica fora da sua pilha) ou stack_only (o Player da tela não resolve a própria pilha, e só um que resolve respeita uma região, um bloqueio de displays, --on-touch ou uma condição de dados). |
campaign explain#
Mostrar por que cada campanha é ou não reproduzida em uma tela, agora ou em um momento escolhido.
campaign explain <screen-id> [--at TIME] [--to TIME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<screen-id> | string | sim | nenhum | O id da tela scr_. |
--at TIME | string | não | agora | Explicar este momento em vez de agora: um instante com fuso (2026-12-24T10:00:00-08:00) ou um horário no relógio da própria tela (2026-12-24T18:00). Um horário que o horário de verão pula ou repete é recusado. |
--to TIME | string | não | nenhum | Também lista as trocas de playlist de --at (padrão: agora) até este momento, nas mesmas formas. Não há limite de distância; uma resposta lista no máximo 500 trechos. |
screenrig campaign explain scr_LOBBY
screenrig campaign explain scr_LOBBY --at 2026-12-24T18:00 --to 2026-12-26T00:00data.items lista todas as campanhas do projeto na ordem em que a tela as lê, cada uma com uma situação de campaign screens ou not_in_audience; uma linha blocked nomeia a correção. data.effective_playlist é a playlist que a tela reproduz agora (id, source e, para campaign, o id da campanha como entry_id), ou null quando a tela não exibe nenhuma playlist. Não altera nada.
Com --at, data.at traz a resposta para esse momento: effective_playlist (seu until é a próxima mudança) e uma linha verdicts para o takeover, cada campanha e cada entrada da programação, na ordem em que a tela as lê.
Um veredito é won (a playlist exibida), outranked (está em vigor, e by nomeia a vencedora), not_started (antes do início), ended (depois do fim), outside_hours (dentro das datas, fora das janelas, das regras mensais ou das datas, ou em uma data de exceção), conditional (está em vigor pelo horário e é reproduzida enquanto alguém usa a tela, reason interaction, ou enquanto sua condição de dados se cumpre, reason data) ou off (não se aplica, e reason diz o motivo, como stack_only). Em uma tela cujo Player resolve a própria pilha, os vereditos leem essa pilha: um nível de faixa ou main vence ou é superado na sua região, e um bloqueio de displays, nos seus displays. effective_playlist e a linha do tempo continuam sendo a página do display 1, e data.at.not_judged lista player_stack.
--to adiciona data.at.timeline, os trechos em que a playlist não muda, e timeline_truncated marca uma resposta que parou antes de --to. data.at.not_judged diz o que não é julgado: o takeover, a programação e as campanhas são lidos como estão agora, e data.items continua sendo o estado atual.
campaign preview#
Mostrar o que criar ou alterar uma campanha faria antes de fazê-lo.
campaign preview [<id>] [campaign create or update flags] [--paused | --publish] [--calendar-from INSTANT] [--calendar-to INSTANT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | não | uma nova campanha | A campanha cmp_ cuja mudança será pré-visualizada. Omita para pré-visualizar uma nova campanha a partir dos flags de campaign create. |
--name, --playlist-id, uma opção de público, os flags de regra | string | não | nenhum | Os flags de campaign create para uma nova campanha (--name, --playlist-id e uma opção de público são obrigatórios), ou de campaign update para uma mudança. Eles são verificados como a gravação os verifica, então uma prévia recusa o que a gravação recusa. |
--paused | boolean | não | desligado | Pré-visualizar como rascunho: em pausa, em nenhuma tela. |
--publish | boolean | não | desligado | Pré-visualizar a saída da pausa da campanha. Com uma opção de público, pré-visualiza a publicação para esse público. |
--calendar-from INSTANT | string | não | agora | Inicie os calendários neste instante com fuso, como 2026-12-01T00:00:00Z. |
--calendar-to INSTANT | string | não | uma semana após o início | Termine os calendários neste instante com fuso, no máximo 93 dias após o início. |
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:00Nada é gravado. data.gained e data.lost são {count, screen_ids} (os primeiros 500 por id): as telas que passariam a ter a campanha e agora não têm, e as que deixariam de tê-la. Uma campanha em pausa não está em nenhuma tela, então publicá-la ganha o seu público; uma edição que mantém a campanha numa tela só aparece nos calendários. data.calendar.before e data.calendar.after são os calendários de cronograma de --calendar-from a --calendar-to para as telas do público antigo e do novo, com rascunhos desenhados como níveis em pausa. --human imprime os trechos do primeiro display e os rascunhos que valeriam, e avisa quando o calendário não muda.
campaign publish#
Tirar da pausa uma campanha em rascunho, se quiser somente para uma pasta de teste ou poucas telas de teste.
campaign publish <id> [--test-folder ID | --test-screen ID] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--test-folder ID | string | não | o público da campanha | Publicar somente nas telas desta pasta de telas sfd_ e de cada pasta dentro dela. |
--test-screen ID | string | não | o público da campanha | Publicar somente nestas telas. Repita ou separe por vírgulas. |
--expect-rev REVISION | string | não | a revisão recém-lida | Exigir esta revisão atual da campanha. Sem ela, o CLI lê a campanha logo antes da gravação e envia essa revisão; uma mudança no meio é revision_conflict (exit 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 2Um rascunho é uma campanha em pausa: não está em nenhuma tela até ser publicado. Sem opção de teste, a campanha alcança seu próprio público em até um minuto. Uma opção de teste substitui o público na mesma gravação, de modo que só as telas de teste mudam. O fluxo usual: campaign create --paused com o público real, campaign publish ID --test-folder FOLDER, olhar as telas de teste e depois campaign promote ID --revision N. campaign preview ID --publish mostra antes o efeito.
campaign promote#
Colocar o público de um rascunho na campanha depois do teste.
campaign promote <id> --revision N [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--revision N | integer | sim | nenhum | A revisão em pausa do rascunho, como campaign revisions a numera. A campanha adota o público dessa revisão. |
--expect-rev REVISION | string | não | a revisão recém-lida | Exigir esta revisão atual da campanha. Sem ela, o CLI lê a campanha logo antes da gravação e envia essa revisão; uma mudança no meio é revision_conflict (exit 6). |
screenrig campaign promote cmp_LUNCH --revision 1
screenrig campaign promote cmp_LUNCH --revision 1 --expect-rev 2O público da revisão N torna-se o da campanha em uma gravação, uma nova revisão cujo change é promoted, e cada tela do público antigo e do novo é resolvida de novo em até um minuto. A revisão N deve ser uma revisão em pausa (invalid_request a nomeia caso contrário), e a campanha deve estar ativa: uma campanha em pausa agora não tem teste para promover. --expect-rev é a revisão atual da campanha, não N. Promover exige o acesso que campaign update exige.
campaign revisions#
Listar as revisões de uma campanha, a mais recente primeiro.
campaign revisions <id> [--after CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--after CURSOR | string | não | a primeira página | Continue a partir do data.next_cursor da página anterior. |
screenrig campaign revisions cmp_LUNCH
screenrig campaign revisions cmp_LUNCH --after CURSORdata.items contém no máximo 50 revisões, cada uma com revision, created_at, change, current, author quando conhecido e campaign, a campanha como ficou após essa gravação, com seu estado de pausa. change é created, edited, restored ou promoted (uma cópia da revisão anterior que restored_from nomeia), ou baseline, a revisão que a campanha tinha quando seu histórico começou. Uma campanha cujo histórico não tem nenhuma revisão fora de pausa é um rascunho. Enquanto data.next_cursor for uma string, restam revisões mais antigas: execute o comando de novo com --after definido com esse valor. As revisões são mantidas enquanto a campanha existir e somem com a exclusão dela. Acesso somente leitura basta.
campaign restore#
Tornar atual de novo uma revisão anterior copiando-a para a frente.
campaign restore <id> --revision N [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da campanha cmp_. |
--revision N | integer | sim | nenhum | A revisão a copiar para a frente, como campaign revisions a numera. |
--expect-rev REVISION | string | não | a revisão recém-lida | Exigir esta revisão atual da campanha. Sem ela, o CLI lê a campanha logo antes da gravação e envia essa revisão; uma mudança no meio é revision_conflict (exit 6). |
screenrig campaign restore cmp_LUNCH --revision 3
screenrig campaign restore cmp_LUNCH --revision 3 --expect-rev 5O nome, a playlist, o público, as regras, o região, a prioridade e o estado de pausa da revisão N tornam-se uma nova revisão cujo change é restored, verificada como campaign update é verificado: a playlist dela deve continuar existindo e estar aprovada (playlist_not_approved, exit 5). Cada tela do público antigo e do novo é resolvida de novo em até um minuto. As revisões anteriores ficam como estavam, e restaurar o conteúdo atual não muda nada. Restaurar exige o acesso que campaign update exige.
Revisões
Quando um projeto requer revisão para mudanças de agente, ou a sessão tem acesso Propor, mudanças em playlist e tela aguardam uma pessoa em vez de aplicar. O comando ainda é bem-sucedido: ok: true, sair 0, a resposta do servidor em data, e um aviso 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" }]
}Criação e atualização de playlist (incluindo playlist import e playlist replace-release --apply), screen publish, screen assign, screen schedule set, clear e restore, e screen takeover e takeover clear aguardam revisão, para uma tela ou frota. Uma mudança na frota é uma revisão: sua tag é resolvida quando uma pessoa aprova, e reviews show então reporta o resultado de cada tela; uma grande frota termina a aplicação em segundo plano, e screen_change.result.applying é true até que todas as telas tenham seu resultado. Além das mudanças de mídia abaixo, toda outra mudança responde 403 insufficient_access para uma sessão Propose. --note TEXT nesses comandos envia uma nota em texto simples, com no máximo 280 caracteres, que o revisor lê no dashboard.
Uma pessoa aprova, solicita alterações ou rejeita na página Reviews do dashboard; agentes não podem aprovar alterações de playlist ou tela. Uma alteração aprovada aplica-se como se tivesse sido feita então, e seus eventos nomeiam a pessoa que aprovou e o agente que a propôs. Não faça polling, pause ou repita a escrita enquanto uma revisão aguarda: verifique depois com reviews show, ou siga review.approved, review.rejected e review.changes_requested com events follow --type review..
Mudanças na mídia também aguardam uma sessão Propose. Seletor de tag, pasta e all ignoram um novo upload até que uma pessoa o aprove, e a mídia aprovada que a sessão retagueia ou move continua sendo reproduzida com suas tags e pasta aprovadas até que a mudança seja aprovada. A retag responde ok, saída 0, com aviso media_review_pending, e a revisão do item aparece em reviews list em segundos; não faça polling, pause ou tente novamente. Cada item recebe uma revisão, tipo playlist_change com operação selector_refresh e um assunto media: media_change mostra suas tags e pasta before e after (before é null para um novo upload), e media_playlists lista todas as playlists aprovadas e todas as playlists propostas aguardando revisão que a mudança adiciona ou remove (media_added, media_removed), com suas telas. Aprovar aplica a mudança a todas; rejeitar, solicitar alterações ou retirar coloca o item retagueado ou movido de volta como foi aprovado, e um novo upload permanece não reproduzido. Uma mudança que não altera nenhuma playlist aprovada nem proposta aplica-se sozinha, e uma playlist que nomeia o item por id o carrega em sua própria revisão. Quando essas playlists avançam antes que uma pessoa decida, a revisão da mídia fica stale e uma nova substitui em segundos.
Estados da revisão:
| Estado | Significado | Próximo passo |
|---|---|---|
pending | Aguardando uma pessoa. | Dê à pessoa a URL da revisão; verifique novamente depois. |
approved | Aplicado à playlist ou telas. | Verifique na tela com screen show e uma captura de tela. |
changes_requested | A pessoa pediu mudanças; decision_note indica quais. | Revise e proponha novamente com --note. |
rejected | A pessoa recusou; decision_note indica o motivo. | Não reenvie a mesma alteração; pergunte à pessoa. |
withdrawn | O proponente retirou a proposta. | Nenhum. |
superseded | Uma proposta mais recente para a mesma playlist ou tela a substituiu; superseded_by a nomeia. | Siga a revisão mais recente. |
stale | A playlist ao vivo mudou após a proposta, ou sua tag, pasta ou seletores all agora reproduziriam mídia que não viu quando proposta, então não pode ser aplicada como revisada. Uma revisão de mídia fica stale quando as playlists que lista mudam. | Ler a playlist novamente e propor sobre ela. Uma revisão de mídia desatualizada é substituída por uma nova em segundos. |
reviews list#
Listar avaliações, da mais recente para a mais antiga.
reviews list [--state pending|decided|all] [--kind playlist_change|screen_change|ad_creative] [--limit N] [--cursor CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--state STATE | string | não | pending | pending, decided ou all. |
--kind KIND | string | não | todo tipo | playlist_change, screen_change ou ad_creative. |
--limit N | integer | não | 50 | Revisões por página, de 1 a 100. |
--cursor CURSOR | string | não | a primeira página | O next_cursor da página anterior. |
screenrig reviews list --state allO resultado carrega pending_count. Uma sessão vê os tipos que suas capacidades leem: playlists para mudanças na playlist, screens para mudanças na tela e advertising para criativos de anúncios.
reviews show#
Leia uma avaliação.
reviews show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da revisão do resultado pending_review. |
screenrig reviews show rvw_LOBBYA revisão informa seu state, o proponente, seu note, o decision_note que uma pessoa deixou ao rejeitar ou solicitar alterações, e impact.screens. Uma mudança na playlist adiciona o diff, um preview das playlists ao vivo e propostas (nenhum para uma revisão de mídia), media_change para uma revisão de mídia, e media_playlists, as playlists cuja seleção a mudança altera. Para uma mudança de tela, blockers lista as revisões de playlist que uma pessoa decide primeiro, com seu estado atual.
reviews withdraw#
Retire sua própria proposta pendente.
reviews withdraw <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | Uma revisão pendente proposta nesta sessão. |
screenrig reviews withdraw rvw_LOBBYNada chega às telas, e uma nova playlist retirada permanece não aprovada. Uma revisão que não está mais pendente responde review_not_pending (saída 5).
Saúde e energia do dispositivo
Cada Player pareado reporta a saúde do dispositivo no início da sessão, a cada quinze minutos, e imediatamente quando sua conexão de display ou energia muda. Também declara as capacidades do host que suporta: reboot, clear_cache, restart_app e update onde cada uma funciona nesse dispositivo, e os métodos de energia do display que pode usar (display_power.serial, a porta de controle RS-232 do display; display_power.cec, display_power.ddc, display_power.backlight ou display_power.scrim, um blackout na tela). screen show retorna ambos.
screen show retorna a saúde como data.health com o reported_at do servidor; stale fica verdadeiro após 35 minutos sem relatório, e o último relatório permanece visível. Com --human imprime um bloco Health: hora do relatório, dispositivo e uptime do Player, memória em uso, carga e núcleos da CPU, temperatura, conexão e energia do display, tipo de rede e sinal Wi-Fi, nível da bateria, carregamento e fonte de energia em um dispositivo com bateria, e falhas e reinícios do renderizador nas últimas 24 horas. screen list --human adiciona uma coluna HEALTH quando qualquer tela listada precisa de atenção: display disconnected, hot (80 °C ou mais), on battery, crashing (3 ou mais falhas em 24 horas), ou stale.
As transições chegam como eventos screen.health_changed, impressos por events list e events follow com um valor changes= compacto como display_disconnected,temperature_high temperature_c=82. Comandos de energia acrescentam screen.reboot_requested e screen.display_changed. Uma programação de reinício acrescenta screen.reboot_schedule_changed quando é definida ou limpa e screen.reboot_skipped com um reason quando uma janela passa sem um reinício; screen.reboot_requested traz source, schedule quando a programação o emitiu. Como todo evento screen.*, são gratuitos no stream de escuta e como entregas de webhook. Uma notificação envia e-mail, ou faz POST de um webhook assinado, quando um display se desconecta, um dispositivo superaquece ou passa a funcionar na bateria, ou um Player falha repetidamente.
screen uptime, screen presence e screen health-history leem o que uma tela fez ao longo do tempo: disponibilidade diária, transições online e offline, e a saúde que ela reportou. project uptime e project health-trend leem a frota. Offline é registrado depois que uma tela fica inacessível por 60 segundos, e o histórico é mantido pelo período de retenção de eventos do plano.
| Código do problema | Sair | Significado |
|---|---|---|
reboot_unsupported | 5 | O Player da tela não declara reboot. Nada foi enviado nem armazenado; screen reload atualiza o conteúdo sem reiniciar o dispositivo. |
command_unsupported | 5 | O Player da tela não declara clear_cache, restart_app ou update, a capacidade de que o comando precisa. Nada foi enviado; screen show lista as capacidades do host e screen reload atualiza o conteúdo. |
resource_conflict | 5 | A tela ainda está aguardando pareamento e não tem Player para alternar ainda. Uma programação de exibição ainda pode ser definida. |
invalid_request | 8 | Uma programação de display ou de reinício tem como alvo uma tela sem fuso horário (next é screen set-timezone), ou o arquivo está malformado. |
rate_limited | 7 | Reinicializações, e limpar cache, reiniciar o app e atualizar o software juntos: 2 por tela a cada 10 minutos e 600 por organização por minuto. Gravações de tela: 10 por tela e 600 por organização por minuto. Aguarde retry_after_seconds. |
Vários ids ou --tag executam como uma requisição de frota com o envelope e regras de saída da frota.
screen reboot#
Reiniciar o dispositivo de uma tela ou os dispositivos de uma frota.
screen reboot (<id>... | --tag TAG) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--yes | boolean | para vários ids ou --tag | desligado | Confirma uma reinicialização da frota. O CLI nunca solicita. |
--expires-in DURATION | string | não | 24h, aplicado pelo servidor | Por quanto tempo o pedido espera que uma tela offline fique online: 90s, 30m, 2h ou 1d, de 60s a 24h. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen reboot scr_LOBBY
screenrig screen reboot scr_LOBBY --expires-in 2h
screenrig screen reboot --tag Lobby --yesO Player reinicia o dispositivo, não apenas a si mesmo. Uma tela online recebe o reinício na hora (state sent); uma tela offline o mantém queued e o recebe quando fica online antes de expires_at, 24 horas depois do pedido a menos que --expires-in diga o contrário. Um reinício mais novo substitui um ainda na fila. screen show lista os commands da tela: um reinício enviado passa a done quando o dispositivo informa que iniciou, e screen command cancel cancela um ainda na fila. Em uma frota, o reboot de cada resultado traz o mesmo state. Uma requisição recusada ou que falhou, e uma repetição exata da mesma requisição, não contam para o limite por tela. Desde o momento em que um reinício é enviado até que o dispositivo informe que iniciou ou passem dez minutos, a tela não abre alerta screen_offline nem display_disconnected; um aviso de qualquer um dos dois que vence nesse intervalo espera até o fim do período mais seu tempo de espera, e um aviso crashing é ignorado como planned_reboot. Uma condição que ainda se mantém depois abre normalmente.
screen clear-cache#
Limpar os caches do Player de uma tela ou dos Players de uma frota.
screen clear-cache (<id>... | --tag TAG | --folder ID) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id>, --tag ou --folder | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id>, --tag ou --folder | nenhum | Cada tela ativa com esta tag. |
--folder ID | string | um de <id>, --tag ou --folder | nenhum | Toda tela ativa nesta pasta de telas sfd_ e nas pastas dentro dela. |
--yes | boolean | para vários ids, --tag ou --folder | desligado | Confirma um pedido para a frota. O CLI nunca solicita. |
--expires-in DURATION | string | não | 24h, aplicado pelo servidor | Por quanto tempo o pedido espera que uma tela offline fique online: 90s, 30m, 2h ou 1d, de 60s a 24h. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen clear-cache scr_LOBBY
screenrig screen clear-cache scr_LOBBY --expires-in 2h
screenrig screen clear-cache --tag Lobby --yesO Player exclui suas mídias baixadas, pacotes de aplicativo e caches de dados, mantém seu pareamento, identidade e configurações, e depois busca o manifesto e o conteúdo novamente; a tela pode exibir seu estado de carregamento enquanto o conteúdo é reabastecido. Alcança apenas um Player que declara clear_cache. Uma tela online recebe o pedido de imediato (state sent); uma tela offline o mantém queued e o recebe quando fica online antes de expires_at, 24 horas após o pedido, a menos que --expires-in diga o contrário. A resposta traz command_id, command, state e expires_at. Um Player que não declara a capacidade responde 409 command_unsupported e nada é enviado; em uma frota, essa tela falha sozinha. screen show lista o comando em commands e, quando o Player reporta, marca-o como done ou failed com um cause e um detail curto: cleared quando os caches são limpos e a nova busca começou, ou clear_failed quando um cache não pode ser limpo. Um comando enviado sem relatório permanece sent. Um comando mais novo do mesmo tipo substitui um ainda na fila, e screen command cancel cancela um ainda na fila. Em uma frota, o command de cada resultado traz o mesmo state. Uma frota (vários ids, --tag ou --folder) precisa de --yes. Um pedido recusado ou que falhou, e uma repetição exata do mesmo pedido, não contam para o limite por tela de 2 pedidos de clear-cache, restart-app e update-software somados a cada 10 minutos.
screen restart-app#
Reiniciar o aplicativo do Player de uma tela ou dos Players de uma frota.
screen restart-app (<id>... | --tag TAG | --folder ID) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id>, --tag ou --folder | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id>, --tag ou --folder | nenhum | Cada tela ativa com esta tag. |
--folder ID | string | um de <id>, --tag ou --folder | nenhum | Toda tela ativa nesta pasta de telas sfd_ e nas pastas dentro dela. |
--yes | boolean | para vários ids, --tag ou --folder | desligado | Confirma um pedido para a frota. O CLI nunca solicita. |
--expires-in DURATION | string | não | 24h, aplicado pelo servidor | Por quanto tempo o pedido espera que uma tela offline fique online: 90s, 30m, 2h ou 1d, de 60s a 24h. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen restart-app scr_LOBBY
screenrig screen restart-app scr_LOBBY --expires-in 2h
screenrig screen restart-app --tag Lobby --yesO Player reinicia seu aplicativo, não o dispositivo (um Player web recarrega sua página) e reporta a partir do processo reiniciado. Alcança apenas um Player que declara restart_app; screen reboot reinicia o dispositivo. Uma tela online recebe o pedido de imediato (state sent); uma tela offline o mantém queued e o recebe quando fica online antes de expires_at, 24 horas após o pedido, a menos que --expires-in diga o contrário. A resposta traz command_id, command, state e expires_at. Um Player que não declara a capacidade responde 409 command_unsupported e nada é enviado; em uma frota, essa tela falha sozinha. screen show lista o comando em commands e, quando o Player reporta, marca-o como done ou failed com um cause e um detail curto: restarted, ou restart_failed quando a reinicialização não pode começar. Um comando enviado sem relatório permanece sent. Um comando mais novo do mesmo tipo substitui um ainda na fila, e screen command cancel cancela um ainda na fila. Em uma frota, o command de cada resultado traz o mesmo state. Uma frota (vários ids, --tag ou --folder) precisa de --yes. Um pedido recusado ou que falhou, e uma repetição exata do mesmo pedido, não contam para o limite por tela de 2 pedidos de clear-cache, restart-app e update-software somados a cada 10 minutos.
screen update-software#
Atualizar o Player de uma tela para a versão mais recente, ou os Players de uma frota.
screen update-software (<id>... | --tag TAG | --folder ID) [--yes] [--expires-in DURATION] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id>, --tag ou --folder | nenhum | Um ou mais IDs de tela scr_. Vários IDs executam como uma única solicitação de frota. |
--tag TAG | string | um de <id>, --tag ou --folder | nenhum | Cada tela ativa com esta tag. |
--folder ID | string | um de <id>, --tag ou --folder | nenhum | Toda tela ativa nesta pasta de telas sfd_ e nas pastas dentro dela. |
--yes | boolean | para vários ids, --tag ou --folder | desligado | Confirma um pedido para a frota. O CLI nunca solicita. |
--expires-in DURATION | string | não | 24h, aplicado pelo servidor | Por quanto tempo o pedido espera que uma tela offline fique online: 90s, 30m, 2h ou 1d, de 60s a 24h. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen update-software scr_LOBBY
screenrig screen update-software scr_LOBBY --expires-in 2h
screenrig screen update-software --tag Lobby --yesO Player verifica agora a versão mais recente do Player e a instala onde sua plataforma permite que o Player se atualize sozinho; um Player web atualiza seu service worker e depois recarrega. Alcança apenas um Player que declara update: um Player instalado de uma loja ou gerenciado por um gerenciador de dispositivos se atualiza por esse canal. Uma tela online recebe o pedido de imediato (state sent); uma tela offline o mantém queued e o recebe quando fica online antes de expires_at, 24 horas após o pedido, a menos que --expires-in diga o contrário. A resposta traz command_id, command, state e expires_at. Um Player que não declara a capacidade responde 409 command_unsupported e nada é enviado; em uma frota, essa tela falha sozinha. screen show lista o comando em commands e, quando o Player reporta, marca-o como done ou failed com um cause e um detail curto: up_to_date quando a versão mais recente já está em execução, updated quando a nova versão iniciou ou, em caso de falha, update_check_failed, download_failed, install_failed ou no_update_channel. Um comando enviado sem relatório permanece sent. Um comando mais novo do mesmo tipo substitui um ainda na fila, e screen command cancel cancela um ainda na fila. Em uma frota, o command de cada resultado traz o mesmo state. Uma frota (vários ids, --tag ou --folder) precisa de --yes. Um pedido recusado ou que falhou, e uma repetição exata do mesmo pedido, não contam para o limite por tela de 2 pedidos de clear-cache, restart-app e update-software somados a cada 10 minutos.
screen command cancel#
Cancelar um comando que ainda está na fila para uma tela offline.
screen command cancel <id> <command_id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
<command_id> | string | sim | nenhum | Um id de commands em screen show, ou o reboot_id, reload_id ou command_id com que o pedido foi respondido. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen command cancel scr_01EXAMPLESCREEN00000000 rbt_01EXAMPLEREBOOT00000000Somente um comando na fila pode ser cancelado. Um que já foi enviado (sent ou done) responde 409 resource_conflict com "The command was already sent.", um que não está mais na fila (expired, cancelled ou superseded) responde 409 resource_conflict com "The command is no longer queued.", e um id que a tela não lista responde 404 not_found. A resposta é a tela com o comando cancelled, e a revisão da tela não muda.
screen display#
Ligue ou desligue a exibição de uma tela, ou das telas de uma frota, agora, ou limpe essa substituição.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_. Um on ou off final após os IDs é o mesmo que --power. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--power on|off | string | sim, para set | nenhum | O poder para aplicar agora. |
--until TIME | string | não | o próximo limite da programação do monitor | Um instante RFC 3339 estrito, estritamente no futuro e no máximo 7 dias à frente. |
--for DURATION | string | não | o próximo limite da programação do monitor | 30m, 2h, ou 3d, até 6d23h59m. Não com --until. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen display scr_LOBBY --power off --for 2h
screenrig screen display --tag Lobby --power on
screenrig screen display clear --tag Lobbyscreen display é uma substituição manual da programação do monitor. Sem --until ou --for termina no próximo limite da programação; uma mudança posterior na programação do monitor ou fuso horário move esse fim para o novo limite. Sem limite nos próximos oito dias, por exemplo sem programação ativada, mantém até screen display clear ou substituição. screen display clear termina a substituição, para que a programação do monitor se aplique novamente; sem uma, o monitor fica ligado. O Player aplica toda mudança de uma vez e informa a energia que alcançou.
screen display-schedule#
Exiba, defina ou limpe quando o display de uma tela está ligado.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_; show aceita um. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--file FILE | caminho | sim, para set | nenhum | A programação do monitor, ou - para stdin. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão opcional. |
screenrig screen display-schedule set scr_LOBBY --file hours.json
screenrig screen display-schedule set --tag Cafe --file hours.jsonUma programação de monitor lista de 1 a 16 janelas quando o monitor está ligado, no fuso horário da tela; fora de cada janela o monitor entra em espera. O Player avalia isso no dispositivo, então continua funcionando offline. Uma janela cujo end é igual ou anterior ao seu start cruza a meia-noite, e uma janela sem start e end cobre o dia inteiro. enabled: false mantém as janelas e deixa o monitor ligado. A saída salva de display-schedule show pode ser editada e enviada de volta com set --file.
{"enabled": true, "windows": [{"days": ["mon", "tue", "wed", "thu", "fri"], "start": "07:00", "end": "19:00"}, {"days": ["sat"]}]}screen show --human imprime Display: com a potência solicitada, sua fonte (sobrescrição manual, programação do display ou padrão) e até quando no fuso horário da tela, as janelas da programação, e a potência reportada pelo Player, marcada como obsoleta após 35 minutos sem relatório.
screen display-idle#
Escurecer a tela de um display após um tempo sem uso, ou desativar isso.
screen display-idle <id> --after SECONDS --wake WAKE [--expect-rev REVISION]
screen display-idle <id> --off [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--after SECONDS | integer | um de --after ou --off | nenhum | Escurecer após este número de segundos sem uso, de 30 a 86400. Requer --wake. |
--wake WAKE | string | com --after | nenhum | O que acende a tela de novo: touch, presence ou touch,presence. Presence lê a câmera do dispositivo no próprio dispositivo; nenhuma imagem sai dele. |
--off | boolean | um de --after ou --off | desligado | Desativar o escurecimento por inatividade. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
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 --offA tela escurece após --after segundos sem um toque ou tecla ou, quando --wake lista presence, sem ninguém na frente da tela. Enquanto está escura, o Player suspende a reprodução, sem exibições e sem anúncios, e informa o display desligado; um evento de despertar acende a tela de imediato e a reprodução continua, e o toque que acorda uma tela escura não é repassado à página. Uma programação de exibição ou substituição que mantém o painel desligado prevalece, assim como um aplicativo que mantém device.display enquanto sua página está na tela. Somente display.idle muda. Um Player a aplica quando screen show lista display_power.idle em suas capacidades do host; a configuração é armazenada de qualquer forma, e screen show a lista como Display idle. O acesso Propose não pode alterá-la (insufficient_access), e uma tela em uma pasta protegida a recusa (protected_target).
screen brightness#
Definir se o brilho de uma tela segue o sensor de luz do dispositivo.
screen brightness <id> --mode auto|fixed [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--mode auto|fixed | string | sim | nenhum | auto define o brilho a partir do sensor de luz do dispositivo; fixed mantém o brilho do operador, o padrão. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen brightness scr_LOBBY --mode auto
screenrig screen brightness scr_LOBBY --mode fixed --expect-rev 4Somente display.brightness muda. Um Player aplica auto quando screen show lista brightness.auto em suas capacidades do host, que um dispositivo declara apenas com um sensor de luz; um aplicativo que define o brilho do display prevalece enquanto sua página é exibida. A configuração é armazenada de qualquer forma, e screen show a lista como Display brightness. As regras de acesso de screen display-idle se aplicam.
screen kiosk-lock#
Fixar o Player de uma tela na tela, ou liberá-lo.
screen kiosk-lock <id> (--on | --off) [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--on, --off | boolean | um dos dois | nenhum | --on fixa o Player na tela; --off o libera. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. Omitir para escrever o recurso atual. Um valor obsoleto fornecido é revision_conflict: buscar novamente, reaplicar, tentar novamente. |
screenrig screen kiosk-lock scr_LOBBY --on
screenrig screen kiosk-lock scr_LOBBY --off --expect-rev 4--on usa a fixação de tela do Android (screen pinning): a pessoa na tela confirma na primeira vez, e a barra de status, o início e os recentes ficam bloqueados enquanto o Player está fixado. O painel de configurações do operador pode sair do bloqueio até que o próximo manifesto ou reinício o aplique de novo. Um Player o aplica quando screen show lista kiosk_lock em suas capacidades do host; a configuração é armazenada de qualquer forma, e screen show lista Kiosk lock enquanto ele está ativo. As regras de acesso de screen display-idle se aplicam.
screen reboot-schedule#
Mostra, define ou limpa quando o backend reinicia o dispositivo de uma tela.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id>... | string | um de <id> ou --tag | nenhum | Um ou mais IDs de tela scr_; show aceita um. |
--tag TAG | string | um de <id> ou --tag | nenhum | Cada tela ativa com esta tag. |
--window SPEC | string | um de --window ou --file, para set | nenhum | Reiniciar no início desta janela semanal, DAYS HH:MM-HH:MM no fuso horário da tela, como "Mon-Sun 04:00-04:30" (DAYS@HH:MM-HH:MM também funciona). Repita até 16 vezes; cada janela dura de 5 minutos a 24 horas. |
--file FILE | caminho | um de --window ou --file, para set | nenhum | A programação de reinício em JSON, ou - para stdin, em vez de --window. |
--enabled, --disabled | boolean | não | --enabled | --disabled mantém as janelas e não reinicia nada. Não com --file. |
--expect-rev REVISION | string | não | nenhum | Apenas um ID de tela. Pré-condição de revisão 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 4No início de cada janela, no fuso horário da tela, o screenRIG emite o mesmo reinício que screen reboot, então "Mon-Sun 04:00-04:30" reinicia a tela às 04:00 locais todos os dias. commands em screen show o lista com source schedule, e screen show e reboot-schedule show imprimem next_reboot_at. Uma janela cujo fim é igual ou anterior ao início cruza a meia-noite, e uma janela sem horários cobre o dia inteiro. A saída salva de reboot-schedule show pode ser editada e enviada de volta com set --file:
{"enabled": true, "windows": [{"days": ["mon", "tue", "wed", "thu", "fri", "sat", "sun"], "start": "04:00", "end": "04:30"}]}Uma tela online recebe o reinício na hora. Uma tela offline o mantém na fila apenas até o fim da sua janela, de modo que um reinício nunca cai fora da janela: uma tela que volta depois dela não recebe nenhum. Um início dentro de uma lacuna de adiantamento do relógio dispara no primeiro minuto válido da janela, e uma repetição de recuo do relógio dispara uma vez por janela por data local. Um reinício programado nunca substitui um pedido por uma pessoa que ainda espera pela tela; a ocorrência é ignorada com screen.reboot_skipped (reboot_pending). A tela precisa de um fuso horário armazenado e de um Player que declare reboot; uma tela que perde reboot depois ignora cada janela e mantém sua programação. Alterar o fuso horário move next_reboot_at para o novo fuso. Um reinício enviado por uma programação não gera alerta de offline, como em screen reboot. screen.reboot_schedule_changed registra cada definição ou remoção. Em uma frota, cada resultado é da própria tela: reboot_unsupported para uma tela cujo Player não consegue reiniciar.
screen uptime#
Leia a disponibilidade diária de uma tela em dias UTC.
screen uptime <id> [--day-from YYYY-MM-DD] [--day-to YYYY-MM-DD]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--day-from YYYY-MM-DD | string | não | 29 dias antes de --day-to | Primeiro dia UTC, inclusivo. |
--day-to YYYY-MM-DD | string | não | hoje | Último dia UTC, inclusivo. No máximo 366 dias após --day-from. |
screenrig screen uptime scr_01EXAMPLESCREEN00000000
screenrig screen uptime scr_01EXAMPLESCREEN00000000 --day-from 2026-09-01 --day-to 2026-09-30data.items lista uma linha por dia UTC com estado registrado, do mais antigo ao mais recente: online_s, offline_s, availability (online durante o tempo registrado; null quando nada foi registrado), coverage (a fração do dia com estado registrado), intervals, e live para um dia que inclui o intervalo aberto até agora. Tempo sem estado registrado reduz coverage e nunca é considerado tempo de inatividade. Dias sem registros não têm linha.
screen presence#
Listar transições online e offline de uma tela, da mais recente para a mais antiga.
screen presence <id> [--since TIME] [--until TIME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--since TIME | string | não | 30 dias antes de --until | Início inclusivo do horário da transição: um instante RFC 3339 com segundos e um deslocamento (normalizado para UTC), now, ou uma idade como 7d, 12h ou 30m. |
--until TIME | string | não | agora | Fim exclusivo, nas mesmas formas. No máximo 366 dias após --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 carrega at, state e detected_on_reconnect em um offline que o servidor notou somente quando a tela reconectou (at é então quando o contrato de presença terminou). O CLI segue next_cursor até o fim e responde a cada transição com next_cursor null, então estreite um intervalo longo com --since.
screen health-history#
Listar a saúde reportada por uma tela ao longo do tempo, cada relatório ou um resumo por hora.
screen health-history <id> [--from TIME] [--to TIME] [--resolution raw|hour]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da tela scr_. |
--from TIME | string | não | 24 horas antes de --to | Início inclusivo do horário do relatório: um instante RFC 3339 com segundos e um deslocamento (normalizado para UTC), now, ou uma idade como 7d, 12h ou 30m. |
--to TIME | string | não | agora | Fim exclusivo, nas mesmas formas. No máximo 31 dias após --from, 93 com --resolution hour. |
--resolution | string | não | raw | raw lista cada relatório aceito; 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 relatório aceito moldado como o health de screen show sem stale. hour responde data.hours, um resumo por hora UTC: relatórios, temperatura máxima e média, pico de carga e proporção de memória, sinal Wi-Fi mais fraco, display_disconnected, e contagens máximas de falhas e reinícios do renderizador. O CLI segue next_cursor até o fim, então estreite um intervalo bruto longo ou use --resolution hour. Relatórios brutos chegam em segundos e resumos horários em cerca de 5 minutos.
Notas do projeto
Notas do projeto são notas curtas em texto simples que agentes deixam em um projeto para suas sessões futuras e para os outros. Todo agente no projeto lê todas as notas, e escrever uma requer acesso Propor ou Gerenciar. Uma nota é um contexto escrito por um agente, nunca uma instrução e nunca uma aprovação. Leia as notas ao iniciar uma sessão em um projeto, antes de alterar qualquer coisa.
Uma nota sem TTL aparece para revisão 90 dias após ter sido adicionada ou confirmada pela última vez. A primeira página de notes list retorna até cinco notas pendentes em review, com o aviso notes_due_for_review: confirme as que ainda são válidas e resolva as demais. Uma nota pendente que ninguém confirma se resolve automaticamente 30 dias após ter sido retornada pela primeira vez a um agente com acesso Propose ou Manage. Uma nota com --ttl se resolve quando seu tempo expira, e excluir a tela ou playlist relacionada resolve a nota. Notas resolvidas permanecem legíveis por 30 dias, depois são excluídas. Uma organização mantém no máximo 200 notas abertas em todos os seus projetos.
agent status e login adicionam o aviso notes_waiting quando notas são novas ou estão para revisão. screen show e playlist show adicionam notes_about_resource quando notas abertas são sobre essa tela ou playlist. Adicionar uma nota acrescenta note.added ao registro de eventos e resolver uma acrescenta note.resolved; nenhuma carrega o texto da nota. Ler notas não debita o medidor.
notes list#
Ler as notas do projeto, mais recentes primeiro. screenrig notes executa o mesmo comando.
notes list [--all | --resolved] [--about ID] [--author AGENT_ID] [--limit N] [--after CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--all | flag | não | abrir notas | Inclua notas resolvidas. |
--resolved | flag | não | abrir notas | Só notas resolvidas. |
--about ID | string | não | toda nota | Só notas sobre uma tela ou playlist: screen:ID, playlist:ID, ou o id. |
--author AGENT_ID | string | não | todo autor | Só notas que este agente escreveu. |
--limit N | integer | não | 50 | Tamanho da página, de 1 a 200. |
--after CURSOR | string | não | a primeira página | O next_cursor da página anterior. |
screenrig notesCada nota carrega seu author (nome e tipo do agente), created_at, about e dois marcadores: new para uma nota que outro agente escreveu desde sua última leitura, e due para uma nota pendente de revisão. A primeira página de notas abertas sem --about ou --author é sua leitura: ela move seu marcador de leitura (a leitura de um agente apenas leitura não move nada), então new e counts.new descrevem o que mudou desde sua leitura anterior.
notes show#
Leia uma nota, aberta ou resolvida.
notes show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da nota nte_. |
screenrig notes show nte_01EXAMPLENOTE000000000notes add#
Escreva uma nota para os agentes do projeto.
notes add <text> [--about ID] [--ttl DURATION] [--replaces ID]
notes add --file FILE [--about ID] [--ttl DURATION] [--replaces ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<text> | string | um dos dois | nenhum | A nota: 1 a 2000 caracteres de texto simples após aparar. |
--file FILE | caminho | um dos dois | nenhum | Ler a nota a partir de um arquivo, ou - para entrada padrão. |
--about ID | string | não | o projeto inteiro | Vincule a nota a uma tela ou playlist: screen:ID, playlist:ID ou o id. |
--ttl DURATION | string | não | revisão após 90 dias | Resolver a nota automaticamente após este tempo, em horas ou dias de 1h até 365d, como 12h ou 3d. |
--replaces ID | string | não | nenhum | Uma nota aberta que esta substitui; ela é resolvida como substituída. |
screenrig notes add "The lobby screen is mounted in portrait: design for 1080x1920." --about screen:scr_01EXAMPLESCREEN00000000Escreva fatos que outro agente agiria, nunca relatórios de progresso ou bate-papo. Uma nota cujo texto (ignorando maiúsculas, minúsculas e espaçamento) e assunto repetem uma nota aberta confirma essa nota em vez de adicionar uma, com o aviso note_matched_open. Texto em formato de credencial é recusado com note_contains_credential, e texto que parece uma instrução para um modelo com note_rejected; nada é armazenado. A 201ª nota aberta nos projetos da organização é recusada com note_limit_reached, cujo detalhe nomeia notas para resolver primeiro.
notes confirm#
Diz que uma nota aberta ainda está válida. Sua próxima revisão é daqui a 90 dias.
notes confirm <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id nte_ de uma nota aberta. |
screenrig notes confirm nte_01EXAMPLENOTE000000000notes resolve#
Resolver uma nota aberta que está errada ou não é mais verdadeira.
notes resolve <id> <reason>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id nte_ de uma nota aberta. |
<reason> | string | sim | nenhum | O que é verdade agora, de 1 a 500 caracteres. |
screenrig notes resolve nte_01EXAMPLENOTE000000000 "The lobby screen was remounted in landscape."Uma nota resolvida é recusada com note_not_open.
Operações
Uploads e publicações são executados como operações. media upload, media replace e app upload aguardam a sua por padrão; estes comandos servem para concluir uma que você deixou em execução com --no-wait.
operations show#
Leia o estado atual de uma operação.
operations show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da operação do envelope que a iniciou. |
screenrig operations show op_01EXAMPLEOPERATION00000operations wait#
Pesquise uma operação até que ela termine.
operations wait <id> [--timeout MS] [--poll-ms MS]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da operação. |
--timeout MS | integer | não | 120000 | Prazo para a espera. Também limita cada solicitação subjacente. |
--poll-ms MS | integer | não | 1000 | Intervalo entre pesquisas de operação enquanto aguarda. |
screenrig operations wait op_01EXAMPLEOPERATION00000operations cancel#
Peça ao plano de controle para cancelar uma operação.
operations cancel <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id da operação. |
screenrig operations cancel op_01EXAMPLEOPERATION00000Eventos
O registro de eventos do projeto registra o que o projeto fez e o que a frota fez. Um lançamento publicado adiciona application.published; um app que chama screenrig.emit(code) adiciona seu próprio evento, que é a evidência mais direta de que ele foi executado em uma tela.
Presença também está no log. screen.offline é gravado uma vez que uma tela fica offline por 60 segundos, e screen.online quando ela volta; uma reconexão dentro desses 60 segundos não grava nenhum dos dois. screen.offline carrega details.offline_since e, quando a tela já esteve online antes, details.last_online_at. screen.online carrega details.last_online_at, mais details.offline_at quando a tela estava offline antes de retornar. Como todo evento screen.*, eles são gratuitos na corrente de escuta, para que um agente possa manter events follow aberto para monitorar uma frota.
events list#
Leia uma página finita de eventos do projeto.
events list [--after CURSOR] [--limit N] [--type TYPE] [--screen-id ID] [--app-id ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--after CURSOR | string | não | o início da janela da página | Retomar após este cursor. |
--limit N | integer | não | o tamanho da página do servidor | Tamanho da página solicitado. |
--type TYPE | string | não | todo tipo | Um tipo de evento, ou uma família por um prefixo terminando em ponto, como note.. |
--screen-id ID | string | não | tela inteira | Eventos cujo recurso é esta tela, incluindo os emitidos pelo SDK. |
--app-id ID | string | não | todas as aplicações | Eventos do recurso de aplicação, de suas versões e de suas entradas K/V; exclui eventos emitidos pelo SDK. |
screenrig events list --limit 25
screenrig events list --type application.event --screen-id scr_SCREENOs métodos emit() e emitConfirmed() do SDK adicionam registros application.event cujo recurso é a tela. Leia-os com --type application.event, adicionando --screen-id opcionalmente. Os campos retornados details.primitive_id e details.code identificam a primitiva emissora e a ação nomeada. --app-id seleciona eventos do recurso de aplicação, de suas versões e de suas entradas K/V, portanto exclui esses eventos de tela.
A saída padrão é um envelope JSON para a página. Com --human, a saída é uma linha logfmt por evento: at=, type=, severity= e detalhes escalares.
events follow#
Permaneça no fluxo de eventos e imprima os eventos conforme chegam.
events follow [--after CURSOR] [--timeout MS] [--type TYPE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--after CURSOR | string | não | o final ao vivo | Retomar a partir deste cursor. |
--timeout MS | integer | não | sem prazo | Encerra todo o acompanhamento, incluindo reconexão com recuo. |
--type TYPE | string | não | todo tipo | Um tipo de evento, ou uma família por um prefixo terminando em ponto, como note.. |
screenrig events followUma desconexão ou falha transitória reconecta com recuo e retoma do último id de evento. A reprodução após reconexão é gratuita. Problemas de autorização e não encontrado param o comando em vez de tentar novamente.
Com --type, o stream ainda carrega todos os eventos e o CLI imprime apenas os correspondentes: screenrig events follow --type note. observa notas do projeto.
A saída padrão é NDJSON: um envelope por evento em sua própria linha, em vez de um único envelope. Use --human para linhas logfmt.
Notificações
Uma notificação avisa uma pessoa, ou outro sistema, quando uma tela muda de estado. Uma notificação por e-mail envia um e-mail a cada destinatário, uma notificação de webhook envia um POST HTTPS assinado, e uma notificação do Slack, Teams, PagerDuty ou Telegram publica uma mensagem em um chat ou em um sistema de plantão. Uma organização tem no máximo 50, somando todos os canais e todos os seus projetos, e todo projeto começa com um e-mail ao proprietário quando uma tela fica 10 minutos offline.
Uma notificação observa as condições que você indicar:
| Condição | Começa quando | Termina quando |
|---|---|---|
screen_offline | O Player está offline há 60 segundos. | A tela está online novamente. |
display_disconnected | O Player informa que seu monitor está desconectado. | O monitor se reconecta. |
running_hot | O dispositivo informa uma temperatura igual ou superior ao limite de temperatura alta. | A temperatura volta ao normal. |
on_battery | Um dispositivo com bateria informa que está funcionando na bateria, desconectado da tomada. | O dispositivo informa outra fonte de energia. |
storage_full | O armazenamento do Player não comporta seu conteúdo. | A falta de espaço desaparece. |
content_stuck | A atualização de conteúdo da tela está sendo tentada novamente, falhou, está bloqueada ou parcial. | A atualização passa para qualquer outro estado. |
not_playing | O Player mostra um erro em vez do seu conteúdo. Armazenamento cheio é storage_full. | O status do Player não é mais um erro. |
loop_stalled | Uma tela que está online, dentro do horário e com conteúdo atual não iniciou nenhuma imagem ou vídeo por mais tempo do que o ciclo dela permite. | Uma imagem ou um vídeo volta a iniciar, ou o screenRIG deixa de julgar a tela. |
glass_blank | As capturas que o screenRIG fez ao longo de uma série que cobre todo o ciclo eram todas de um único tom chapado. | Duas capturas seguidas mostram uma imagem, ou o screenRIG deixa de julgar a tela. |
glass_frozen | As capturas que o screenRIG fez ao longo de uma série que cobre todo o ciclo mostravam todas a mesma imagem. | Duas capturas seguidas mostram uma imagem em movimento, ou o screenRIG deixa de julgar a tela. |
crashing | O Player travou ou reiniciou seu renderizador repetidamente. | Nunca: cada pico é um aviso próprio. |
source_failed | A atualização de uma fonte de dados falhou. | Uma atualização funciona. |
source_stale | Uma fonte de dados continuou falhando até os dados expirarem. | Uma atualização funciona. |
card_data_stale | Os dados de um cartão, gravados com uma expiração, chegaram a ela enquanto uma tela mostra o cartão e nada os renovou. | Uma gravação nos dados do cartão é concluída. |
reach_dropped | Uma campanha alcança menos telas do que quando foi publicada pela última vez, porque telas saíram de suas tags ou pastas, ou foram arquivadas ou excluídas. | A campanha volta a alcançar o mesmo número de telas, ou é publicada novamente. |
group_empty | Uma tag ou pasta do público-alvo de uma campanha não corresponde a nenhuma tela. | A tag ou pasta volta a corresponder a uma tela, ou uma publicação a remove do público-alvo. |
Uma condição notifica depois de durar --hold minutos (padrão 10), para que uma reconexão rápida fique silenciosa. Se ela terminar antes, nada é enviado; se terminar depois de um aviso ter sido enviado, um aviso de resolução vem em seguida. crashing é enviado imediatamente. Um aviso também é ignorado quando alguém reconhece ou adia o alerta da tela durante o tempo de espera, ou quando um silenciamento cobre a tela. --tag limita uma notificação às telas com essa tag; sem ela, todas as telas são consideradas.
Cada aviso tem uma severidade. Um aviso aberto é error para screen_offline e warning para toda outra condição, e um aviso de resolvido ou um teste é info. --min-severity LEVEL (info, warning ou error) não cria aviso aberto abaixo desse nível, e um aviso de resolvido segue o seu aberto. --severity CONDITION=LEVEL, repetível, define o nível de uma condição para esta notificação, como --severity not_playing=error; conta para --min-severity e é a severidade que Teams e PagerDuty mostram. O texto de e-mail, Slack e Telegram nomeia a severidade, e o corpo de um webhook carrega severity.
--active-hours SPEC envia avisos abertos somente dentro de janelas semanais, lidas em --timezone ZONE, que ele exige. SPEC é DAYS HH:MM-HH:MM, como "Mon-Fri 08:00-22:00"; repita até 16 vezes. Com --outside-hours hold, o padrão, um aviso que vence fora do horário espera a próxima janela e é enviado então se sua condição ainda se mantiver, de modo que uma condição que termina antes não envia nada. Com drop o aviso é ignorado como outside_hours, que notifications deliveries lista. Um aviso de resolvido para um aviso aberto que foi enviado sempre é enviado, crashing segue o horário como qualquer outra condição, um adiamento é verificado primeiro, e notifications test ignora horário, severidade e público-alvo.
--audience FILE (JSON inline, um arquivo ou - para stdin) escolhe as telas com as regras de um público-alvo de campanha, como {"all":[{"tag":"level2"},{"tag":"overhead"}]} para telas com ambas as tags; --all-tags TAG e --any-tag TAG são os atalhos para uma regra all e uma regra any de tags, e --tag significa qualquer uma das tags. --tag, --any-tag, --all-tags e --audience são mutuamente excludentes.
loop_stalled, glass_blank e glass_frozen são veredictos que o screenRIG tira dos relatórios de reprodução e das capturas de tela que recebe, e deixam de fora o que não conseguem julgar: uma tela offline, com o display desligado, sob takeover ou suspensa, que mostra uma única imagem estática ou um video wall, ou cujo Player não envia números de reprodução. Quando o screenRIG deixa de julgar uma tela que havia encontrado em um deles, o alerta se fecha, mas e-mail, Slack, Teams e Telegram não enviam aviso de resolução, pois nada mostrou a tela se recuperando; o PagerDuty ainda resolve o incidente.
source_failed e source_stale acompanham as fontes de dados do projeto, não as telas: um aviso nomeia a fonte e liga à página dela, e --tag nunca corresponde a uma fonte.
card_data_stale vigia um cartão, não uma tela. Grave os dados de um cartão com uma expiração dimensionada pelo horário de quem os grava (card data put --ttl 30m), e quando o job ou agente que os renova para, os dados expiram, o cartão fica em branco em toda tela que o mostra, e esta condição avisa você. O aviso nomeia o cartão e quando os dados dele expiraram, e liga ao editor de páginas em uma página que o coloca. Os documentos de uma fonte de dados nunca são anunciados aqui (source_stale os cobre), nem um cartão que nenhuma tela mostra, dados gravados sem expiração ou dados excluídos. --tag nunca corresponde a um cartão.
reach_dropped e group_empty observam uma campanha, não uma tela. O aviso nomeia a campanha e as telas que ela alcançava antes e alcança agora, ou a tag ou pasta vazia, e traz um link para o calendário da campanha. Uma campanha pertence ao projeto, portanto --tag, --any-tag, --all-tags e --audience nunca limitam esses dois; --min-severity, --severity, --active-hours e --hold se aplicam como em qualquer condição, e ambos são warning por padrão. --reach-drop-screens N e --reach-drop-percent P enviam um aviso reach_dropped somente para uma queda de pelo menos N telas e de pelo menos P por cento das telas que a campanha alcançava quando foi publicada; uma queda precisa atender aos dois critérios, e sem eles qualquer queda gera aviso. Eles exigem reach_dropped em --conditions. Cada tag ou pasta vazia de uma campanha é um aviso próprio, e notifications deliveries o mostra como audience_group (tag:Lobby ou folder:sfd_…). Uma publicação que remove um grupo vazio do público-alvo encerra um incidente do PagerDuty e o alerta de um webhook, mas não envia e-mail nem mensagem de chat de recuperação.
O e-mail vai para o endereço verificado de cada destinatário, um e-mail por destinatário para tudo o que deve ser enviado dentro de cerca de dois minutos, com um link para cada tela e para a notificação no dashboard. Os destinatários são owner, quem for o proprietário do projeto quando o aviso é enviado, e os ids de usuário dos membros do projeto. Um destinatário sem endereço verificado, ou que saiu do projeto, é ignorado. Os e-mails de notificação e os avisos de tela são gratuitos.
Cada e-mail traz um link de cancelamento de inscrição para o próprio destinatário: o botão de cancelar inscrição dos apps de e-mail e um link no rodapé. Segui-lo interrompe os e-mails dessa notificação para essa única pessoa, sem fazer login, e a página aberta tem um botão Resubscribe. Os outros destinatários não são afetados, e a pessoa continua entre os destinatários. notifications show lista quem cancelou com unsubscribed, e notifications resubscribe volta a enviar e-mails para ela. Um aviso sem ninguém para receber o e-mail é ignorado como no_recipients.
Uma notificação por webhook envia cada aviso por POST, como JSON, e você o verifica conforme descrito em Verificar uma entrega. Com --events, ela também envia por POST eventos brutos do projeto à medida que acontecem; essas entregas são medidas conforme descrito em Webhooks.
Uma notificação do Slack, Teams, PagerDuty ou Telegram publica uma mensagem por queda e por tela: a tela, o que mudou, desde quando, o projeto, um link para a tela e, quando uma tela offline volta, a causa provável se já for conhecida. Uma mensagem de recuperação vem depois que a primeira foi enviada e, no PagerDuty, resolve o incidente que a primeira abriu. Você informa a credencial uma única vez (--slack recebe a URL de um webhook de entrada, --teams a URL de um webhook do Workflows, --pagerduty uma chave de roteamento da API Events v2, --telegram um token de bot com --telegram-chat); ela é selada, nunca é mostrada de novo, e destination_hint mostra só o final mascarado. Um - a lê de uma linha do stdin para que fique fora do histórico do seu shell. Uma publicação com falha é repetida por 24 horas, e uma notificação que falha por 72 horas é desativada.
| Código do problema | Sair | Significado |
|---|---|---|
webhook_url_rejected | 8 | A URL não é https na porta 443 ou 8443, ou seu host não resolve apenas para endereços públicos da Internet. error.detail carrega o motivo do servidor. Nada foi criado ou alterado. |
notification_destination_rejected | 8 | O destino não serve ao seu canal, ou é a URL de um conector do Office 365 descontinuado. error.detail informa a forma que serve. Nada foi criado nem alterado. |
notification_limit_reached | 5 | A organização já tem 50 notificações. Exclua uma primeiro. |
revision_conflict | 6 | A revisão --expect-rev estava desatualizada. Execute notifications show e tente novamente. |
rate_limited | 7 | Mais de 20 chamadas notifications test em um minuto para esta organização. |
notifications create#
Cria uma notificação por e-mail, webhook, Slack, Teams, PagerDuty ou 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--email RECIPIENTS | string | um flag de canal | nenhum | Enviar e-mail para estes destinatários separados por vírgula: owner, ou o id de usuário de um membro do projeto, no máximo 20. |
--webhook URL | string | um flag de canal | nenhum | Uma URL https na porta 443 (padrão) ou 8443 cujo host resolve apenas para endereços públicos da Internet. O servidor verifica a cada gravação e novamente antes de cada entrega. Uma URL que carrega credenciais (user:pass@ ou token@) ou um fragmento # é recusada localmente com saída 2. |
--conditions LIST | string | sim, exceto em um webhook | nenhum | Condições separadas por vírgula, da tabela acima. Um webhook precisa disto, de --events ou de ambos. |
--slack URL | string | um flag de canal | nenhum | Publica no Slack com a URL de um webhook de entrada em hooks.slack.com, ou - para lê-la de uma linha do stdin. |
--teams URL | string | um flag de canal | nenhum | Publica no Teams com a URL de um webhook do Workflows (o gatilho “Quando uma solicitação de webhook do Teams é recebida”), ou - para o stdin. URLs de conectores do Office 365 foram descontinuadas e são recusadas. |
--pagerduty KEY | string | um flag de canal | nenhum | Dispara e resolve incidentes do PagerDuty com uma chave de roteamento da API Events v2, ou - para o stdin. |
--telegram TOKEN | string | um flag de canal | nenhum | Publica no Telegram com um token de bot, ou - para o stdin. Exige --telegram-chat. |
--telegram-chat CHAT_ID | string | com --telegram | nenhum | O chat onde publicar: seu id numérico, como -1001234567890, ou @channelname. |
--events TYPES | string | não | nenhum | Somente webhook. Enviar também por POST estes eventos brutos do projeto: de 1 a 32 tipos exatos separados por vírgula, como screen.online, ou prefixos terminando em .*, como screen.*. |
--tag TAG | string | não | tela inteira | Somente telas com esta tag. Repita a flag ou separe por vírgula, até 16 tags. |
--hold MINUTES | integer | não | 10 | Por quanto tempo uma condição deve durar antes de notificar, de 0 a 1440. crashing nunca espera. |
--all-tags TAG | string | não | nenhum | Apenas telas com todas as tags listadas. Repita a flag ou separe por vírgulas. |
--any-tag TAG | string | não | nenhum | Apenas telas com pelo menos uma das tags listadas, como --tag. Repita a flag ou separe por vírgulas. |
--audience FILE | string | não | tela inteira | As telas como regra de público-alvo de campanha em JSON: inline, um arquivo ou - para stdin. Não com as opções de tag. |
--min-severity LEVEL | string | não | nenhum | info, warning ou error: avisos abertos abaixo dele não são enviados. |
--severity CONDITION=LEVEL | string | não | os padrões | Define a severidade de uma condição para esta notificação. Repita a flag. |
--active-hours SPEC | string | não | sempre | Enviar avisos abertos somente dentro desta janela semanal, DAYS HH:MM-HH:MM como "Mon-Fri 08:00-22:00". Repita até 16 vezes. Requer --timezone. |
--timezone ZONE | string | com --active-hours | nenhum | A zona IANA em que o horário é lido, como America/Los_Angeles. |
--outside-hours MODE | string | não | hold | hold espera a próxima janela; drop ignora o aviso. |
--reach-drop-screens N | integer | não | qualquer queda | Somente com reach_dropped: envia um aviso apenas quando a campanha perdeu pelo menos N telas (1 ou mais). |
--reach-drop-percent P | integer | não | qualquer queda | Somente com reach_dropped: exige também uma perda de pelo menos P por cento (1 a 100) das telas que a campanha alcançava quando foi publicada. |
--description TEXT | string | não | nenhum | No máximo 200 caracteres. |
--stale-after DURATION | string | não | conforme o tipo | Por quanto tempo o card mantém os últimos dados bons quando a fonte não consegue atualizar, de 1m a 7d, pelo menos o dobro de --refresh; none os mantém até a próxima atualização. Depois, os dados expiram em todas as telas. momentus é 30m por padrão. |
--disabled | boolean | não | desligado | Criar desativada. Nada é enviado até 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.txtO envelope é a notificação. O de um webhook carrega seu segredo de assinatura em data.secret (whsec_…) com a advertência webhook_secret_shown_once. Armazene o segredo imediatamente na loja de segredos do receptor. Somente notifications rotate-secret o retorna novamente, e o CLI nunca o grava em sua configuração, log de operação ou estado de recuperação de gravação. Após uma criação interrompida ou ambígua, execute novamente o comando idêntico dentro de 24 horas: ele reutiliza a chave de idempotência salva, e o servidor retorna a mesma resposta, segredo incluído. Os avisos começam com o primeiro evento após a criação da notificação.
notifications list#
Listar as notificações deste projeto, nunca seus segredos.
notifications listscreenrig notifications listAbaixo do acesso Gerenciar, url de um webhook está vazio e url_redacted é verdadeiro.
notifications show#
Inspecionar uma notificação e sua saúde de entrega.
notifications show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
screenrig notifications show ntf_01EXAMPLENOTICE00000status é active, failing enquanto nenhuma entrega teve sucesso desde failing_since, ou disabled. Após 72 horas de falha contínua, a notificação é desativada com disabled_reason: delivery_failures, e o registro de eventos grava notification.disabled. snoozed_until está presente enquanto um silenciamento estiver definido. last_success_at e last_failure_at relatam os resultados mais recentes.
notifications update#
Altera os destinatários, a URL, o destino, as condições, as telas, a espera, a pausa ou o estado de ativação de uma notificação.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--email RECIPIENTS | string | pelo menos uma alteração | inalterado | Notificações por e-mail: substitui os destinatários. |
--url URL | string | pelo menos uma alteração | inalterado | Notificações por webhook: substitui a URL, verificada como em create. |
--destination VALUE | string | pelo menos uma alteração | inalterado | Notificações do Slack, Teams, PagerDuty e Telegram: substitui a credencial, verificada como em create. - a lê de uma linha do stdin. |
--telegram-chat CHAT_ID | string | pelo menos uma alteração | inalterado | Notificações do Telegram: substitui o chat. |
--conditions LIST | string | pelo menos uma alteração | inalterado | Substitui as condições. |
--clear-conditions | boolean | pelo menos uma alteração | desligado | Remover todas as condições. Um webhook então precisa de --events. |
--events TYPES | string | pelo menos uma alteração | inalterado | Notificações por webhook: substitui os eventos brutos do projeto. |
--clear-events | boolean | pelo menos uma alteração | desligado | Notificações por webhook: deixam de enviar por POST os eventos brutos do projeto. Elas então precisam de condições. |
--tag TAG | string | pelo menos uma alteração | inalterado | Substitui as tags de tela. |
--all-screens | boolean | pelo menos uma alteração | desligado | Remover as tags de tela e o público-alvo; a notificação cobre todas as telas. |
--hold MINUTES | integer | pelo menos uma alteração | inalterado | 0 a 1440. |
--all-tags TAG | string | pelo menos uma alteração | inalterado | Substitui as telas por aquelas com todas as tags listadas. |
--any-tag TAG | string | pelo menos uma alteração | inalterado | Substitui as telas por aquelas com pelo menos uma das tags listadas, como --tag. |
--audience FILE | string | pelo menos uma alteração | inalterado | Substitui as telas por uma regra de público-alvo de campanha em JSON: inline, um arquivo ou - para stdin. |
--min-severity LEVEL | string | pelo menos uma alteração | inalterado | info, warning ou error. |
--clear-min-severity | boolean | pelo menos uma alteração | desligado | Remover o filtro de severidade. |
--severity CONDITION=LEVEL | string | pelo menos uma alteração | inalterado | Substitui as sobrescritas de severidade por estas. Repita a flag. |
--clear-severity | boolean | pelo menos uma alteração | desligado | Remover toda sobrescrita de severidade. |
--active-hours SPEC | string | pelo menos uma alteração | inalterado | Substitui as janelas por estas. Repita até 16 vezes. --timezone usa por padrão o fuso que a notificação já tem. |
--timezone ZONE | string | pelo menos uma alteração | inalterado | A zona IANA em que o horário é lido. Sozinha, mantém as janelas atuais. |
--outside-hours MODE | string | pelo menos uma alteração | inalterado | hold ou drop. Sozinho, mantém as janelas atuais. |
--clear-active-hours | boolean | pelo menos uma alteração | desligado | Remover o horário ativo. Os avisos que estavam retidos por ele são julgados de novo na hora. |
--reach-drop-screens N | integer | pelo menos uma alteração | inalterado | Substitui o menor número de telas que um aviso reach_dropped exige que a campanha tenha perdido. |
--reach-drop-percent P | integer | pelo menos uma alteração | inalterado | Substitui a menor porcentagem de seu alcance publicado que a campanha deve ter perdido. |
--clear-reach-drop | boolean | pelo menos uma alteração | desligado | Remove o limite, de modo que qualquer queda notifica. Retire reach_dropped de --conditions somente junto com ele. |
--description TEXT | string | pelo menos uma alteração | inalterado | No máximo 200 caracteres. |
--clear-description | boolean | pelo menos uma alteração | desligado | Remover a descrição. |
--enable | boolean | pelo menos uma alteração | desligado | Limpa o estado de falha e começa no evento que registra a mudança; nada do período em que estava desativada é enviado. |
--disable | boolean | pelo menos uma alteração | desligado | Interrompe os avisos; os avisos pendentes falham com webhook_disabled. |
--snooze WHEN | string | pelo menos uma alteração | inalterado | Não enviar nada até lá: uma duração como 30m, 1h ou 2d (menos de 30 dias), um instante RFC 3339 com segundos e um deslocamento, ou off para encerrar o silenciamento. Os avisos que devem ser enviados nesse intervalo são ignorados, não enviados depois. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig notifications update ntf_01EXAMPLENOTICE00000 --snooze 2hupdate altera apenas os campos que você passar. O canal nunca muda.
notifications delete#
Excluir uma notificação. Seus avisos pendentes falham com webhook_deleted.
notifications delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig notifications delete ntf_01EXAMPLENOTICE00000notifications rotate-secret#
Substitui o segredo de assinatura de uma notificação de webhook e entrega o novo uma única vez. Qualquer outro canal não tem segredo.
notifications rotate-secret <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig notifications rotate-secret whk_01EXAMPLEWEBHOOK00000O envelope carrega o novo segredo em data.secret com o aviso webhook_secret_shown_once; armazene-o imediatamente. O segredo anterior para de assinar, mas no máximo uma tentativa já em andamento ainda pode chegar assinada com ele, então aceite ambos por um curto período. Após uma rotação interrompida ou ambígua, execute novamente o comando idêntico dentro de 24 horas para recuperar o mesmo segredo.
notifications test#
Envia um e-mail de teste, um POST de teste assinado ou uma mensagem de chat somente a esta notificação.
notifications test <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
screenrig notifications test ntf_01EXAMPLENOTICE00000O envelope é a entrega enfileirada. Ela é tentada uma vez, sem novas tentativas, funciona em uma notificação desativada ou silenciada e nunca altera o estado de falha da notificação. No máximo 20 entregas de teste por minuto por organização; mais que isso é rate_limited (saída 7). Leia o resultado com notifications deliveries.
Um teste do PagerDuty dispara um evento informativo com a chave screenrig:test:DELIVERY_ID e o resolve na hora, então nenhum incidente fica aberto.
notifications resubscribe#
Volta a enviar e-mails de uma notificação a uma pessoa que cancelou o recebimento.
notifications resubscribe <id> --user USER_ID| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id ntf_ de uma notificação por e-mail. |
--user USER_ID | string | sim | nenhum | O id de usuário da pessoa, como notifications show o lista em unsubscribed. |
screenrig notifications resubscribe ntf_01EXAMPLENOTICE00000 --user usr_01EXAMPLEPERSON0000O envelope é a notificação. Uma pessoa que não cancelou o recebimento não altera nada. Reinscrever uma pessoa aumenta a revisão e adiciona notification.updated. Uma notificação de outro canal ou projeto é not_found (saída 4).
notifications deliveries#
Ler o log de entrega de uma notificação, mais recente primeiro.
notifications deliveries <id> [--before CURSOR] [--limit N]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id de notificação ntf_ (qualquer canal exceto webhook) ou whk_ (webhook). |
--before CURSOR | string | não | o evento mais recente | O next_cursor (whc1_…) da página anterior. |
--limit N | integer | não | 50 | Linhas por página, de 1 a 200. |
screenrig notifications deliveries ntf_01EXAMPLENOTICE00000 --limit 20Cada linha é um evento, ou um aviso de uma condição em uma tela: event_type, state (pending, succeeded, failed ou skipped), attempts, last_status e uma classe fixa last_error como http_status, timeout, connection_failed, tls_failed, dns_failed, url_rejected, email_failed ou email_rejected. Um aviso de tela acrescenta condition, phase (opened ou resolved), screen_id, screen_name e since, e um aviso por e-mail acrescenta emailed, o número de pessoas alcançadas. Um aviso que nunca precisou ser enviado é skipped, com o motivo em last_error: condition_cleared (a tela saiu do estado antes de o tempo de espera terminar), not_opened (nenhum aviso foi enviado para ser resolvido), snoozed (a notificação está silenciada), acknowledged (alguém reconheceu ou adiou o alerta da tela durante o tempo de espera), muted (um silenciamento cobre a tela), no_recipients (nenhum destinatário é membro do projeto com endereço verificado que não tenha cancelado a inscrição), grouped (a tela entrou na condição junto com outras, e um único aviso em outra linha as nomeia todas) ou no_longer_judged (uma condição loop_stalled, glass_blank ou glass_frozen terminou porque o screenRIG deixou de julgar a tela, então nenhuma recuperação foi anunciada). O aviso que comunicou um grupo de telas traz group (id, attribute, value e count), e cada outra tela do grupo traz group_id; --human mostra ambos em uma coluna GROUP. As linhas nunca incluem a resposta do receptor. next_cursor é null ao final do log. Uma tentativa com falha é repetida com backoff, 30 segundos dobrando até uma hora, por 24 horas; depois a linha é failed.
Verificar uma entrega
O corpo de um aviso de tela é JSON: type (alert.opened ou alert.resolved), id (o id da entrega), notification_id, project_id, condition, screen (id e name), since (quando a condição começou), at (quando durou o suficiente, ou terminou) e event_id. Um evento bruto de --events é o mesmo objeto JSON que events list retorna. Os cabeçalhos são ScreenRig-Webhook-Id (o id da notificação), ScreenRig-Event-Id (estável entre as tentativas: o id da entrega para um aviso, o cursor do evento para um evento) e ScreenRig-Signature: t=<unix seconds>,v1=<hex>, onde v1 é HMAC-SHA256 sobre "<t>.<raw body>" usando a string secreta como chave. Calcule-o sobre os bytes brutos antes de analisar o JSON, compare em tempo constante, rejeite um t antigo e deduplique por ScreenRig-Event-Id, porque a entrega é pelo menos uma vez e fora de ordem. Responda 2xx em até 10 segundos; redirecionamentos não são seguidos.
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);
}Relatórios
reports show KIND gera um relatório (fleet_health, uptime, publishing, alerts, alert_log ou proof_of_play) e, com --format csv, xlsx ou pdf e --output FILE, grava-o em um arquivo; reports subscriptions envia um relatório por e-mail aos membros do projeto em uma programação; project export DIR grava os dados do projeto com o resultado de cada seção. Relatórios e exportações descreve cada um.
Registro de auditoria
audit list|show|head|verify|export lê o registro de auditoria do projeto: audit list pesquisa as alterações de configuração por ator, origem, recurso, ação e campo, audit show mostra uma entrada com o antes e o depois de cada campo alterado, audit head mostra o cabeçalho da cadeia para guardar como âncora, audit verify recalcula a cadeia (opcionalmente contra uma âncora) e encerra com o código 13 quando ela não é verificada, e audit export grava o registro filtrado em um arquivo CSV, XLSX ou PDF. Registro de auditoria descreve cada um deles.
Alertas
Um alerta é um problema em uma tela enquanto ele durar. Ele abre quando uma tela entra em uma condição de notificação diferente de crashing, quer uma notificação a monitore ou não, e é resolvido quando a condição termina. Uma tela tem no máximo um alerta aberto por condição, e um pico de travamentos é um aviso, nunca um alerta. alerts list mostra o que está aberto agora.
Um alerta aberto precisa de atenção até alguém reconhecê-lo ou adiá-lo, ou até um silenciamento cobrir a tela dele. Reconhecer significa que alguém está cuidando: o alerta continua aberto, registra quem o reconheceu e quando, e não precisa de atenção até ser resolvido. Adiar reconhece até um horário no máximo 30 dias à frente, e o alerta volta a precisar de atenção nesse horário se ainda estiver aberto. Um reconhecimento ou adiamento posterior substitui o anterior. Enquanto um alerta está reconhecido ou adiado, o aviso de uma notificação sobre ele que ainda está em tempo de espera é ignorado.
Um silenciamento serve para manutenção: ele nomeia telas, tags ou ambos e termina em um momento no máximo 30 dias à frente. Ele cobre uma tela enquanto o id da tela estiver na lista ou ela tiver uma tag da lista, então uma tela marcada depois fica coberta e uma que perde a tag deixa de ser coberta. Os alertas de uma tela silenciada continuam abrindo e resolvendo, marcados muted, mas nunca precisam de atenção, e toda notificação ignora os avisos deles. Uma organização tem no máximo 50 silenciamentos vigentes em todos os seus projetos.
counts.attention em alerts list é o número que o painel mostra ao lado de Alertas. Abrir, resolver e reconhecer um alerta adiciona screen.alert_opened, screen.alert_resolved e screen.alert_acknowledged ao registro de eventos do projeto, e criar e encerrar um silenciamento adiciona alert_mute.created e alert_mute.deleted. Como todo evento screen.*, eles são gratuitos no stream de escuta. Os alertas resolvidos continuam listados pelo período de retenção de eventos do plano. Ler alertas e silenciamentos exige o acesso Somente leitura; reconhecer, adiar, silenciar e remover o silenciamento exigem o acesso Gerenciar.
| Código do problema | Sair | Significado |
|---|---|---|
alert_not_open | 5 | O alerta já foi resolvido, então não há nada para reconhecer ou adiar. Execute alerts list e use um aberto. |
alert_mute_limit_reached | 5 | A organização já tem 50 silenciamentos vigentes. Encerre um com alerts unmute, ou cubra mais telas com um único silenciamento por tag. |
invalid_request | 8 | O instante --until está a mais de 30 dias no futuro. Nada foi alterado. |
not_found | 4 | Nenhum alerta nem silenciamento do projeto tem este id. Um alerta resolvido some após a retenção de eventos do plano, e um silenciamento assim que termina. |
alerts list#
Listar os alertas deste projeto, os abertos primeiro.
alerts list [--state open|resolved|all] [--screen-id ID] [--before CURSOR] [--limit N]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--state STATE | string | não | open | open, resolved ou all. |
--screen-id ID | string | não | tela inteira | Somente os alertas desta tela. |
--before CURSOR | string | não | a primeira página | O next_cursor da página anterior. |
--limit N | integer | não | 100 | Linhas por página, de 1 a 200. |
screenrig alerts listscreenrig alerts list --state all --screen-id scr_01EXAMPLESCREEN00000000Cada linha é um alerta: id (alr_…), screen_id, screen_name, condition, state (open ou resolved), since (quando a condição começou), resolved_at depois de resolvido, acknowledged_at e acknowledged_by (kind, id e name da pessoa ou do agente) depois de reconhecido, snoozed_until enquanto adiado, muted e attention. Os alertas abertos vêm primeiro, os mais recentes primeiro. counts traz open e attention do projeto inteiro, seja qual for a página e os filtros, e next_cursor é null no final.
alerts show#
Mostrar um alerta.
alerts show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do alerta alr_. |
screenrig alerts show alr_01EXAMPLEALERT000000O envelope é o alerta, no formato de uma linha de alerts list.
alerts ack#
Reconhecer um alerta aberto: alguém está cuidando dele.
alerts ack <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do alerta alr_. |
screenrig alerts ack alr_01EXAMPLEALERT000000O alerta continua aberto e não precisa de atenção até ser resolvido; acknowledged_by nomeia a pessoa ou o agente e acknowledged_at o horário. O aviso de uma notificação ainda em tempo de espera é ignorado. Reconhecer de novo substitui o reconhecimento ou adiamento anterior. Um alerta resolvido retorna alert_not_open (saída 5). O envelope é o alerta, e o registro de eventos grava screen.alert_acknowledged.
alerts snooze#
Reconhecer um alerta aberto até um horário, para que ele volte a precisar de atenção nesse momento.
alerts snooze <id> (--for DURATION | --until TIME)| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do alerta alr_. |
--for DURATION | duração | um de --for ou --until | nenhum | Por quanto tempo adiar a partir de agora: uma duração como 30m, 4h ou 2d, no máximo 29d23h59m. |
--until TIME | string | um de --for ou --until | nenhum | Quando o adiamento termina: um instante RFC 3339 com segundos e um deslocamento, como 2026-11-01T09:00:00-07:00, no máximo 30 dias à frente. |
screenrig alerts snooze alr_01EXAMPLEALERT000000 --for 4hsnoozed_until é o horário em que o adiamento termina. Até lá, o alerta não precisa de atenção e o aviso de uma notificação ainda em tempo de espera é ignorado, como em alerts ack; se o alerta ainda estiver aberto nesse horário, ele volta a precisar de atenção. Um alerta resolvido retorna alert_not_open (saída 5).
alerts mute#
Silenciar telas para manutenção.
alerts mute [--screen-id ID]... [--tag TAG]... (--for DURATION | --until TIME) [--note TEXT]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--screen-id ID | string | pelo menos um de --screen-id, --tag | nenhum | Um scr_ id de tela. Repita-o, ou liste ids separados por vírgula; no máximo 100. |
--tag TAG | string | pelo menos um de --screen-id, --tag | nenhum | Cada tela com esta tag. Repita, ou liste tags separadas por vírgula; no máximo 16. |
--for DURATION | duração | um de --for ou --until | nenhum | Por quanto tempo o silenciamento dura a partir de agora: uma duração como 30m, 4h ou 2d, no máximo 29d23h59m. |
--until TIME | string | um de --for ou --until | nenhum | Quando o silenciamento termina: um instante RFC 3339 com segundos e um deslocamento, como 2026-11-01T09:00:00-07:00, no máximo 30 dias à frente. |
--note TEXT | string | não | nenhum | Por que as telas estão silenciadas, para as pessoas que veem o silenciamento; no máximo 200 caracteres. |
screenrig alerts mute --tag Lobby --for 2h --note "Rewiring the lobby displays"O envelope é o silenciamento: id (amt_…), screen_ids, tags, until, note, created_by e created_at. Os alertas de cada tela coberta passam a indicar muted imediatamente, inclusive os que já estavam abertos. Uma organização tem no máximo 50 silenciamentos vigentes em todos os seus projetos; mais um é alert_mute_limit_reached (saída 5), e um silenciamento que terminou não conta mais. Depois de um silenciamento interrompido ou ambíguo, leia alerts mutes primeiro: repetir o mesmo comando com --until em até 24 horas retorna o mesmo silenciamento, enquanto repetir com --for conta a partir de um novo momento e cria outro.
alerts mutes#
Listar os silenciamentos que não terminaram, o que termina primeiro vem antes.
alerts mutesscreenrig alerts mutesCada linha é um silenciamento como alerts mute o imprime.
alerts unmute#
Encerrar um silenciamento agora.
alerts unmute <mute-id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<mute-id> | string | sim | nenhum | O id do silenciamento amt_. |
screenrig alerts unmute amt_01EXAMPLEMUTE0000000Os alertas abertos dessas telas voltam a precisar de atenção, e os avisos seguintes não são mais ignorados por silenciamento. Um silenciamento que terminou retorna not_found (saída 4). O registro de eventos grava alert_mute.deleted.
Webhooks
Um webhook envia os próprios eventos deste projeto, como POSTs assinados, para um endpoint HTTPS que você executa, para que um evento correspondente possa acordar um agente, um bot ou seu próprio serviço. Cada evento correspondente chega como o mesmo objeto JSON que events list retorna. Um webhook é uma notificação em sua forma original: conta para o limite de 50 notificações da organização, e notifications list o mostra. Os trabalhos novos usam notifications, que também envia e-mail e avisos de tela.
Cada tentativa de entrega é contabilizada como um evento de escuta faturado: 1 crédito após a franquia mensal de 10.000 API e listen-stream. Os mesmos eventos gratuitos no listen stream também são gratuitos aqui: screen.*, runtime.*, application.event, playback.page_failed e agent.command. Uma tentativa recusada antes de qualquer envio não é cobrada.
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 (saída 5) quando a organização já tem 50 notificações, enquanto notifications create responde notification_limit_reached. Uma URL recusada é webhook_url_rejected (saída 8) nos dois casos.
Links da frota
Um link de frota é uma URL do Player que você coloca em um gerenciador de dispositivos, como um app de quiosque no console Google Admin. Cada dispositivo que a abre se torna sua própria tela neste projeto, sem código de pareamento. Uma organização tem no máximo 50 links de frota em todos os seus projetos.
Cada nova tela recebe as tags e playlist do link, e um rótulo do dispositivo: primeiro o ID de ativo do administrador, depois a localização, ou então o próximo rótulo padrão. Um dispositivo mantém sua única tela entre recarregamentos e reinicializações. Após um powerwash ou reinstalação, um dispositivo que reporta o número de série ou DUID de uma tela criada por um link de frota deste projeto recupera essa tela em vez de criar outra, assim que sua chave antiga ficar inativa por dez minutos. screen show retorna fleet_link_id para uma tela criada por um link de frota, e --human imprime Created by fleet link: flk_…. O id permanece após o link ser excluído.
A URL, https://play.screenrig.ai/player/#fleet=srfl_…, é uma credencial que cria telas. Dê-a somente ao gerente do dispositivo. O segredo viaja no fragmento da URL, que os navegadores nunca enviam a um servidor. Uma credencial somente leitura recebe data.url vazia com url_redacted: true, e a saída humana então diz URL: withheld from a Read only credential. Caso contrário, a saída humana imprime a URL sob um rótulo Sensitive fleet link URL, e fleet-links list --human nunca a imprime. O CLI verifica uma URL retornada antes de imprimi-la: HTTPS, o caminho /player/ e o segredo somente em #fleet=. Ele retém uma URL que falha na verificação, com o aviso fleet_link_url_withheld, e mantém respostas de link de frota fora do seu log de operação.
| Código do problema | Sair | Significado |
|---|---|---|
fleet_link_limit_reached | 5 | A organização já tem 50 links de frota. Nada foi criado. Exclua um primeiro. |
invalid_request | 8 | Um campo foi recusado, como um --playlist-id que não nomeia nenhuma playlist neste projeto. error.next é playlist list para uma playlist desconhecida. |
not_found | 4 | Nenhum link de frota tem este id no projeto. |
revision_conflict | 6 | A revisão --expect-rev estava desatualizada. Execute fleet-links show e tente novamente. |
fleet-links create#
Criar um link de frota e receber sua URL do Player.
fleet-links create --name NAME [--tag TAG]... [--playlist-id ID] [--max-screens N] [--disabled]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | O nome do link, de 1 a 80 caracteres sem caracteres de controle. |
--tag TAG | string | não | sem tags | Uma tag para cada nova tela, de 1 a 32 letras ou dígitos. Repita-a, ou liste tags separadas por vírgula; no máximo 16. |
--playlist-id ID | string | não | nenhum | A playlist pl_ atribuída a cada nova tela. |
--max-screens N | integer | não | sem limite | O máximo de telas que o link cria, de 1 a 10000. |
--disabled | boolean | não | desligado | Criar desativado. Não cria telas até fleet-links update --enable. |
screenrig fleet-links create --name "Lobby displays" --tag Lobby --tag Floor2 --playlist-id pl_01EXAMPLEPLAYLIST000000O envelope é o link da frota com sua URL do Player em data.url. Coloque essa URL no gerenciador de dispositivos. Após uma criação interrompida ou ambígua, execute novamente o comando idêntico dentro de 24 horas: ele reutiliza a chave de idempotência salva, e o servidor retorna o mesmo link em vez de criar outro.
fleet-links list#
Listar os links da frota deste projeto, do mais antigo para o mais recente.
fleet-links listscreenrig fleet-links listUma credencial somente leitura recebe cada data.items[].url vazia com url_redacted: true. --human imprime ID, LABEL, ENABLED, SCREENS, TAGS, e LAST_USED, e nunca a URL. SCREENS é o número de telas que o link criou, ou criado/máximo com --max-screens; recuperações não são contadas.
fleet-links show#
Inspecione um link de frota e receba sua URL do Player.
fleet-links show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do link da frota flk_. |
screenrig fleet-links show flk_01EXAMPLELINK0000screens_created conta as telas que o link criou, e last_used_at é a última vez que criou ou recuperou uma.
fleet-links update#
Alterar o que um link de frota fornece às telas que cria a partir de agora.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do link da frota flk_. |
--name NAME | string | pelo menos uma alteração | inalterado | 1 a 80 caracteres. |
--enable | boolean | pelo menos uma alteração | desligado | O link cria e recupera telas novamente. |
--disable | boolean | pelo menos uma alteração | desligado | O link não cria nem recupera telas; um dispositivo que o abre mostra seu código de pareamento em vez disso. |
--tag TAG | string | pelo menos uma alteração | inalterado | Substitui o conjunto inteiro de tags. Repita, ou liste tags separadas por vírgula; no máximo 16. |
--clear-tags | boolean | pelo menos uma alteração | desligado | Novas telas não recebem tags. |
--playlist-id ID | string | pelo menos uma alteração | inalterado | A playlist pl_ para novas telas. |
--clear-playlist | boolean | pelo menos uma alteração | desligado | Novas telas não recebem playlist. |
--max-screens N | integer | pelo menos uma alteração | inalterado | O máximo de telas que o link cria no total, de 1 a 10000. |
--clear-max-screens | boolean | pelo menos uma alteração | desligado | Remover o limite. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig fleet-links update flk_01EXAMPLELINK0000 --playlist-id pl_01EXAMPLEPLAYLIST000000update altera apenas os campos que você passar, e somente para telas que o link criar a partir de agora. Telas já criadas mantêm suas tags, playlist e rótulo. A URL permanece inalterada; use rotate para substituí-la.
fleet-links rotate#
Substituir a URL de um link de frota e receber a nova.
fleet-links rotate <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do link da frota flk_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig fleet-links rotate flk_01EXAMPLELINK0000O envelope carrega a nova URL em data.url. A URL antiga para de funcionar imediatamente: um dispositivo que a abre mostra seu código de pareamento. Monitores cujo link já foi criado continuam exibindo, porque um Player pareado nunca apresenta o link novamente. Coloque a nova URL no gerenciador de dispositivos.
fleet-links delete#
Excluir um link da frota. Sua URL para de funcionar imediatamente, e as telas que ele criou permanecem.
fleet-links delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do link da frota flk_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig fleet-links delete flk_01EXAMPLELINK0000Telas cujo link foi criado mantêm suas playlists e tags.
Gatilhos de alerta CAP
Um gatilho permite que um sistema de notificação de emergência, como Everbridge, Rave, Alertus ou um relé IPAWS, assuma telas com alertas CAP 1.2. Cada gatilho tem sua própria URL, nome de usuário e senha, que você insere no sistema de envio como destino CAP HTTP POST com autenticação HTTP Basic. Uma organização tem no máximo 20 gatilhos em todos os seus projetos.
Os gatilhos são de dois tipos. Um gatilho CAP, descrito aqui, recebe os alertas de um sistema de emergência. Um gatilho de sobreposição mostra o que qualquer remetente publica, como o Home Assistant, um hub de sensores ou uma ferramenta de alertas, como uma faixa sobre o que está sendo exibido ou como uma tomada de controle; triggers create --kind overlay cria um, e triggers update, triggers deliveries, triggers clear e triggers rotate-secret servem aos dois tipos.
Um gatilho mira uma tag, resolvida quando cada alerta chega, ou até 500 ids de tela. Cada Alerta vira uma tomada da playlist do gatilho: um cartão em tela cheia na cor da severidade, com evento, manchete, descrição e instrução. Um Exercício adiciona um banner EXERCISE. A tomada dura até o <expires> do alerta, senão o padrão --for do gatilho (1 minuto a 7 dias, 1 hora se não definido), e nunca passa 7 dias. Uma Atualização redesenha o cartão, e um Cancelar ou AllClear devolve cada tela ao que tocava antes. Um novo Alerta substitui o que está mostrando. Mensagens Test, System e Draft, mensagens Ack e Error e alertas expirados são ignorados, e um remetente e identificador repetidos são duplicados. Uma tela precisa de uma playlist padrão para ser tomada; outras telas são puladas.
A senha, srtg_…, é mostrada somente por triggers create e triggers rotate-secret, com o aviso trigger_password_shown_once. O CLI a mantém fora de sua configuração, log de operação e estado de recuperação. A URL e o nome de usuário não são secretos.
| Código do problema | Sair | Significado |
|---|---|---|
trigger_limit_reached | 5 | A organização já tem 20 gatilhos. Nada foi criado. Exclua um primeiro. |
resource_conflict | 5 | triggers test ou triggers delete enquanto um alerta está ativo. next é triggers clear. |
not_found | 4 | Nenhum gatilho tem este ID no projeto. |
revision_conflict | 6 | A revisão --expect-rev estava desatualizada. Execute triggers show e tente novamente. |
triggers create#
Criar um gatilho e receber sua URL, nome de usuário e senha.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--name NAME | string | sim | nenhum | O nome do gatilho, de 1 a 80 caracteres sem caracteres de controle. |
--kind KIND | cap ou overlay | não | cap | cap recebe os alertas CAP 1.2 de um sistema de emergência. overlay recebe poucas palavras de qualquer remetente e exige --show. |
--tag TAG | string | um de --tag ou --screen-id | nenhum | Cada tela ativa com esta tag quando um alerta chega. |
--screen-id ID | string | um de --tag ou --screen-id | nenhum | Um scr_ id de tela. Repita-o, ou liste ids separados por vírgula; no máximo 500. |
--for DURATION | duração | não | 1h (sobreposição 10m) | Por quanto tempo um alerta sem <expires>, ou um envio de sobreposição sem duration, mantém as telas, como 30m, 2h ou 1d; de 1 minuto a 7 dias em um gatilho CAP, de 10 segundos a 7 dias em um gatilho de sobreposição. |
--pull FILE | caminho | não | nenhum | Um objeto JSON, de um arquivo ou - para stdin, que também tem a plataforma lendo fontes de alerta CAP para o gatilho. Seus membros são os parâmetros do cartão cap-alert, listados abaixo. |
--show SHOW | bar ou takeover | com --kind overlay | nenhum | bar desenha uma faixa sobre o que está sendo exibido nas telas de destino. takeover exibe o alerta em tela cheia. |
--edge EDGE | bottom ou top | não | bottom | A borda que uma faixa ocupa. Somente com --show bar. |
--style FILE | caminho | não | nenhum | Um objeto JSON, de um arquivo ou de - para a entrada padrão, com o estilo do cartão de texto: theme, accent, background, backgroundColor, textColor e align. |
--map FILE | caminho | não | nenhum | Um modelo JSON, de um arquivo ou de - para a entrada padrão, que monta a publicação de sobreposição a partir do corpo enviado pelo remetente; veja gatilhos de sobreposição. |
--signing | flag | não | desligado | Exigir também um cabeçalho ScreenRig-Signature em cada envio e exibir o segredo de assinatura uma só 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 30sO envelope é o gatilho com data.url (https://api.screenrig.ai/api/triggers/<id>/cap, ou .../overlay para um gatilho de sobreposição), data.username (o id do gatilho) e data.password. Informe-os agora no sistema remetente; o remetente de um gatilho de sobreposição precisa da URL e da senha (Authorization: Bearer). Com --signing, o envelope também traz data.signing_secret, exibido uma só vez, com o aviso trigger_signing_secret_shown_once. Após uma criação interrompida ou ambígua, execute o mesmo comando de novo em até 24 horas: ele reutiliza a chave de idempotência salva, e o servidor devolve o mesmo gatilho e a mesma senha em vez de criar outro.
--pull adiciona fontes que a plataforma lê além da URL postada, que continua funcionando. O objeto contém sources (até 5 URLs http ou https de alertas CAP 1.0 a 1.2 ou índices ATOM/RSS), publicAlerts, location (name, latitude, longitude, e geocodes como [{name, value}]), minSeverity, maxSeverity, minUrgency, minCertainty, events, excludeEvents, senders, statuses, scopes, languages e areaUnknown; feeds get cap usa os mesmos filtros que flags. location é obrigatório a menos que sources sejam fornecidos, e sem sources os feeds públicos cobrindo location são lidos. Cada fonte é buscada uma vez por minuto. O alerta correspondente mais grave assume as telas como um postado, e quando as fontes não mostram nenhum, um alerta puxado termina; uma fonte desatualizada ou com falha nunca termina um alerta. Por exemplo {"location": {"latitude": 49.25, "longitude": -123}, "minSeverity": "moderate"}.
triggers list#
Listar os gatilhos deste projeto e seus alertas mais recentes, do mais antigo para o mais recente.
triggers listscreenrig triggers list--human mostra ID, KIND, LABEL, TARGET, ALERT e LAST_RECEIVED; em um gatilho de sobreposição, ALERT diz o que ele desenha e quantos alertas mantém. Uma lista nunca traz senha nem segredo de assinatura.
triggers show#
Inspecione um gatilho e seu alerta mais recente.
triggers show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
screenrig triggers show trg_01EXAMPLETRIGGER00data.alert é o último alerta: seus campos CAP, state active ou ended (com ended_reason cancelled, all_clear, cleared ou expired), until e screens com targeted, taken_over, cleared, skipped, failed e pending. pending é verdadeiro enquanto telas ainda estão sendo gravadas, e as telas com falha são repetidas. screen show informa um alerta como uma tomada de controle da playlist do gatilho. Em um gatilho de sobreposição, data.overlay contém show, edge, enabled, signing, card_id, alerts (os alertas ativos, o mais recente primeiro; o primeiro é exibido), screens com targeted, holding, taken_over, removed, edge_taken, skipped e failed, e pending.
triggers test#
Mostrar alerta de exercício de 60 segundos nas telas do gatilho.
triggers test <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
screenrig triggers test trg_01EXAMPLETRIGGER00O envelope é o recibo: data.outcome shown e data.alert. A resposta chega antes de todas as telas serem gravadas; triggers show informa as contagens. Um gatilho de sobreposição exibe o alerta screenrig-test (rótulo Test, título Test overlay) por 60 segundos, e o recibo é o que um envio recebe (data.alert_id, data.until, data.active). Os dois tipos recusam um teste enquanto um alerta é exibido.
triggers update#
Alterar um gatilho sem mudar sua URL nem seu segredo.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
--name NAME | string | não | nenhum | Renomear o gatilho. |
--tag TAG, --screen-id ID | string | não | nenhum | Um novo destino, como em triggers create. |
--for DURATION | duração | não | nenhum | Uma nova duração para alertas que não informam o próprio fim. |
--pull FILE, --no-pull | caminho, flag | não | nenhum | Um gatilho CAP: substitui suas fontes CAP ou deixa de lê-las. |
--edge EDGE | bottom ou top | não | nenhum | Uma faixa de sobreposição: movê-la para esta borda. |
--style FILE, --clear-style | caminho, flag | não | nenhum | Um gatilho de sobreposição: substitui todo o estilo ou o remove. |
--map FILE, --clear-map | caminho, flag | não | nenhum | Um gatilho de sobreposição: substitui o modelo ou o remove para que o objeto enviado seja a publicação. |
--stale-after DURATION | string | não | inalterado | Como em source create; none remove o período. |
--enable, --disable | flag | não | nenhum | Um gatilho de sobreposição: um gatilho desativado responde a cada envio com o 404 que um segredo errado recebe. |
--signing, --no-signing | flag | não | nenhum | Um gatilho de sobreposição: ativa a verificação de assinatura (o segredo de assinatura é exibido uma só vez) ou a desativa. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
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 --signingÉ necessária pelo menos uma opção além de --expect-rev. Uma faixa se reposiciona nas novas telas de destino e na nova borda; o novo destino de um gatilho de tomada de controle vale a partir do próximo alerta que começar. Um gatilho que já assina mantém seu segredo de assinatura quando --signing é repetido; triggers rotate-secret --signing o substitui. Após uma atualização interrompida ou ambígua, execute o mesmo comando de novo: ele reutiliza a chave de idempotência salva.
triggers deliveries#
Ler o registro de envios de um gatilho de sobreposição: por que cada um foi exibido, ignorado ou recusado.
triggers deliveries <id> [--limit N]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
--limit N | integer | não | 100 | Quantas entregas, as mais recentes primeiro; de 1 a 100. |
screenrig triggers deliveries trg_01EXAMPLETRIGGER00 --limit 20data.items guarda as postagens dos últimos sete dias: at, outcome (shown, updated, unchanged, ended, ignored, refused, invalid ou handshake), reason para uma postagem recusada ou inválida (credentials, signature, disabled, body, mapping, field, rate_limited ou internal), detail (o membro ou o caminho de mapeamento que estava errado), status, bytes, alert_id e request_id. O registro nunca guarda um corpo, um cabeçalho nem uma credencial. Um segredo errado, uma assinatura inválida e um gatilho desativado dão todos ao remetente o mesmo 404, então este registro é onde se lê qual foi. Um gatilho CAP não tem entregas.
triggers clear#
Encerrar o alerta do gatilho agora.
triggers clear <id> [--alert-id ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
--alert-id ID | string | não | nenhum | Um gatilho de sobreposição: encerra somente este alerta. Sem esta opção, todos os alertas terminam. |
screenrig triggers clear trg_01EXAMPLETRIGGER00
screenrig triggers clear trg_01EXAMPLETRIGGER00 --alert-id front-doorO alerta termina com ended_reason cleared, e suas telas voltam ao que exibiam antes. Uma tela cuja tomada de controle outra coisa substituiu desde então é deixada como está. Sem alerta ativo, nada muda. Em um gatilho de sobreposição, o encerramento de um alerta que não está ativo não muda nada, e o fim do último alerta abaixa a faixa ou devolve as telas da tomada de controle.
triggers rotate-secret#
Substituir a senha de um gatilho.
triggers rotate-secret <id> [--signing] [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
--signing | flag | não | desligado | Um gatilho de sobreposição que assina: substitui o segredo de assinatura em vez da senha. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig triggers rotate-secret trg_01EXAMPLETRIGGER00O envelope traz a nova senha em data.password. A senha antiga deixa de funcionar na hora, então informe a nova no sistema remetente. Com --signing, o envelope traz o novo data.signing_secret em vez disso, exibido uma só vez; o antigo deixa de funcionar na hora, e um gatilho que não assina responde invalid_request.
triggers delete#
Excluir um gatilho. Sua URL deixa de aceitar alertas e envios na hora; as faixas de um gatilho de sobreposição saem de suas telas e seu cartão é excluído. Um gatilho que exibe um alerta é recusado com resource_conflict: execute triggers clear primeiro.
triggers delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | O id do gatilho trg_. |
--expect-rev REVISION | string | não | nenhum | Pré-condição opcional de revisão. |
screenrig triggers delete trg_01EXAMPLETRIGGER00Gatilhos de sobreposição
Um gatilho de sobreposição mostra o que um sistema externo publica. O Home Assistant, um hub de sensores de porta ou de movimento, um sistema de câmeras ou uma ferramenta de alertas envia poucas palavras com um HTTP POST, e as telas do gatilho as exibem até expirarem ou o remetente as encerrar. É um gatilho como o CAP: triggers create --kind overlay o cria e ele conta no mesmo limite de 20 por organização.
--show bar desenha uma faixa sobre o que está sendo exibido em cada tela de destino, na borda inferior ou, com --edge top, na superior. A faixa entra quando um alerta começa e sai quando o último termina; a playlist, suas páginas e seu tempo não mudam. Uma tela tem uma faixa por borda: um gatilho de sobreposição cuja borda já pertence a outro gatilho em uma tela não aparece ali (triggers show conta essas telas como edge_taken), e uma página que tem a própria faixa com presença nessa borda a mantém. Um cartão de canto ou de ficha nessa borda se desloca para dentro, além da altura da faixa, esteja ela visível ou não. Nenhuma faixa é desenhada em uma página de espaço publicitário nem durante uma tomada de controle. --show takeover exibe o alerta em tela cheia nas telas de destino que têm uma playlist padrão, do primeiro alerta até o fim do último. Um gatilho de tomada de controle nunca substitui uma tomada de controle que já está em uma tela, como a de um operador ou a de um alerta de emergência, e um alerta CAP a substitui.
Um destino por tag é resolvido quando um alerta começa; uma tela marcada depois recebe a faixa com o próximo alerta que começar. Telas sem playlist padrão são ignoradas por uma tomada de controle. Uma tela offline se atualiza ao reconectar.
O remetente envia JSON (ou um formulário) para data.url com Authorization: Bearer SECRET, ou com HTTP Basic usando o id do gatilho como usuário e o segredo como senha. O segredo nunca vai na URL. Um envio tem estes membros; um membro desconhecido é recusado e nomeado.
| Membro | Tipo | Notas |
|---|---|---|
alert_id | string | O id do alerta escolhido pelo remetente, de 1 a 200 caracteres. O mesmo id atualiza esse alerta em vez de empilhar outro. Sem id, é um único alerta chamado default. Em um encerramento, sem id todos os alertas terminam. |
label | string | Um rótulo curto acima do título: no máximo 40 caracteres. |
title | string | No máximo 120 caracteres. |
message | string | O texto principal: no máximo 400 caracteres. |
note | string | Uma linha discreta no rodapé: no máximo 120 caracteres. |
duration | número ou string | Por quanto tempo este envio mantém seu alerta, a partir de agora: de 10 a 604800 segundos, ou 10s, 5m, 2h, 1d ou until_cleared. Sem valor, vale --for do gatilho (10 minutos se não definido). |
clear | booleano ou string | true (ou yes, y, 1, x) encerra o alerta; false (ou no, n, 0, vazio) o dispara. Um encerramento ignora os outros membros. |
state | string | Uma palavra de estado do remetente. off, closed, clear, cleared, resolved, ok, normal, inactive e ended, em qualquer caixa, encerram o alerta; qualquer outro estado o dispara. |
Um disparo exige pelo menos um entre label, title, message e note. Texto maior que o limite é recusado, assim como duration fora de 10 segundos a 7 dias, ambos com invalid_request nomeando o membro. Cada disparo ou atualização mantém seu alerta por duration a partir daquele envio; um sensor de movimento que envia a cada poucos segundos mantém a faixa na tela, e ela sai duration depois do último envio. Um gatilho mostra seu alerta mais recente; ao encerrá-lo, o anterior volta a aparecer. Ele mantém dez alertas, e o décimo primeiro substitui o mais antigo. Um alerta termina cerca de dez segundos depois do seu horário. Um encerramento enviado duas vezes encerra o alerta uma só vez, e o encerramento de um alerta que não está ativo não muda nada.
A resposta é um recibo: outcome (shown, updated, unchanged, ended ou ignored), alert_id, until (nulo para um alerta mantido até ser encerrado) e active, os alertas que o gatilho mantém depois do envio. Um cabeçalho Idempotency-Key de 8 a 200 caracteres responde à nova tentativa de um remetente com o primeiro recibo por 24 horas. Um gatilho aceita 120 envios por minuto. Um disparo ou atualização é uma solicitação de API cobrada, como um envio a um webhook de chave/valor de entrada; um encerramento é gratuito e nunca é recusado por saldo, de modo que um alerta sempre pode ser retirado das telas.
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"}'Um endereço errado, um segredo errado, um gatilho desativado, uma assinatura ausente ou errada e qualquer GET dão o mesmo 404 not_found, de modo que um remetente ou a prévia de um link não descobre qual foi. triggers deliveries mostra ao projeto o motivo, dos últimos sete dias, sem o corpo do envio. --style FILE define theme, accent, background, backgroundColor, textColor e align do cartão de texto; use um gatilho por aparência.
--map FILE monta a publicação a partir do corpo que uma ferramenta de alertas envia, com a linguagem de modelos dos webhooks de cartões. Uma string com {{body.title}} é texto, uma string que é exatamente um marcador mantém seu tipo, {"$text": "{{body.message}}", "$max": 400} corta o texto e um caminho começa com body ou query. Este modelo converte um alerta de uma ferramenta de monitoramento e o encerra quando o status é resolved:
{"alert_id": "{{body.groupKey}}", "title": "{{body.title}}", "message": {"$text": "{{body.message}}", "$max": 400}, "state": "{{body.status}}"}--signing também exige ScreenRig-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, com a chave data.signing_secret (whsec_…, exibido uma só vez), em que t deve estar a no máximo cinco minutos do relógio do servidor. O remetente pode enviar dois valores v1 enquanto troca o segredo.
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"Uma ferramenta de alertas ou um fornecedor que assina as próprias postagens pode ter a assinatura verificada no lugar do segredo, e o handshake de configuração dele respondido, como nos webhooks de cartão: overlay.verify e overlay.handshake vão em POST /api/triggers e PATCH /api/triggers/{id}, e null remove cada um. As mesmas regras valem para a senha srtg_ do gatilho e para o registro de entregas dele, e um handshake não altera nenhum alerta.
Um rest_command do Home Assistant envia ao gatilho. Guarde o segredo em secrets.yaml e dê a cada automação o alerta que ela dispara ou encerra:
# 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}Dois fatos fazem isto funcionar. Cada envio de movimento mantém a faixa por 2 minutos a partir daquele envio, então ela fica enquanto o movimento continua e sai 2 minutos depois do último evento. E o Home Assistant processa o modelo {{ }} antes de enviar, de modo que o gatilho recebe JSON simples; o modelo --map do próprio gatilho é uma etapa separada que passa cada envio por ele; por isso, deixe --map de fora para um remetente que já envia os membros da sobreposição, como o Home Assistant faz aqui, ou dê a ele um gatilho próprio.
Reprodução
Evidência de reprodução vem em três formas. playback plays lê uma linha por início visível de uma imagem ou vídeo em uma tela, do mais antigo para o mais recente por received_at: prova de reprodução para um relatório ou anunciante. playback list lê totais diários, uma linha por tela, objeto de mídia e dia UTC. playback totals lê contagens de reprodução por dia UTC, ou classifica as telas ou mídias mais ativas. plays e list exportam como CSV, e o dashboard exporta os mesmos arquivos.
As reproduções são mantidas para a retenção de eventos do plano, por pelo menos 30 dias.
| Código do problema | Sair | Significado |
|---|---|---|
invalid_request | 8 | Um intervalo de reproduções maior que 31 dias, um intervalo diário maior que 366 dias, ou um filtro malformado. O CLI recusa a maioria antes de enviar algo (exit 2). |
rate_limited | 7 | O orçamento de exportação de reprodução de 30 solicitações por minuto por organização foi gasto. Aguarde retry_after_seconds. |
Cobrança: cada página JSON é uma solicitação de API faturada, então --all fatura uma solicitação por página. Uma exportação CSV é uma solicitação faturada para todo o seu intervalo. Toda solicitação de reproduções e toda exportação CSV também consome o orçamento de exportação de reprodução. playback totals é uma solicitação de API medida e não consome desse orçamento.
playback plays#
Ler registros por reprodução, uma linha por início visível.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--from TIME | string | não | 24 horas antes de --to | Limite inclusivo em received_at: um instante RFC 3339 com segundos e um deslocamento, now, ou uma idade como 7d, 12h ou 30m. |
--to TIME | string | não | agora | Limite exclusivo, nas mesmas formas. O intervalo é no máximo 31 dias. |
--screen-id ID | string | não | tela inteira | Uma tela scr_. |
--media-id ID | string | não | todo objeto | Um objeto de mídia med_. |
--tag TAG | string | não | tela inteira | Uma tag que a tela carregava quando a reprodução foi recebida. |
--cursor CURSOR | string | não | o início do intervalo | O next_cursor da página anterior, com os mesmos filtros. |
--limit N | integer | não | 200 | Linhas por página JSON, no máximo 1000. Não com --format csv. |
--all | boolean | não | desligado | Siga o cursor até o fim do intervalo, 1000 linhas por página, a menos que --limit diga o contrário, por no máximo 50 páginas. |
--format csv | string | não | JSON | Fluxo completo em CSV. |
--output FILE | caminho | não | ./playback-plays.csv | Destino CSV, ou - apenas para stdout. |
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.csvO CLI normaliza ambos os limites para UTC e os envia em cada solicitação; data.from e data.to os repetem. Os 5 segundos mais recentes são retidos até se estabilizarem, então uma reprodução aparece cerca de 5 segundos após ser recebida, e data.to reporta esse fim efetivo. JSON retorna uma página em data.items com data.next_cursor, e data.next.argv é o comando exato para a próxima página. --all para cedo, com data.next e um aviso, no limite de páginas (playback_plays_truncated) ou quando o orçamento de exportação é gasto (playback_export_rate_limited), em vez de gastar requisições até recusar.
O CSV está conforme RFC 4180 com a linha de cabeçalho fixa screen_id,playlist_id,page_id,primitive_id,media_id,primitive,started_at,received_at,manifest_revision,playlist_revision, tempos em RFC 3339 UTC. primitive_id e started_at estão vazios a menos que o Player os tenha reportado. Uma célula que começa com =, +, -, @, tabulação ou retorno de carro carrega um ' inicial para que planilhas não a avaliem. O CLI escreve através de um arquivo temporário privado no mesmo diretório e substitui um arquivo existente somente após o fluxo terminar limpo. --timeout é o limite de sem progresso para o fluxo, 60000 ms sem byte por padrão, não um limite para sua duração total. O envelope reporta path, bytes, rows, sha256 e last_received_at; o CSV nunca entra no envelope.
Se um stream falhar no meio, o comando sai com código diferente de zero e nunca grava o arquivo de destino. As linhas completas já recebidas permanecem em FILE.partial, e error.next exporta o restante do intervalo desde o último received_at para um FILE-rest.csv não usado. Linhas recebidas exatamente naquele instante aparecem em ambos, então descarte as repetições ao juntá-las.
playback list#
Leia totais diários de reprodução para este projeto, dias mais recentes primeiro.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--screen-id ID | string | não | tela inteira | Deve começar com scr_. |
--media-id ID | string | não | todo objeto | Deve começar com med_. |
--day YYYY-MM-DD | string | não | todo dia | Um dia calendário UTC. |
--day-from YYYY-MM-DD | string | não | nenhum | Início de um intervalo de dias UTC inclusivo, com --day-to, no máximo 366 dias. |
--day-to YYYY-MM-DD | string | não | nenhum | Fim desse intervalo. |
--format csv | string | não | JSON | Exportar como CSV. Sem intervalo, os 31 dias até hoje. |
--output FILE | caminho | não | ./playback-aggregates.csv | Destino CSV, ou - apenas para stdout. |
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-30Uma linha por tela, objeto de mídia e dia UTC. Os filtros selecionam as próprias linhas do solicitante. A linha de cabeçalho CSV é screen_id,media_id,filename,primitive,day,play_count,last_page_id,last_manifest_revision,first_started_at,last_started_at. Uma exportação diária falhada não mantém nada; execute novamente.
playback totals#
Ler contagens de reprodução por dia UTC, ou classificar as telas ou mídias mais usadas.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--by GROUPING | string | não | day | day responde uma linha por dia UTC. screen ou media classificam os mais ocupados. screen_day responde a série diária das telas principais. |
--day-from YYYY-MM-DD | string | não | 29 dias antes de --day-to | Primeiro dia UTC, inclusivo. |
--day-to YYYY-MM-DD | string | não | hoje | Último dia UTC, inclusivo. |
--screen-id ID | string | não | tela inteira | Com --by day, conte apenas esta tela. Não com --media-id. |
--media-id ID | string | não | todo objeto | Com --by day, conte apenas este objeto de mídia. Não com --screen-id. |
--top N | integer | não | 10 | Linhas de um ranking, de 1 a 100; de 1 a 10 com --by screen_day. Requer --by; não 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 3As contagens vêm dos resumos diários, que seguem a ingestão em até cerca de 21 minutos; playback plays mostra inícios mais recentes. day responde data.days, screen e media respondem data.screens e data.media, e screen_day responde data.screen_days. Uma série diária abrange no máximo 366 dias (92 com --screen-id ou --media-id) e um ranking no máximo 92. data.truncated é true quando um ranking em uma janela muito grande para uma leitura manteve apenas as melhores chaves de cada fatia.
Feeds
Um feed é dado de terceiros que o screenRIG busca e armazena em cache, como clima, alertas, taxas e manchetes. feeds get lê um documento do feed, o mesmo documento que um cartão embutido com os mesmos parâmetros lê. O comando nunca chama um provedor terceiro.
feeds get#
Leia um feed uma vez. Um feed sem documento ainda responde pending e seu tempo de nova tentativa.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<family> | string | sim | nenhum | weather, airquality, alerts, rates, crypto, earthquakes, cyclones, headlines ou cap. |
--lat DEGREES | number | por família | nenhum | Latitude, com --lon. Obrigatório para weather, airquality, alerts e earthquakes; opcional para cyclones e cap. |
--lon DEGREES | number | por família | nenhum | Longitude, com --lat. |
--radius-km KM | number | não | 500 para earthquakes | Raio earthquakes, ou a área cyclones, de 10 a 20000 km. Requer --lat e --lon. |
--min-magnitude MAGNITUDE | number | não | 2.5 | earthquakes: magnitude mínima, de 0 a 9. |
--hours HOURS | number | não | 24 | earthquakes: janela em horas, de 1 a 168. |
--basins LIST | string | não | todas as bacias | cyclones: bacias separadas por vírgula at, ep, cp, wp. |
--base CODE | string | não | EUR | rates: moeda base. |
--symbols IDS | string | sim, para crypto | nenhum | IDs ou símbolos de criptomoedas separados por vírgula, no máximo 20. |
--currency CODE | string | não | usd | crypto: moeda de cotação. |
--url URL | string | sim, para headlines | nenhum | headlines: URL de feed RSS ou Atom. cap: URL de alerta CAP ou índice ATOM/RSS; repita até 5 vezes. |
--public | boolean | não | ligado sem --url | cap: também lê os feeds públicos de alerta que cobrem --lat e --lon. Requer --lat e --lon. |
--geocode NAME:VALUE | string | não | nenhum | cap: um código de área da localização, como UGC:WAC033. Repetível. Requer --lat e --lon. |
--min-severity LEVEL | string | não | nenhum | cap: apenas alertas no nível ou acima de minor, moderate, severe ou extreme. |
--max-severity LEVEL | string | não | nenhum | cap: apenas alertas no nível ou abaixo de minor, moderate, severe ou extreme. |
--min-urgency LEVEL | string | não | nenhum | cap: apenas alertas com pelo menos esta urgência: past, future, expected ou immediate. |
--min-certainty LEVEL | string | não | nenhum | cap: apenas alertas com pelo menos esta certeza: unlikely, possible, likely ou observed. |
--event NAME | string | não | qualquer evento | cap: apenas este evento; * corresponde a qualquer sequência de caracteres. Repetível. |
--exclude-event NAME | string | não | nenhum | cap: excluir este evento. Repetível. |
--sender NAME | string | não | qualquer remetente | cap: apenas alertas deste remetente. Repetível. |
--status STATUS | string | não | Actual | cap: status de alerta para ler: Actual, Exercise, Test ou System. Repetível. |
--scope SCOPE | string | não | Public | cap: escopo de alerta para ler: Public, Restricted ou Private. Repetível. |
--language TAG | string | não | nenhum | cap: preferência de idioma; o primeiro presente vence. Repetível. |
--area-unknown MODE | string | não | hide | cap: um alerta informado apenas por códigos de área que a localização não possui: hide ou 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 e earthquakes precisam de --lat e --lon, que sempre vêm juntos; earthquakes também aceita --radius-km, --min-magnitude e --hours. cyclones aceita --basins, e com --lat, --lon e --radius-km juntos apenas as tempestades próximas daquele local. rates aceita --base, crypto precisa de --symbols e aceita --currency, e headlines precisa de --url.
cap lê os alertas CAP que correspondem a um local. Precisa de --url (repetível, até 5 URLs de índice de alerta CAP ou ATOM/RSS) ou --lat e --lon, que leem os feeds públicos cobrindo a localização; --public adiciona esses feeds públicos às fontes --url. As flags do filtro refletem os membros de um objeto triggers create --pull.
Um documento em cache responde 200 com fetchedAt e attribution: mostre a atribuição onde os dados aparecerem. Sem documento ainda, o envelope reporta estado pending, retry_after_seconds e retry_at com saída 0; o CLI não entra em loop, então execute o comando novamente após retry_at. Uma organização registra no máximo 50 novas chaves de feed por dia, e rate_limited segue além disso. Cartões derivam chaves de feed de parâmetros estáticos; não escreva chaves feed ou feed: você mesmo.
Fontes de dados
Uma fonte de dados lê um endereço externo em um horário e grava o resultado nos dados de um cartão, de modo que o cartão se mantém atualizado sem que ninguém republique e as telas busquem o documento de novo quando ele muda. Os tipos são ics, sheets, csv, json, microsoft365, google_calendar, square, shopify, toast e momentus. Uma fonte grava um cartão, e uma organização tem até 200 em todos os seus projetos. Uma sincronização que falha nunca grava: o cartão mantém o último bom documento e o status da fonte mostra o erro. As configurações de cada tipo, os códigos de status e as regras de privacidade estão em Fontes de dados.
Uma predefinição é uma fonte json pronta e testada para um serviço, como um canal do Slack, um quadro de vagas ou um quadro de builds: source presets as lista, source presets NAME mostra os campos e os segredos de uma predefinição, e source create --preset NAME cria a fonte.
Informe cada credencial como --secret NAME=@FILE, ou NAME=- para a entrada padrão, para que fique fora do histórico do shell e da lista de processos. Os segredos são armazenados selados e mostrados de volta apenas como uma dica mascarada. Os nomes dos segredos são calendar_url.KEY para ics (um por agenda), token para um endereço csv ou json que precisa de um (password, client_secret, header.NAME e query.NAME servem às outras formas de fazer login, descritas em Solicitações, login e páginas), client_secret para microsoft365 e toast, service_account_key para google_calendar, access_token para square e shopify, api_key e api_secret para momentus, e client_secret com a configuração client_id para um aplicativo shopify instalado na loja.
--settings recebe todo o objeto de configurações da fonte como JSON, @FILE ou -. --set KEY=VALUE define um membro de nível superior e pode ser repetido; o valor é JSON quando pode ser interpretado (days=14, calendars='[{"key":"lobby"}]') e texto caso contrário (time_zone=America/Vancouver). Com os dois, os membros de --set substituem os mesmos membros de --settings; source update com apenas --set altera esses membros das configurações salvas. A opção --config da CLI nomeia o arquivo de credenciais dela e não tem relação com as fontes.
source list#
Lista as fontes de dados do projeto, as mais recentes primeiro, com o status delas.
source list [--after CURSOR]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--after CURSOR | string | não | primeira página | O data.next_cursor da página anterior. |
screenrig source listsource show#
Inspeciona uma fonte: suas configurações, segredos mascarados, a última execução e o último erro.
source show <source_id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<source_id> | string | sim | nenhum | A fonte (src_…). |
screenrig source show src_01EXAMPLESOURCE000000source presets#
Lista as predefinições de fonte prontas ou mostra uma com seus campos, seus segredos e como obtê-los.
source presets [<name>]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<name> | string | não | todas as predefinições | O nome de uma predefinição: palavras em minúsculas unidas por hífens, como slack-channel. |
screenrig source presets
screenrig source presets slack-channelA lista mostra o título de cada predefinição, os tipos de cartão que ela preenche (o primeiro é aquele para o qual foi feita) e a categoria dela. Com um nome, mostra os campos a definir (--set NAME=VALUE: texto com seu padrão e um exemplo, uma escolha ou uma lista que aceita um array JSON), os segredos a informar (--secret NAME=@FILE) com onde o fornecedor emite cada um, com que frequência ela é atualizada, por quanto tempo um cartão mantém seus últimos dados e os dados de quem ela lê, sob quais termos. Nada é criado.
source create#
Cria uma fonte. Ela é executada em segundos e depois conforme o horário. Crie o cartão primeiro e faça uma prévia com 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--kind KIND | string | sem --preset | nenhum | ics, sheets, csv, json, microsoft365, google_calendar, square, shopify, momentus ou toast. |
--preset NAME | string | sem --kind | nenhum | Cria a fonte a partir de uma predefinição pronta e testada (source presets as lista): --set e --settings passam então os campos da predefinição e --secret as credenciais dela. Não com --kind. |
--card CARD_ID | string | sim | nenhum | O cartão (crd_…) que a fonte grava. Um cartão tem uma fonte; source_target_taken responde a uma segunda. |
--name NAME | string | sim | nenhum | 1 a 80 caracteres. |
--settings SETTINGS | string | não | {} | Uma configuração de nível superior. Repetível. Com --preset, um campo da predefinição: o texto como escrito, a menos que seja um array ou objeto JSON (os itens de um campo de lista). |
--connection-id ID | string | não | nenhum | microsoft365 e google_calendar: leem por meio de uma conexão do projeto (pcn_…, connection list) em vez de um tenant, client_id e um segredo próprios da fonte. Define a configuração connection_id. |
--set KEY=VALUE | string | não | nenhum | Uma configuração de nível superior. Repetível. |
--secret NAME=VALUE | string | não | nenhum | Uma credencial por nome: NAME=@FILE, NAME=- (no máximo uma opção lê stdin) ou NAME=VALUE. Repetível. Com --preset, as credenciais da predefinição. |
--refresh DURATION | string | não | conforme o tipo | Com que frequência sincronizar, de 30s a 24h. O tipo define o padrão e o menor intervalo: ics sincroniza a cada 5 minutos, com intervalo mínimo de 1 minuto; microsoft365 e google_calendar a cada 2 minutos; momentus a cada minuto, com intervalo mínimo de 30 segundos. Uma predefinição define o seu próprio. |
--stale-after DURATION | string | não | conforme o tipo | Por quanto tempo o card mantém os últimos dados bons quando a fonte não consegue atualizar, de 1m a 7d, pelo menos o dobro de --refresh; none os mantém até a próxima atualização. Depois, os dados expiram em todas as telas. momentus é 30m por padrão. |
--disabled | boolean | não | desligado | Cria a fonte parada; nada é buscado até 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#
Altera uma fonte. Uma alteração que não seja renomear zera o contador de falhas e a executa de novo.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<source_id> | string | sim | nenhum | A fonte (src_…). |
--name NAME | string | não | inalterado | Renomeia a fonte. |
--card CARD_ID | string | não | inalterado | Gravar outro cartão. |
--settings SETTINGS | string | não | inalterado | Altera uma configuração de nível superior entre as salvas. Repetível. Para uma fonte criada a partir de uma predefinição, um campo da predefinição; o valor null remove um campo opcional. |
--connection-id ID | string | não | inalterado | Como em source create. Tirar uma fonte de suas credenciais próprias exige --settings sem tenant e client_id, e --unset-secret client_secret. |
--set KEY=VALUE | string | não | nenhum | Altera uma configuração de nível superior das salvas. Repetível. |
--secret NAME=VALUE | string | não | nenhum | Define ou substitui um segredo. Repetível. Um segredo que você não envia mantém o valor, a menos que a alteração aponte a fonte para algo que esse segredo não cobre (outra origem, loja, ambiente ou locatário): então source_secret_required o pede de novo. |
--unset-secret NAME | string | não | nenhum | Remove um segredo. Repetível. |
--refresh DURATION | string | não | inalterado | De 30s a 24h; vale o mínimo do tipo. |
--stale-after DURATION | string | não | inalterado | Como em source create; none remove o período. |
--enable, --disable | boolean | não | inalterado | Retoma o horário ou o interrompe; o cartão mantém o último documento. No máximo um dos dois. |
--expect-rev REVISION | integer | não | a revisão lida | Recusa a alteração a menos que a fonte esteja nesta revisão. --set protege a revisão que leu, a menos que você nomeie outra. |
Pelo menos uma alteração é obrigatória.
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#
Pré-visualiza uma fonte sem salvar nem gravar nada: busca o endereço, ajusta a resposta para o cartão e a confere com o cartão. O envelope traz o documento, valid, o caminho e o motivo quando o cartão o recusa, avisos e contagens. Passe um <source_id> salvo para testá-la com as outras opções como substituições, ou --kind (ou --preset) e --card para testar uma que não está salva. Uma falha de busca ou de ajuste é source_test_failed com o motivo. No máximo 30 pré-visualizações por minuto por organização.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<source_id> | string | não | nenhum | Uma fonte salva para testar. |
--kind KIND | string | sem <source_id> ou --preset | nenhum | Como em source create. |
--preset NAME | string | não | nenhum | Pré-visualiza uma fonte criada a partir desta predefinição, com --set e --settings como campos e --secret como credenciais, em vez de --kind. |
--card CARD_ID | string | sem <source_id> | nenhum | O cartão a preencher. |
--settings SETTINGS | string | não | as configurações salvas | As configurações do tipo: JSON, @FILE ou - para a entrada padrão. |
--connection-id ID | string | não | nenhum | Como em source create. |
--set KEY=VALUE | string | não | nenhum | Uma configuração de nível superior. Repetível. |
--secret NAME=VALUE | string | não | os segredos salvos | Uma credencial para testar. Repetível. |
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 uma fonte agora e mostra o resultado. Ela é executada em linha por até 60 segundos, zera o contador de falhas e lê o endereço por inteiro. Uma sincronização que falha nunca altera o cartão. source_busy (código de saída 5) responde enquanto uma sincronização agendada está em andamento. No máximo 6 por minuto por fonte.
source refresh <source_id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<source_id> | string | sim | nenhum | A fonte (src_…). |
screenrig source refresh src_01EXAMPLESOURCE000000source rooms#
Verifica como as telas são mapeadas para as salas de uma fonte de sistema de reservas (momentus). Lê as salas da última atualização boa da fonte e as telas do projeto, e não busca nada. Lista as salas que nenhuma tela mostra e cada tela que tem um valor de sala ou cuja playlist lê a chave de sala da fonte, cada uma mapped, missing (a playlist lê o campo e a tela não tem nenhum) ou unknown (o valor não nomeia nenhuma sala, com a sala que provavelmente se quis dizer). Corrija uma tela com screen update scr_ID --field room=ROOM_KEY.
source rooms <source_id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<source_id> | string | sim | nenhum | Uma fonte (src_…) que lê as salas de um sistema de reservas. |
screenrig source rooms src_01EXAMPLESOURCE000000source delete#
Exclui uma fonte. O cartão mantém o último documento que a fonte gravou.
source delete <source_id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<source_id> | string | sim | nenhum | A fonte (src_…). |
--expect-rev REVISION | integer | não | nenhum | Recusa a exclusão a menos que a fonte esteja nesta revisão. |
screenrig source delete src_01EXAMPLESOURCE000000Conexões
Uma conexão é o acesso salvo do projeto à Microsoft ou ao Google para trabalho que roda sem ninguém logado. Uma fonte de dados microsoft365 ou google_calendar (source create --connection-id), uma conexão do Power BI (bi connection create powerbi --connection-id) e uma conta de sincronização de mídia do SharePoint (media sync account add microsoft365 --connection-id) leem por meio de uma conexão, em vez de cada uma levar um tenant, um ID de cliente e um segredo. Um ID de conexão começa com pcn_, e uma organização tem até 50 conexões em todos os seus projetos. Os modos, os status e as etapas de aprovação estão em Conecte a Microsoft e o Google.
O modo own_app guarda seu próprio aplicativo: para a Microsoft, um registro de aplicativo do Microsoft Entra (--tenant-id, --client-id e o Valor de um segredo de cliente); para o Google, a chave JSON de uma conta de serviço. O modo screenrig_app usa o aplicativo próprio do screenRIG e não precisa de segredo: create imprime um link de consentimento de uso único (data.consent_url, com expiração em data.consent_expires_at) para a pessoa que o conclui, um administrador do Microsoft 365 que consente pelo tenant, ou o titular de uma conta do Google que concede acesso somente leitura à agenda. Envie o link somente a essa pessoa e depois leia status e last_error com connection show. Uma conexão do Power BI aceita apenas uma conexão own_app.
Informe um segredo de cliente com --secret-file FILE e uma chave do Google com --service-account-key-file FILE, ou - para stdin, nunca como argumento. A leitura exige acesso Read, e toda alteração exige acesso Manage.
connection list#
Lista as conexões deste projeto com o status delas.
connection listSem parâmetros.
screenrig connection listconnection show#
Inspeciona uma conexão: seu status, o último erro e o último teste.
connection show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (pcn_…). |
screenrig connection show pcn_01EXAMPLECONNECTION0000connection create microsoft#
Adiciona uma conexão do Microsoft 365: seu próprio aplicativo do Entra ou o aplicativo do screenRIG com um link de consentimento.
connection create microsoft --mode own_app|screenrig_app [--name NAME]
[--tenant-id ID --client-id ID --secret-file FILE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--mode MODE | string | sim | nenhum | own_app: seu próprio registro de aplicativo do Microsoft Entra com um segredo de cliente. screenrig_app: o aplicativo do screenRIG, ao qual um administrador do Microsoft 365 dá consentimento pelo link de uso único que este comando imprime. |
--name NAME | string | não | Microsoft 365 | 1 a 80 caracteres. |
--tenant-id ID | string | com own_app | nenhum | O ID do diretório (tenant) do seu Microsoft Entra, ou o domínio primário dele, como contoso.onmicrosoft.com. Junto com --client-id e --secret-file. |
--client-id ID | string | com own_app | nenhum | O ID do aplicativo (cliente) do registro de aplicativo. |
--secret-file FILE | string | com own_app | nenhum | Lê o Valor do segredo de cliente deste arquivo, ou - para stdin (nunca como argumento); o arquivo contém apenas o 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"O modo screenrig_app não aceita nenhum entre --tenant-id, --client-id e --secret-file: imprime o link de consentimento (data.consent_url) para o administrador do Microsoft 365, que dá consentimento ao aplicativo do screenRIG para o tenant. O registro do aplicativo lista Calendars.Read para agendas de salas de reunião, Sites.Selected ou Files.Read.All para a sincronização de mídia do SharePoint e, para o Power BI, configurações do tenant e associação ao workspace em vez de permissões do Graph; connection test informa quais permissões o token carrega. Um servidor sem o aplicativo do screenRIG responde connection_app_not_configured: o modo own_app continua funcionando.
connection create google#
Adiciona uma conexão do Google: a chave da sua própria conta de serviço ou o aplicativo do screenRIG com um link de login.
connection create google --mode own_app|screenrig_app [--name NAME]
[--service-account-key-file FILE]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--mode MODE | string | sim | nenhum | own_app: a chave da sua própria conta de serviço. screenrig_app: o aplicativo do screenRIG, no qual o titular de uma conta do Google faz login e concede acesso somente leitura à agenda pelo link de uso único que este comando imprime. |
--name NAME | string | não | Google Calendar | 1 a 80 caracteres. |
--service-account-key-file FILE | string | com own_app | nenhum | Lê o arquivo de chave JSON da conta de serviço deste arquivo, ou - para stdin (nunca como argumento). |
screenrig connection create google --mode own_app --service-account-key-file key.json
screenrig connection create google --mode screenrig_app --name "Venue calendars"No modo own_app, compartilhe cada agenda de sala com o endereço da conta de serviço, ou dê à fonte um subject (delegação em todo o domínio). O modo screenrig_app não aceita chave e imprime o link de login (data.consent_url) para o titular da conta do Google: a conta deve ver todas as agendas de sala que uma fonte lista, e essa fonte não pode nomear um subject. Um servidor sem o aplicativo do screenRIG responde connection_app_not_configured: o modo own_app continua funcionando.
connection update#
Renomeia uma conexão ou, no modo own_app, altera o tenant, o aplicativo ou o segredo dela.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (pcn_…). |
--name NAME | string | não | inalterado | Renomeia a conexão. |
--tenant-id ID | string | não | inalterado | Microsoft own_app: o ID do diretório (tenant) ou o domínio primário. |
--client-id ID | string | não | inalterado | Microsoft own_app: o ID do aplicativo (cliente). |
--secret-file FILE | string | não | inalterado | Microsoft own_app: lê o Valor do segredo de cliente deste arquivo, ou - para stdin; ele substitui o segredo armazenado. |
--service-account-key-file FILE | string | não | inalterado | Google own_app: lê a chave JSON da conta de serviço deste arquivo, ou - para stdin; ela substitui a chave armazenada. |
--expect-rev REVISION | integer | não | nenhum | Recusa a alteração a menos que a conexão esteja nesta revisão (revision_conflict, código de saída 6). |
screenrig connection update pcn_01EXAMPLECONNECTION0000 --secret-file new-secret.txt
screenrig connection update pcn_01EXAMPLECONNECTION0000 --name "Contoso rooms" --expect-rev 2Pelo menos uma alteração é obrigatória. Uma alteração nas credenciais leva a conexão de volta a ready, limpa o último erro e o último teste e invalida todo token emitido para as credenciais antigas: teste-a de novo. Uma conexão screenrig_app só pode ser renomeada: connection connect cria um novo link de consentimento para mudar quem deu o consentimento. Um segredo omitido é mantido.
connection test#
Faz login com uma conexão e verifica o que as credenciais dela permitem.
connection test <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (pcn_…). |
screenrig connection test pcn_01EXAMPLECONNECTION0000Para a Microsoft, informa credentials (um token de aplicativo para o tenant) e permissions (quais entre Calendars.Read, Sites.Selected, Files.Read.All, Sites.Read.All e Place.Read.All o token carrega; sem nenhuma, a verificação falha, e Sites.Selected sozinha é um aviso, porque cada site precisa de sua própria concessão). Para o Google, informa credentials, nomeando a conta para a qual as agendas devem estar visíveis. Uma recusa move a conexão para error com last_error; um sucesso a devolve a ready. O teste não avalia o compartilhamento de uma agenda, uma política de acesso a caixas de correio nem a concessão de um site. No máximo 30 por minuto por organização.
connection connect#
Cria um novo link de consentimento de uso único para uma conexão screenrig_app.
connection connect <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (pcn_…). |
screenrig connection connect pcn_01EXAMPLECONNECTION0000data.consent_url é o link para a pessoa que conclui o consentimento: o administrador do Microsoft 365 ou o titular da conta do Google. Ele substitui qualquer link anterior. Uma conexão que funciona permanece como está até que o novo consentimento seja concluído, então isto também renova uma que passou a error (consentimento removido, acesso revogado) ou a move para outro tenant ou conta. Uma conexão no modo own_app não tem etapa de consentimento. No máximo 20 por minuto por organização.
connection delete#
Exclui uma conexão pela qual nada lê.
connection delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (pcn_…). |
--expect-rev REVISION | integer | não | nenhum | Recusa a exclusão a menos que a conexão esteja nesta revisão (revision_conflict, código de saída 6). |
screenrig connection delete pcn_01EXAMPLECONNECTION0000
screenrig connection delete pcn_01EXAMPLECONNECTION0000 --expect-rev 2Enquanto uma fonte de dados, uma conexão do Power BI ou uma conta de sincronização de mídia lê por meio da conexão, a resposta é resource_conflict (código de saída 5), nomeando-as. Excluir não encerra o lado do fornecedor: um tenant do Microsoft 365 mantém o aplicativo do screenRIG até que seu administrador o remova, e uma conta do Google mantém sua concessão até que seu titular a revogue.
Conexões de BI
Uma conexão de BI é o acesso do projeto a um sistema que ele possui e que mostra dashboards: para o Grafana, o endereço dele e um token de conta de serviço; para o Power BI, um aplicativo do Microsoft Entra (service principal) e seu segredo de cliente; para o Tableau, um aplicativo conectado e um usuário; e, para uma página web, a conta de serviço de um site que mostra um dashboard atrás de um login, ou os cookies de um navegador logado. Um ID de conexão começa com bic_. Os segredos são selados no servidor e nunca são mostrados de novo: uma leitura mostra secret {set, hint}. As conexões pertencem a um projeto. bi connection list, show e browse exigem acesso Read, e todos os outros comandos exigem acesso Manage.
Informe um segredo em um arquivo: --token-file para o Grafana, --secret-file para o Power BI e o Tableau, --password-file, --totp-file e --cookies-file para uma página web. Cada um aceita - para stdin, nunca como argumento, e no máximo uma opção de um comando lê stdin.
Uma visualização reproduz um dashboard, relatório ou página de uma conexão por meio de uma primitiva iframe que mostra seu embed_url; bi view create --connection-id ID cria uma. Mostrar um dashboard atrás de um login percorre uma conexão web, e a Referência da API cobre todos os tipos.
bi connection create grafana#
Adiciona uma conexão do Grafana: o endereço dele e um token de conta de serviço.
bi connection create grafana --url URL --token-file FILE [--name NAME] [--org-id N]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--url URL | string | sim | nenhum | O endereço do Grafana em um host público, com qualquer prefixo de caminho: https://grafana.example.com ou https://example.com/grafana. Um endereço privado, de loopback ou reservado é invalid_request (código de saída 8), e o Grafana deve responder sem redirecionar. |
--token-file FILE | string | sim | nenhum | Lê o token da conta de serviço deste arquivo, ou - para stdin (nunca como argumento); o arquivo contém apenas o token. |
--name NAME | string | não | o nome do host | 1 a 80 caracteres. |
--org-id N | integer | não | 1 | A organização do Grafana a que o token pertence: um número inteiro a partir de 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 2No Grafana, instale o plugin Grafana Image Renderer ou o serviço de renderização remota (ele desenha dashboards como imagens; sem ele, nada é renderizado) e depois crie uma conta de serviço com a função Viewer e adicione um token. Execute bi connection test em seguida.
bi connection create tableau#
Adiciona uma conexão do Tableau: um aplicativo conectado (direct trust), o usuário com o qual as visualizações das telas são exibidas e o valor do segredo do aplicativo.
bi connection create tableau --url URL --client-id ID --secret-id ID --username USER
--secret-file FILE [--site SITE] [--name NAME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--url URL | string | sim | nenhum | O endereço https do Tableau Server, ou do seu pod do Tableau Cloud, como https://10ay.online.tableau.com (o pod, não online.tableau.com). |
--site SITE | string | não | o site padrão do Tableau Server | A URL de conteúdo do site, a parte depois de /site/ ou /t/ no endereço de uma visualização. |
--client-id ID | string | sim | nenhum | O ID de cliente do aplicativo conectado. |
--secret-id ID | string | sim | nenhum | O ID do segredo de um segredo gerado para o aplicativo conectado. |
--username USER | string | sim | nenhum | O usuário do Tableau com o qual as visualizações das telas são exibidas (um endereço de e-mail no Tableau Cloud). |
--secret-file FILE | string | sim | nenhum | Lê o valor do segredo deste arquivo, ou - para stdin (nunca como argumento); o arquivo contém apenas o valor do segredo, não o ID do segredo. |
--name NAME | string | não | o nome do host | 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.txtConfigure uma vez no Tableau: em Settings, Connected Apps, crie um aplicativo conectado Direct trust, copie o ID de cliente dele, gere um segredo e copie o ID do segredo e o valor do segredo, e ative o aplicativo e o segredo. Escolha ou crie o usuário do Tableau com o qual as telas exibem as visualizações e dê a ele acesso apenas às visualizações que as telas exibem: quem tiver o ticket de uma tela pode incorporar qualquer visualização que esse usuário possa ver. Depois execute bi connection show ID e informe o host de embed_origin na lista de domínios permitidos do aplicativo conectado. Exige o Tableau Cloud ou o Tableau Server 2023.3 ou posterior; as telas devem alcançar o host do Tableau, e o navegador delas deve aceitar cookies de terceiros dele. Execute bi connection test em seguida e depois bi connection browse para encontrar uma visualização.
bi connection create powerbi#
Adiciona uma conexão do Power BI: um aplicativo do Microsoft Entra (service principal) e seu segredo de cliente, ou uma conexão da Microsoft deste projeto.
bi connection create powerbi
(--tenant-id ID --client-id ID --secret-file FILE | --connection-id ID) [--name NAME]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--tenant-id ID | string | sem --connection-id | nenhum | O ID do diretório (tenant) do seu Microsoft Entra, ou o domínio dele, como contoso.onmicrosoft.com; não common, organizations ou consumers. Junto com --client-id e --secret-file. |
--client-id ID | string | sem --connection-id | nenhum | O ID do aplicativo (cliente) do registro de aplicativo. |
--secret-file FILE | string | sem --connection-id | nenhum | Lê o Valor do segredo de cliente deste arquivo, ou - para stdin (nunca como argumento); o arquivo contém apenas o valor do segredo, não o ID do segredo. |
--connection-id ID | string | sem --tenant-id | nenhum | Faz login por meio de uma conexão da Microsoft (pcn_…) deste projeto no modo own_app, em vez de --tenant-id, --client-id e --secret-file. Uma conexão screenrig_app é recusada. Não com eles. |
--name NAME | string | não | Power BI | 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"Configure uma vez. No Microsoft Entra, crie um registro de aplicativo (locatário único, sem redirect URI, sem permissões de API) e um segredo de cliente. Um administrador do Power BI ativa, no portal de administração, em Tenant settings, Developer settings, Embed content in apps e Service principals can call Fabric public APIs, para toda a organização ou para um grupo de segurança que contenha o aplicativo. Adicione o aplicativo a cada workspace que você exibe com a função de Membro ou Administrador; Membro é o menor acesso. Para incorporação em produção, o workspace deve estar em uma capacidade Fabric (F), Power BI Embedded (A) ou Premium (P/EM). Somente nuvem comercial. Execute bi connection test em seguida e depois bi connection browse para encontrar um workspace e um relatório.
bi connection create web#
Adiciona uma conexão web: uma conta de serviço de um site que mostra um dashboard atrás de um login, ou os cookies de um navegador logado.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--login-mode MODE | string | sim | nenhum | auto preenche o formulário em --login-url com --username e a senha. steps executa o script de --steps. none não faz login em nada, então as páginas aparecem com o conjunto de cookies de --cookies-file e não aceita nenhum entre --login-url, --username, --password-file, --totp-file ou --steps. |
--login-url URL | string | com auto ou steps | nenhum | O endereço https da página de login do site, em um host público. A senha é digitada apenas ali e nos passos goto do script, nunca no endereço de uma visualização. |
--username USER | string | com auto | nenhum | O nome de usuário da conta de serviço. |
--password-file FILE | string | com auto | nenhum | Lê a senha da conta de serviço deste arquivo, ou - para stdin (nunca como argumento): espaços são permitidos, e uma quebra de linha final é descartada. |
--totp-file FILE | string | não | nenhum | Lê a chave base32 que o site mostra para o aplicativo autenticador da conta (de 16 a 128 caracteres), ou o endereço otpauth://totp dela, deste arquivo ou de -: o servidor calcula os códigos. |
--steps FILE | string | com steps | nenhum | O script de login, um array JSON de no máximo 30 passos, de um arquivo ou de -. Ações: goto (url), fill (selector, value), click e wait_for (selector), press (value como Enter, selector opcional) e wait_ms (ms). Um valor pode conter {{username}}, {{password}} e {{otp}}, nunca o próprio segredo. Não com auto. |
--cookies-file FILE | string | não | nenhum | Um conjunto de cookies exportado de um navegador logado: um array JSON de cookies (a exportação de uma extensão de cookies) ou um objeto com um array cookies (o storage state do Playwright), de um arquivo ou de -; no máximo 100. Apenas name, value, domain, path, expires, httpOnly, secure e sameSite são enviados. |
--name NAME | string | não | o host de login | 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"A senha, a chave e os cookies são selados e nunca são mostrados de novo: data.secret e data.totp_secret dizem se estão definidos, e data.session diz em que pé está o login (idle, active, login_needed, paused, stopped ou expired). Use uma conta de serviço somente leitura. Um login recusado espera 5 minutos, depois 15, 60 e 120, e o quinto seguido interrompe a conexão até que suas credenciais ou configurações de login mudem. Um site que aprova logins no celular, verifica dispositivos ou mostra um CAPTCHA não pode ser automatizado: use um conjunto de cookies. Um servidor sem o renderizador de páginas responde bi_web_unavailable (código de saída 5). Execute bi connection test em seguida.
bi connection list#
Lista as conexões de BI deste projeto com o tipo, o segredo mascarado e o último teste de cada uma.
bi connection listSem parâmetros.
screenrig bi connection listdata.items contém todas as conexões do projeto; nenhum segredo é devolvido.
bi connection show#
Inspeciona uma conexão e o último teste dela.
bi connection show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (bic_…). |
screenrig bi connection show bic_01EXAMPLECONNECTION0000A resposta traz kind, config (url e org_id para o Grafana; tenant_id e client_id para o Power BI; url, site, client_id, secret_id e username para o Tableau), secret {set, hint}, embed_origin (o host de incorporação do projeto, que a lista de domínios permitidos de um aplicativo conectado cita) e last_test.
bi connection update#
Altera o nome, o endereço, a organização, o tenant, o aplicativo, o site, o usuário ou o segredo de uma conexão ou, em uma conexão web, o login e os cookies dela.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (bic_…). |
--name NAME | string | não | inalterado | Renomeia a conexão. |
--url URL | string | não | inalterado | O novo endereço do Grafana, ou do servidor ou pod do Tableau. |
--org-id N | integer | não | inalterado | A organização do Grafana a que o token pertence. |
--tenant-id ID | string | não | inalterado | O tenant do Microsoft Entra da conexão do Power BI. |
--client-id ID | string | não | inalterado | O ID do aplicativo (cliente) da conexão do Power BI, ou o ID de cliente do aplicativo conectado do Tableau. |
--site SITE | string | não | inalterado | A URL de conteúdo do site da conexão do Tableau. Não com --default-site. |
--default-site | boolean | não | desligado | Tableau Server: faz login no site padrão. Não com --site. |
--secret-id ID | string | não | inalterado | O ID do segredo do aplicativo conectado do Tableau. |
--username USER | string | não | inalterado | O usuário do Tableau com o qual as visualizações das telas são exibidas, ou a conta de serviço da conexão web. |
--token-file FILE | string | não | inalterado | Grafana: lê o token da conta de serviço deste arquivo, ou - para stdin; ele substitui o token armazenado. No máximo um entre --token-file, --secret-file, --password-file e --clear-password. |
--secret-file FILE | string | não | inalterado | Power BI ou Tableau: lê o valor do segredo deste arquivo, ou - para stdin; ele substitui o segredo armazenado. |
--login-mode MODE | string | não | inalterado | Web: como faz login, auto, steps ou none. |
--login-url URL | string | não | inalterado | Web: o endereço https da página de login do site. Uma nova origem exige --password-file no mesmo comando, para que a senha armazenada nunca seja enviada a uma página que você não indicou. |
--password-file FILE | string | não | inalterado | Web: lê a senha da conta de serviço deste arquivo, ou - para stdin; ela substitui a senha armazenada. |
--clear-password | boolean | não | desligado | Web: remove a senha armazenada. |
--totp-file FILE | string | não | inalterado | Web: lê a chave do autenticador deste arquivo, ou - para stdin; ela substitui a chave armazenada. Não com --clear-totp. |
--clear-totp | boolean | não | desligado | Web: remove a chave do autenticador armazenada. Não com --totp-file. |
--steps FILE | string | não | inalterado | Web: substitui o script de login, um array JSON de no máximo 30 passos, de um arquivo ou de -. |
--cookies-file FILE | string | não | inalterado | Web: substitui o conjunto de cookies por um exportado de um navegador logado, de um arquivo ou de - (os formatos que bi connection create web aceita). Não com --clear-cookies. |
--clear-cookies | boolean | não | desligado | Web: remove o conjunto de cookies armazenado. Não com --cookies-file. |
--expect-rev REVISION | integer | não | nenhum | Recusa a alteração a menos que a conexão esteja nesta revisão (revision_conflict, código de saída 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 2Pelo menos uma alteração é obrigatória, e um segredo omitido é mantido. Um novo endereço em outro host, esquema ou porta exige --token-file (Grafana) ou --secret-file (Tableau) no mesmo comando: o segredo armazenado só é enviado ao endereço para o qual foi salvo. Um novo endereço, organização, tenant, aplicativo, site, usuário ou segredo limpa last_test e invalida toda renderização em cache das visualizações da conexão: teste-a de novo. Uma alteração de credenciais ou das configurações de login retoma uma sessão web interrompida.
bi connection test#
Verifica as credenciais: o token e o Image Renderer do Grafana, o aplicativo do Power BI e seus workspaces, ou o login do Tableau.
bi connection test <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (bic_…). |
screenrig bi connection test bic_01EXAMPLECONNECTION0000Grafana: token (o Grafana o aceita) e image_renderer (o plugin está listado; o Grafana sem ele só avisa, porque um serviço de renderização remota não aparece como plugin). Power BI: token (o Microsoft Entra emitiu um para o aplicativo) e workspaces (os workspaces que o aplicativo pode ver; sem nenhum, a verificação falha, e uma recusa nomeia as configurações de desenvolvedor do tenant e a função de Membro ou Administrador do aplicativo no workspace). Tableau: signin como o usuário da conexão com um token de leitura de conteúdo, seguido do encerramento da sessão. Uma recusa é uma verificação que falhou e traz a resposta do próprio fornecedor, e o resultado é armazenado como last_test. O teste não avalia a lista de domínios permitidos do Tableau, a capacidade, a segurança em nível de linha nem as permissões de um dashboard: bi view test verifica uma visualização de verdade.
bi connection browse#
Lista o que uma conexão pode mostrar: dashboards e painéis do Grafana, workspaces e relatórios do Power BI, ou visualizações do Tableau.
bi connection browse <id> [--query TEXT] [--dashboard UID] [--workspace ID]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (bic_…). |
--query TEXT | string | não | nenhum | Apenas dashboards, workspaces, relatórios ou visualizações cujo nome corresponde. |
--dashboard UID | string | não | nenhum | Grafana: lista os painéis deste dashboard no lugar dos dashboards. |
--workspace ID | string | não | nenhum | Power BI: lista os relatórios deste workspace no lugar dos workspaces. |
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 o Grafana, uid, title, folder e tags de cada dashboard que o token pode mostrar, ou, com --dashboard, id, title e type de seus painéis (as linhas são achatadas, então um painel dentro de uma linha recolhida é listado); para o Power BI, id e name de cada workspace que o aplicativo pode ver, ou, com --workspace, id, name e embed_url de seus relatórios; para o Tableau, path, como Workbook/View, e name de cada visualização que o usuário da conexão pode ver. Use esses valores com bi view create.
bi connection delete#
Exclui uma conexão que nenhuma visualização usa.
bi connection delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A conexão (bic_…). |
--expect-rev REVISION | integer | não | nenhum | Recusa a exclusão a menos que a conexão esteja nesta revisão (revision_conflict, código de saída 6). |
screenrig bi connection delete bic_01EXAMPLECONNECTION0000Enquanto visualizações a usam, a resposta é resource_conflict (código de saída 5), nomeando-as: exclua essas visualizações primeiro.
Visualizações de BI
Uma visualização é um dashboard ou painel de uma conexão do Grafana, um relatório de um workspace do Power BI, uma visualização de um site do Tableau, uma página de uma conexão web, ou um link público que não precisa de conexão: um dashboard público do Grafana, um link Publish to web do Power BI ou uma visualização do Tableau Public. Um ID de visualização começa com biv_, e uma visualização só é reproduzida nas telas do próprio projeto.
Coloque o embed_url da visualização em uma primitiva iframe com content_fit fill e publique como de costume: a playlist não guarda nenhuma credencial. As visualizações do Grafana e web são desenhadas no servidor como uma imagem a cada --refresh e compartilhadas por todas as telas do mesmo tamanho, então dez telas de um saguão geram uma única renderização e a tela nunca fala com o sistema; a última imagem boa permanece na tela enquanto uma captura falha. Um relatório do Power BI e uma visualização do Tableau são incorporados com um token somente de visualização que o servidor gera e renova, e a tela nunca guarda o segredo. Uma imagem só é desenhada enquanto o manifesto de uma tela nomeia a visualização.
A leitura exige acesso Read, e toda alteração exige acesso Manage. Cada opção de destino pertence a um tipo de conexão, e bi connection browse ID lista os valores a usar.
bi view create#
Adiciona uma visualização de um dashboard, painel, relatório ou visualização do Tableau de uma conexão, ou de um link 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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--connection-id ID | string | sem --public-url | nenhum | A conexão (bic_…) da qual mostrar algo. |
--url URL | string | um destino | nenhum | Um endereço de dashboard no host do Grafana da conexão, um endereço de relatório do Power BI, um endereço de visualização do Tableau ou, para uma conexão web, o endereço https da página em um host público. O restante do destino é lido a partir dele. |
--dashboard UID | string | um destino | nenhum | Grafana: o uid do dashboard, a parte depois de /d/ no endereço dele. |
--workspace ID | string | um destino | nenhum | Power BI: o ID do workspace, com --report. |
--report ID | string | com --workspace | nenhum | Power BI: o ID do relatório, com --workspace. |
--view WORKBOOK/VIEW | string | um destino | nenhum | Tableau: a visualização, os nomes depois de /views/ no endereço dela (bi connection browse os lista). |
--public-url URL | string | um destino | nenhum | Um link de dashboard público do Grafana, um link Publish to web do Power BI ou um endereço de visualização do Tableau Public. Não precisa de conexão e é reproduzido ao vivo a partir do host dele. Informe-o sozinho, com --name, --refresh, --fit e --rotate-sheets. |
--name NAME | string | não | do destino | 1 a 80 caracteres. |
--refresh DURATION | string | não | 5m | Grafana: com que frequência a imagem é desenhada de novo, de 30s a 24h. Web: com que frequência a página é desenhada de novo, de 60s a 24h. Power BI e Tableau: com que frequência o relatório ou a visualização atualiza seus dados, de 60s a 24h, ou 0 para nenhuma. |
--fit FIT | string | não | contain | Grafana e web: como a imagem preenche a tela, contain, cover ou fill. |
--rotate DURATION | string | não | nenhum | Power BI: por quanto tempo cada página aparece, de 10s a 1h; necessário com duas ou mais opções --page ou com --all-pages. Tableau: por quanto tempo cada planilha aparece; necessário com --rotate-sheets. |
--page NAME | string | não | nenhum | Power BI: uma página a mostrar, pelo nome ou pelo nome de exibição. Repetível; as páginas aparecem nesta ordem. |
--all-pages | boolean | não | desligado | Power BI: alterna entre todas as páginas visíveis, com --rotate. |
--rotate-sheets | boolean | não | desligado | Tableau: alterna as planilhas publicadas da pasta de trabalho, com --rotate. |
--panel ID | string | não | o dashboard inteiro | Grafana: mostra somente este painel em vez do dashboard inteiro. |
--from TIME | string | não | nenhum | Grafana: início do intervalo de tempo, como now-6h. |
--to TIME | string | não | nenhum | Grafana: fim do intervalo de tempo, como now. |
--var NAME=VALUE | string | não | nenhum | Grafana: uma variável do dashboard. Repetível. |
--theme THEME | string | não | dark | Tema do Grafana, dark ou light. |
--timezone ZONE | string | não | nenhum | Grafana: fuso horário do dashboard, como Europe/Paris, utc ou browser. |
--wait-for CSS | string | não | nenhum | Web: um seletor CSS de um elemento que aparece quando a página está pronta, e só quando está logada. A captura espera por ele e falha com bi_web_timeout quando ele nunca aparece. |
--wait-ms MS | integer | não | nenhum | Web: milissegundos a esperar depois que a página está pronta, para gráficos tardios, de 0 a 10000. |
--clip CSS | string | não | a página inteira | Web: um seletor CSS da parte da página a desenhar. |
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'Informe exatamente um destino: --url, --dashboard, --workspace com --report, --view ou --public-url. A resposta traz data.embed_url. Execute bi view test em seguida.
Grafana: --url lê orgId, viewPanel ou panelId, from, to, var-* e theme do endereço. A imagem é desenhada pelo serviço de renderização do Grafana e compartilhada por todas as telas do mesmo tamanho, e uma tela mantém a última imagem, com o horário da renderização em um canto, enquanto o Grafana está fora do ar. Um link de dashboard público é reproduzido ao vivo a partir do Grafana, que deve permitir a incorporação (allow_embedding = true nas configurações dele): bi view test verifica isso.
Power BI: --url aceita um endereço de relatório copiado do Power BI, https://app.powerbi.com/groups/WORKSPACE/reports/REPORT, com uma página /ReportSection opcional; ou informe --workspace e --report. Duas ou mais páginas exigem --rotate, e --rotate exige duas ou mais páginas ou --all-pages. --refresh 0 serve para um relatório DirectQuery ou com atualização automática de página, que se atualiza sozinho. --fit não se aplica. Um link Publish to web mostra o relatório a qualquer pessoa com o link e é reproduzido como o Power BI o serve, recarregado a cada --refresh, sem alternância de páginas.
Tableau: --url aceita um endereço de visualização copiado do Tableau, https://HOST/t/SITE/views/WORKBOOK/VIEW, o https://HOST/#/site/SITE/views/WORKBOOK/VIEW do Tableau Cloud, ou apenas WORKBOOK/VIEW; o endereço deve estar no host e no site da conexão. --rotate-sheets e --rotate precisam um do outro. --fit não se aplica. As telas devem alcançar o host do Tableau e aceitar os cookies de terceiros dele, e o embed_origin da visualização deve estar na lista de domínios permitidos do aplicativo conectado. Uma visualização do Tableau Public (--public-url https://public.tableau.com/app/profile/USER/viz/WORKBOOK/VIEW, ou seu endereço /views/) não precisa de conexão nem de token, e --rotate-sheets também funciona nela.
Web: --url é o endereço da página, e --wait-for, --wait-ms e --clip valem apenas para uma visualização web. A última imagem boa permanece na tela quando uma captura falha, e status.last_error diz o motivo: bi_web_login_failed, bi_web_otp_required, bi_web_session_expired, bi_web_login_paused, bi_web_timeout, bi_web_navigation_failed ou bi_web_blocked.
bi view list#
Lista as visualizações de BI deste projeto com o destino, a cadência e o status de cada uma.
bi view listSem parâmetros.
screenrig bi view listdata.items contém todas as visualizações do projeto, cada uma com seu embed_url.
bi view show#
Inspeciona uma visualização, seu embed_url e como ela se saiu na tela da última vez.
bi view show <id>| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A visualização (biv_…). |
screenrig bi view show biv_01EXAMPLEVIEW0000000000A resposta traz connection_id, target (view e rotate_sheets para o Tableau), refresh_s, rotate_s, fit, status e embed_url. status contém last_ok_at e last_error com um code e um detail: bi_upstream_refused quando o Grafana recusou o token, bi_upstream_unavailable quando não conseguiu renderizar.
bi view update#
Altera o nome, o destino, a cadência ou o ajuste de uma visualização.
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 | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A visualização (biv_…). |
--name NAME | string | não | inalterado | Renomeia a visualização. |
--url URL | string | não | inalterado | Um endereço de dashboard, relatório ou visualização do Tableau, ou o endereço da página de uma visualização web; substitui todo o destino. Não com as outras opções de destino. |
--dashboard UID | string | não | inalterado | Grafana: mostra este dashboard; substitui todo o destino. |
--workspace ID | string | não | inalterado | Power BI: mostra um relatório deste workspace, com --report; substitui todo o destino. |
--report ID | string | não | inalterado | Power BI: mostra este relatório, em --workspace ou no workspace atual. |
--view WORKBOOK/VIEW | string | não | inalterado | Tableau: mostra esta visualização; substitui todo o destino. |
--public-url URL | string | não | inalterado | Um link público; substitui todo o destino. |
--rotate-sheets | boolean | não | desligado | Tableau: alterna as planilhas publicadas da pasta de trabalho, com --rotate. |
--page NAME | string | não | inalterado | Power BI: as páginas a mostrar, pelo nome ou pelo nome de exibição. Repetível; substitui as páginas atuais. |
--all-pages | boolean | não | desligado | Power BI: alterna entre todas as páginas visíveis. |
--rotate DURATION | string | não | inalterado | Power BI: por quanto tempo cada página aparece, de 10s a 1h, ou 0 para uma página. Tableau: por quanto tempo cada planilha aparece, ou 0 para parar de alterná-las. |
--panel ID | string | não | inalterado | Grafana: mostra somente este painel. |
--from TIME | string | não | inalterado | Grafana: início do intervalo de tempo. |
--to TIME | string | não | inalterado | Grafana: fim do intervalo de tempo. |
--var NAME=VALUE | string | não | inalterado | Grafana: define uma variável do dashboard. Repetível; define uma variável e mantém as outras. |
--theme THEME | string | não | inalterado | Tema do Grafana, dark ou light. |
--timezone ZONE | string | não | inalterado | Grafana: fuso horário do dashboard. |
--refresh DURATION | string | não | inalterado | Com que frequência a imagem é desenhada de novo ou o relatório é atualizado: Grafana de 30s a 24h; web de 60s a 24h; Power BI e Tableau de 60s a 24h, ou 0 para nenhuma. |
--fit FIT | string | não | inalterado | Grafana e web: como a imagem preenche a tela, contain, cover ou fill. |
--wait-for CSS | string | não | inalterado | Web: o elemento que aparece quando a página está pronta e logada. Não com --clear-wait-for. |
--clear-wait-for | boolean | não | desligado | Web: deixa de esperar por um elemento. Não com --wait-for. |
--wait-ms MS | integer | não | inalterado | Web: milissegundos a esperar depois que a página está pronta, de 0 a 10000; 0 remove a espera. |
--clip CSS | string | não | inalterado | Web: a parte da página a desenhar. Não com --clear-clip. |
--clear-clip | boolean | não | desligado | Web: desenha a página inteira de novo. Não com --clip. |
--expect-rev REVISION | integer | não | nenhum | Recusa a alteração a menos que a visualização esteja nesta revisão (revision_conflict, código de saída 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/DetailPelo menos uma alteração é obrigatória. --url, --dashboard, --workspace e --public-url substituem todo o destino, enquanto --panel, --from, --to, --var, --theme e --timezone alteram o destino atual do Grafana da visualização, --report, --page e --all-pages o do Power BI, e --view e --rotate-sheets o do Tableau. --page substitui a lista de páginas; para limpá-la, informe --workspace e --report de novo com --rotate 0. --rotate 0 sozinho impede que uma visualização do Tableau alterne suas planilhas. Um novo destino limpa o status e invalida suas renderizações em cache, e as telas assumem a alteração na próxima atualização, sem republicação. Uma visualização mantém sua conexão e seu tipo.
bi view test#
Verifica uma visualização de verdade: uma renderização do Grafana, um token de incorporação do Power BI, uma consulta do Tableau ou um link público.
bi view test <id> [--output FILE [--width PIXELS] [--height PIXELS]]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A visualização (biv_…). |
--output FILE | string | não | nenhum | Grafana: salva aqui o PNG renderizado em vez de executar as verificações. |
--width PIXELS | integer | não | 1920 | Largura da imagem salva, de 1 a 10000. Precisa de --output. |
--height PIXELS | integer | não | 1080 | Altura da imagem salva, de 1 a 10000. Precisa de --output. |
screenrig bi view test biv_01EXAMPLEVIEW0000000000
screenrig bi view test biv_01EXAMPLEVIEW0000000000 --output lobby.png --width 1920 --height 1080Grafana: uma visualização de conexão é renderizada de verdade, fora do cache compartilhado e sem alterar o status da visualização. data.ok é false com o motivo do Grafana quando ele recusa o token, não tem renderizador ou não conhece o dashboard; um teste que falha é dado, código de saída 0. Abra o PNG salvo e confira antes de publicar. Para um link público, o teste busca a página e verifica se o Grafana permite que a página de incorporação da visualização a exiba em um frame.
Tableau: uma visualização de conexão faz login como o usuário da conexão e procura a visualização (signin, view); uma visualização que o usuário não pode ver, ou um nome com maiúsculas e minúsculas erradas, é uma verificação view que falhou e nomeia o caminho. Uma visualização do Tableau Public pergunta ao Tableau Public se a pasta de trabalho existe. Power BI: uma visualização de conexão lê o relatório (report) e gera para ele um token de incorporação real somente de visualização (embed_token); o motivo do próprio Power BI é mostrado quando ele recusa, como um conjunto de dados com segurança em nível de linha, um 401 ou 403 (configuração do tenant ou função no workspace) ou um relatório que o aplicativo não pode ver. Um link Publish to web é buscado e seus cabeçalhos de enquadramento são lidos.
O teste não avalia o que a imagem mostra, as páginas que a visualização nomeia, a capacidade nem a lista de domínios permitidos do Tableau.
bi view delete#
Exclui uma visualização.
bi view delete <id> [--expect-rev REVISION]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<id> | string | sim | nenhum | A visualização (biv_…). |
--expect-rev REVISION | integer | não | nenhum | Recusa a exclusão a menos que a visualização esteja nesta revisão (revision_conflict, código de saída 6). |
screenrig bi view delete biv_01EXAMPLEVIEW0000000000
screenrig bi view delete biv_01EXAMPLEVIEW0000000000 --expect-rev 3Uma tela que ainda exibe o embed_url da visualização responde not_found até a playlist mudar.
Conversas de suporte
Cada plano, incluindo Standard, inclui suporte por IA via CLI e o botão amarelo Suporte no dashboard no canto inferior direito, e Premium, Education e Enterprise podem pedir uma pessoa. As conversas mantêm seu histórico. O dashboard destaca respostas não lidas da equipe e renderiza Markdown, incluindo links clicáveis, listas e código. Pressione Enter para enviar ou Shift+Enter para nova linha. Respostas da equipe mostram primeiro nome e avatar do Slack quando disponível, com equipe ScreenRIG e logo screenRIG como fallback; clientes usam avatar genérico de pessoa.
Use a documentação e seu agente operacional para diagnosticar e resolver problemas. Use feedback bug ou feedback feature para enviar relatórios.
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 IDComece com support status, que informa chat_allowed (este projeto pode iniciar ou continuar uma conversa), human_available (uma pessoa pode entrar a pedido), staffed (a equipe está em seu horário agora) e hours (as horas de atendimento). support submit aceita uma mensagem de 1 a 4000 caracteres. Omitir --conversation-id para iniciar conversa; use o data.conversation.id retornado para seguimentos. Mantenha a mesma chave de idempotência ao tentar um envio incerto.
Páginas de histórico contêm até 100 linhas. Passe a data.next de uma página de conversa como --before para conversas mais antigas, ou a última sequência de mensagens como --after para mensagens mais novas. support follow transmite respostas como SSE, retoma da última sequência do projeto e suprime a reprodução. Um filtro de conversa seleciona quais respostas imprime enquanto avança o cursor do projeto. support read reconhece respostas da equipe até a sequência que você leu. Encerre uma conversa resolvida com support close ou o botão Encerrar conversa do painel. Fechar mantém seu histórico; inicie uma nova conversa para mais ajuda.
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, a assistente de IA, responde na hora em todos os planos. Uma pessoa entra em uma conversa a pedido apenas em Education, Premium e Enterprise (human_available), e pedir uma pessoa pausa a IA nessa conversa; no Standard e no Plus o pedido é ignorado e Luna responde. O horário da equipe é das 09:00 às 17:00 de segunda a sexta, horário de Vancouver, excluindo feriados oficiais de B.C., e só determina quando uma pessoa responde. Mantenha credenciais fora das mensagens de suporte.
Feedback
Relatórios de bugs e solicitações de recursos são vinculados ao projeto e imutáveis. O tipo vem do comando, nunca de um campo do corpo, e uma correção é um novo envio, não uma edição.
feedback bug#
Registrar um relatório de bug contra o screenRIG.
feedback bug <title> (--body TEXT | --body-file FILE) [--command "GROUP ACTION"] [--no-context]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<title> | string | sim | nenhum | No máximo 120 caracteres. |
--body TEXT | string | um dos dois | nenhum | Corpo embutido, no máximo 4000 caracteres. |
--body-file FILE | caminho | um dos dois | nenhum | Ler o corpo a partir de um arquivo, adequado para um relatório multilinha. |
--command | string | não | nenhum | O comando sobre o qual o relatório trata, apenas como caminho de comando: até quatro palavras minúsculas como media upload. Nunca é retirado da linha de comando que você executou. |
--no-context | boolean | não | desligado | Omitir o envelope de diagnóstico, que de outra forma contém a versão do CLI, o caminho opcional do comando e a plataforma. |
screenrig feedback bug "Playlist stalls after assignment" --body-file ./report.md --command "screen assign"O servidor rejeita, em vez de redigir, texto que corresponda a material de credencial, e retorna orientações a nível de campo para que você possa reescrever e reenviar. Uma tentativa exata sob a mesma chave de idempotência retorna a submissão original por vinte e quatro horas.
feedback feature#
Registrar uma solicitação de recurso.
feedback feature <title> (--body TEXT | --body-file FILE) [--command "GROUP ACTION"] [--no-context]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
<title> | string | sim | nenhum | No máximo 120 caracteres. |
--body TEXT | string | um dos dois | nenhum | Corpo embutido, no máximo 4000 caracteres. |
--body-file FILE | caminho | um dos dois | nenhum | Ler o corpo a partir de um arquivo. |
--command | string | não | nenhum | O comando sobre o qual a requisição trata, apenas como caminho de comando. |
--no-context | boolean | não | desligado | Omitir o envelope de diagnóstico. |
screenrig feedback feature "Add a dry-run flag" --body "Preview a change first."feedback list#
Listar as próprias submissões deste projeto.
feedback list [--kind bug|feature]| Parâmetro | Tipo | Obrigatório | Padrão | Notas |
|---|---|---|---|---|
--kind | string | não | ambos os tipos, mais recentes primeiro | bug ou feature. Restrinja a listagem a um tipo. |
screenrig feedback list --kind bugPublicidade
Compre publicidade em uma rede que convidou você ou venda intervalos de anúncios nas telas que você possui. Todo comando lê screenrig project capabilities primeiro: para comprar é necessário o recurso advertiser, para vender é preciso possuir telas. O dinheiro é relatado como strings decimais de mcr (milicrédito). Execute screenrig ads COMMAND --help --json para cada flag. O fluxo de compra e venda está em Início; taxas e tarifas estão em Preços.
ads networks#
Comprador: listar as redes em que este projeto foi convidado e inspecionar o inventário e os slots permitidos de uma rede.
ads networks list
ads networks show <seller-project-id>screenrig ads networks listads network#
Vendedor: inspecione ou crie a própria rede deste projeto e defina sua tarifa padrão.
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 3A tarifa é por 15 segundos de reprodução concluída. Uma tarifa efetiva alterada pausa as campanhas afetadas até que cada comprador aceite uma nova cotação.
ads inventory#
Vendedor: opte por incluir ou excluir uma tela própria da publicidade e descreva-a para compradores convidados.
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 cafeFlags omitidas mantêm seus valores atuais. Uma nova linha de inventário precisa de --enabled ou --disabled. --impressions-per-hour registra a sua estimativa das impressões que a tela entrega em uma hora: cada exibição concluída passa a contar essa estimativa vezes os segundos exibidos sobre 3600 como estimated_impressions em ads reports spend, ads reports delivery e ads direct report.
ads slots#
Vendedor: defina slots de anúncio reutilizáveis. Um slot não altera nada na tela até que sua página de slot seja colocada em uma playlist.
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 define a própria tag de anúncio VAST 2-4 do vendedor, tentada quando nenhuma campanha convidada preenche o slot em suas próprias telas; o slot deve aceitar vídeo. A URL é HTTPS na porta 443 ou 8443 para um host público. O backend a busca, segue até cinco Wrappers, ingere o MP4 progressivo ou WebM escolhido na mídia do projeto, e dispara Impression, creativeView e start em início aceito, complete em conclusão aceita, e Error em falha; não há rastreadores de quartil. As macros [CACHEBUSTING], [TIMESTAMP], [SCREENRIG_SCREEN_ID], [SCREENRIG_SLOT_ID] e [SCREENRIG_PAGE_ID] são expandidas, e os compradores nunca veem a tag. Em update, --vast-tag-url substitui a tag e --clear-vast-tag-url a remove; os dois não se combinam, e omitir ambos mantém a tag armazenada. ads slots list mostra vast_tag_url ao vendedor proprietário.
Advertising invitations#
Use os comandos compartilhados invitations acima:
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
A pessoa convidada aceita no dashboard. Uma pessoa conectada seleciona seu projeto de compra e confirma com uma prova de passkey nova. Uma pessoa sem login cria um e um projeto apenas para anunciantes durante a aceitação.
ads memberships#
Vendedor: altere ou revogue a política de revisão e escopo de inventário de um 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 listA revogação interrompe novas execuções de anúncios e mantém o histórico financeiro.
ads creatives#
Comprador: vincular mídia própria pronta a uma criatividade imutável com cópia aprovada.
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: criar uma campanha, precificar e ativar aceitando o orçamento.
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_123Um rascunho não reserva nada. preview retorna uma cotação com tempo limitado e não gasta nada; activate requer essa cotação exata. Após uma mudança na taxa do vendedor, somente accept-rates com uma cotação nova retoma a campanha.
Um rascunho de campanha aceita um category opcional da lista de categorias de anunciantes. Dois anúncios da mesma categoria nunca são exibidos no mesmo intervalo comercial em uma tela.
ads direct#
Vendedor: reserve seus próprios negócios com anunciantes de fora do screenRIG nas suas próprias telas.
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.jsonUm rascunho informa name, advertiser, um category opcional, flight_start e flight_end, media_ids (suas próprias imagens ou vídeos prontos), um goal_plays opcional, um price opcional (cpm por mil exibições ou flat, com um amount e uma currency ISO 4217) e a segmentação: screen_ids, slot_ids, venue_types, cities, tags e dayparts, em que uma lista vazia significa todas as telas ou espaços inscritos. Uma campanha direta preenche um intervalo comercial antes dos compradores convidados. Um objetivo é distribuído uniformemente ao longo da veiculação e é exibido primeiro enquanto está atrasado; uma campanha sem objetivo ocupa todo espaço elegível durante sua veiculação. Nenhum crédito é movimentado: você fatura o anunciante, e o preço dá valor ao relatório.
availability lê uma consulta com a mesma segmentação e período de veiculação e estima as exibições que você ainda pode reservar: as ocorrências recentes de espaços publicitários das telas selecionadas, menos as exibições de que seus outros objetivos diretos ainda precisam. Um objetivo acima da estimativa retorna goal_overbooked, a menos que o rascunho defina "overbook": true. report lista as exibições em relação ao objetivo, o ritmo, o valor, as exibições que não foram exibidas e linhas por dia UTC, tela, espaço e mídia; end é definitivo.
ads reviews#
Vendedor: aprove, rejeite ou solicite alterações nas versões exatas dos criativos submetidos pelos compradores em 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 envia sua nota ao comprador. Para enviar a revisão, vincule a mídia revisada a um novo criativo, adicione-o a uma nova campanha e execute preview e activate com a nova cotação. A campanha substituta tem seu próprio orçamento e histórico de revisões. Pause a campanha original antes de ativar sua substituta para evitar veiculações sobrepostas. As pessoas decidem sobre os criativos na página Revisões do painel, junto com as alterações de playlists e telas.
ads reports#
Ler gastos como comprador ou 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:00ZRelatórios de entrega mostram bruto, taxa de serviço e líquido para o período. Um relatório de comprador nunca mostra outra receita do vendedor. fill mostra, para até 35 dias, quantas ocorrências de espaços publicitários suas telas solicitaram, quantas foram preenchidas por campanhas diretas, compradores convidados e sua tag VAST, e por que o restante ficou vazio: no_demand, ineligible, separated ou capped.
Preparar, publicar e editar playlists
Para imagens e vídeos prontos, prepare uma playlist em tela cheia na ordem de reprodução:
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 o documento, publique-o e depois veja a tela real com screen screenshot. playlist init aceita arquivos locais de imagem/vídeo, IDs de med_ prontos, versões fixadas de rel_ de aplicativo e URLs HTTP ou HTTPS de iframe na ordem de reprodução, incluindo entradas mistas:
screenrig playlist init ./poster.png med_VIDEO rel_APP https://example.com --name Lobby --screen-id scr_LOBBY --output lobby.jsonArquivos locais são enviados pelo caminho normal de mídia e aguardam prontidão. Isso requer ffmpeg e ffprobe, a menos que --no-transcode seja fornecido. A preparação grava o documento local e pode enviar mídia; não cria uma playlist remota nem atribui uma tela. Mídia existente deve estar pronta. URLs HTTP e HTTPS podem incluir hosts da rede local e credenciais embutidas e não são buscadas durante a preparação. O aplicativo web do Player exige URLs HTTPS sem nome de usuário ou senha.
Para preparação de arquivo com possibilidade de nova tentativa, escolha --idempotency-key na primeira tentativa e reutilize com arquivos idênticos e ordem de entrada dentro da janela de repetição do servidor. Cada ocorrência de arquivo recebe suas próprias chaves de upload. Sem chave explícita, uma nova invocação recebe novas chaves. Mídia enviada sobrevive a falha posterior na preparação; inspecione media list e reutilize esses IDs ao reconciliar um resultado parcial.
Cada entrada se torna uma página em tela cheia com fundo preto e transição cruzada de 200 ms. Imagens e vídeos usam --fit contain|cover|fill (padrão contain). Vídeos são silenciados, não repetem e avançam ao terminar. Outras páginas usam --duration-ms (padrão 8000). Aplicativos e iframes usam fill; versões de aplicativos são fixadas com avanço cronometrado e sem privilégios de controle. Edite o documento para avanço controlado pelo aplicativo. Verifique a prontidão da versão e a reprodução real pelo servidor e pelo Player desejado. A publicação pode verificar os cabeçalhos de resposta das páginas iframe HTTPS públicas elegíveis. Uma página cujo X-Frame-Options ou frame-ancestors recusa o enquadramento não pode ser exibida pelo Player web nem pelos Players macOS, Samsung Tizen ou BrightSign. Quando a publicação detecta uma recusa, a gravação ainda assim é concluída: screen publish e playlist create|update|patch imprimem um aviso iframe_framing_refused que nomeia a página e a primitiva, e events list mostra um aviso playlist.iframe_framing_refused.
Forneça --screen-id para ler as dimensões e revisão do alvo. O resultado inclui data.screen_id, data.screen_revision e data.publish.argv. Passe este array de argumentos para o lançador empacotado screenrig sem divisão de shell: ele preserva caminhos, configuração e origem da API. Adicione --expect-rev explicitamente para proteger contra alterações posteriores na tela. Metadados do alvo permanecem fora do documento criado.
Para substituir a tela, forneça tanto --target-width quanto --target-height. Estes também funcionam sem uma tela, caso em que nenhum argumento de publicação é retornado. Superfícies desconhecidas ou múltiplas requerem dimensões explícitas. Arquivos de saída são exclusivos por padrão; use --overwrite para substituir um arquivo de autoria existente de forma atômica. Diretórios pai são criados automaticamente. Entradas de URL e release-ID com dimensões explícitas funcionam sem login.
screen publish <screen-id> <file> cria uma nova playlist, atribui-a com uma proteção opcional de revisão tela, e lê a atribuição de volta. Não atualiza uma playlist existente pelo nome. Nomes de exibição podem se repetir; use o ID da playlist para uma playlist update explícita. Seu resultado JSON relata playlist_id, playlist_revision, screen_id, screen_revision, assignment_verified e playback_verified. A verificação da atribuição não prova a reprodução; solicite e inspecione uma captura de tela e evidências relevantes de reprodução separadamente.
Quando o projeto exige revisão para alterações do agente, ou a sessão tem acesso Propor, screen publish para assim que a playlist ou sua atribuição for proposta: stage é pending_review, o resultado nomeia ambas as revisões, e o envelope permanece ok: true. Nada toca até que uma pessoa aprove. Adicione --note TEXT para informar ao revisor o que mudou; veja Revisões.
Publicar salva automaticamente um diário local privado. Após uma falha ambígua, repita o comando idêntico e a entrada com a mesma configuração para retomar. Se a criação da playlist teve sucesso antes da falha na atribuição, o erro identifica a playlist criada. Não a exclua nem inicie outra criação para recuperar. Um conflito de revisão requer inspecionar a tela e reconciliar a atribuição pretendida; uma playlist já criada pode ser atribuída explicitamente com screen assign. Publicar nunca atualiza silenciosamente a revisão esperada. A recuperação não concluída para após a janela de idempotência do servidor de 24 horas; inspecione e reconcilie antes de fazer mais gravações.
Para editar uma playlist existente:
screenrig playlist show pl_EXISTING --output lobby.json
screenrig playlist update pl_EXISTING lobby.jsonplaylist show --output escreve o documento {name, pages} editável e retorna seu caminho, playlist_id, e a fonte revision no stdout. Opcionalmente passe essa revisão com --expect-rev para proteger a atualização. Preserva seletores dinâmicos, programações, movimento e lançamentos de aplicativos fixados, removendo mídia e campos de tempo derivados do servidor. Comentários permanecem separados. playlist show simples é uma resposta de inspeção; --editable sem --output retorna data.document, data.playlist_id e data.revision. Atualizar uma playlist afeta todas as telas atribuídas a ela. Em revisão, playlist update propõe o novo documento, e playlist show continua retornando a versão ao vivo até que uma pessoa a aprove.
Escritas K/V e comentário aceitam --file - para stdin. Use playlist show ID --editable --human para o documento editável no stdout. Nomes de exibição de aplicativo e playlist podem se repetir; use IDs de recurso para atualizações.
Substituir uma versão do aplicativo
Após um app update bem-sucedido, execute data.application.release_id e identifique a playlist, página e primitivo de aplicativo exatos para alterar. Visualize a substituição:
screenrig playlist replace-release pl_EXISTING --page board-page --primitive board --release-id rel_NEWEsta é uma revisão de impacto somente leitura. Inspecione data.previous_release_id, data.release_id e data.affected_screens, incluindo atribuições arquivadas. Aplique diretamente com --apply. Para optar por esta verificação de impacto, forneça também --expect-impact com o data.impact da prévia:
screenrig playlist replace-release pl_EXISTING --page board-page --primitive board --release-id rel_NEW --applyOutros primitivos e configurações são preservados. A atualização afeta todas as telas atribuídas a esta playlist compartilhada; telas arquivadas mantêm o novo PIN para uso posterior. Quando --expect-impact é fornecido, uma substituição alterada, revisão ou impacto observado na tela requer uma nova pré-visualização. Aplicação direta pula a pesquisa da tela; affected_screens é omitido. Uma versão já fixada é aplicada com sucesso sem gravação. As atribuições podem mudar após o snapshot: o servidor verifica a revisão da playlist atomicamente apenas quando --expect-rev é fornecido. O servidor valida a disponibilidade e propriedade da versão na aplicação. PINs existentes permanecem inalterados até a aplicação; depois, verifique revisões do manifesto e reprodução nas telas afetadas. Em revisão, --apply propõe o novo PIN; adicione --note TEXT para o revisor.
Validação, criação e atualização de playlist e publicação de tela aceitam - como arquivo de entrada para ler stdin. Envelopes JSON nunca são escritos em arquivos criados. --expect-rev protege uma revisão. Omitir a flag grava o recurso atual sem precondição de revisão. Uma revisão fornecida obsoleta ainda retorna revision_conflict.
A geração aceita --prompt TEXT ou --prompt-file FILE, incluindo --prompt-file - para stdin. O arquivo é o prompt completo, sem cortes; o limite existente de 4000 caracteres se aplica. Prompts são excluídos dos diagnósticos.
Mantenha o caminho curto
- Comece com o plugin oficial
- Abrir um Player
- Escolha um caminho de autoria
- Instale o plugin oficial
- Veja recursos
O CLI incluído usa api.screenrig.ai; Players usam play.screenrig.ai; o dashboard fica em screenrig.ai/dashboard; releases usam origens isoladas sob apps.screenrig.ai. Pacotes nativos do Player permanecem privados e mediados pelo servidor. A referência interna de transporte permanece disponível para ferramentas de transporte.
Filtrar tags e lotes de reprodução
A mídia suporta até 32 tags únicas, cada uma com 1 a 32 letras ou dígitos. Substitua o conjunto inteiro por screenrig media update med_ID --tags Summer,Drinks. --tag Summer substitui por uma tag; --clear-tag limpa todas as tags. media list --tag Summer corresponde à associação em qualquer lugar do conjunto. Tags são sensíveis a maiúsculas e minúsculas e nunca são autorização.
Um seletor dinâmico pode usar um tag ou um 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 requer todas as tags listadas, any requer pelo menos uma, e none exclui qualquer tag listada. Grupos presentes combinam com E; grupos omitidos não impõem condição. Forneça pelo menos um grupo não vazio. Cada grupo aceita até 32 tags únicas. tag e tags são mutuamente exclusivos. Um filtro só com none seleciona toda mídia pronta daquele tipo primitivo, exceto as tags excluídas. Seletores de imagem selecionam imagens e seletores de vídeo selecionam vídeos.
O pool de candidatos contém até 1.024 mídias prontas por seletor, com 1.024 referências de mídia no instantâneo completo do loop. Uma correspondência maior retorna um erro; afine os filtros. batch_size é um limite separado de 1–1.024 itens por visita à página. Em uma página media_end, one_at_a_time: false reproduz o próximo lote em sequência; omitir batch_size reproduz o restante da passagem. one_at_a_time: true reproduz um item por aparição e permite apenas um tamanho de lote omitido ou batch_size: 1. Duração, aplicação e páginas audio_end requerem one_at_a_time: true. Imagens em media_end também requerem dwell_ms; vídeos não podem fazer loop nessa página.
O Player resolve cada primitivo de mídia dinâmico em uma requisição na inicialização da playlist e em cada limite de loop. A associação é congelada durante o loop. Uploads, remoções, alterações de marcação e limites de disponibilidade não regeneram o manifesto. Na próxima atualização, itens removidos ou recém-excluídos saem da fila pendente; novas correspondências entram quando a passagem atual termina. Um lote final pode conter menos que o número solicitado; ele não reabastece da próxima passagem. A ordem do nome do arquivo ordena por nome, depois ID da mídia. A ordem aleatória embaralha uma vez por passagem completa, preservando a ordem restante entre atualizações do loop. A ordem ponderada segue seus pesos, abaixo. O cursor é local para a tela, playlist, página e primitivo, persiste após reinício e reinicia quando o filtro, ordem ou política de lote muda. A reprodução offline usa o último snapshot bem-sucedido. Correspondências vazias pulam o primitivo e qualquer página vazia resultante.
Salve o objeto seletor acima como selector.json, então inspecione seu catálogo de candidatos atual antes de publicar:
screenrig media selector-preview selector.json --primitive video
A pré-visualização retorna matched_count, ordenada por nome de arquivo candidates com IDs de mídia e tags, e a política selector normalizada. Com ordem aleatória, mostra o pool e a política de embaralhamento; não escolhe o embaralhamento do Player, não avança um cursor, não cria uma concessão de reprodução nem altera um manifesto. Com ordem ponderada, retorna weight e share_percent de cada candidato, além de cycle. --rect WxH (API rect: {width, height}) é o tamanho do slot e é obrigatório com fit: "aspect"; as correspondências deixadas de fora aparecem em excluded com o motivo aspect_mismatch. Seletores de imagem passam --primitive image. A API é POST /api/selectors/preview com { "primitive": "video", "selector": ... }. Usa o projeto autenticado e as mesmas regras de correspondência da reprodução. Alterações no catálogo após a pré-visualização são resolvidas no próximo ciclo da reprodução.
A exportação de pacote estático congela correspondências dinâmicas como IDs exatas. Preserva reprodução uma a uma ou completa; uma sequência de tempo limitada usando batch_size com one_at_a_time: false requer remover esse campo ou escolher IDs explícitos antes da exportação. Isso evita perda silenciosa do cursor de lote em tempo de execução em um pacote estático.
Rotação ponderada e ajuste de proporção
order: "weighted" alterna os criativos de um slot por peso, de modo que cada patrocinador mantém sua participação nas reproduções. weights mapeia um ID de mídia (med_...) ou tag:NAME para um inteiro de 1 a 1.000, com no máximo 64 chaves. Funciona com by de all, tag ou 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 e 20 entregam exatamente 5, 3 e 2 de cada 10 reproduções, em todo ciclo, e uma reinicialização retoma no meio do ciclo. O peso de um item é a chave do seu ID de mídia, quando presente; caso contrário, a primeira chave tag:NAME, em ordem alfabética, entre as tags que ele carrega, dividida igualmente entre os itens da seleção que a compartilham, de modo que a participação de um patrocinador se mantém qualquer que seja o número de criativos; caso contrário, o item conta como seu próprio grupo com peso 1. Um ciclo tem no máximo 4.096 reproduções; as participações são arredondadas para ele somente quando a proporção exata exige um ciclo mais longo.
A ordem ponderada reproduz um item por visita, então defina one_at_a_time: true ou batch_size: 1. weights é obrigatório com a ordem ponderada e permitido somente com ela; caso contrário, a gravação retorna invalid_request. Os Players web, Android, Apple, Windows e Linux implementam a ordem ponderada a partir das versões que declaram a capacidade de host selector.weighted. Um Player mais antigo reproduz o seletor de forma aleatória, e os diagnósticos do manifesto trazem selector_order_downgraded.
fit: "aspect" em um seletor dinâmico mantém apenas arquivos cuja largura sobre altura está dentro de 5% da do retângulo do slot, incluindo um video wall ou moldura de display, lida quando o seletor é resolvido. Um slot em retrato nunca reproduz um arquivo em paisagem. Nenhuma mudança no Player é necessária.
screenrig media selector-preview imprime a participação esperada de cada seletor ponderado ou ajustado por proporção, e o editor de páginas do painel mostra a mesma tabela no inspetor. A exportação de pacote estático congela um seletor ponderado como IDs exatas na ordem do nome do arquivo; os pesos não são mantidos.
Tokens de tela em seletores de tag
O tag de um seletor de tag, e cada entrada do seu filtro tags, pode ser {screen.field.NAME} ou {screen.id}, o identificador da tela sem o prefixo scr_, que é uma tag. O servidor preenche o token para cada tela ao montar o manifesto e o snapshot de seletores dessa tela, de modo que uma playlist reproduz a mídia própria de cada tela. Marque a mídia com Lobby ou Garage, defina o campo de cada tela com screenrig screen update scr_ID --field zone=Lobby e dê ao slot este seletor:
{ "by": "tag", "tag": "{screen.field.zone}", "one_at_a_time": true }
O valor preenchido segue as regras de tag: de 1 a 32 letras ou dígitos. Uma tela sem o campo, ou cujo valor não é uma tag, não seleciona nada: não reproduz nenhum arquivo desse slot, e os diagnósticos do manifesto trazem screen_fact_missing ou screen_fact_invalid. Alterar um campo gera de novo o manifesto dessa tela. Um seletor com token não pode ser visualizado (media selector-preview exige uma tag concreta) nem congelado por playlist export.
Tokens de tela em endereços de iframe e params de aplicativo
Em um iframe, src e fallback_src podem trazer tokens de tela no caminho, na query ou no fragmento de um endereço http ou https, e o mesmo vale para params, opcional, de uma primitiva application: até 16 nomes de 1 a 32 letras minúsculas, dígitos ou sublinhados (ticket e policy são reservados) com valores de até 512 caracteres. O servidor os preenche para cada tela:
| Token | Valor |
|---|---|
{screen.id} | O identificador da tela sem seu prefixo scr_. |
{screen.name} | O nome da tela. |
{screen.timezone} | O fuso horário IANA armazenado da tela. |
{screen.field.NAME} | O campo NAME da tela, de 1 a 32 letras minúsculas, dígitos ou sublinhados. |
{screen.location.lat}, {screen.location.lon} | Sua localização em graus decimais. |
{screen.location.name}, {screen.location.address} | Seu nome de lugar e endereço. |
{
"primitive": "iframe",
"src": "https://maps.example.com/directory?kiosk={screen.field.kiosk_id}&level={screen.field.level}",
"title": "Directory"
}
A escrita armazena o modelo como escrito, chaves incluídas. O manifesto de cada tela traz seu próprio endereço, com cada valor codificado em percentual para seu lugar na URL: um kiosk_id de B 2&3 vira B%202%263. Um token no esquema, nas credenciais, no host ou na porta, ou em um link do YouTube, um link de documento do Google ou Microsoft ou um endereço de visualização de BI, é invalid_request em src (ou fallback_src). A publicação pula a verificação de enquadramento para um src com modelo, e as prévias mostram o modelo como escrito.
Uma tela que não tem um valor (um campo não definido, sem localização), ou cujos valores preenchem um endereço com mais de 2048 caracteres ou com um segmento de caminho . ou .., não recebe esse iframe ou aplicativo, e os diagnósticos de seu manifesto trazem screen_fact_missing ou screen_fact_invalid; uma página que fica vazia é descartada. Toda escrita que alcança essa tela (uma escrita de playlist, screen assign, screen update, uma atribuição em frota, uma revisão aprovada) responde com um aviso screen_fact_missing que nomeia os tokens, os primeiros 20 ids de tela e quantas são. Alterar um campo ou a localização renova o manifesto das telas afetadas.
Para um aplicativo, cada param preenchido é anexado ao endereço de lançamento depois de ticket, codificado em percentual, no máximo 4096 caracteres juntos, de modo que o aplicativo o lê em location.search (SDK). Os params de lançamento chegam ao app web do Player e aos Players que o executam (Samsung Tizen, BrightSign, LG webOS e Vega); os Players Qt, Android, Apple e Windows carregam o aplicativo do seu pacote local e não enviam nenhum. O campo url de um modelo pode ser um src de iframe inteiro, e seu valor pode ele mesmo trazer tokens de tela, preenchidos quando o manifesto é montado. Um seletor de tag usa {screen.id} e {screen.field.NAME} da mesma forma (acima). Os cartões mantêm seus próprios tokens {screen.…}.
Disponibilidade de mídia
screenrig media availability med_ID --file rule.json define quando os seletores dinâmicos (all, tag e folder) podem escolher um arquivo. --clear remove a regra e --expect-rev N protege a revisão da mídia. A API é PATCH /api/media/{id}/availability com If-Match e { "availability": {...} | null }. Definir uma regra exige acesso Manage; uma credencial Propose recebe insufficient_access.
A regra é a gramática de horário da programação, lida no fuso horário de cada tela, e tem pelo menos um membro: from e until (civil YYYY-MM-DDTHH:MM, until exclusivo), windows (semanal {days, start, end}), monthly ({day} ou {nth, weekday}, cada um com start e end opcionais), dates ({date, start, end}) e except (datas que removem uma ocorrência, incluindo as caudas após a meia-noite). Não tem data nem interaction. O criativo de um patrocinador para o fim de semana prolongado, disponível apenas nas noites de dias úteis dentro do período:
{
"from": "2026-11-27T00:00",
"until": "2026-11-30T23:59",
"windows": [{ "days": ["mon", "tue", "wed", "thu", "fri"], "start": "17:00", "end": "22:00" }]
}
Somente os seletores leem a regra: um seletor explícito com id ou ids a ignora, assim como as referências de mídia dos cards, o áudio da trilha sonora e os criativos de anúncios. Um arquivo sai da seleção e volta no próximo loop da playlist de cada tela, em cerca de um minuto após o limite. Nenhuma revisão de playlist ou manifesto muda, e um Player offline mantém a última seleção até se reconectar. screenrig media selector-preview --timezone ZONE (UTC por padrão) lista em excluded os arquivos fora da regra naquele momento, com o motivo outside_window.
Comentários
Um comentário é o próprio objeto JSON do agente anexado a uma tela, uma playlist ou uma página de playlist. UTF-8 compacto desse objeto tem no máximo 1 KiB, e o valor deve ser um objeto. screenRIG nunca o lê, nunca o envia para Players, e nunca o trata como autorização. Não aparece no manifesto em tempo de execução e não incrementa uma revisão, então esses comandos não tomam
--expect-rev: a última gravação vence.comment show#Ler o objeto de comentário em uma tela, uma playlist ou uma página de playlist.
<id>scr_oupl_, correspondendo à palavra alvo.--page PAGE_IDUm comentário não definido é lido como
{ "comments": null }.screen showeplaylist showincluemcommentsquando o servidor o envia.comment set#Escreva o objeto de comentário.
<id>scr_oupl_.--json-value JSON--file FILE--page PAGE_IDCriação e atualização de playlist não podem definir comentários; para isso existem esses comandos.
comment delete#Remover o objeto de comentário.
<id>scr_oupl_.--page PAGE_ID