Communitygithub.com

wailzenz-video-dz

Monta um vídeo de talking head para um Reel 9:16 no dialeto argelino — remove pausas e erros, legendas palavra por palavra em árabe com tradução de termos em francês/inglês, motion graphics, efeitos sonoros e capa.

O que é wailzenz-video-dz?

O skill **wailzenz-video-dz** é uma ferramenta especializada em edição de vídeos de talking head para o formato Reel (9:16), totalmente adaptada ao dialeto argelino (Darija) e ao contexto cultural local. Ele processa vídeos de câmera (talking head) e realiza uma série de tarefas automatizadas: corte de silêncios e hesitações com base em análise de áudio local, transcrição palavra por palavra usando modelos de reconhecimento de fala (whisper.cpp ou modelo argelino especializado), aplicação de legendas bilingues (árabe com glossas para termos em francês/inglês), e composição de motion graphics com painéis explicativos, ícones, efeitos visuais e sonoros. O skill opera em ambientes variados — Mac, Windows, Linux, dispositivos móveis (via nuvem) e até mesmo em plataformas como Claude Code e Cursor — e prioriza a automação total: a execução é feita por scripts em Python e shell, sem necessidade de abrir programas de edição como DaVinci Resolve ou CapCut (embora possa exportar projetos compatíveis se solicitado). O fluxo de trabalho inclui desde a análise de enquadramento (close-up, cardTop) até a verificação de qualidade final com detecção de palavras repetidas ou quebradas. Ele também gerencia todo o processo de forma transparente para o usuário, informando prazos e resultados parciais, e garante que cada cena seja ancorada nos tempos exatos das palavras (nunca em segundos fixos).

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wailzenz/wailzenz-video-dz/tree/HEAD/skills/dz-reel

Perguntar na sua IA favorita

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

Documentação

**🇩🇿 wailzenz-video-dz — a camada argelina. Estas regras prevalecem sobre qualquer outra abaixo: **

  1. Dialeto = Darija Argelina (الدارجة الجزائرية). Cada palavra árabe escrita ou corrigida (legendas, ganchos, CTAs, capas, mensagens para o usuário) segue references/dialect-dz.md. O skill original foi escrito em Árabe do Golfo: leia suas instruções, mas nunca use suas listas de palavras do Kuwaiti ou exemplos em qualquer coisa que o espectador veja. Vídeo em inglês → escreva em inglês. Vídeo em francês → escreva em francês.
  2. Termos em francês/inglês permanecem em letras latinas com uma glosa em árabe entre aspas depois deles — «هادي حاجة normal "عادية"» — via "gloss" em fixes.json (passo 5). Cada termo latino recebe uma.
  3. Ambiente: inicie cada comando de shell com source "${CLAUDE_SKILL_DIR}/../../setup/env.sh" (Python 3.12 env, ffmpeg-full, modelos em ~/.wailzenz-video-dz). Primeira vez numa máquina? Execute bash "${CLAUDE_SKILL_DIR}/../../setup/setup-mac.sh" (pergunte primeiro ao usuário — baixa ~4 GB). Nunca pip install no Python do sistema.
  4. Transcrição (passo 4) usa scripts/02a_transcribe_dz.py: whisper.cpp large-v3 na GPU do Mac, ou --engine hadra (modelo argelino) / --engine whisper (qualquer SO). Nunca python3 -m whisper --model medium.
  5. Atualizações apenas pelo gerenciador de plugins (00_setup.sh mostra o comando). Nunca sobrescreva os arquivos do skill.

