Communitygithub.com

Faceless Shorts

Crie curtas verticais narrados sem rosto para YouTube, TikTok e Reels, totalmente em código, com voz IA local gratuita e legendas sincronizadas. Seis estilos visuais.

O que é Faceless Shorts?

Faceless Shorts é uma skill de IA que permite gerar vídeos verticais completos (YouTube Shorts, TikTok, Reels) inteiramente no computador do usuário, sem depender de APIs pagas ou serviços de nuvem. A skill utiliza uma pipeline local baseada em Node.js, Python, ffmpeg, Chrome headless, a voz Kokoro (TTS local) e o Whisper para timing de palavras, tudo executado localmente. São seis estilos visuais distintos: Deep Dive 3D (explicações científicas no estilo Zack D. Films), Night File 3D (mistérios e true crime), Inside Out (explicações 2D planas), Stick Story (histórias de sobrevivência com bonecos de palito), Paper Atlas (história em papel cortado com mapas) e Tall Tale 3D (histórias engraçadas com personagens 2D em mundo 3D). O usuário fornece apenas um tópico, e a skill elabora roteiro, narra, gera animações, adiciona legendas sincronizadas com a fala, insere trilha sonora e renderiza o MP4 final. Suporta também publicação opcional no YouTube via Zapier, sob autorização do usuário. O processo é totalmente controlado por código, sem imagens ou vídeos gerados por IA, sem custos de créditos e sem a necessidade de chaves de API.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ryuki0x1/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 curta vertical completo 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 com Chrome headless, ffmpeg, uma voz Kokoro local, Whisper local para temporização de palavras, numpy para som. Sem imagens ou vídeos de IA, sem chaves de API, sem créditos. SKILL = a pasta onde este arquivo está. Os projetos ficam em ~/faceless-shorts/<nome-do-curta>/.

estiloo que fazduração · proporção
Deep Dive 3D deep-diveo principal, estilo Zack D. Films: pessoas 3D esculpidas em cenários iluminados pelo sol, corpos brilhantes em raio-X, jornadas de câmera por vasos sanguíneos, foco raso. "O que acontece se…?" corpo e ciência30-45 s · 9:16
Night File 3D night-filemistérios não resolvidos / true crime: lugares 3D escuros com uma luz, pessoas sem rosto (o sujeito brilha em vermelho), datas de máquina de escrever, inserções de arquivos de caso30-45 s · 9:16
Inside Out inside-outexplicador 2D plano "O que acontece se…?": um herói simples, cortes em raio-X, legendas em negrito de 1 a 3 palavras, cortes rápidos25-40 s · 9:16
Stick Story stick-story"O que você faria se…?" passos de sobrevivência: bonecos de palito com olhos expressivos, cômodos planos dia/noite, cartões dourados de etapas30-45 s · 9:16
Paper Atlas paper-atlashistória em papel cortado: mapas de pergaminho, rotas carmesim, fitas douradas de data, figuras históricas30-45 s · 9:16
Tall Tale 3D tall-talehistórias engraçadas reais: pessoas desenho 2D planas (cabeças grandes e redondas, contornos a tinta) atuando em um mundo 3D ensolarado de cidade pequena, câmera sempre em movimento, legendas de uma palavra40-60 s · 9:16

Qual estilo: corpo / saúde / ciência "o que acontece se" → Deep Dive 3D (ou Inside Out para um visual 2D mais leve e rápido) · assustador, inexplicado, true crime, "isso aconteceu em 1971" → Night File 3D · sobrevivência, dicas úteis, "aqui está o que você faz" → Stick Story · um evento histórico, "como X aconteceu" → Paper Atlas · uma história engraçada ou inteligente real, um golpe, uma brecha, "esse cara fez X" → Tall Tale 3D. Se não for óbvio, pergunte uma vez.

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

0. Primeiro uso em um computador

