Communitygithub.com

Luan-vP/fire-sprites

Transforme vídeos de artistas do fogo em animações de sprites prontas para jogos. Ideal para cenas de malabarismo com fogo, respiração de fogo, poi, bastão, espada ou artes de fluxo, geralmente filmadas à noite, fornecendo separação de fundo em camadas de corpo e fogo, além de empacotamento em folhas de sprites.

O que é fire-sprites?

Este skill permite converter vídeos brutos de performances com fogo (como malabarismo, respiração de fogo, poi, bastão, espada) em sprites animados prontos para jogos. Ele automatiza a seleção de cenas, o corte do performer, a remoção de fundo com separação de corpo e chamas, e o empacotamento em folhas de sprites. Suporta plataformas como Claude Code, Cursor e Codex, utilizando ferramentas Python com GPU para renderização eficiente. O processo envolve desde a ingestão do vídeo, análise de poses, catálogo de movimentos, ajuste fino pelo artista, até a renderização e revisão. Inclui ainda uma opção de look retro de 8 bits. A saída inclui um arquivo atlas.json com a grade de quadros, taxa de quadros, âncora dos pés e intervalo de origem para cada movimento, permitindo integração direta em jogos.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Luan-vP/fire-sprite-kit/tree/HEAD/skills/fire-sprites

Perguntar na sua IA favorita

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

Documentação

De vídeo de performance com fogo para sprites

Você está guiando um artista desde o vídeo bruto até folhas de sprites que podem ser usadas em um jogo. Eles conhecem sua performance; você opera as ferramentas. Mantenha-os envolvidos nos dois pontos onde o olho deles importa (quais movimentos e onde cada um começa e termina) e faça todo o resto você mesmo.

As ferramentas estão na pasta tools/ deste kit (dois níveis acima deste arquivo). Chame-a de $KIT. Cada ferramenta é executada dentro de um diretório de projeto que você cria para este artista; os vídeos de origem são referenciados, nunca copiados.

Leia references/how-it-works.md uma vez antes de começar. Explica as três ideias nas quais todo o pipeline se baseia: camadas separadas de corpo e fogo, tratamento de exposição e normalização ancorada nos pés.

0. Configuração (uma vez por máquina)

cd $KIT && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt

Use uma compilação nativa do Python para a máquina (no Apple Silicon, um Python para x86 instala silenciosamente um PyTorch antigo, apenas para CPU). ffmpeg e ffprobe devem estar no PATH. Uma GPU (Apple MPS ou CUDA) é fortemente recomendada: a renderização custa aproximadamente 3 s por quadro de saída em um M2 Max. Os pesos do modelo são baixados no primeiro uso.

Abaixo, py significa $KIT/.venv/bin/python e os comandos são executados a partir do diretório do projeto.

1. Solicite a filmagem correta

Peça ao artista os arquivos originais da câmera, não uma exportação editada ou de mídia social. Olhe na pasta que eles indicarem: um original 4K, 10 bits, 50 fps geralmente está ao lado de um corte final de 720p, e tudo a jusante é melhor a partir dele. Pergunte também se há filmagem deles andando ou parados antes do fogo ser aceso: rotinas com fogo raramente contêm um ciclo de caminhada limpo, e os jogos precisam de um.

mkdir -p ~/sprite-projects/NOME && cd ~/sprite-projects/NOME
py $KIT/tools/ingest.py principal "/caminho/para/original.mov"      # repita com outros nomes para outros clipes

Leia o que a ingestão imprime. Ela mede o nível real de preto (as tags de faixa de arquivo não são confiáveis) e avisa sobre fontes de 8 bits, baixa resolução e taxa de quadros variável. A taxa de quadros variável deve ser corrigida primeiro (re-codificar para taxa de quadros constante), ou os números dos quadros divergem entre o proxy e a fonte.

2. Encontre filmagem utilizável