🎬 Estilo da casa — todo vídeo, sem exceções: 6. Passo 7 completo, sempre. Telas divididas, painéis explicativos, movimentos do banco, transições, pelo menos um momento de profundidade (atrás da cabeça, texto em vídeo estilo «الخلاصة», SFX, cartão final. Um reel com apenas legendas sobre o rosto nunca é aceitável. 7. Nunca duplicar a legenda. O painel não deve mostrar as palavras sendo legendadas naquele momento — sem texto cinético da frase atual, sem "legenda grande" em cima. Painéis são visuais: ícones, diagramas, maquetes de interface (terminal, linha do tempo), metáforas, quadros comparativos, factos de facts.md. Comandos de terminal, rótulos de linha do tempo e títulos de cartões também não devem repetir a legenda. Se uma frase realmente precisar de suas palavras grandes na tela, use nocap:true. 8. Corte com cuidado. 01_cut_plan.py só corta pausas ≥ 0,55 s, mede o silêncio contra o próprio piso de ruído do clipe, mantém mais espaço depois de uma palavra do que antes, e termina com uma auto-verificação — qualquer «⚠️» significa corrigir o corte primeiro. Cada corte começa e termina em silêncio. Uma hesitação («الـ…», «اممم») vai inteira, com silêncio em ambos os lados; um reinício («اللي تحتاج… تحتاج») mantém a segunda tomada. Após o render final, execute 19_seam_check.py <work> <final.mp4> e corrija qualquer palavra repetida ou quebrada (ele ouve mal termos em inglês no modo árabe — verifique-os com -l en). 9. Alterne a posição do painel. Misture R_DOWN (animação em cima, rosto abaixo) com R_UP (rosto em cima, animação em baixo — panelIn move-se sozinho para lá), mais momentos R_LOWER (painel grande, rosto pequeno) e R_FULL. Nunca mais de duas cenas explicativas seguidas na mesma posição. 10. Amarre cada cena aos tempos das palavras (caps.json palavras), nunca segundos fixos — um recorte não deve quebrar as cenas. 11. Enquadramento close-up: o cartão de rosto corta de studio.json → cardTop; se a boca cair abaixo de y ≈ 1600 (zona de legenda do Instagram) levante-a (≈ 0,3). R_UP mostra um pouco mais acima da cabeça automaticamente.

Reel a partir de vídeo de fala — sem programa de edição

A edição é toda em código:

  • ffmpeg corta.
  • Whisper transcreve com tempo de palavra.
  • Um motor de renderização monta as legendas e motion graphics sobre o vídeo.

Saída: Um MP4 pronto para publicação.

Caminhos: Todos scripts/, references/ e motion/ estão na pasta deste skill: ${CLAUDE_SKILL_DIR}


Não é vídeo de fala? Vá para o modo correto

EntradaModoLeia
Pasta de clipes sem fala (café, viagem, produto)Montagem no ritmoreferences/montage.md
Duas ou mais câmeras da mesma sessãoPodcast → Reelsreferences/podcast.md
Episódio completo "horizontal" ou "para o YouTube"Podcast 16:9references/podcast.md (seção "Episódio completo horizontal")
Episódio de 1h → vários ReelsReels de episódioreferences/landscape.md (seção "Episódio completo")
Texto ou ideia, sem pessoaExplicação em motionreferences/motion-mode.md
Link de site ou "explique o aplicativo"Explicação de site/appreferences/motion-mode.md

Se houver um skill separado para este modo instalado (dz-motion, dz-podcast ou dz-montage), ele tem prioridade.

⛔ Não pergunte "Qual modo você quer?" — Diga a ele em uma frase o que entendeu e continue.

O motor: Sempre o leve (04_render_frames.js), sem mencionar a palavra "motor".

  • Ele quer ajustar sozinho? Abra o estúdio → references/studio.md
  • Tela Remotion apenas se solicitada pelo nome → references/remotion.md

🎬 DaVinci: Pediu "faz no DaVinci"? Este skill não tem edição dentro do DaVinci Resolve. Diga a ele em uma frase e continue com nosso motor (ou exporte um arquivo SRT/FCPXML se ele quiser continuar sozinho).

🎞️ Modo CapCut: Ele disse "faz no CapCut" ou "quero editar sozinho no CapCut"? Em vez de MP4, saia um projeto CapCut editável (clipes com zoom, legendas e textos CapCut, voz, efeitos, trilha sonora, motion transparente) → references/capcut.md (um script scripts/40_capcut.py).


⛔ Seu estilo com o usuário

Você quem prepara, não ele. Proibido dar a ele uma lista de comandos para executar.

  • Não pergunte "Você tem isso?" — Verifique você mesmo. Algo faltando? "Estou faltando duas ferramentas que vou preparar agora, leva dois minutos — começo?"
  • Sem jargões: "Ferramenta de desenho de slides" não "puppeteer", "qualidade de vídeo" não "codec".
  • Diga a ele onde estamos a cada passo, e estime o tempo: "Removi as pausas — metade do vídeo foi. Agora vou transcrever sua fala, 3 minutos."
  • Uma coisa de cada vez.
  • Não entregue sem mostrar um screenshot ou resumo após cada etapa importante.

✅ Onde funciona? Em qualquer lugar — celular · nuvem · Mac · Windows · Linux · Codex

O dispositivo local (Mac + Claude Code) é o mais rápido e poderoso, mas não é obrigatório. Proibido dizer ao usuário "Isso não funciona no seu celular ou na nuvem." Se uma ferramenta não funcionar no ambiente, caia para a alternativa e mencione em uma linha o que usou. Leia references/any-environment.md — alternativas (transcrição, corte de pessoa, desenho de motion…) e método para celular. E as receitas testadas em detalhe (corte suave sem tremer, motion de papel recortado, montagem) em references/phone-cloud-playbook.md.

  • No celular: ele anexa o vídeo à conversa e você trabalha no ambiente de nuvem, e o celular pode desligar.
  • Windows: python não python3 → references/windows.md.

Windows: python não python3, caminhos C:/… → references/windows.md


Etapas 0, 0.5 e 1 — Ferramentas, estilo e identidade

Leia references/start.md e execute — o mesmo início para todos os modos.


Etapa 2 — Pegue o vídeo dele

MétodoComo
Arquivo no dispositivo dele (melhor)Copie para <work>/src.mov
Link do Google DriveCompartilhe "Qualquer pessoa com o link", depois o comando abaixo
Conector do Google DriveSe o arquivo for privado — ferramentas do conector na sessão

Link do Drive (o ID entre /d/ e /view):

curl -sL "https://drive.usercontent.google.com/download?id=<ID>&export=download&confirm=t" -o <work>/src.mov
  • 4K é melhor (o zoom reduz a qualidade original). Mas 1080p funciona — não o recuse nem peça para regravar.
  • Vídeo widescreen (entrevista, podcast, episódio de TV)? Mesmas etapas. A etapa 6 corta na vertical ao redor do rosto para cada take em vez de esticá-lo → references/landscape.md
  • 🪝 Reel de episódio ou entrevista = Gancho escrito obrigatório. Após 02_captions.py:
    1. python3 scripts/22_hook.py suggest <work>
    2. Escreva 3 ganchos da linha mais forte (não a primeira frase que ele disse) → check → ele escolhe → apply
    3. preview e leia hook_sheet.jpg antes da renderização completa.
    • Reel construído fora de nossos motores (MP4 pronto)? 22_hook.py overlay → hook.mov transparente.
    • Regras e formatos → references/podcast-hook.md

Verifique a duração:

ffprobe -v error -show_entries format=duration -of csv=p=0 <work>/src.mov

🎞️ Quadros perdidos?

Gravação de navegador ou aplicativo de câmera não original (o iPhone no navegador descarta 13-54%). Verifique as lacunas antes de cortar:

ffprobe -v error -select_streams v -show_entries frame=pts_time -of csv=p=0 <work>/src.mov | python3 -c "import sys;t=[float(x) for x in sys.stdin if x.strip()];g=[(round(a,2),round(b-a,2)) for a,b in zip(t,t[1:]) if b-a>0.07];print(len(g),'lacunas',g[:8])"

Tem lacunas? Restaure antes da etapa 3:

ffmpeg -i src.mov -vf "minterpolate=fps=30:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1" -c:a copy src_fixed.mov

E diga a ele: "A gravação estava com quadros perdidos — restaurei." E da próxima vez, recomende que ele grave com o aplicativo de câmera.

🔬 Verifique iluminação e cores (segundos, em silêncio)

python3 scripts/25_scopes.py <work>
  • "OK" → não mencione.
  • Tem problema (escuro, amarelado, desbotado) → uma frase: "O vídeo está um pouco escuro e amarelado — corrijo?"
    • Mostre a ele antes e depois com um screenshot.
    • Concordar → theme.json → "grade":"auto" (corrige apenas a faixa).
    • Recusou ou ficou em silêncio → não toque (regra 4).

Etapas 3-11 — Produção

3) Plano de corte

