Communitygithub.com

movie-still-finder

Transforma a frase "Preciso de um frame de duas pessoas sentadas em silêncio após uma discussão" em um arquivo de imagem real e com origem. Compatível com qualquer agente de IA, qualquer sistema operacional, sem necessidade de credenciais.

O que é movie-still-finder?

Movie Still Finder é uma skill que capacita agentes de IA a localizar e extrair frames de filmes a partir de descrições em linguagem natural (como cenas, diálogos ou estados de humor). Em vez de depender de uma API pública inexistente, a skill implementa um pipeline robusto: pesquisa em fontes como FilmGrab, galerias de frames e artigos editoriais, baixa candidatos, gera uma folha de contato numerada e utiliza um modelo com capacidade de visão (ou um humano) para selecionar o frame exato. O sistema opera sem qualquer credencial, respeita regras rigorosas de proveniência (registrando página de origem, URL da imagem, título/ano do filme e eventuais legendas adicionadas), e oferece perfis opcionais (como editoriais ou para WeChat) que adicionam verificações de fatos, pré-visualização de corte de capa e entrega em pastas duplas. A skill é multiplataforma (Windows, macOS, Linux) e inclui scripts CLI (`still.py`) para sondar fontes disponíveis, extrair frames, cortar legendas e montar a entrega final com manifesto.

Funciona com✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/Fitzfeichi/movie-still-finder/tree/master

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Movie Still Finder

Transforme "Preciso de um frame de duas pessoas sentadas em silêncio após uma discussão" em um arquivo de imagem real e com origem. Qualquer agente de IA, qualquer sistema operacional, sem credenciais.

1. Leia isto primeiro: o que é realmente possível

Não existe nenhuma API pública gratuita que aceite uma frase em linguagem natural e retorne o quadro exato do filme, especialmente um com legendas de diálogo embutidas. Buscar essa "bala de prata" é perda de tempo. O que funciona é um pipeline, onde o agente orquestra e um modelo com capacidade de visão escolhe o quadro:

request -> fact-check -> choose source -> batch-download candidates
        -> numbered contact sheet -> VISUAL frame picking -> high-res original
        -> crop subtitles / composite subtitle -> visual re-check
        -> delivery + source manifest

Duas consequências inegociáveis:

  • A etapa de visão não pode ser pulada. Adivinhar um quadro apenas pelo nome do arquivo ou texto falha. Mostre a folha de contato a um modelo com capacidade de visão (ou ao humano).
  • Verifique os fatos primeiro. "Fatos" amplamente repetidos sobre filmes geralmente estão errados (veja references/fact-check.md). Verifique a fala / cena / episódio antes de pesquisar.

2. Início rápido (perfil mínimo, o padrão)

pip install -r requirements.txt
python scripts/still.py probe                       # quais fontes estão acessíveis agora
python scripts/still.py grab --out ./work \
  --page "https://movie-screencaps.com/avatar-2009/page/114" \
  --image-referer "https://movie-screencaps.com/" \
  --limit 40
# -> ./work/candidates/*.jpg, ./work/contact_1.jpg, ./work/manifest.json
# Mostre contact_1.jpg a um modelo de visão, anote o número vencedor, então:
python scripts/still.py sheet ./work/candidates     # regenera uma folha numerada
python scripts/still.py crop ./work/candidates/p1_02.jpg --bottom 100 -o ./work/clean.jpg
python scripts/still.py deliver ./work --picks examples/sample-picks.json \
  --profile profiles/minimal.json --out ./delivery

Sempre execute probe primeiro: a disponibilidade das fontes varia. Para uma execução totalmente offline, veja a seção D de examples/quickstart.md. --image-referer normalmente é a raiz do site, não a URL do artigo.

Para uma fala de diálogo, quote fornece o filme + timestamp em milissegundos:

python scripts/still.py quote "I see you" --title Avatar

Walkthrough completo: examples/quickstart.md. Referência de comandos: scripts/still.py --help.

3. Decida a rota antes de tocar na rede

SolicitaçãoPrimeira escolhaFallback
Cena / clima ("silêncio após uma briga", "duas pessoas de costas")Artigo editorial com stills legendados, ou frames curados do FilmGrab (grab)Galeria quadro a quadro + seleção visual
Uma fala citada / "o quadro onde X diz Y"quote → timestamp → galeria de quadros → subtitle (rotular como compositado)Captura de tela com legendas nativas de um artigo editorial
Precisa de arte de capa ampla, limpa e sem legendasFrames curados do FilmGrabcrop os 95-100 px inferiores de uma captura de visualização
Usuário tem arquivos de vídeo locaisPesquisa semântica local opcional, veja references/optional-adapters.md—
Meme / 梗圖 em vez de um stillApêndice opcional, references/meme-optional.md—

