Communitygithub.com

Faceless Shorts

Crie reels, YouTube Shorts e TikToks explicativos com mascotes cartoon programaticamente no seu computador, usando código, voz AI local e sincronização labial - sem custos extras além do plano Claude.

O que é Faceless Shorts?

Faceless Shorts é uma skill avançada para agentes AI (como Claude Code) que permite a criação completa de vídeos verticais curtos no estilo "mascote explicador" (9:16, 30-45s). A skill transforma um tópico em um vídeo finalizado (MP4) composto por: roteiro, narração gerada localmente (voz Kokoro), legendas sincronizadas palavra por palavra (via Whisper), cenas animadas desenhadas em canvas, efeitos sonoros e música. Tudo é executado em código puro no computador do usuário — sem depender de APIs externas, imagens AI ou créditos adicionais além do plano Claude. O estilo principal, "mascot-explainer", cria um mascote cartoon chato a partir de uma foto do usuário (com rigging e sincronização labial), que apresenta passos numerados em cartões, com tiles que se chocam em um selo de canto, uma checklist ao vivo, legendas no headline palavra por palavra e efeitos de câmera shake + som a cada impacto. A skill é ideal para vídeos explicativos de como-fazer, dicas, passos para alcançar algo, especialmente nas áreas de tecnologia, finanças e produtividade onde o criador é a marca. O fluxo completo inclui: configuração inicial (Node 22+, ffmpeg, Chrome, modelos de voz e transcrição), coleta de informações do usuário em uma única mensagem, planejamento detalhado (roteiro, cenas, componentes), construção passo a passo (roteiro, voz, legendas, animação, captura, mixagem), QA rigoroso (verificação quadro a quadro) e entrega do MP4 final, com opção de publicação no YouTube via Zapier (apenas com autorização explícita do usuário). A skill impõe regras estritas: nunca usar imagens ou vídeos gerados por AI, nunca gastar dinheiro ou créditos do usuário, nunca copiar roteiros ou quadros de outros criadores, e sempre verificar cada quadro antes de entregar.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/nestedbit/faceless-shorts/tree/HEAD

Perguntar na sua IA favorita

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

Documentação

O que Faceless Shorts faz?

Você cria um vertical curto finalizado a partir de um tópico: roteiro, voz, legendas sincronizadas com as palavras, cenas animadas, som e música, renderizado em MP4. Tudo é código: desenho em canvas, captura headless do Chrome, ffmpeg, uma voz Kokoro local, timing de palavras Whisper local, som numpy. Sem imagens ou vídeos AI, sem chaves de API, sem créditos extras. SKILL = a pasta onde este arquivo está. Os projetos ficam em ~/faceless-shorts/<nome-do-short>/.

Um estilo: Mascot Explainer (mascot-explainer). VOCÊ como um mascote cartoon chato (desenhado em código a partir de uma foto, com rigging e sincronização labial) apresentando "N passos rápidos": um cartão de cada vez, tiles numerados que se chocam em um selo de canto, uma checklist ao vivo, legendas no headline palavra por palavra, câmera shake + um som a cada impacto. 30-45 s · 9:16. Melhor para tutoriais, dicas, "N passos para…", explicadores de tecnologia / finanças / produtividade onde o criador é a marca.

O estilo = styles/mascot-explainer/style-sheet.png (a aparência em uma imagem, desenhada pelo seu próprio código) + STYLE.md (as regras + o manual do motor) + example/ (um projeto completo que renderiza como está). Leia STYLE.md por completo antes de planejar.

0. Primeiro uso em um computador

bash SKILL/scripts/setup.sh até imprimir All set (verifica Node 22+, ffmpeg, Chrome; constrói ~/.faceless-shorts/venv; baixa a voz Kokoro ~340 MB e Whisper small.en ~0,5 GB). Instale qualquer item faltante da forma oficial e gratuita, e pergunte antes de qualquer coisa que exija senha. Depois, bash SKILL/scripts/selftest.sh deve imprimir SELFTEST PASSED: abra a folha de contato e veja os nomes e os examine.

1. Entrada (UMA mensagem, preenchimentos padrão)