python3 scripts/01_cut_plan.py <work>

Diga a ele quanto foi removido: "Removi 52 segundos de silêncio — o vídeo ficou com 46 em vez de 98."

3.5) Melhore o áudio (opcional): Tem eco ou ruído, ou ele disse "melhore o áudio"? → references/audio-enhance.md

bash scripts/02b_enhance_audio.sh <work> --local

4) Transcrição com tempo de palavra

source "${CLAUDE_SKILL_DIR}/../../setup/env.sh"
ffmpeg -v error -i <work>/src.mov -vn -ac 1 -ar 16000 -y <work>/a.wav
python3 scripts/02a_transcribe_dz.py <work> > <work>/whisper.log 2>&1        # Árabe / Darija (padrão --lang ar)
# Vídeo em inglês: python3 scripts/02a_transcribe_dz.py <work> --lang en
# Modelo argelino em vez de / lado a lado: --engine hadra | --engine compare (primeira execução baixa ~1,8 GB)
  • Segundos a um minuto na GPU para um reel. Falhou? tail -5 <work>/whisper.log
  • Motor padrão: cpp num Mac com whisper.cpp, senão whisper. Para um novo falante argelino, execute --engine compare uma vez e mantenha o motor cuja transcrição precisou de menos correções (salve com --save-default).