py $KIT/tools/pose_pass.py principal                             # lento: cerca de 15 quadros proxy por segundo
py $KIT/tools/find_segments.py principal --strips                # adicione --performer pele se uma multidão vestida estiver em cena
py $KIT/tools/find_bursts.py principal                           # respirações de fogo, encontradas pelo brilho
  • find_segments mantém sequências onde o corpo inteiro está no quadro e ereto. Espere que uma fração da filmagem se qualifique: câmeras portáteis cortam os pés constantemente. Isso é normal; informe o artista o número.
  • Olhe para alguns strips/*.jpg você mesmo. Se rastrearem a pessoa errada, mude para o modo --performer.
  • Olhe para bursts/principal.jpg. Mantenha apenas respirações de fogo reais, então py $KIT/tools/catalog.py add-bursts principal (e exclua quaisquer entradas erradas de catalog/selected.json). As respirações de fogo são encontradas dessa forma porque a busca baseada em pose rejeita quadros estourados.

3. Cataloque os movimentos (use subagentes)

py $KIT/tools/catalog.py batches 5

Dê cada lote a um subagente usando o prompt em references/catalog-prompt.md (preencha o número do lote e descreva o artista em uma linha para que os revisores possam rejeitar a pessoa errada). Eles leem as tiras de filme numeradas por quadro e escrevem catalog/outK.json. Este é o passo que mais se beneficia de agentes paralelos: é pura observação, e cada lote é independente. Então:

py $KIT/tools/catalog.py select            # pré-seleção: qualidade >= 4, mais caminhadas/giros/rotações/golpes com 3
py $KIT/tools/catalog.py list

Informe claramente ao artista o que foi encontrado e o que não foi (por exemplo: "13 paradas, 8 giros, mas apenas uma caminhada real, do clipe antes do fogo ser aceso").

4. O artista corta e escolhe

py $KIT/tools/make_trim.py                 # um clipe de contexto por movimento + trim.html
open trim.html

As faixas dos revisores são deliberadamente apertadas; os movimentos reais precisam respirar no que vem antes e depois. No trim.html, o artista arrasta o início e o fim de cada movimento por alguns segundos da filmagem ao redor, marca Manter ou Descartar, e copia a lista da caixa na parte inferior. Peça para colarem para você. A página armazena seu estado no navegador deles, então você não pode lê-lo sozinho. Salve o texto colado em um arquivo e:

py $KIT/tools/catalog.py apply-trim mantidos.txt

5. Renderizar, empacotar, revisar

py $KIT/tools/render_move.py --kept        # demorado: execute em segundo plano
py $KIT/tools/pack.py --kept
open review.html

Antes de relatar, veja você mesmo vários arquivos moves/NOME/preview.jpg. Coisas para verificar e dizer em voz alta:

  • outra pessoa mesclada no recorte (defina "gate": true nesse movimento em catalog/selected.json se o movimento não tiver adereço, então re-renderize com --force);
  • parede iluminada pelo fogo aparecendo na camada de fogo;
  • pés ou cabeça cortados: render_move imprime a parcela de cada faixa com o corpo inteiro no quadro. Cortes estendidos geralmente encontram filmagem onde o artista sai do quadro.

review.html reproduz cada movimento com fundo e alternância de camadas, incluindo "corpo + brilho aditivo do fogo", que é como um jogo deve desenhar. atlas.json tem a grade de quadros, taxa de quadros, âncora dos pés e faixa de origem por movimento.

6. Opcional: Look de 8 bits

Se quiserem uma versão retro, use o skill fire-sprites-retro.

Regras de honestidade para este trabalho

  • Relate contagens e limites, não apenas sucessos: quantos segundos foram utilizáveis, quais movimentos têm membros cortados, quais camadas de fogo incluem parede.
  • A filmagem impõe limites rígidos. Uma nuvem de fogo que sai do quadro da câmera tem uma borda reta; uma chama estourada não tem textura interna para recuperar. Diga isso em vez de prometer uma correção.
  • Nunca coloque a filmagem, nome ou sprites renderizados do artista em lugar público. As saídas permanecem no diretório do projeto, a menos que eles peçam o contrário.

Veja references/troubleshooting.md para problemas encontrados na prática e o que os resolveu.

Habilidades Relacionadas