Skip to content

Releases: engenheirodevideo/get-brolls

GET B-ROLLS 2.5.0

Choose a tag to compare

@github-actions github-actions released this 19 Sep 22:33
d936405
  • Logs. Cada projeto ganha brolls/getbrolls.log: uma linha chave=valor por evento, com permissão 0600, que gira a cada ~1 MB e guarda 3 cópias. Fica registrado o que antes não deixava rastro: início e fim de cada comando (só o nome das opções, nunca o valor), cada passo da trilha (search, resolve, inspect, preview, approve, reject, permit, fetch, verify, deliver, import-review), cada chamada de ffmpeg, ffprobe, yt-dlp e curl com duração e código de saída, cada pedido de rede (host, status, bytes, cache, tentativas, recusa por endereço privado, teto de tamanho), qual regra do RULES.md bloqueou um candidato, por que a fila está esperando, acerto e erro do cache de fontes e o modo de cada entrega. Nunca entram no log: nome de quem aprovou, frase de aprovação, motivo de rejeição, evidência de direitos, texto de busca, títulos, canais, URLs (só o host) nem linha de comando de subprocesso; todo registro ainda passa pela redação de chaves e a pasta pessoal vira ~. GB_LOG_LEVEL (DEBUG, INFO, WARNING, ERROR, off; padrão INFO) e GB_LOG_STDERR=1 (espelha em stderr para depurar) entram no .env. A saída padrão continua sendo um único JSON, o envelope de erro continua a última linha de stderr, comando de leitura não cria o arquivo e falha de log nunca derruba um comando. status ganha log e os envelopes de erro ganham app_log. diagnostics.jsonl segue como está.
  • Trilha de aprovação. reject (pela CLI e pelo Storyboard) passa a zerar output: um candidato rejeitado depois de coletado continuava na entrega/ e contava como rejeitado e entregue ao mesmo tempo. Nada é apagado de brolls/. approve remove a rejection antiga, para o item não parecer rejeitado e aprovado. verify grava output.verified: false (e o estado volta a approved) quando o arquivo não bate com o sha256 registrado, sumiu ou não decodifica — antes o manifesto seguia dizendo "verificado" e um deliver posterior entregava o arquivo alterado com o hash antigo no ORIGEM.md; uma verify limpa depois de restaurar o arquivo volta a marcar. A conferência passa por todos os clipes antes de falhar, para que um segundo arquivo alterado não continue marcado como verificado. import-review sem --file desempata decisões salvas no mesmo segundo pelo sufixo numérico do nome, não pela ordem alfabética, que escolhia a mais velha. manifest.json com schema_version desconhecido num item é recusado; item sem a chave continua valendo. A versão precisa ser um inteiro de verdade: true e 1.0 deixam de passar, no item e no templateVersion do arquivo de decisões.
  • Entrega. deliver recusa rodar quando entrega/ é um link simbólico (a limpeza seguia o link e apagava arquivos da pasta de destino) e toda remoção é confinada à entrega/ real do projeto. Links que a própria pessoa criou dentro de entrega/ não são mais apagados. Clipe com integridade reprovada ou rejeitado não é entregue e aparece em skipped, com o motivo. Vale para qualquer verified falso no manifesto (false, 0, null), não só para false. Uma pasta de beat que seja link simbólico dentro de entrega/ é deixada em paz em vez de quebrar a entrega. Falha de disco ou de permissão ao comparar arquivos é relatada como tal, não como "parece edição sua", e não conseguir marcar o arquivo entregue como somente leitura vira aviso.
  • Storyboard local. Toda resposta do serve leva X-Frame-Options: DENY, Content-Security-Policy: frame-ancestors 'none', X-Content-Type-Options: nosniff e Referrer-Policy: no-referrer: outra página não consegue mais embutir a revisão para induzir um clique de aprovação. O servidor entrega só o que a página usa (review.html, previews/, clips/); manifest.json, diagnostics.jsonl, .serve.pid, reviews/ e listagens de pasta respondem 404. A decisão é tomada sobre o arquivo que o servidor abriria, não sobre o texto da URL, então um .. codificado (%2e%2e) não sai de previews/ nem de clips/. Um byte nulo na URL vira 404 em vez de derrubar a thread do servidor, uma pasta previews/ ou clips/ que seja link simbólico não é servida, e o log rotacionado do servidor já nasce 0600 sem seguir link. .serve.pid e .serve.log nascem com permissão 0600 e o processo em segundo plano não herda mais as chaves de provedor. Nada muda na página nem no fluxo de revisão.
  • Falhas visíveis. Um ~/.getbrolls/RULES.md ilegível agora para o comando com erro nomeando o arquivo: antes virava aviso e os bloqueios dele (blocked_domains, asset_types) deixavam de valer em silêncio. Arquivo ausente continua inofensivo. Erro interno no download não aparece mais como erro de provedor; biblioteca de aprendizados corrompida vira aviso (LIBRARY_INDEX_UNREADABLE) em vez de parecer vazia; a checagem ao vivo de provedores diz quando a falha é bug e inclui o tipo do erro.
  • Privacidade local. .getbrolls-sources/ passa a 0700 e a mídia de trabalho a 0600, como o restante do cache privado; diagnostics.jsonl a 0600. No arquivo de diagnóstico e nos campos repr/traceback a pasta pessoal aparece como ~; a mensagem de erro mantém o caminho real, porque é dela que a pessoa copia. A redação cobre também Authorization, Cookie, Set-Cookie, X-Api-Key (inclusive em cabeçalhos impressos como dicionário), Bearer … solto e valores de key=, token=, secret=, password=, signature=, sig=, policy=, api_key=, access_token=, X-Amz-Signature= e Key-Pair-Id=; nomes que só terminam nessas palavras (monkey=) ficam como estão, e o padrão é linear mesmo em texto adversarial. No getbrolls.log, cada campo é redigido antes de ser cortado em 500 caracteres e caracteres de controle saem escapados. Sem efeito no Windows para as permissões.
  • Testes: 90 testes novos dirigem aprovação, direitos, coleta, conferência, entrega, revisão e o servidor local pelo caminho real da CLI, e tests/test_cli_surface.py compara toda a superfície do argparse com um fixture estrutural igual do Python 3.11 ao 3.14. CI: persist-credentials: false no checkout.
  • .env.example reescrito em inglês, por seção (prévias, chaves de provedor, regras e brief, pasta pessoal, caminhos de ferramentas, fonte, ritmo da fila, cache e entrega): cada variável traz o que faz, valores aceitos, faixa e padrão, tirados de config.py e queue.py, e o cabeçalho explica o formato do arquivo (sem interpolação, o shell vence, chave desconhecida é erro). As mesmas linhas continuam ativas; nenhuma mudança de comportamento. .env.example.pt-BR traz os mesmos comentários em português, e tests/test_env_paths.py exige que os dois arquivos só difiram nos comentários (mesmas chaves, ordem, valores e estado).
  • Docs: os READMEs ganham a linha da 2.4.3 na lista de atualizações; o template de PR pede scripts/check.sh e diz que o espelho da skill é gerado; docs/QUALITY.md chama a rodada da 2.3.7 de linha de base, não de rodada mais recente.