5) Correção e legendas

Leia a.json e corrija cada frase — Whisper erra no Darija argelino (transforma em árabe padrão, escreve palavras francesas erradas). Corrija de acordo com references/dialect-dz.md (ortografia e palavras francesas nas letras que o usuário escolheu), e não sabe uma palavra? Pergunte a ele em vez de adivinhar. Escreva <work>/fixes.json:

{ "fix": [["هادي","حاجة","normal","بزاف"], ["نخدمو","بـ","Claude","Code"]], "hot": ["بزاف"],
  "gloss": {"normal": "عادية", "Claude Code": "كلود كود"}, "fx": {"خلاص":"drop"} }
  • gloss = tradução em árabe entre "" que vem após cada palavra francesa/inglesa → «normal "عادية"». A chave é a palavra (ou frase) como está em fix. Palavras latinas são coloridas automaticamente ("hot_latin": false para isso). 02_captions.py diz o que você esqueceu.
  • hot = palavras que são destacadas com um círculo de destaque no momento em que são faladas.
  • fx opcional → references/word-fx.md
  • ⛔ Número de palavras de cada frase = número de palavras do Whisper para a mesma frase. Caso contrário, os tempos ficam bagunçados (o script interrompe).
python3 scripts/02_captions.py <work>

5.5) Mostre o texto a ele e remova o que ele não gostou → Obrigatório

Antes de projetar qualquer cena:

python3 scripts/10_script_edit.py <work> show
  • Imprime a fala dele numerada com os tempos e escreve script.txt.
  • E imprime as frases repetidas e sugestão de exclusão na mesma execução — não execute dupes depois.
  • ⛔ Imprima o script completo no chat e diga: "O que você quer remover?" — não se limite ao arquivo.

Frase repetida: a primeira é erro, a segunda é a correção. "Você disse a frase duas vezes — «قدرنا نحل السبب» e depois «قدرنا نعرف السبب». Removo a primeira?"

python3 scripts/10_script_edit.py <work> drop 6 8       # Remove as duas frases do vídeo e áudio
python3 scripts/10_script_edit.py <work> keep 1 2 5 9   # Mantém apenas estas
python3 scripts/10_script_edit.py <work> undo
  • Tudo depois é deslocado, e cut.json, caps.json e sfx.json são atualizados.
  • Faça aqui. A exclusão após o design das cenas desloca todos os seus tempos.
  • Após qualquer exclusão: repita a etapa 6 e renderize com --force.

6) Corte e zoom