Pergunte apenas o que não for conhecido, tudo de uma vez: tópico (ou "você escolhe 3 ideias"), um link para um curto cujo formato eles gostem (opcional), duração (padrão ~30 s), voz (SKILL/scripts/py SKILL/scripts/voice.py --list; padrão am_michael), modo de narração: voz AI (padrão) · gravação própria (eles gravam depois de ver o roteiro; words.py --audio) · apenas legendas (sem voz ainda; estimate.py), música (trilha embutida · nenhuma · arquivo royalty-free próprio), linha final / nome de usuário, e uma foto nítida de frente deles (opcional) e uma roupa, ou o nome de um mascote salvo em ~/faceless-shorts/_mascots/. "Pode ir" = os padrões.

2. O plano (UMA tela, depois aguarde)

Mostre: título · a narração completa, uma linha por corte, com seus blocos de legenda (1. Olhe para o | *endereço do remetente) · a lista de cenas, uma linha cada (o que vemos, o que se move, em qual palavra aterrissa) · novos componentes que você adicionará ao kit, se houver · fatos e suas fontes. Pergunte "Construir?" e aguarde.

Regras do roteiro. Escreva como uma pessoa realmente fala com um amigo: frases completas e fluidas com palavras de conexão ("Bem,", "onde", "mas", "então", "o que significa"), não uma lista de afirmações curtas tipo legenda. ~90-110 palavras para 35 s. Uma linha é um CORTE, não uma frase: divida cada frase em 1-3 linhas em pausas naturais (vírgulas, "e", "onde"), para que a imagem mude a cada 1,5-3,5 s enquanto a voz continua fluindo (voice.py fala cada frase inteira de uma vez). Forma: um gancho com um número real e com fonte, uma promessa de uma linha, 3-6 passos que começam com "Um, …", uma ação final clara. Escreva números como são falados ("sete"). Leia em voz alta na sua cabeça: se parecer legendas, reescreva. Apenas escrita original: pegue um formato que você goste, nunca o roteiro ou as cenas de outro criador. Todo fato é verificado em uma fonte confiável (liste-as em script.json "sources").

3. Construção

  1. bash SKILL/scripts/new_video.sh mascot-explainer <nome-do-short> copia o exemplo para ~/faceless-shorts/<nome-do-short>/.
  2. Escreva script.json (linhas + legendas + pausas; veja STYLE.md). Crie o mascote primeiro (mascot.json, STYLE.md §2), renderize sua folha de poses e obtenha a aprovação do usuário antes de escrever qualquer cena.
  3. Timing: SKILL/scripts/py SKILL/scripts/voice.py <proj> depois SKILL/scripts/py SKILL/scripts/words.py <proj> (gravação própria: words.py <proj> --audio their.m4a; apenas legendas: estimate.py <proj>).
  4. Reescreva src/shots.js: uma cena por linha (ou duas para linhas longas), cada uma colocada com cut(i) e seus momentos-chave nas palavras com Wd('palavra', linha). Reutilize o kit (src/core/kit.js); adicione novos componentes lá, com a aparência do estilo.
  5. No projeto: node tools/capture.mjs check (deve dizer CHECK OK) → node tools/capture.mjs cues → SKILL/scripts/py tools/mix.py . → QA (seção 4) → node tools/capture.mjs video renders/<nome>.mp4. Iterando em uma cena: node tools/capture.mjs frames review/f "4.2,4.6" e veja.

4. QA: nunca mostre um quadro que você não examinou

node tools/capture.mjs sheet review/all.jpg 0.5 10 (um quadro a cada 0,5 s, com carimbo de tempo) e leia a folha inteira, depois os quadros-chave em tamanho real. Para cada quadro pergunte:

  • Faz sentido? Um cartão de cada vez; a pose do mascote combina com a linha; os objetos se movem com o que os segura. Nada aparece antes de sua causa.
  • Corresponde à narração naquele momento? A imagem muda pouco antes de sua linha; as revelações aterrissam na palavra certa.
  • Há alguma colisão? Braços, carimbos e explosões nunca cruzam o título, o cartão, o selo, a checklist ou uns aos outros acidentalmente.
  • Legendas: 1-4 palavras, no máximo uma palavra de destaque violeta, escritas corretamente, nunca mostradas antes de a palavra ser dita.
  • Folha de estilo: apenas a paleta, formas planas, sombras de tinta duras, vermelho apenas para perigo.
  • Som: voz clara sobre a música; efeitos suaves (sem ticks ou bipes ásperos). Corrija, re-renderize a folha, re-verifique. Informe o usuário sobre o que você encontrou e corrigiu.

5. Entrega

