Communitygithub.com

adnaan-reel

Transforma a gravação crua do Adnaan (mais script opcional, links, gravações de tela ou capturas) em um reel vertical finalizado, onde cada batida é uma cena animada em tela cheia no visual "MINT" v7 — com legendas cinéticas, discos de ícones, câmera viajante e o encolhimento característico.

O que é adnaan-reel?

Este skill transforma gravações de fala do Adnaan, juntamente com scripts, links, gravações de tela e capturas de tela, em um reel vertical profissional no estilo "MINT" v7. Cada batida do vídeo é convertida em uma cena animada em tela cheia: as falas são exibidas com legendas cinéticas em negrito (Inter Tight 900 + Inter) sobre o vídeo dele, com uma palavra de destaque em verde menta; as cenas visuais usam um fundo de quadro cinza com vinheta forte, discos de ícones com glifos brancos, uma corrente de discos para mapear listas, uma câmera viajante e props vetoriais planos. O skill também inclui o "encolhimento característico" (signature shrink), onde o vídeo dele reduz para dentro de um disco ou cartão lateral e depois cresce de volta para o clímax. Ele suporta tanto o visual MINT (v7, padrão desde 2026-10-17) quanto o visual PAPER legado (marcador vermelho, papel). O skill é projetado para Claude Code, Cursor e Codex, lendo o vídeo via transcrição palavra por palavra e fotogramas, nunca assistindo ao vídeo diretamente. As cenas são construídas em paralelo usando HyperFrames, com um runtime compartilhado que garante consistência visual e de movimento, seguindo os princípios de animação de Lasseter.

Funciona com✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/adukhan98/stripe-video-skill/tree/HEAD/skills/adnaan-reel

Perguntar na sua IA favorita

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

Documentação

O que adnaan-reel faz?

Gravação do Adnaan → um reel que se parece exatamente com a edição de referência aprovada. Antes de qualquer outra coisa, olhe para assets/style/v8_contact_sheet.jpg — o teste de estilo do reel-08 aprovado para o visual v7 "MINT", o padrão da casa desde 2026-10-17 (cenas em examples/reel-08-v7/): falas com ele em tela cheia + nossas legendas cinéticas, cenas VISUAIS em um quadro cinza com discos de ícones, uma corrente de discos e uma câmera viajante, o encolhimento característico. Leia references/style.md "v7" primeiro — ele substitui as seções mais antigas onde houver conflito; as regras de som v6, zonas seguras, regras de legibilidade e princípios de movimento ainda se aplicam. A direção de arte é vinculante e está em references/style.md; a gramática de cenas (como um reel é dividido em cenas e quais tipos de cena existem) está em references/scenes.md. O visual é código: o runtime compartilhado templates/runtime/paper.css + paper.js (mundo, tipo cinético, primitivas, movimento baseado nos princípios de Lasseter) + v7.css + v7.js (v7: discos de ícones, a corrente de discos, encolher/crescer em um disco ou cartão, câmera, máscara de zona) mais um inicializador por tipo de cena em templates/scenes/ (v7: talk, talk_depth, visual, chain, card); slots.py prepare os instala em cada cena, então uma cena tem ~150 linhas de cópia, posições e um objeto personalizado. O visual PAPER legado (papel vermelho + camada de marcador desenhado à mão marker.css/marker.js, banda dividida, reel-06/07 — assets/style/v6_contact_sheet.jpg, v7_contact_sheet.jpg, examples/reel-06/, reel-07/) é init-brand --look paper, apenas quando ele pedir. Bancos de ideias mais antigos: examples/reel-04/, reel-05/ e references/motion-ideas.md (o visual editorial com serifa: examples/reel-03/, init-brand --type editorial).

Você nunca assiste ao vídeo — você o lê: uma transcrição palavra por palavra, fotogramas em pontos de decisão, e ferramentas de verificação que transcrevem as junções.