python3 scripts/03_cut_zoom.py <work>
mkdir -p <work>/vfr && ffmpeg -v error -i <work>/cutz.mp4 -vf fps=30 -q:v 3 -y <work>/vfr/%05d.jpg
  • O zoom é bloqueado por clipe (6.0): A primeira execução escreve cut.json → "zooms": {"25.05": 1.06, …} (a chave é o início do clipe em segundos do original). Remover, adicionar ou dividir um clipe? O zoom dos restantes não desliza, então suas coordenadas de renderização permanecem corretas. Mudar o zoom de um clipe = ajuste seu número. E a ordem de keep é livre (um clipe do final da fala antes do anterior é permitido).

6.1) ⛔ Corte a partir da cabeça — Obrigatório em qualquer vídeo com card (metade da tela, R_DOWN, R_LOWER):

python3 scripts/23_headcrop.py <work> --from <início do primeiro card>
  • Escreve studio.json → cardTop.
  • Corte fixo durante todo o vídeo — sem rastreamento, nem câmera que o siga.
  • Começa acima do ponto mais alto que a cabeça dele atingiu, com uma pequena margem (1,5%).
  • Não corta a cabeça dele, nem deixa espaço vazio — "Muito espaço acima da cabeça" é um erro igual.
  • O usuário já alertou sobre isso várias vezes e ficou chateado.
  • Verifique com seus olhos em um frame em que ele se aproxima da câmera.
  • Abaixo do corpo dele está queimado? Aproxime com theme.json → cardZoom (padrão 1).

7) Projete as cenas → Etapa mais importante

Antes de qualquer cena, leia:

  1. references/motion-rules.md — identidade, lista de factos facts.md, proibições.
  2. references/scenes.md — como escrever a cena, pacote de motion, ideias, B-roll.
  3. references/moves.md — Banco de movimentos: python3 scripts/35_moves.py plan --title "…" --cues … → storyboard (3 fundamentos + variações). Você escolhe conscientemente e o usuário não precisa escolher.

🎯 O padrão desde o primeiro rascunho (6.0 — Reel popular que o banco adotou e se espalhou): Esforce-se na performance e no motion — rico, profundo e surpreendente, não coisas tranquilas.

  • Antes de renderizar, planeje 2–3 momentos de profundidade e diga ao usuário em uma linha: elemento que passa atrás da cabeça dele (11_behind_text.js person + MV.person), onda da voz dele (37_env.py ← MV.env), mapa de pontos atrás da cabeça dele, órbita 3D, forma da identidade do cliente que se torna movimento (arco do logotipo = contador e pincelada), entrada one-take (a câmera mergulha no logotipo e sai na próxima cena).
  • Isto é a primeira coisa a que você recorre, não a única: cartões, selos e badges não são proibidos — use-os quando o assunto merecer.
  • A frase que o motion escreve = nocap para ela (não se distrai entre em cima e embaixo). E escrever acima da cabeça é melhor quando há espaço.
  • Receitas em código → references/moves.md §3.

⛔ Regra de layout (aprovada pelo usuário):

MomentoRetânguloForma
Fala sem gráficosR_FULLRosto dele em tela cheia, legenda inferior em 1460
Qualquer gráfico ou motionR_DOWNGráfico em cima (y 280-520) → legenda → rosto dele embaixo, largura total
B-roll ou painel grandeR_LOWERCard grande em cima → legenda → rosto dele pequeno embaixo
Explicação completa (números, listas)R_OFFSem rosto, voz dele continua → references/explainer-and-pace.md
  • ⛔ A legenda nunca é escrita sobre o rosto do falante. Em qualquer modo com card de vídeo, toda a legenda fica acima do card, junto com a barra de progresso.
  • A escolha do modo é sua decisão a partir do significado — títulos com 2-4 palavras e sem design = R_FULL (ele chega perto da câmera, legenda abaixo dos lábios); um número ou palavra-chave que merece um painel visual = R_DOWN e nocap para a palavra. Sempre que um gráfico aparecer e a legenda estiver sobre o rosto, você é responsável por essa escolha.
  • O modo é aplicado às cenas no arquivo de cena (chiave). ⛔ Nunca mude para R_FULL no meio de uma sequência R_DOWN — o espectador vê o rosto mudar de lugar.

