Communitygithub.com

Moosphan/cinematic-shortfilm

Especificações completas e workflow para curtas-metragens científicos de estilo cinematográfico (70–300s) — roteiro/narração (Qwen3-TTS VoiceDesign voz masculina), sistema visual Remotion + Canvas partículas/SVG, trilha sonora sintetizada por código, mixagem externa e entrega em 4K, verificação de fatos e pacote de publicação. Carregue ao criar filmes como 'Uma Breve História da Humanidade · Autorretrato do Cosmos' e 'Descida · DESCENT', ou para reutilizar suas especificações.

O que é cinematic-shortfilm?

Este skill define um padrão unificado de produção para curtas-metragens científicos com estilo cinematográfico, com duração entre 70 e 300 segundos. Ele documenta as especificações, fluxos de trabalho, estilos visuais e sonoros, e lições aprendidas de dois filmes de referência: 'Uma Breve História da Humanidade · Autorretrato do Cosmos' (4K, 4'58") e 'Descida · DESCENT' (2K, 1'30"). O workflow prioriza o áudio sobre o vídeo: primeiro o roteiro gera a narração (usando Qwen3-TTS VoiceDesign com voz masculina documental), depois mede-se a duração de cada fala para definir o número de quadros por cena. A parte visual é criada com Remotion, utilizando partículas em Canvas 2D, SVG para elementos biológicos e geográficos, e um sistema de cores com paletas específicas para cada filme (ex.: âmbar para cosmos, ciano para profundezas oceânicas). A música é sintetizada puramente com NumPy, seguindo regras para evitar graves excessivos e garantir níveis de loudness adequados para documentários (−18 a −24 LUFS). A renderização final combina vídeo silencioso (sem áudio) com áudio mixado externamente via ffmpeg. O skill também inclui regras rigorosas de verificação de fatos, checklist de entrega (com múltiplos formatos de vídeo, pôsteres e documentação), e um registro de problemas comuns e soluções. É ideal para desenvolvedores e criadores que desejam produzir conteúdo científico de alta qualidade, com fluxo de trabalho reprodutível e profissional.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moosphan/hulk-skills/tree/HEAD/skills/cinematic-shortfilm

Perguntar na sua IA favorita

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

Documentação

Curta-metragem Científico Cinematográfico · Padrão de Produção Unificado v1

Fonte: "Uma Breve História da Humanidade · Autorretrato do Cosmos" (4K / 4'58" / 14 cenas) e "Descida · DESCENT" (2K / 1'30" / 90 segundos de perfil vertical). As especificações, fluxos de trabalho, estilos e armadilhas de ambos os filmes estão todos aqui. Para um novo filme, leia primeiro as seções 0 e 1, depois leia as seções relevantes para este projeto.


0. Regras de Ferro (violar qualquer uma resulta em retrabalho)

  1. Primeiro o som, depois a imagem. Gere a narração frase por frase → meça a duração → a partir da duração, calcule o número de quadros por cena. Nunca organize as imagens primeiro e depois adicione o áudio.
  2. Narração e dados devem ser consistentes: Os números, unidades e grandezas que aparecem no filme devem ser verificados item por item na tabela de fatos; se a narração diz 98, a imagem não pode mostrar 90. Erros de unidade (como pressão atm ↔ t/m²) são dez vezes mais graves do que uma cor errada.
  3. Uma cena, uma informação: Cada cena permite apenas um tópico principal + no máximo 3 leituras; informações adicionais vão para a narração.
  4. O texto deve ser sempre legível: Qualquer texto deve ter um fundo ou escurecimento por baixo; nomes de camadas ≥ 30px, leituras ≥ 13px. A opacidade do texto pequeno não deve ser inferior a 0,6.
  5. Sem cortes secos: Use dissoluções / respiros de tela preta / movimento contínuo entre as cenas; o mesmo filme deve usar apenas uma linguagem de transição.
  6. Renderização silenciosa: No Remotion, desligue todos os <Audio> com {false && ...}. O áudio será incorporado externamente pelo ffmpeg (WAVs longos podem travar a renderização no pré-processamento de áudio).
  7. Antes de renderizar, execute npx tsc --noEmit sem erros, caso contrário, você renderizará uma série de quadros ruins e terá que recomeçar.
  8. Três coisas antes da entrega: Verificação da duração total, verificação do primeiro e último quadro, verificação quadro a quadro das transições principais (3–6 quadros cada).

1. Pipeline Padrão (em ordem, sem pular)

script.json ──► Geração de VO ──► Pós-processamento de VO ──► Tabela de Duração ──► Linha do Tempo
                                   │
                                   └──► Trilha Sonora (numpy)──► Mixagem ──► master.m4a
Imagem (Remotion)──► Renderização Silenciosa ──► ffmpeg mux ──► Entrega

1.1 Roteiro

  • Um arquivo por item: script.json, campos id / act / text / caption.
  • Narração em chinês ≈ 4,2 caracteres/segundo; um filme de 60 segundos ≈ 200–230 caracteres, 90 segundos ≈ 300–340 caracteres.
  • Escreva os números como são lidos em chinês ("三千六百八十八"), caso contrário, o TTS pode lê-los incorretamente; na imagem, use algarismos arábicos.

1.2 Narração (Qwen3-TTS VoiceDesign, voz masculina documental)

INSTRUCT = ("A deep, calm, authoritative male documentary narrator. Slow, deliberate, cinematic. "
            "Low register, warm, intimate, restrained emotion, close-mic. Consistent, even pacing. Mandarin Chinese.")
generate_audio(text=..., model=model, lang_code="zh", instruct=INSTRUCT,
               temperature=0.65, top_p=0.9, repetition_penalty=1.05,
               output_path="vo_raw", file_prefix=id)
  • Modelo mlx-community/Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16, semente fixa mx.random.seed(11).
  • Após gerar cada item, verifique imediatamente a duração com ffprobe: Se um item > 30 segundos ou apresentar repetições inteiras, o TTS está degradado; exclua e regere (mude a semente ou aumente repetition_penalty para 1.12).
  • Revisão ASR: Use mlx_whisper para transcrever e verificar números/palavras raras (como hidrogênio, silício, ferro).

1.3 Pós-processamento de Áudio (cadeia unificada, não permitir variações)

highpass=f=70,
asetrate=24000*0.912341, aresample=48000, atempo=1.096081, atempo=1.055,
equalizer=f=190:t=q:w=1.0:g=1.4, equalizer=f=3300:t=q:w=1.4:g=-1.8, equalizer=f=7200:t=q:w=1.8:g=-1.0,
acompressor=threshold=0.14:ratio=2.2:attack=10:release=200,
loudnorm=I=-20:TP=-3:LRA=7

Em seguida, corte o silêncio inicial e final com base no envelope de energia de 20ms, comprima pausas com mais de 0,34 s para 0,34 s, e aplique fades de 12ms/50ms em ambas as extremidades.

1.4 Linha do Tempo

  • frames = round(seconds * 24); deslocamento da narração = início da cena + lead (geralmente 18–24 quadros).
  • Cada cena: lead + vo + tail, tail 16–90 quadros (dar tempo suficiente para o final).
  • Gere timeline.ts (gerado automaticamente, não modifique manualmente), campos { id, from, dur, voAt, voDur }.

1.5 Trilha Sonora (sintetizada por código, numpy)

  • Deve ter estrutura, não ser contínua: Escreva "eventos" com base no código de tempo, em vez de um pad contínuo.
  • Harmonia: Mude a cada 12–18 segundos, com crossfade nas junções; o baixo deve ser apenas uma nota sustentada acima de 55 Hz.
  • Sem ruído de baixa frequência: O público pode descrever como "zumbido" ou "muito alto". Corte o baixo em 85–100 Hz, use tons puros senoidais para notas longas, sem harmônicos de oitava.
  • Priorize o silêncio: O nível da música deve ser aproximadamente −20 ~ −27 dB em relação à narração; quando a narração aparecer, comprima 40–70% (sidechain ducking).
  • Loudness final da mixagem: Documentário −18 ~ −24 LUFS (não −14, que é para música pop de streaming).
  • "Design de som" tutorial (como mergulho na água, sonar, rangido de metal) adicione apenas se o cliente solicitar explicitamente; já foi rejeitado uma vez, não use por padrão.

1.6 Imagem (Remotion)

Consulte a seção 2.

1.7 Renderização e Mixagem

npx tsc --noEmit
npx remotion render Film4K out/silent.mp4 --codec=h264 --crf=18 --concurrency=7
ffmpeg -i out/silent.mp4 -i public/audio/master.m4a \
  -map 0:v -map 1:a -c:v copy -c:a aac -b:a 320k -shortest -movflags +faststart out/final.mp4
  • 4K = layout 1920×1080 + transform: scale(2); 2K = scale(2560/1920). Escreva apenas um layout.
  • Retrabalho local: Renderize apenas o intervalo de quadros alterado → ffmpeg trim/concat para unir três partes → -c:v copy apenas para substituir a faixa de áudio; se precisar alterar a imagem, recodifique e una as três partes (cerca de 5–10 minutos).

2. Sistema Visual

2.1 Fundo

  • Tela 1920×1080, 24 fps; fundo AbsoluteFill próximo ao preto (#01050A / #010407), nunca use preto puro #000.
  • Estrutura de três camadas: Gradiente de fundo → Luz volumétrica/partículas → Camada de informação (texto, escala de profundidade, leituras).
  • Final unificado: Vignette + Grain estático (0.04, deve ter animate={false}, grãos dinâmicos fazem linhas finas piscarem).

2.2 Fontes

  • Título/poesia: Songti SC (serif), espaçamento entre caracteres 0,4–0,6em, tamanho grande (90–250px).
  • Dados/leituras: SF Mono, 8–14px, espaçamento entre caracteres 0,16–0,36em.
  • Explicação: PingFang SC, 14–19px, opacidade 0,55–0,7.

2.3 Paleta de Cores ("Cores do Mundo" de cada filme)

Tipo de FilmeParte Superior ClaraMeioFundoCor de Destaque
Cosmos / TempoFundo #050506Creme #F3E7D0—Âmbar #E8B06A
Oceano / ProfundidadeSuperfície #1E7C93#07232E#01050ACiano #4FE0C0

Regra: Um filme usa apenas uma cor de destaque; exceções como bioluminescência/fontes hidrotermais podem ter no máximo duas, e cada uma deve estar vinculada a uma grandeza física.

2.4 Motor de Partículas (Canvas 2D)

  • Aleatoriedade determinística (hash), o mesmo quadro sempre produz o mesmo resultado; tipos de nuvem: ball / filament / disk / globe-surface / sphere-shell / figure / city / helix / neuron / glyph / single / text / timeline.
  • Duas passagens de desenho: primeiro um raio grande com baixa opacidade para brilho, depois um raio pequeno com alta opacidade para o núcleo; globalCompositeOperation = 'lighter'.
  • A borda da nuvem de pontos deve estar fora da tela: makeCloud('text', n) cria uma caixa 3×1.2, que após a projeção pode mostrar bordas retangulares (o bug mais frequentemente apontado pelo público). Use expand(cloud, kx, ky, kz) para aumentar 2.4–3.2 vezes.

2.5 Biologia e Terreno (SVG)

  • Sempre vista lateral, cabeça na direção do movimento; olhos, barbatanas, linha da boca, dobras da garganta, cracas e outros detalhes anatômicos devem ter pelo menos 4 pontos, caso contrário, parecerá uma textura.
  • Silhueta + luz de borda (opacidade 0.2–0.35); não use feTurbulence sobreposto ao corpo (ficará granítico).
  • Terreno: Linhas poligonais múltiplas + linhas de camadas de rocha + detritos + sedimentos, não triângulos; montanhas não devem ter uma linha de base (senão parecerá um gráfico).
  • A janela de aparecimento de criaturas deve ser vinculada à "profundidade/tempo"; não mostre mais de três tipos ao mesmo tempo.

2.6 Camada de Informação (HUD)

  • Identificador de camada: fundo gradiente escuro (0.72→0) + barra vertical de cor de destaque de 2px à esquerda + texto chinês branco puro 30–35px.
  • Leituras: 2–3 grupos por camada, LABEL 8.5px / VALUE 13–14.5px.
  • Régua de escala: linhas de marcação + valor atual em negrito; o valor atual deve ser calculado em tempo real, não fixo (fixo entrará em conflito com o ponteiro).
  • Todos os números com unidades; unidades separadas por espaço (1,093 atm).

2.7 Transições

  • Primeira opção: Movimento contínuo (plano-sequência): profundidade/tempo é uma grandeza contínua, o conteúdo entra e sai da tela com ela.
  • Segunda opção: Dissolução curta (4–6 quadros, apenas o novo quadro aparece, o antigo permanece opaco e é sobreposto) — o brilho não cai, o HUD não sobrepõe texto.
  • Desabilitado: varredura diagonal, longa dissolução cruzada, empurrão vertical (pode revelar bordas escuras), corte seco após tela preta (a menos que seja um movimento físico como "mergulho na água").

3. Fatos e Dados

  • Crie um facts.md: cada Número / Unidade / Fonte / Como escrever no filme.
  • Três erros mais comuns: ① Conversão de unidades (1 atm ≈ 10.3 t/m² ≈ 1.03 kgf/cm²); ② Confundir "média" com "extremo" (média 3.688 m vs. mais profundo 10.935 m); ③ Simplificação (90 vs. 98 elementos).
  • Use uma versão precisa e unificada em todo o filme; narração e imagem devem ter a mesma fonte.

4. Lista de Entregas

deliverables/
   NomeDoFilme-4K-VersaoComNarracao.mp4           # Versão principal
   NomeDoFilme-4K-VersaoSoMusica.mp4         # Se necessário
   Poster-4K.png / Preview-4K.png    # Composição de quadros-chave
   Capa/                        # 1920 PNG + 4K PNG + 1146×717 JPG
   DeclaracaoDoDiretor.md                  # Estrutura, som, registro de alterações
   TextoParaPublicacao-Bilibili.md              # Título/Descrição/Tags/Comentário fixado/Sugestão de capa
   TabelaDeFatos.md

O pacote de publicação deve incluir: declaração de geração por IA, divisão de trabalho (o que o modelo fez, o que o humano fez), e um comentário fixado com "números fáceis de errar".


5. Registro de Problemas (ordenado por frequência de ocorrência)

FenômenoCausa RaizSolução
Renderização travada no pré-processamento de áudioWAV longo + <Audio>Renderização silenciosa, mux externo
Texto borrado sobre partículasSem fundo + opacidade 0.4–0.5Fundo + branco puro + aumentar tamanho da fonte
Aparecimento de retângulos regulares na tela (o que o público mais pergunta)Borda da caixa da nuvem de pontos dentro da telaexpand() aumentar 2.4–3.2×
Linhas finas / montanhas piscandoGrãos de filme dinâmicosGrain animate={false}
Baleia/peixe "nadando para trás"Cabeça e cauda desenhadas ao contrário, olho na caudaReconstruir vista lateral: cabeça em +x
Montanha parece um gráficoCaminho com L ... Z fechando linha de base horizontalAfundar borda inferior para fora da tela
Transição interrompe a linha de visãoVarredura de luz / longa dissoluçãoDissolução curta ou movimento contínuo
Trilha sonora "zumbindo"Baixo contínuo de 27–80 HzHigh-pass 85–100 Hz, remover sub drone
Sincronia áudio-vídeoBatida da imagem não corresponde ao conteúdo da narraçãoReorganizar curva de profundidade/tempo com base no conteúdo da narração
TTS de 600 sLoop de degradação do modeloExcluir e regenerar, repetition_penalty 1.12
Retrabalho 4K muito lentoRenderizar o filme inteiro novamenteRenderizar apenas o intervalo de quadros alterado + concat

6. Localização dos Dois Filmes de Referência

  • "Uma Breve História da Humanidade · Autorretrato do Cosmos": ~/dsh-video-remotion/film/src/scenes/*, 14 cenas, 4K, 4'58".
  • "Descida · DESCENT": ~/dsh-video-remotion/film/src/ocean/*, 6 faixas, 2K, 1'30"; narração e trilha sonora em ~/dsh-video-remotion/ocean/.
  • Ambos compartilham src/engine/particles.tsx (partículas), src/engine/atmos.tsx (Vignette/Grain), src/theme.ts (fontes/paletas/easing).

Habilidades Relacionadas