Get B-rolls v2.3.7 — Engenheiro de Vídeo

Choose a tag to compare

@engenheirodevideo engenheirodevideo released this 16 Sep 19:05
9421472
  • Adiciona variáveis opcionais que fixam caminhos de ferramentas: GB_YTDLP_PATH, GB_VENV_PATH, GB_FFMPEG_PATH e GB_FFPROBE_PATH. Valem tanto pelo ambiente do processo quanto pelo .env da skill ou por python3 scripts/gb.py --env-file CAMINHO <subcomando> …, com --env-file na raiz do parser, antes do subcomando.
  • Define a precedência: variável explícita vence a descoberta atual. Com a variável ausente ou vazia, o comportamento é idêntico ao anterior — .venv/Scripts e .venv/bin para yt-dlp, PATH para ffmpeg/ffprobe.
  • Recusa caminho inválido em vez de voltar em silêncio à descoberta: um destino inexistente, sem permissão de execução ou, no caso de GB_VENV_PATH, que não seja diretório, encerra o comando com erro nomeando a variável e o caminho.
  • doctor passa a listar os pins ativos em tool_paths, uma linha por variável, e reflete o pin em executables. Sem variáveis definidas, tool_paths sai vazio.
  • Não há GB_PYTHON_PATH: o código não reinvoca o interpretador Python em nenhum ponto.
  • Adiciona tests/test_env_paths.py com 16 regressões offline de precedência, padrão inalterado, erro de caminho inválido e layouts .venv POSIX e Windows.
  • Torna a CLI autoexplicativa: help em todos os subcomandos e argumentos, --version na raiz e doctor com veredito summary (ok, missing com o comando que resolve, optional) além de get_brolls e python — a chave runtime passou a se chamar python.
  • Nomeia o instalador no erro de yt-dlp ausente e separa "FFmpeg/ffprobe não encontrado" de "arquivo/intervalo inválido", apontando doctor nos dois casos.
  • Adiciona o comando de plugin /get-brolls-setup (commands/get-brolls-setup.md), que executa --check, o instalador do sistema e o doctor pela raiz do plugin e reporta o veredito em uma linha.
  • Documenta o acionamento do plugin (contexto, /get-brolls:get-brolls, /get-brolls-setup) e acrescenta o bloco "Primeiro B-roll em 5 minutos" nos dois READMEs, com fonte sem chave, servidor local do Storyboard e saída esperada.
  • Os dois SKILL.md passam a mandar servir brolls/ em 127.0.0.1:8767 e avisar que file:// pode desativar o salvamento local antes da exportação do JSON.
  • Substitui a description dos dois SKILL.md por uma descrição bilíngue com o que a skill faz, quando acioná-la e o que está fora de escopo; os READMEs distinguem a skill de coletores genéricos de download.
  • Troca os cinco marcadores do teste do espelho por um contrato estrutural: corpo da raiz e do espelho comparados linha a linha, com os caminhos ${CLAUDE_PLUGIN_ROOT} normalizados e apenas a seção "Instalação e contexto" autorizada a divergir.
  • Reescreve GEMINI.md como configuração real: o Gemini CLI carrega GEMINI.md a partir do diretório de trabalho, então o roteador precisa ser importado por @/caminho/absoluto/.../SKILL.md no GEMINI.md do usuário.
  • Os dois SKILL.md mandam ler o CHANGELOG quando o doctor reportar uma versão diferente da documentada.
  • SECURITY ganha a tabela de egress (instalação, execução e o que nunca sai da máquina) e a declaração de ausência de telemetria.
  • Os instaladores explicam a falha do pip: informam o Python em uso e a faixa validada do conjunto fixado (3.11–3.13), continuando fail-fast. A matriz de CI segue em 3.11/3.13 porque pycryptodomex==3.23.0 ainda não publica wheel cp314.
  • Adiciona .github/ISSUE_TEMPLATE/bug_report.md (SO, versão do Python e saída completa do doctor), config.yml com issues em branco habilitadas e PULL_REQUEST_TEMPLATE.md com o bloco de verificação do AGENTS.
  • Adiciona .github/workflows/release.yml: em tags v*, extrai a seção da versão no CHANGELOG e publica a release pelo gh, sem sobrescrever uma release existente e sem novas actions de terceiros.
  • Documenta que skills/ e .claude-plugin/ são artefatos do plugin e podem ser omitidos ao copiar para o Codex, e registra no GUIDE a permissão opcional python3 */gb.py *.
  • Aceita GB_FONT_FILE no .env (fonte TrueType do contact sheet dos helpers Bash opcionais) e faz o erro de variável desconhecida nomear a variável recusada e o conjunto aceito.
  • Torna AGENTS.md o hub principal do repositório: uma tabela "Mapa do repositório" roteia cada público — operar a skill (SKILL.md e o espelho do plugin), instalação por agente (Codex, skill e plugin do Claude Code, Gemini CLI), GUIDE, QUALITY, CONTRIBUTING, SECURITY e CHANGELOG — sem remover nenhuma regra de manutenção existente. CLAUDE.md e GEMINI.md viram roteadores finos que apontam primeiro para o hub, e os dois READMEs nomeiam AGENTS.md como índice de agentes e mantenedores.
  • Adiciona o subcomando status --project, que responde "onde estamos?" lendo o estado já gravado (manifesto, candidatos, decisões e journal) e devolve contagem e lista de IDs por etapa: candidatos encontrados, prévias geradas, decisões pendentes/aprovadas/rejeitadas, itens com permit registrado, itens entregues e verificados, além do próximo passo do fluxo. É somente leitura: não grava manifesto, candidatos, prévias, clipes nem eventos.
  • Padroniza o relato de progresso: search, resolve, preview, review, import-review, permit, fetch e verify passam a devolver um campo summary com uma linha em português no formato verbo + objeto + resultado. O campo é aditivo — nenhuma chave existente muda de nome, tipo ou posição.
  • Documenta o status e a convenção do campo summary no GUIDE, acrescenta uma frase sobre status --project na seção "Revisão e entrega" dos dois SKILL.md e cita o comando na seção de terminal dos dois READMEs.
  • Fixa o padrão editorial literal primeiro nos dois SKILL.md, no GUIDE e nos READMEs: o material padrão é footage, print ou imagem real do fato, pessoa, produto, notícia ou tela que a narração cita; bancos de stock (Pexels/Pixabay) entram somente quando o usuário pedir stock explicitamente.
  • Registra a divisão de responsabilidade editorial: as condições de uso do material são de quem produz o vídeo; a skill responde pela fidelidade/literalidade e pelo registro de origem de cada asset. O fluxo de permit e proveniência continua sendo o mecanismo desse registro, sem alteração de lógica.
  • Adiciona tests/test_status.py (9 regressões offline do status, do campo summary e da garantia de somente leitura) e três regressões do hub em tests/test_repository.py.

