make-ai-short

Cria um curta vertical GENERATIVE-pixels (1080×1920, ~35-40s) do início ao fim — um personagem fixo e recorrente animado por um modelo de vídeo da fal (Seedance 1.5 Pro padrão) sob uma narração filosófica/de história, composto no Remotion com legendas sincronizadas com as palavras, audição de SFX e loop perfeito frame-0==último-frame. Use quando o usuário quiser "criar um curta de vídeo com IA", "fazer um curta de IA", "fazer um vídeo do homem azul" ou qualquer curta onde os pixels venham de um MODELO DE VÍDEO — não de animação TSX (isso é make-short) e nem colagem em camadas (isso é make-vox). Delega a reescolha do modelo para ai-shorts/IDEAS.md, regras de crash TSX para vidtsx-2d-generator e gosto de SFX para suggest-sfx + brand §7. Para um NOVO curta (sala de roteiristas, esquetes com diálogo, documentários, caminhos de renderização mistos), comece com shorts-director, que chama esta trilha como um mecanismo.

O que é make-ai-short?

O skill `make-ai-short` é um sistema especializado em criar curtas-metragens verticais de 35 a 40 segundos (1080×1920) gerados por modelos de vídeo como Seedance 1.5 Pro. Diferente de animações TSX puras ou colagens, ele gera os quadros (pixels) a partir de um modelo de vídeo e usa o Remotion apenas para composição dos clipes, legendas e efeitos. A principal inovação é o loop perfeito: o primeiro quadro do vídeo é reutilizado como imagem final, garantindo que a animação volte ao início suavemente. O skill impõe três regras inflexíveis: (1) o personagem é definido uma única vez por um `character.json` e `character.png` — todas as imagens e clipes o usam como referência; (2) o custo de cada geração é calculado e informado ao usuário antes de ser executado (~$0.0583/s para Seedance 1080p sem áudio); (3) o loop é garantido por um frame alvo (frame 0 do primeiro clipe), passado como `end_image_url` para o último clipe. O fluxo de trabalho é orientado por artefatos: o script (`script.md` + `beats.json`) define momentos de fala e ação; a voz é gerada primeiro (ElevenLabs), determinando as janelas exatas de cada clipe; depois as imagens de início são criadas; e só então os clipes de vídeo são gerados em paralelo. A sincronização labial para diálogos com múltiplos personagens é feita após os clipes, substituindo as bocas do modelo pelas corretas. O skill suporta as plataformas fal e kie.ai para geração de vídeo, e usa Remotion para composição final com legendas, crossfades e efeitos sonoros. Ele é um mecanismo chamado pelo `shorts-director` para novos projetos, ou pode ser usado diretamente para curtas com personagem fixo e loop narrativo.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gbax316/shorts-director/tree/main/.claude/skills/make-ai-short

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

make-ai-short — curtas generativos, do início ao fim

Os pixels vêm de um modelo de vídeo; o Remotion apenas compõe clipes + legendas. Comprovado no homem-azul #1 "The Door". Irmão do /make-short (100% TSX) — mesma disciplina, mais três portões que o TSX nunca precisou: custo informado antes de gerar, personagem fixado a partir de character.json, loop preso via condicionamento do frame final.

Execute tudo a partir da raiz do repositório. Precisa de FAL_KEY (clipes + imagens) e ELEVENLABS_API_KEY (voz) no .env.

As três regras de ferro

  1. NUNCA gere um personagem a partir de texto duas vezes. ai-shorts/<char>/character.json + character.png é a referência fixada. Qualquer imagem que precise do personagem é gen_image.py --ref character.png; cada clipe é imagem-para-vídeo a partir de um quadro que já o contém. Se ainda não existir uma ficha do personagem, criar UMA (e obter a aprovação do usuário) é uma etapa própria antes de qualquer outra.
  2. INFORME O CUSTO ANTES DE GASTÁ-LO. Derivado, não cotado: Seedance 1080p sem áudio = h×w×24×dur/1024 tokens × $1,2/1M ≈ $0,0583/s (API de precificação da fal validada em 2026-07-14 — veja ai-shorts/IDEAS.md para a tabela completa + as armadilhas do Wan/Veo-Lite). Sempre generate_audio:false — a voz é ElevenLabs, o som é nosso pipeline de SFX.
  3. Loop por RESTRIÇÃO, não por sorte. O verdadeiro quadro 0 do primeiro clipe (extraído do clipe, não da imagem de prompt) é o alvo do loop. O último clipe o passa como end_image_url (Seedance/Kling), e a composição se acomoda nessa imagem exata ao longo dos últimos ~10 quadros (padrão LoopSettle em remotion/src/shots/ai-1/Ai1Door.tsx).