Abra o MP4 para o usuário. Também forneça: uma cópia para compartilhar se > 35 MB (ffmpeg -i in.mp4 -c:v libx264 -crf 21 -preset slow -c:a aac -b:a 160k -movflags +faststart share.mp4), o melhor quadro de capa (capture.mjs frames), um título, uma legenda e 5-8 hashtags. Para modo de gravação própria, também forneça o roteiro com o timing de cada linha para eles lerem. Ofereça uma rodada de alterações precisas e re-renderize apenas o que mudou.

5b. Publicar no YouTube via Zapier (apenas quando o usuário pedir para fazer upload)

Todas as chamadas são ferramentas do Code Mode: execute-as dentro de execute como tools.zapier.* (não as chame como ferramentas normais). Validadas uma vez em um upload real; os valores abaixo estão exatos.

  1. Conectar. Se list_zapier_skills tiver uma skill salva para upload, use-a. Caso contrário, certifique-se de que o app YouTube está ativado: discover_zapier_actions({ app: "YouTube" }) → enable_zapier_action({ selected_api: "YouTubeV4CLIAPI", app_display_name: "YouTube", action: "upload_video" }). Se ainda não houver conexão, manage_zapier_connections({ selected_api: "YouTubeV4CLIAPI" }) retorna uma URL de conexão para o usuário.
  2. Hospedar o arquivo. Os parâmetros video / thumbnail da ação precisam de uma URL que os servidores do Zapier possam buscar; um caminho local é silenciosamente errado. Coloque o MP4 em um host temporário, nesta ordem (todos testados em 2026-11-03; no Windows use curl.exe):
    • a. litterbox (expira em 1 h a 72 h, até 1 GB): curl -F "reqtype=fileupload" -F "time=1h" -F "fileToUpload=@renders/<nome>.mp4" https://litterbox.catbox.moe/resources/internals/api.php → retorna a URL direta como texto simples.
    • b. uguu.se (expira em cerca de 3 h, bom para shorts abaixo de 35 MB): curl -F "files[]=@renders/<nome>.mp4" https://uguu.se/upload → retorna JSON; use files[0].url (o link d.uguu.se/...).
    • c. catbox (permanente, sem expiração): mesma chamada que (a) sem -F "time=1h". Público para sempre, então apenas com a permissão do usuário.
    • Pule estes (verificados quebrados em 2026-11-03, não perca tentativas): 0x0.st (uploads desativados), tmpfiles.org (o link é uma página de visualização, não o arquivo bruto), gofile.io (download bruto precisa de token de conta), file.io (API curl redireciona para o web app), bashupload.com, temp.sh (morto).
    • Sempre verifique a URL antes de usá-la: curl -sSI <url> deve retornar 200/206 com um content-type de vídeo. Nunca confie no JSON de um host sem verificar.
    • Informe ao usuário que isso coloca o vídeo em um host temporário público que expira sozinho.
  3. Confirmar primeiro. Isso escreve no canal real do usuário, então confirme antes de executar: título, visibilidade (privado / não listado / público) e categoria. Resolva category_id com inspect_zapier_actions({ tool_name: "youtube_upload_video", enum_property: "category_id" }) se necessário. Educação = 27 (padrão para reels de como-fazer), Comédia = 23, Como fazer & Estilo = 26.
  4. Upload. execute_zapier_write_action({ selected_api: "YouTubeV4CLIAPI", action: "upload_video", tool_name: "youtube_upload_video", params: { video: "<URL temporária>", title, description (encerre com #shorts), tags: [5-8 hashtags sem #], category_id: "27", privacy_status, made_for_kids: false, embeddable: true, notify_subscribers: true, default_language: "en", license: "youtube" } })
  5. Relatar. O resultado contém id; o link é https://www.youtube.com/watch?v=<id>. Um vídeo vertical de 60 s ou menos se torna um Short automaticamente (sem campo extra). Abra o arquivo local para o usuário (tools.browser.preview({ path: "renders/<nome>.mp4" })) e forneça a URL do YouTube em texto. O navegador no aplicativo frequentemente falha ao carregar youtube.com com ERR_ABORTED; isso não é um upload falho.
  6. Miniaturas. Uploads não listados não aceitam miniatura personalizada através desta ação; ofereça o quadro de capa salvo se o usuário depois tornar o vídeo público.

Nunca

Gere imagens ou vídeos com AI; gaste o dinheiro ou créditos do usuário; faça upload para o YouTube ou qualquer host sem o usuário pedir e confirmar; copie o roteiro, cenas ou quadros de outro criador; sobrescreva um projeto do usuário sem perguntar; entregue um quadro que você não examinou.

Habilidades Relacionadas