Correções da revisão tripla

  • status passa a ser somente leitura de verdade: abre o ledger sem criar brolls/candidates, previews e clips, relata uma gravação interrompida como journal.recovered_write: "pending" sem concluí-la e recusa um projeto inexistente com "Projeto não encontrado em …; nenhum arquivo foi criado.", sem escrever nada — nem diagnóstico.
  • status deixa de pedir a trava exclusiva do projeto: agora responde mesmo durante um fetch em andamento, em vez de falhar com "Outro comando está usando este projeto".
  • status deixa de morrer com o projeto: RULES.md inválido vira rules_error no relatório, events.jsonl e references.json corrompidos degradam para contagem com error, e uma mudança de formato-alvo nas regras vira format_pending mais um aviso de que o próximo comando invalidará as aprovações.
  • release.yml ganha portões antes de publicar: confere __version__ contra a tag, roda python3 -m unittest discover -s tests, extrai a seção do CHANGELOG por comparação literal (a versão não é mais tratada como expressão regular) e marca --prerelease quando a tag tem hífen.
  • Restaura as GitHub Actions fixadas nas v7 (actions/checkout 7.0.1 e actions/setup-node 7.0.0) que uma alteração anterior havia rebaixado para v4, e passa a usar o mesmo checkout no release.yml. A regressão compara apenas a referência fixada por SHA, sem exigir o comentário da versão.
  • Os pins GB_*_PATH resolvem para caminho absoluto antes de validar, então um valor relativo não muda de significado conforme a pasta atual; um diretório fixado informa "não é um arquivo executável"; e GB_VENV_PATH sem yt-dlp dentro falha nomeando a variável, a pasta e os layouts procurados, em vez de cair em silêncio no PATH.
  • doctor fica resiliente a pin inválido: em vez de encerrar com erro, publica o pin quebrado em summary.missing com a mensagem do erro, sugere o instalador pelo caminho absoluto da skill e acrescenta o bloco resolved com o executável absoluto realmente usado por ferramenta. Os demais comandos continuam falhando de imediato.
  • O teste do espelho passa a cobrir também a seção "Instalação e contexto": só linhas de mecânica de instalação podem divergir da raiz, a indentação conta e uma linha que normaliza para vazio falha em vez de sumir.
  • Ajustes de relato: o summary de search mantém a observação do provedor, approve e reject ganham a própria linha, singular e plural concordam com as contagens, preview diz quando gerou somente referência estática e resolve recusa --file/--url vazios nomeando a opção.