Como escrever a cena:

cena 1.0 - "normal"
  persona R_DOWN
  panelIn fade
  panel "Ícone de chave" "A chave da criatividade"
  text "seja" "criativo"
  cap "مفتاح" "الإبداع"
  • ⛔ A cena não descreve a performance — não escreva "a chave aparece e gira". O motor executa sozinho.
  • ⛔ Não descreva a legenda — escreva cap com o texto (ele é sincronizado com a palavra correspondente em caps.json).
  • Leia references/scenes.md antes de escrever a primeira cena.

8) Tijolo (SFX, transições)

python3 scripts/05_sfx.py <work>
python3 scripts/06_transitions.py <work>

9) Renderização

python3 scripts/04_render_frames.py <work>  # ou `04_render_frames.js` após extrair
  • Versão leve (padrão): Lento na primeira vez, mas simples.
  • Versão completa (Remotion): Só se o usuário solicitar ou a versão leve falhar.

10) Verificação de qualidade

python3 scripts/19_seam_check.py <work> <final>.mp4
  • Verifique palavras repetidas ou quebradas.
  • Se houver problema: ajuste fixes.json → "fx": {"palavra":"drop"} ou re-renderize.

11) Entrega

python3 scripts/20_deliver.py <work> <final>.mp4
  • Adiciona capa (se houver) e metadados.
  • Envia para o usuário ou faz upload.

Individual skills in this repo

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

wailzenz/wailzenz-video-dz

مونتاج مقاطع بلا كلام على الإيقاع — مجلد مقاطع (مقهى، سفرة، منتج، مكان، فعالية) يتحوّل لفيديو واحد 9:16 يختار أحلى لحظة من كل مقطع ويقطع على نبضات الصوت. Use when user says "مونتاج من هالمقاطع"، "سو فيديو من هالكلبات"، "ركّب المقاطع على الأغنية"، "مونتاج على الإيقاع"، or sends a folder of clips without speech. Not for a talking video (use dz-reel). Darija triggers: "دير لي مونتاج على الإيقاع"، "ركّب هاد المقاطع".

wailzenz/wailzenz-video-dz

فيلم موشن قرافيكس ثلاثي الأبعاد بلا شخص ولا تصوير — من نص أو فكرة أو سكربت، بصوته أو صوت مولّد، 60 فريم. وشرح موقع أو تطبيق بلقطات حقيقية داخل آيفون أو ماك بوك 3D. Use when user says "فيديو موشن"، "شرح بالموشن"، "سو فيديو من هالنص"، "موشن قرافيكس"، "اشرح هالموقع بفيديو"، "اشرح التطبيق بفيديو"، "ديمو آيفون". Not for editing a talking video (use dz-reel). Darija triggers: "دير لي فيديو موشن"، "اشرح بالموشن".

wailzenz/wailzenz-video-dz

يمنتج البودكاست والمقابلات — كاميرتين أو أكثر لنفس الجلسة إلى ريلات 9:16 بكابشن عربي وهوك مكتوب، أو الحلقة كاملة 16:9 لليوتيوب، أو حلقة ساعة إلى عدة ريلات. Use when user says "بودكاست"، "كاميرتين"، "الحلقة كاملة بالعرض"، "حلقة يوتيوب"، "ريلات من الحلقة"، "طلّع ريلات من المقابلة"، or sends multi-camera files or a long episode. Not for a single talking video (use dz-reel). Darija triggers: "دير لي ريلز من البودكاست"، "قطّع الحلقة".

wailzenz/wailzenz-video-dz

يصمم كفر الريل (أول فريم بالفيديو، كل المهم بمربع 1:1 فينقرا بشبكة البروفايل) وثمبنيل يوتيوب 16:9 بثلاث أفكار — بأحجام تنقرا بشاشة الجوال. Use when user says "سو كفر"، "كفر الريل"، "غلاف الريل"، "ثمبنيل"، "ثمب يوتيوب"، "صورة مصغرة"، "thumbnail"، "الكفر ما يبين"، or after any finished video. Not for carousel covers. Darija triggers: "دير لي غلاف"، "دير thumbnail".

Habilidades Relacionadas