Contrato de artefatos

ai-shorts/<name>/
  script.md · beats.json      — mesmo contrato do /make-short (vo[] com tempos reais de palavras)
  character.json              — A REFERÊNCIA FIXADA (+ bloco video_model = o modelo escolhido)
  shots/NN-slug.png           — quadro INICIAL de cada clipe (gen_image.py --ref character.png [--ref scene])
  shots/NN-slug.json          — sidecar do gen_clip (modelo, payload, id da requisição)
  shots/upload-urls.json      — urls de armazenamento da fal (uploads são reutilizáveis entre re-rolls)
  voice/ · sfx-plan.json · output/                                          [voice/output gitignored]
remotion/src/shots/ai-N/      — composição + vo.gen.ts
media/projects/<name>/        — AS cópias dos clipes para staticFile() (commitados — pixels não
                                 são reproduzíveis; cópias de trabalho shots/*.mp4 são gitignored)

Ordem das operações (voz antes dos pixels)

  1. Roteiro — script.md + beats.json. Gancho composto no quadro 0; a tese DEVE desejar o loop (homem-azul #1: "a chegada é um mito" → final = caminhando em direção à mesma porta). ~80-100 palavras, janelas de 2,5-2,7 pps. Nunca ter um CTA de engajamento no final — termine no clímax, o loop é o final.
  2. VOZ PRIMEIRO — python tools/gen_voice.py --beats ... --emit-ts remotion/src/shots/ai-N/vo.gen.ts (voz e modelo do .env, ou um bloco "voice" no beats.json quando uma série quiser um narrador como George JBFqnCBsd6RMkjVDRZzb com tags eleven_v3; aja nas flags do LINE CHECK como no make-short Stage 4 antes de qualquer clipe ser gerado). Os tempos reais das palavras decidem as janelas dos clipes; o Seedance aceita durações inteiras de 4 a 12s, portanto arredonde os comprimentos dos clipes PARA CIMA a partir das janelas. Diálogo (dois ou mais personagens): o "cast" no beats.json mapeia cada falante para seu character.json (cujo bloco "voice" é usado), cada linha de voz nomeia seu falante em "who", e --pack 0.3 coloca as linhas ponta a ponta a partir de seus comprimentos reais, em vez de comprimi-las em janelas estimadas. Uma voz por personagem vive em seu character.json, em nenhum outro lugar. Bocas no diálogo: o modelo de vídeo não sabe quem está falando; ele faz ouvintes falarem, congela quem fala e estica uma risada para a próxima frase. Depois dos clipes, execute python tools/mouth_sync.py ai-shorts/<name> (o "shots" no beats.json dá a cada clipe seu início e comprimento globais; cada bloco "mouth" no character.json dá lado, raio, zona, estilo e keep_above). Ele apaga as bocas do modelo e desenha a boca de cada personagem a partir da intensidade da trilha de voz. Faça QA da mesma forma: ambos os rostos a cada meio segundo contra quem está falando. Uma mudança de ação dentro de uma linha (rir, depois falar) são dois clipes, o segundo iniciado a partir do quadro do primeiro no corte. Em seguida, escaneie cada clipe com boca quadro a quadro: um pico acima de quatro vezes a mediana do clipe é um corte, um gesto rápido ou uma morfose de dois quadros com características fantasmas; liste os quadros de morfose no "hold" desse clipe e execute novamente, para que o salto seja reproduzido como um corte limpo.
  3. Quadros iniciais — um por clipe, python tools/gen_image.py --model pro --aspect 9:16 --ref character.png (+ o quadro estático da cena do clipe 1 como uma 2ª referência quando um local/prop deve corresponder entre os clipes). Faça QA de CADA PNG antes de qualquer chamada de vídeo — é aqui que corrigir derivações é barato.
    • Observe mãos, detalhes de roupa, proporções — nomeie-os explicitamente no prompt nos re-rolls.
    • A geometria deve ser caminhável (lição do clipe 6, custou 2 re-rolls): com um pino de quadro final, o quadro inicial deve permitir que o movimento ALCANCE o estado final caminhando para frente — se o quadro final do personagem estiver MAIS PERTO da câmera do que o inicial, o modelo gera um clone. Inicie-o maior/mais próximo do que o estado final para que o movimento para frente o encolha.
  4. Clipes — informe o custo total derivado, depois python tools/gen_clip.py por clipe em paralelo (--set image_url=<url de armazenamento fal> --set 'duration="N"' --set resolution=1080p --set generate_audio=false, clipe final --set end_image_url=<url do frame0>). Faça upload das referências uma vez via bakeoff_clip.upload_ref; mantenha as urls em shots/upload-urls.json. O formulário fal acima é o padrão deste checkout (CLIP_PROVIDER=fal, FAL_VIDEO_MODEL no .env). No kie.ai (--provider kie): os nomes dos campos seguem o modelo kie, não o fal. Para bytedance/seedance-2: --aspect none --set first_frame_url=@ai-shorts/<name>/shots/NN-slug.png --set duration=N --set resolution=1080p --set generate_audio=false, clipe final --set last_frame_url=@<frame0.png>. @path faz upload do arquivo local (o kie o mantém por 24h, então a reutilização de upload-urls.json só é válida dentro de um dia). Custo: kie.ai/pricing, não a tabela fal; a execução imprime os créditos usados. bakeoff_clip.py ainda é apenas para fal. Forneça a cada clipe: frase exata do personagem + "EXATAMENTE UM personagem na cena durante todo o clipe" (clones são a falha #1) + movimento de câmera + "sem morfose" + linha de estilo.
  5. QA dos clipes, quadro a quadro — tira início/meio/fim por clipe + uma comparação lado a lado do último quadro do clipe final vs o alvo do loop. Re-role as falhas (informe o custo do re-roll); um re-roll de 5s 1080p é ~$0,29 — barato perto de enviar um clone.
  6. Composição — Sequências de OffthreadVideo em UMA única linha do tempo, sobreposição de crossfade de ~8 quadros (os clipes são ~1s mais longos que suas janelas — essa é a folga), Captions + ProgressBar na raiz, LoopSettle com dissolve no final. Copie os clipes finais para media/projects/<name>/. npm run gen, frames.mjs nos limites + heróis, LEIA cada PNG, depois render-all --scale=1 e multiplexe voice.wav.
  7. SFX — fluxo do /suggest-sfx. Calibração de VO com lacunas (homem-azul #1): as pistas nas lacunas da VO não recebem mascaramento nem duck — elas precisam de ~7-8 dB MENOS do que a tabela de narração densa (whooshes em lacunas -9..-13, não -3..-5). Verifique com volumedetect RMS contra uma referência de média da fala; a camada herói pode beijar o nível da voz uma vez. A mixagem de audição aguarda o ouvido do usuário (portão rígido).
  8. Salvar de volta — catalogar used_in, timings reais do beats.json (gen_voice os escreve), sidecars commitados, ledger de custos no relatório final.

Pronto =

personagem consistente em todos os quadros de todos os clipes (QA quadro a quadro) · loop verificado (último quadro vs quadro 0 lado a lado) · legendas com tempos reais das palavras · custos informados antes de cada gasto e totalizados após · audição de SFX renderizada, aguardando o ouvido do usuário · nenhum CTA de saída. · tools/check_text.py limpo no texto falado e na tela · cópia para celular feita com tools/export_phone.py · uma entrada datada em LESSONS.md (e o skill atualizado, em termos gerais, se a lição mudar a forma como funciona).

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

gbax316/shorts-director

Directs a faceless vertical short from idea to finished, mastered file, and gets better with every run. Picks a format, writes the episode in a writers' room (three premises judged as the buyer), voices it, gates on an animatic, then decides beat by beat how each moment is made: drawn in code in Remotion, a cut-out from a generated still, a generated clip, or one of the engine tracks. Modes: series, writers-room, produce, sound, finish, bakeoff, effects (/effects), improve (the learning loop after every short). Formats so far: character skit with dialogue and synced mouths, photoreal mini documentary with sourced figures. Triggers on "make a short", "next episode", "make a video about X", "faceless video", "reel for this offer". Do NOT trigger for editing an existing video file, for a pure code-drawn explainer with no writers' room (make-short), or for collage (make-vox).

gbax316/vidtsx-2d-generator

Generate production-ready 2D TSX video files for VidTSX (Remotion-based) from a shot, scene, or video description. Use whenever the user wants to create or generate a VidTSX video, a 2D TSX shot or scene, an animated clip, title card, or rendered motion graphic — including when they describe a visual animation they want built, or say "make a shot", "build this scene", "generate the TSX", or "turn this into a video". Covers the mandatory file structure and composition config, dimension presets (horizontal/vertical/square), six style presets (minimalist, memphis, neo-brutalism, glassmorphism, neon, corporate), and the hard rules that keep renders from crashing, covering frame-based animation only (no useState/useEffect/setTimeout), strictly monotonic interpolate ranges, Easing.bezier not wrapper syntax, and the chroma-js and @remotion/paths import gotchas. Not for 3D/three.js compositions, general React work, or editing video files.

Habilidades Relacionadas