Get B-rolls v2.3.6 — Engenheiro de Vídeo

Choose a tag to compare

@engenheirodevideo engenheirodevideo released this 16 Sep 17:34
9ffcd36

Release de empacotamento: o Get B-rolls agora instala como plugin do Claude Code em dois comandos, mantendo o fluxo clone-como-skill idêntico para Codex e instalações manuais. Nenhuma mudança de lógica do produto.

Instalação como plugin do Claude Code (novo)

/plugin marketplace add engenheirodevideo/get-brolls
/plugin install get-brolls@engenheirodevideo

Depois, execute o instalador de dependências na pasta do plugin (~/.claude/plugins/cache/engenheirodevideo/get-brolls/<versão>/) — ou peça ao Claude para executá-lo. Repita o instalador após cada /plugin update.

Instalação clássica (Codex e manual)

git clone --branch v2.3.6 --depth 1 https://github.com/engenheirodevideo/get-brolls.git

Idêntica à v2.3.5: coloque a pasta completa no diretório de skills, siga o guia de instalação e abra nova sessão do agente. Pré-requisitos: Python 3.11+, FFmpeg/ffprobe, Node 22+, npm/npx e curl.

O que muda na 2.3.6

  • .claude-plugin/plugin.json e marketplace.json: o repositório é seu próprio marketplace de plugin.
  • Skill espelhada em skills/get-brolls/SKILL.md com caminhos via ${CLAUDE_PLUGIN_ROOT}, --project incondicional e chaves via --env-file fora da pasta gerenciada.
  • Roteadores CLAUDE.md e GEMINI.md apontam para SKILL.md (operação) e AGENTS.md (manutenção) — descoberta de contexto no Claude Code e no Gemini CLI sem duplicar instruções.
  • Novos testes offline travam manifestos, igualdade da description entre os dois SKILL.md, alvos ${CLAUDE_PLUGIN_ROOT} e regras operacionais do espelho.
  • SECURITY atualizado: o relatório privado de vulnerabilidades do GitHub está habilitado no repositório.
  • Zero mudança de lógica: scripts/ só recebe o bump de versão; regras editoriais (aprovação humana, licença, proveniência) intactas.

