FilmForge Frame QA
Nada entra no filme como uma miniatura. Cada pintura é lida em tamanho real contra suas fichas, medida pelas ferramentas, pontuada e recebe um de três vereditos. O veredito sempre diz o que acontece a seguir e quanto custa: aceitar (grátis), corrigir no código (grátis, com a chamada exata) ou repintar (2,75 créditos, com o prompt corrigido).
Caminhos: scripts/, templates/ e config/ abaixo são pastas dentro desta habilidade (o diretório base mostrado quando carrega), colocadas lá por ./install.sh. Trabalhando a partir de um clone do repositório, eles são tools/, templates/ e config/ em sua raiz.
O procedimento
- Folha de contato do lote, para vê-lo como uma sequência (os vizinhos cortam juntos?):
python3 scripts/contact_sheet.py build art/film --shotlist shotlist.yaml --out out/contact_sheet.jpg - Visão completa de cada pintura (leia a imagem em si, não a folha).
- Recortes 100% do que importa: rostos, mãos, o assunto crítico de escala, qualquer coisa pequena.
python3 scripts/contact_sheet.py zoom art/film/s03_x.png --out-dir out/zoom --grid 2x2ou--box x0,y0,x1,y1. Um leitor de imagens reduz a amostra de imagens grandes; os recortes mostram os pixels reais. - Medir regras de cor, paleta e exposição:
python3 scripts/ledger.py palette continuity.yaml --paintings art/film --shotlist shotlist.yamlEle relata a paleta de cada pintura, sua distância (delta E) do script de cores da cena, a participação de cada regra de cor proibida no quadro e saltos de exposição em stops entre vizinhos de uma cena. - Pontuar o rubric (abaixo): nove critérios, 0 a 2.
- Decidir o veredito pelas regras abaixo.
- Escrever a entrada em
qa.yaml(formato abaixo) e, em seguida, reconstruir a folha de contato com--qa qa.yamlpara badges. - Relatar: a contagem de vereditos, cada correção e repintura em uma linha, créditos que uma repintura custaria.
O rubric (templates/qa-rubric.md tem os âncoras de pontuação)
| Critério | O que verificar |
|---|---|
| identidade | rostos e marcadores de figurino contra as fichas |
| anatomia | mãos, olhos, membros no sujeito focal |
| escala | cada trava de escala e cada contagem (medir pixels nos recortes) |
| estilo | a trava de aparência: meio, linha, cor, textura |
| cor | o script de cores e regras proibidas (de ledger.py palette) e exposição contra vizinhos |
| continuidade | cada adereço e estado que o registro lista para este plano, e nada fora de seu intervalo |
| história | a batida é lida em dois segundos |
| composição | enquadramento conforme listado, o olho pousa no sujeito, a área de texto tranquila |
| limpeza | sem texto pintado, marca d'água, mancha ou figura perdida |
Medindo escala: em um recorte, meça o sujeito e sua referência em pixels e compare a proporção com a trava de escala. O exemplo do motor: a mariposa abrange 20 px em um dedo de 60 px, onde sua trava diz uma mão aberta inteira (120 px ou mais naquele enquadramento): um sexto de seu tamanho, escala 0, repintura.
As regras de veredito
- aceitar: nenhum critério em 0, total 15 de 18 ou mais, nenhuma violação medida.
- corrigir: cada falha tem uma correção de código (tabela abaixo) e nada em 0 em identidade, escala ou história.
- repintar: identidade, escala ou história em 0; anatomia em 0 no sujeito focal; estilo em 0; ou três ou mais falhas.
Corrigir no código antes dos créditos (módulos do painted-film-pipeline)
| Falha | Módulo e chamada |
|---|---|
| um objeto em um matiz errado (um cachecol que faz um personagem secundário ser lido como o herói) | grade.py IN OUT recolor:x0:y0:x1:y1:lo:hi:new_hue:sat |
| uma cor proibida vazando (azul antes do final) | grade.py IN OUT blue:0.3 (puxa a banda para prata; keep=0.3) ou recolor para um matiz permitido |
| uma figura perdida em uma área limpa | um patch de uma região limpa deslocada (o padrão fix_s22.py) |
| corte ruim, tangente, espaço de cabeça errado | o crop: [x0, y0, x1, y1] do plano em pixels de origem |
| exposição ou contraste diferente dos vizinhos | automático: o mapeamento correspondente mapeia o percentil de luminância 0,5 e 99,5 de cada chapa para alvos compartilhados |
| detalhe suave | automático: upscale Lanczos 4K com nitidez apenas nas bordas |
| um quadro sem vida | movimento no código (forge-motion), nunca uma repintura |
Cada correção escreve um novo arquivo (_g), é remensurado e recebe done: true apenas quando a medição passa.
Detalhes e significados dos parâmetros: references/code-fixes.md.
Repintar: diagnosticar, depois corrigir
Nomeie a causa como um slot de prompt ou uma referência: "trava de escala faltando no slot 4", "ficha anexada na ordem errada", "aparência parafraseada". Escreva o prompt corrigido completo, verifique o orçamento e entregue ao forge-painter. Se a causa afetaria outros planos (uma trava faltando no registro), diga: é uma alteração no motor, não uma repintura.
Formato de entrada qa.yaml
- shot: s02
file: art/film/s02_last_match.png
checked: [full frame, zoom 2x2 at 100%, ledger palette]
scores: {identity: 1, anatomy: 2, scale: 2, style: 2, colour: 0, continuity: 2, story: 2, composition: 2, clean: 2}
total: 15
max: 18
measured: {no_gold_pct: 4.4, script_dE: 5}
verdict: fix
notes: Um brilho dourado do fósforo cobre 4,4% do quadro (a regra permite 2% antes de s05) e tinge o capuz.
fix:
problem: brilho dourado, matiz 38 a 58
module: painted-film-pipeline pipeline/grade.py (recolor)
call: python grade.py s02_last_match.png s02_last_match_g.png recolor:250:250:700:650:38:58:22:0.8
params: {box: [250, 250, 700, 650], hue_band: [38, 58], new_hue: 22, sat: 0.8}
why_not_repaint: uma banda de matiz em uma caixa
verify: ledger.py palette mostra no-gold abaixo de 2,0% no arquivo _g; o capuz lê vermelho a 100%
done: false
Uma entrada de repintura tem repaint: {cause, prompt_changes, credits, corrected_prompt} em vez de fix.
Achados trabalhados de produções reais
- Escala (repintura): cinco quadros de Simorgh desenharam a poupa muito pequena ao lado da garota (s21, s25, s33, s36, s39). O código não consegue ampliar um sujeito pintado de forma convincente; eles foram agendados para repintura em seu tamanho real, e a causa (nenhuma proporção de escala nos prompts ou nas fichas) tornou-se uma regra do motor.
- Cor (correção): azul se infiltrou nos quadros antes do final; uma puxada de banda para prata os corrigiu no código.
- Identidade por cor (correção): o cachecol de um personagem secundário combinava com a cor do herói, então ele foi lido como ela; uma recolorização de banda de matiz dentro de uma caixa o moveu.
- Figura perdida (correção): uma figura pintada extra em um quadro tranquilo foi removida com patches de regiões limpas deslocadas.
- O portão do livro ilustrado: rostos correspondem às referências; a aparência certa e as cores do script de cores; a área de texto realmente calma; o motivo da página presente; faz você sentir a linha de texto com a qual se senta. Uma falha, refeita.
Nunca
- Aceitar de uma miniatura ou de uma folha de contato sozinha.
- Repintar o que o código pode corrigir, ou "corrigir" no código o que torna a história errada.
- Passar uma pintura cuja regra medida falha, mesmo que pareça bem.
Checklist de portão (para o lote)
- Cada pintura lida em tamanho real, com recortes de rostos, mãos e assuntos críticos de escala
-
ledger.py paletteexecutado; cada erro explicado em um veredito - Cada pintura tem uma entrada qa.yaml com pontuações, veredito e a próxima ação
- Folha de contato reconstruída com badges e olhada
Referências
references/code-fixes.md: parâmetros de cada correção, como escolhê-los e como verificar