Princípios

  1. Cada batida é uma cena, em um de dois MODOS (v7). O reel inteiro tem 8–18 cenas HyperFrames em tela cheia consecutivas sobre o corte bloqueado, e cada batida escolhe um modo na tabela de batidas: FALA (ele em tela cheia, nossas legendas cinéticas sobre ele — gancho, transições, opiniões, clímax, CTA; talk, ou talk_depth quando algo fica ATRÁS dele) e VISUAL (sem locutor; o quadro, discos de ícones, props vetoriais planos, páginas reais, uma câmera viajante — toda explicação, item de lista, exemplo; visual). Ele está na tela cerca de 50% do reel; sem trecho Visual com mais de ~8 s sem ele. O encolhimento característico (1–3 por reel: a gravação dele encolhe para dentro do disco atual da corrente ou o pequeno cartão do lado esquerdo, chain / card; V.grow o traz de volta para o clímax) liga os modos. O cartão pequeno aparece 0–2 vezes. O mapa de um reel de lista é a corrente de discos (V.chain). Uma gravação de tela longa é do tipo demo.
  2. As palavras são as legendas. Sem legendas ocultas. Frases em Inter Tight 900 cinético chegam na palavra falada, grandes (hero 170–270 px autorado, ×0.94 da casa --type-scale; destaque por cor, sem itálico; v7: carvão com um brilho suave sobre a gravação dele, UMA palavra hero em menta, menta apenas no tamanho hero). Palavras na tela são apenas palavras que ele realmente diz (grafias ASR de nomes corrigidas) — mais um gancho de texto opcional que ele escreve (manchete do frame 0).
  3. Mostre a coisa real, com o logotipo real. Todo produto, repositório, site, arquivo ou framework que ele nomear aparece de verdade: página capturada em um cartão de navegador, slugs reais de repositórios, contagens de estrelas, cabeçalhos reais e nomes de partes. Toda ferramenta ou empresa que ele nomear recebe seu logotipo oficial (fetch.py logo, registrado como official), mostrado inalterado como uma <img> em um chip/pílula ao lado do nome ou no cartão do aplicativo — nunca redesenhado, recolorido ou substituído por uma pílula de texto quando um logotipo existe. UI ilustrativa é aceitável; números inventados, citações ou postagens não.
  4. Aprove o plano, depois construa tudo. Uma tabela de batidas → aprovação → todas as cenas construídas em paralelo → montagem → autoverificação → entrega. Autopiloto ("apenas faça") pula a espera.
  5. Nunca sem graça, sempre animado. Cada cena tem uma ideia central com movimento real (coisas lidam, abrem, mesclam, empilham, andam em caminhos pontilhados, viram de cinza para cor de destaque) mais vida contínua, e cada movimento obedece aos princípios de Lasseter (references/animation-principles.md: antecipação, ultrapassagem + acomodação, sobreposição, arcos, encenação, ação secundária, uma batida exagerada, saídas mais rápidas que entradas). O runtime faz isso por padrão; objetos personalizados também devem. Se uma cena puder ser um slide estático, refaça-a. Riqueza é o nível da casa (reel-05), temperado pelo v6: cerca de dois elementos focais por vez e 35–50% da grade vazia (diretrizes dependentes de conteúdo, não limites rígidos) — um objeto hero + 1–3 microanimações secundárias que representam a frase — um cursor que faz a coisa, números reais rolando para seu valor, ícones que ganham vida, física suave, personagens com personalidade, tipo que performa, ícones hero pousando em sua palavra (references/motion-ideas.md).
  6. Vetor limpo e plano por cima (v7) — sem marcador desenhado à mão no visual menta. Discos de ícones com glifos Phosphor brancos (fetch.py icon, V.disc), traços vetoriais limpos que se desenham (conectores, uma barra de sublinhado, um aro de lupa — largura uniforme, sem ferver), objetos vetoriais hero planos com personalidade em movimento, um marcador de texto menta atrás de texto real. Pêssego é apenas para dados. (O visual de papel legado mantém o marcador de feltro vermelho + notas Caveat, hf/marker.js.)
  7. Legível, sempre. Tudo dentro da zona segura (medida), páginas reais como tiras grandes (≥ 0,85, ~45 px de texto) com um marcador atrás da frase falada, sem texto semitransparente, palavras sobre a roupa dele legíveis (v7: carvão + brilho, menta no tamanho hero; visual de papel: em papel sólido), chips/logotipos/rabiscos grandes o suficiente para um celular. Ele pediu isso explicitamente. Zonas seguras IG (v6): nada no fundo 20% e nada à direita de x 900 abaixo de y 1200 (Curtir/Comentar/Compartilhar) — CTAs ficam no canto inferior esquerdo/centro.
  8. Som apoia a voz — a regra dos 30% (v6). Sem Mickey-Mousing: 1–2 sons táteis consistentes em 0:00–0:04, depois apenas transições estruturais (ponto 1/2/3, uma troca de modo, uma captura de tela grande deslizando, o CTA chegando) — ~10–14 sinais em 70 s, do kit v6 baixo e quente (assets/sfx/v6_*: carimbo, baque, thud, papel, whoosh, pop), com filtro passa-baixa em 5 kHz. Agentes marcam essas batidas "role": "hook" | "structural" em beats.json; scenes.py edl (padrão --sfx-policy sop) deixa todo o resto silencioso. Mix: voz à frente, SFX −16…−22 dB, um fundo musical ElevenLabs (instrumental, temporizado ao arco) −22…−26 dB abaixo da fala via --music, +2.5 dB nos últimos 3 s.
  9. Verifique antes de mostrar. Toda junção transcrita, toda cena verificada com checklist, o reel montado examinado rapidamente e amostrado. Se você não publicaria, não apresente.