Verificação

86 testes passaram localmente (80 da 2.3.5 + 6 novos de empacotamento) e a CI passou na matriz completa — macOS/Python 3.11 e 3.13, Windows/Python 3.11 e 3.13 e Ubuntu/Python 3.13 — no PR #8. A estrutura do plugin passou por revisão dupla independente (validação de estrutura e qualidade de skill).

Os limites conhecidos da v2.3.5 permanecem válidos; as evidências de QA estão em QUALITY.md.

Detalhes: README, guia e changelog.

Criado e mantido por Bruno Moreira — Engenheiro de Vídeo. Código sob licença MIT.

Get B-rolls v2.3.5 — Engenheiro de Vídeo

Choose a tag to compare

@engenheirodevideo engenheirodevideo released this 16 Sep 16:56

Primeira release oficial no GitHub do Get B-rolls: pesquisa de imagens de apoio, prévias em Storyboard, revisão humana e entrega dos cortes com registro de origem. Esta versão já inclui as correções de revisão obsoleta e de proteção HTTPS integradas após a 2.3.4.

Instalação desta versão

git clone --branch v2.3.5 --depth 1 https://github.com/engenheirodevideo/get-brolls.git

Coloque a pasta completa no diretório de skills do Codex ou Claude Code. Instale as dependências no destino final seguindo o guia de instalação e abra uma nova sessão do agente.