Execute probe primeiro. É gratuito, não requer login e informa quais fontes estão com 403 / inacessíveis no seu ambiente, para que você não tente novamente um host morto.

4. Regras que valem para todo agente

  1. Sem credenciais. Não peça chaves de API, não faça login em nome do usuário, não burle paywalls ou proteções antibot. Um 403 significa "mude de fonte", registrado no log de execução.
  2. Baixe apenas URLs que foram realmente retornadas. Nunca invente uma URL de imagem. Uma página acessível não significa que seu CDN de imagens seja acessível: verifique uma imagem antes de confiar em toda uma galeria. Se as imagens retornarem 403 após uma correção de Referer, mude de fonte — não continue variando cabeçalhos.
  3. Registre a proveniência. Cada imagem entregue precisa de página de origem, URL direta da imagem, título/ano do filme e se alguma legenda foi cortada ou compositada. grab escreve isso em manifest.json automaticamente.
  4. Marque legendas compositadas. Se você adicionar uma legenda que não estava no quadro original, informe isso na legenda. Nunca apresente como um quadro nativo.
  5. Verifique, não assuma, a resolução (>= 1000 px de largura por padrão) e abra o arquivo final com um visualizador antes de entregar.
  6. Respeite o perfil. O comportamento além do acima (seleção com intervenção humana, entrega em pastas duplas, verificação de fatos obrigatória, pré-visualização de corte de capa) é controlado por profiles/*.json. Não ative regras extras silenciosamente.

5. Perfis (comportamento opcional)

O padrão profiles/minimal.json é um pipeline simples e de propósito geral: encontre candidatos, escolha um, entregue com proveniência. Todo o resto é opt-in.

python scripts/still.py rules --profile profiles/editorial-wechat.json
python scripts/still.py deliver ./work --picks picks.json \
  --profile profiles/editorial-wechat.json --out ./delivery

editorial-wechat.json agrupa o fluxo de trabalho de um editor humano: pré-visualizações numeradas e seleção humana (nunca finalizar automaticamente), entrega em pastas duplas com zero exclusão de candidatos, verificação de fatos obrigatória, anotação obrigatória de legendas/fonte e uma pré-visualização de corte de capa 2,35:1. Veja profiles/README.md para o esquema completo.

6. Índice de referências (divulgação progressiva)

Leia apenas o que a etapa atual precisa.

ArquivoLeia quando
references/workflow.mdVocê precisa do POP completo de ponta a ponta e da lista de verificação de aceitação
references/sources.mdEscolhendo uma fonte, ou uma fonte parou de funcionar
references/pitfalls.mdAlgo falhou; contém os hosts conhecidos como mortos e modos exatos de falha
references/image-ops.mdFolhas de contato, corte, composição de legendas, fontes
references/fact-check.mdQualquer solicitação citando uma fala ou descrevendo uma cena específica
references/delivery.mdEsquema de proveniência, layout de pastas duplas, limite de direitos autorais
references/meme-optional.mdUsuário pediu um meme em vez de um still
references/optional-adapters.mdBiblioteca de vídeo local ou outras ferramentas baseadas em login/CLI

7. Lista de verificação de aceitação

  • A fala / cena foi verificada antes da pesquisa
  • Uma folha de contato numerada foi examinada por um modelo de visão ou pelo humano
  • A imagem final abre corretamente e corresponde à solicitação, não apenas à consulta
  • Página de origem + URL direta + filme/ano registrados em manifest.json
  • Legendas cortadas / compositadas explicitamente rotuladas
  • Largura >= 1000 px (ou o desvio está declarado)
  • Hosts mortos e soluções alternativas registrados em vez de repetidos silenciosamente
  • Nenhum candidato foi excluído; intermediários mantidos

8. Limites de escopo

Esta skill encontra e prepara imagens. Ela não publica nada, edita o manuscrito do usuário, decide a capa final em nome do usuário (a menos que o perfil diga que o humano já escolheu) ou concede qualquer direito de redistribuir stills de filmes. Veja references/delivery.md para o limite de direitos autorais.

Habilidades Relacionadas