Regras rígidas

  1. Tabela de batidas aprovada antes de construir as cenas (a menos que em autopiloto).
  2. Extração por segmento → concatenação sem perdas para o corte (render.py), fades de áudio de 30 ms nas junções, nunca corte dentro de uma palavra, preencha bordas, apenas transcrições palavra por palavra, em cache por fonte.
  3. Todo corte de preenchimento e toda junção verificados com verify_cuts.py — whisper termina palavras cedo, e audio_env.py tighten come finais de palavras suaves ("code", "immediately", "base", "use" foram todos cortados na edição de referência; "works" perdeu seu "s" no reel-05 enquanto o ASR ainda lia "works"). Leia cada linha de junção E sua bandeira ⚠ TAIL/HEAD energy (cortes de preenchimento deliberados também sinalizam — isso é esperado); estenda um final de intervalo até o tempo sugerido quando uma palavra real é cortada, re-sonde até ficar limpo.
  4. Nunca renderize um EDL parcial ou de teste de edit/. render.py escreve base.mp4 e timeline.json ao lado do EDL — um EDL de teste em edit/ sobrescreve o base real. Visualize uma cena com scenes.py preview <id>; teste cortes com verify_cuts.py --probe.
  5. EDLs de cena vêm apenas de scenes.py edl. Ele captura fotogramas de cada cena, pré-rola 12 ms e segura cada cena 0,1 s abaixo da próxima — sem isso, a sincronização de overlay do render.py vaza UM frame de gravação bruta em cada limite de cena. Depois, scenes.py flashcheck <render> --edit-dir edit: 0 frames de gravação bruta inesperados (ele compara cada frame com base.mp4 — o teto do reel-05 era da cor do papel, então o teste de canto antigo era cego; as janelas planejadas fullscreen / demo vêm de slots.json e são esperadas).
  6. Um subagente por cena, todos gerados em uma mensagem. Revise cada check_sheet.jpg / motion_strip.jpg conforme chegam; envie correções para o mesmo agente com SendMessage (ele mantém o contexto). Cada cena tem exatamente a contagem de frames de sua TASK.md (slots.py predefine e check impõe) — verifique todas as contagens com ffprobe antes de scenes.py edl; uma falta de 1 frame é uma lacuna ou sobreposição em um corte.
  7. Fidelidade à marca através do runtime. As cenas usam paper.css/paper.js + v7.css/v7.js (menta) ou marker.css/marker.js (papel) conforme instalado — nunca editado, nunca reimplementado por cena (uma cena com seu próprio motor de cartão ou palavra é rejeitada na revisão). Apenas tokens de brand.css; fontes incluídas confirmadas carregadas; nunca desenhe ou recolorir um logotipo (apenas logotipos reais de arquivos oficiais, registrados); um destaque. Nunca clone uma fonte paga — se ele quiser uma fonte comercial, ele compra a licença e coloca o arquivo; até então use a fonte OFL mais próxima (Bootzy TM → Inter Tight 900, o padrão atual). Uma alteração global (fonte, tamanho do cartão, easing) é feita UMA VEZ em templates/runtime/, depois scenes.py runtime + scenes.py rerender.
  8. Downloads via fetch.py, capturas via capture.py (ambos registram origem + direitos); fetch.py credits → credits.md antes da entrega. Páginas de terceiros são mostradas como comentário sobre a coisa que ele está recomendando, emolduradas em cartões de navegador, nunca apresentadas como suas.
  9. Todas as saídas em <project>/edit/. Nunca escreva dentro do diretório do skill.
  10. Verificação de espelho antes do corte: amplie qualquer texto ou logotipo na roupa/fundo dele em um still de resolução total (o fotograma é muito pequeno — o patch "SAN DIEGO" ao contrário do reel-06 só foi pego na revisão da cena e custou uma recorte de cada clipe do locutor). Ao contrário → "mirror": true.
  11. Legibilidade é um portão de revisão (style.md "Readability"): uma cena com um pixel fora da zona, uma página ilegível, texto fantasma, palavras em tecido escuro ou um chip/rabisco pequeno para celular volta para seu agente.
  12. Confie em timestamps, não em relatórios: depois que um agente diz "re-renderizado", verifique se render.mov é mais novo que suas entradas (reel-06 v01 relatou uma re-renderização que nunca aconteceu).