bash SKILL/scripts/setup.sh até imprimir Tudo pronto (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 coisa faltando da forma oficial gratuita e pergunte antes de qualquer coisa que precise de senha. Em seguida, bash SKILL/scripts/selftest.sh deve imprimir SELFTEST PASSED: abra a folha de contato, recorte os nomes e observe-os.

1. Captação (UMA mensagem, padrões preenchidos)

Pergunte apenas o que é desconhecido, tudo de uma vez: tópico (ou "você escolhe 3 ideias"), um link para um curta cujo formato eles gostam (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 IA (padrão) · gravação própria (eles gravam após 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 / identificador. "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 (E SE *VOCÊ | ENGOLIR *CHICLETE?) · a lista de cenas, uma linha cada (o que vemos, o que se move, em qual palavra ela cai) · 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 falaria 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: pergunta-gancho, depois escalada, um mito ou surpresa, uma reviravolta ("mas se você…"), uma última linha impactante que se repete. Escreva números como são falados ("sete"). Leia em voz alta mentalmente: se parecer legendas, reescreva. Apenas escrita original: pegue um formato de que você goste, nunca o roteiro ou as cenas de outro criador. Cada fato é verificado em uma fonte confiável (liste-as em script.json "sources"). Tópicos de saúde: precisos, sem sangue, sem desinformação assustadora.

3. Construção

  1. bash SKILL/scripts/new_video.sh <estilo> <nome-do-curta> copia o exemplo para ~/faceless-shorts/<nome-do-curta>/.
  2. Escreva script.json (linhas + caps + gaps; veja STYLE.md).
  3. Temporização: 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 posicionada com cut(i) e seus momentos-chave nas palavras com Wd('palavra', linha). Reutilize o kit (src/core/kit.js); adicione novos componentes lá, no visual 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 observe.

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

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

  • Faz sentido? Um modo visual por cena: se o corpo está em raio-X, TODO ele está em raio-X (sem mangas de camisa em um corpo de raio-X). Adereços se movem com o que os segura (o chiclete fica na mão até a mão chegar à boca). Nada aparece antes de sua causa.
  • Corresponde à narração naquele momento? A imagem muda pouco antes de sua linha; revelações caem em sua palavra.
  • Há alguma colisão? Objetos em movimento nunca cruzam rótulos, pílulas, a zona de legendas (y 1250-1550) ou uns aos outros acidentalmente.
  • Legendas: 1-3 palavras, exatamente uma palavra amarela, escrita corretamente, na palavra sendo dita, legível em um telefone.
  • Folha de estilo: apenas a paleta, formas planas, vistas de raio-X em ciano, perigo em vermelho.
  • Som: voz clara sobre a música; efeitos suaves (sem tiques ou bipes agressivos). Corrija, re-renderize a folha, verifique novamente. Informe ao usuário o que você detectou 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 o modo de gravação própria, forneça também o roteiro com os tempos 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 enviar)

Todas as chamadas são ferramentas de Modo Código: execute-as dentro de execute como tools.zapier.* (não as chame como ferramentas normais). Validadas uma vez em um envio real; os valores abaixo são exatos.

  1. Conectar. Se list_zapier_skills tiver uma skill salva para envio, use-a. Caso contrário, certifique-se de que o app YouTube está habilitado: discover_zapier_actions({ app: "YouTube" }) → enable_zapier_action({ selected_api: "YouTubeV4CLIAPI", app_display_name: "YouTube", action: "upload_video" }). Se não houver conexão ainda, manage_zapier_connections({ selected_api: "YouTubeV4CLIAPI" }) retorna uma URL de conexão para o usuário.
  2. Hospedar o arquivo. O parâmetro video / thumbnail da ação precisa de uma URL que os servidores do Zapier possam buscar; um caminho local é silenciosamente incorreto. Coloque o MP4 em um host temporário, nesta ordem (todos testados em 03/11/2026; no Windows use curl.exe):
    • a. litterbox (expiração de 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ção de cerca de 3 h, bom para curtos 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 aprovação do usuário.
    • Pule estes (verificados como quebrados em 03/11/2026, não perca tentativas): 0x0.st (uploads desabilitados), 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 (a API curl redireciona para seu aplicativo web), bashupload.com, temp.sh (mortos).
    • Sempre verifique a URL antes de usá-la: curl -sSI <url> deve retornar 200/206 com um tipo de conteúdo 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. Comédia = 23 (sugestão padrão para Tall Tale e Deep Dive), Educação = 27, Animais de Estimação & Animais = 15.
  4. Enviar. execute_zapier_write_action({ selected_api: "YouTubeV4CLIAPI", action: "upload_video", tool_name: "youtube_upload_video", params: { video: "<URL temporária>", title, description (termine com #shorts), tags: [5-8 hashtags sem #], category_id: "23", 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 (nenhum 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 é uma falha de envio.
  6. Miniaturas. Envios não listados não aceitam uma miniatura personalizada por meio desta ação; ofereça o quadro de capa salvo se o usuário tornar o vídeo público posteriormente.

Adicionando um novo estilo (quando o usuário pedir)

Crie styles/<novo-estilo>/ com style-sheet.png, STYLE.md (mesmas seções do Inside Out: regras de aparência, paleta, formato, mapa de mecanismo/kit, componentes, anatomia de cena, tipos de dica, armadilhas de QA) e um example/ completo. Copie os tools/, index.html, src/main.js, src/core/{lib,timing,captions}.js do Inside Out, depois construa o kit e as cenas do novo visual. Os scripts compartilhados (voice, words, estimate, new_video, selftest) funcionam inalterados. Adicione uma linha à tabela acima e execute selftest.sh até que todos os estilos passem.

Estilos 3D (Deep Dive, Night File, Tall Tale)

Eles renderizam 3D real com three.js em Chrome headless. Com placa gráfica é rápido e com qualidade total. Sem uma (laptop sem aceleração de GPU, uma sandbox na nuvem) renderize com SOFTWARE_GL=1 QS='&res=0.6&aa=0&shadow=1024' FPS=24 na frente de node tools/capture.mjs ... (≈2 s por quadro; informe ao usuário o tempo de renderização antecipadamente, execute em segundo plano e faça QA com sheet review/all.jpg 1 10 primeiro). Seus arquivos STYLE.md listam a API 3D.

Nunca

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

Habilidades Relacionadas