Pré-requisitos: Python 3.11+, FFmpeg/ffprobe, Node 22+, npm/npx e curl. Os instaladores obtêm as dependências pelos registros oficiais. Os arquivos de código-fonte disponibilizados pelo GitHub não incluem as dependências nem sessões de navegador.

O que esta versão reúne

  • YouTube via yt-dlp e FFmpeg, sem YouTube API key; TikTok por URL completa.
  • Instagram pelo navegador autorizado e pelo coletor de pares de vídeo/áudio incluído.
  • Busca em Pexels, Pixabay, Wikimedia Commons e NASA; importação de arquivos locais.
  • Storyboard com GIFs, quadros estáticos, fonte, autoria, fala e motivo da escolha.
  • Exportação/importação de decisões, impressão e entrega final condicionada à aprovação e ao registro das condições de uso.
  • Instaladores para macOS e Windows, suporte explícito a UTF-8 e documentação em português com README em inglês.

Correções da 2.3.5

  • O importador recusa JSONs de revisão baseados em decisões antigas, inclusive após rejeição ou outra importação, validando reviewEpoch além da assinatura do conteúdo — sem gravação parcial de lotes inválidos.
  • Conexões HTTP de APIs e downloads ficam fixadas nos endereços públicos validados, com revalidação de DNS a cada tentativa, certificados e hostname HTTPS preservados, redirects bloqueados e sem proxies automáticos do ambiente.
  • Dependências Python e npm fixadas (requirements.txt, package-lock.json com npm ci) e GitHub Actions pinadas por commit, com atualizações futuras via Dependabot.
  • Novas regressões offline cobrem decisões obsoletas, DNS rebinding IPv4/IPv6, proxy, retries, redirects e validação TLS.

Quem usava a 2.3.4: regenere o Storyboard e exporte uma revisão atual antes de importar — JSONs antigos ou sem reviewEpoch são recusados. Guia de migração.

Verificação

80 testes passaram na revisão local desta árvore (macOS/Python 3.14.6), incluindo as novas regressões de segurança. A execução do GitHub Actions passou em macOS/Python 3.11 e 3.13, Windows/Python 3.11 e 3.13 e Ubuntu/Python 3.13, com instalação completa nos cinco ambientes.

Fonte desta release: f38c749. Este commit apenas data o changelog e registra a evidência de CI; o código é o da árvore aprovada no PR #1.

Limites conhecidos

  • As fontes sociais dependem da disponibilidade da URL, rede e sessão; os ensaios registrados não garantem qualquer vídeo.
  • Pexels e Pixabay exigem suas próprias chaves opcionais.
  • Projetos e revisões devem ser locais e confiáveis; a ferramenta não é um serviço público e não autentica o revisor.
  • A proteção HTTPS cobre o transporte interno de APIs e downloads; não é um isolamento de rede para processos externos como yt-dlp, FFmpeg ou navegador. Consulte a política de segurança.
  • Guarde chaves, cookies, configurações CDN e material de clientes fora da distribuição. Aprovação editorial não substitui a verificação das condições de uso da fonte.

Detalhes: README, guia, qualidade e evidências e changelog.

Criado e mantido por Bruno Moreira — Engenheiro de Vídeo. Código sob licença MIT.