Configuração

Mesmo toolchain do video-edit (detalhes em install.md): ffmpeg/ffprobe com libass + zscale, uv (helpers executam como uv run --project <skill_dir> <skill_dir>/helpers/<name>.py …), transcrição (chave ElevenLabs → Scribe; senão Apple Silicon mlx via uv sync --extra mlx; senão whisper.cpp), Node 22+ para HyperFrames (npx --yes hyperframes …), Google Chrome para capture.py. <skill_dir> é a pasta contendo este arquivo (~/.claude/skills/adnaan-reel).

Atualização (uma vez por sessão, antes de qualquer render): o skill chama npx --yes hyperframes sem pin, que resolve para o CLI mais recente publicado (os pins de package.json da cena são usados apenas por npm run, que nunca chamamos). Confirme com npx --yes hyperframes --version vs npm view hyperframes version, e execute npx --yes hyperframes skills check → npx --yes hyperframes skills update quando qualquer skill HyperFrames estiver desatualizado (eles estavam 10 atrás em 2026-10-14). Anote a versão do CLI em project.md; se um render parecer diferente do reel anterior após um bump, diga.

Helpers

HelperO que faz
scenes.py init-brand --edit-dir E [--look mint|paper] (mint = v7 padrão da casa) [--accent red|ocean|…|#hex] (apenas visual paper; red padrão) [--type grotesk|editorial] [--type-scale 0.94] --frame still.jpgCopiar fontes incluídas (grotesk padrão: Inter Tight + Inter + Geist Mono; editorial: Newsreader + Fraunces + Geist), escrever brand.json (paleta da casa + destaque + "look"), copiar references/style.md → animations/SHARED.md, executar brand_kit.py build, anexar --type-scale (casa 0.94) e — visual mint — os tokens v7 (tinta carvão, menta-suave, painel menta, pêssego, sombra de disco, vinheta forte) ao brand.css
fetch.py icon <name…> --edit-dir E [--weight fill]Glifos de disco de ícone v7: SVGs Phosphor (MIT) → icons/<name>.svg, registrados open-source; liste-os nos "assets" de um slot como icons/<name>.svg, use como V.disc({icon: name}) (nomes: phosphoricons.com)
scenes.py words --edit-dir ECada segmento de corte com início de saída, frame e palavras — escolha limites de cena aqui
scenes.py cut-speaker --edit-dir E [--only ids]Por cena: janela base.mp4 → hf/assets/speaker.mp4 (mudo; seek exato ao frame; última cena preenchida com o freeze de final) + speaker_cut.webm (mate dele) para cenas talk_depth / cutout + copiar os "assets" da cena; --only após uma correção de corte no meio da construção
scenes.py edl --edit-dir E [--beat-gain-offset -3]edl.json + animations/slots.json + renders → edl_scenes.json (captura de frame, pré-rolamento, segura de 0,1 s, sem legendas) + beats.json de cada cena → sinais audio[] temporizados do kit ElevenLabs
scenes.py preview <id> --edit-dir EUma cena com sua voz → verify/<id>_preview.mp4 (seguro: nunca toca no base)
scenes.py flashcheck <video> --edit-dir E [--allow]Frames que correspondem a base.mp4 (= gravação bruta visível) fora das janelas planejadas talk/talk_depth/chain/card/fullscreen/demo (deve ser 0); sem --edit-dir um teste de cor de canto que tolera a vinheta própria de uma cena
scenes.py runtime --edit-dir E / scenes.py rerender --edit-dir E [--jobs 4] [--only ids]Reinstalar o runtime compartilhado em cada cena / re-renderizar todas as cenas em paralelo e verificar contagens de frame — uma reestilização completa do reel (nova fonte, tamanho de cartão, easing) em minutos
`capture.py --edit-dir E --name n --rea

…

[truncado para tradução]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas