Destilação de Estilo
Este skill independente contém sua implementação em scripts/; use
taste-application para a edição subsequente, seja gerada ou local. Mantenha cada
gênero nomeado em seu próprio pacote. Medições do Flash Ethereal não devem ser
reutilizadas silenciosamente para Fluid Sketch ou 3D Cyber Glitch. Uma medição
zero é um dado válido; diferencie-a de um campo ausente.
As dependências locais estão em scripts/requirements.txt. Trabalhos de
provedor autorizados separadamente também precisam de
scripts/requirements-live.txt, credenciais e TASTE_FORGE_ALLOW_LIVE=1
explícito. --dry-run não lê credenciais nem submete tarefas. Nunca presuma que
um fluxo de trabalho foi salvo a partir de um endpoint local; use o fluxo de
trabalho real do lado do provedor ou evidência da requisição.
Transforme vídeos de referência em um pacote de estilo: uma pasta de medições e ativos que etapas posteriores consomem deterministicamente.
Quando Ativar
- "capturar a aparência destes clipes" / "destilar a vibe" / "tornar isso repetível"
- O usuário tem imagens de referência e deseja uma LUT, uma correção de cor ou ritmo correspondente
- Construir uma biblioteca de visuais particionados por gênero
- Qualquer solicitação onde a resposta seria "descreva o estilo em um prompt"
A Descoberta Central
Prompts não conseguem entregar uma correção de cor. A medição sim.
Medido em imagens reais: três gerações pagas com direção de cor crescente moveram o a* dos tons médios de +1,9 → +2,8 → +0,3 contra um alvo de +24,9, e o contraste nunca saiu de ~19 contra um alvo de 34,7. Aplicar um pacote medido às mesmas imagens atingiu MAE de croma 1,88 e contraste 33,7 em uma passagem determinística, de graça.
Portanto, a divisão é: o modelo fornece conteúdo, movimento e estrutura de iluminação; o pacote fornece o visual. Palavras de cor em um prompt de geração são piores que inúteis — custam dinheiro e afastam a renderização da base neutra que a LUT deseja. Diga isso explicitamente no prompt: "Cor: nenhuma. Renderize neutro. A correção de cor é aplicada depois."
O Que um Pacote Contém
stylepacks/<gênero>/
grade.json estatísticas de cor medidas (veja abaixo)
cadence.json cada corte de cena detectado e a distribuição derivada
look.cube LUT 33^3, arraste diretamente para o Resolve como uma LUT de nó
spec.json descrição VLM, fundamentada nas medições
grounding.txt os fatos medidos fornecidos ao VLM
stills/ quadros em resolução total dos planos mais longos (imagens de condicionamento)
plates/ elementos de sobreposição blend levantados sobre preto
props/ malhas GLB cunhadas
pack.json manifesto
Executando
python mint.py --genre <nome> --refs a.mov b.mov c.mov # offline, sem chave de API
python distill.py --genre <nome> # uma chamada VLM
mint.py é pura análise numérica — sem rede, sem chave, determinística, portanto
um pacote pode ser regenerado em vez de ter backup.
As Medições Que Importam
Croma por zona de luminância, não globalmente
A identidade cromática geralmente reside em uma faixa de luminância. Um
deslocamento global a*/b* matematicamente não pode representar split-toning.
Meça o croma dentro de zonas (bordas L* [0,15,35,55,75,100]).
Uma assinatura real: violeta em L25 (a +24,9, b* −17,5), quase neutro em ambas as extremidades. Relatar apenas as zonas mais escuras e mais claras chama isso de "tonalidade uniforme" — sempre imprima a curva inteira.
Mediana + MAD, nunca média + desvio padrão
O croma em conjuntos de referência reais é fortemente assimétrico à direita. Em um rolo medido, a média do croma dos tons médios foi 36,9 contra uma mediana de 17,5, então uma LUT baseada na média empurrou a cor cerca de 3x mais forte do que o material justificava.
Contraste é std(L*), não branco menos preto
O intervalo branco−preto é ~100 em quase qualquer imagem real e não discrimina nada.
A proporção de fundo é uma estatística de primeira classe
Registre a proporção de pixels abaixo de L*10. Nenhum momento da distribuição pode vê-lo: um clipe pode ter a média, o desvio padrão e o croma corretos enquanto suas áreas escuras foram elevadas para cinza. Isso é exatamente como uma correção de cor uma vez obteve MAE 1,88 / contraste 33,7 enquanto o quadro real era uma bagunça roxa lamacenta.
Mascarar a interface antes de medir
As referências gravadas da tela carregam mobília estática — barras de letterbox, barra de status, ícone de like, texto de legenda. Tudo isso cai nas estatísticas como se fosse o estilo: barras pretas inflam o peso das sombras, um coração vermelho distorce a* em direção ao magenta. A variância temporal separa-os limpa e claramente — a imagem se move, a interface não — portanto nenhum corte manual é necessário. Em material real, isso mantém aproximadamente 65% dos pixels.
O ritmo (cadence) precisa de um limiar adaptativo
O limiar correto do detector de conteúdo depende do material: uma referência de ação de alto contraste corta com força suficiente para 30, uma atmosférica esconde seus cortes abaixo disso. Varra limiares decrescentes e pegue o mais alto que ainda recupere ≥90% dos planos que a configuração mais sensível encontra — assim tende a cortes reais em vez de ruído. Rejeite limiares que impliquem uma taxa de corte absurda (>100/min); movimentos contínuos de câmera acionam o detector a cada quadro.
Execute toda a varredura em uma passagem de decodificação com um
StatsManager compartilhado. A versão ingênua redecodifica por limiar, o que em
fonte de 60fps é a diferença entre segundos e minutos.
Placas de Sobreposição: Ativos, Não Screenshots
Uma imagem estática é um quadro inteiro — compor uma apenas coloca uma segunda imagem em cima. Uma placa é o vocabulário gráfico da referência (flares, traços, fragmentos de glitch) levantados sobre preto para que se misturem em blend sem necessidade de keying.
Duas armadilhas, ambas enfrentadas em material real:
- Limiares absolutos falham. Em uma referência clara, uma seleção
L>55 E croma>12leva ~90% do quadro, e a "placa" é a imagem — incluindo um rosto reconhecível. Selecione por percentil (~topo 3%) e rejeite qualquer placa que cubra mais de ~22% do quadro. - Classifique por separação, não por brilho. "Proporção de pixels claros e
saturados" classifica um quadro lavado no topo e um quadro preto com um único
flare intenso — a assinatura real — perto do final. Pontue
p99.5(energia) / mediana(energia).
Também mascare antes de pontuar: tipografia incrustada é clara, saturada e de alto contraste, então uma execução sem máscara produz uma placa perfeita do cartão de título de outra pessoa.
Fundamentando o VLM
Alimente as medições no prompt do sistema antes de pedir a descrição. Sem fundamentação, um VLM relatará "nenhuma correção de cor aparente, neutro" em imagens com um deslocamento a* de +24,9. Fundamentado, ele descreve o deslocamento corretamente e infere o acento secundário independentemente.
Proíba palavras de hesitação (variado, misturado, dinâmico, algum,
frequentemente, neutro, ou) — um modelo não pode renderizar "iluminação
variada". Imponha a proibição no código, não apenas no prompt: foi violada
em aproximadamente uma em cada três execuções. Repergunte por campo, mantenha a
resposta menos hesitante após N tentativas, em vez de falhar.
Ressalva digna de ser dita ao usuário: uma vez que a especificação é fundamentada nas medições, ela não é mais uma verificação independente delas.
Pegadinhas da Geração de LUT
- Uma LUT só pode codificar uma função RGB por pixel. Qualquer coisa dependente de distribuição (correspondência de histograma, âncoras de percentil) devem ser reduzidos a uma constante antes de assar, ou ela mede silenciosamente a grade uniforme da LUT em vez da imagem.
cv2.cvtColor(LAB2RGB)limita internamente, portanto um teste fora de gamut usando-a relata 0%. Converta Lab→sRGB linear manualmente; uma medição real foi 83,3% fora de gamute.- Transfira deslocamento de croma, não afim. A transformação afim divide pelo σ da fonte e ultrapassa — em imagens reais inverteu b* para +11,6 contra um alvo de −17,5. O deslocamento reduziu o MAE de 6,23 para 2,13.
- A compressão de gamute custou 3,8x o tempo de execução para MAE idêntico. Torne-a opt-in.
Anti-Padrões
| Não fazer | Por quê |
|---|---|
| Ajustar com base em imagens de teste sintéticas | Custou quatro conclusões erradas separadas em um projeto; imagens reais derrubaram todas |
| Confiar apenas no MAE | 1,88 MAE parecia sucesso em um quadro visivelmente quebrado |
| Usar média/desvio padrão para croma | Assimétrico à direita; empurra ~3x mais forte |
| Comparar apenas zonas extremas | Ambas as extremidades são quase neutras por construção |
| Descrever o estilo e parar | A especificação é para conteúdo e estrutura; o pacote é para a cor |
Handoff
O pacote é a interface. Uma vez que ele existe, use o skill taste-application
para gerar e montar contra ele, ou entregue look.cube diretamente a um
colorista.
Código Fornecido
scripts/ neste skill é uma implementação funcional, não pseudocódigo. Não tem
suposições específicas de projeto: aponte-o para quaisquer vídeos de referência e
ele produz um pacote.
pip install -r scripts/requirements.txt
export FAL_KEY=... # necessário apenas para os estágios que chamam fal
Toda chamada de rede é simulada sob TASTE_FORGE_DRY_RUN=1 ou --dry-run,
portanto o plano, prompts, layout de faixas e manifesto podem ser inspecionados
sem gastos.