Communitygithub.com

Conz-Wilts/ai-editor

Transforma um vídeo longo ou podcast (arquivo local ou link do YouTube) nos melhores 3 a 5 clipes verticais curtos, cada um cortado e estilizado no perfil do usuário. Transcreve uma vez, divide a fala em clipes candidatos nos limites de sentenças dentro da duração escolhida, pontua cada candidato em código (ritmo da fala, volume, risadas, números e nomes ditos), mostra a lista final em uma página com prévia de cada um, e então corta, edita e aplica o estilo de cada escolha como uma edição individual.

O que é ai-editor?

Este skill (para Claude Code, Cursor, Codex ou agentes similares) automatiza o processo de transformar um único vídeo longo ou podcast — seja um arquivo local ou um link do YouTube — em vários clipes verticais curtos e prontos para plataformas como TikTok, Reels ou Shorts. Ele transcreve a fonte uma única vez usando Whisper ou Scribe, divide automaticamente a transcrição em sentenças para gerar candidatos dentro de uma faixa de duração escolhida pelo usuário (por exemplo, 20-40 segundos) e pontua cada candidato com base em características mensuráveis como ritmo da fala, volume, presença de risadas e menção a números ou nomes. O usuário visualiza os melhores candidatos em uma página interativa com prévias e seleciona os clipes desejados. Cada clipe selecionado passa por um fluxo completo de edição: reframing para 9:16 (se necessário), corte com timeline musical, aplicação do estilo visual do usuário (incluindo legendas, layout e música) e geração de uma folha de stills para aprovação final. O skill suporta fontes de áudio de podcasts com capa e evita transcrições repetidas ao reutilizar a mesma transcrição para todos os clipes. É otimizado para evitar custos desnecessários: a transcrição é feita apenas uma vez, o agente lê apenas a lista final (~1.500 tokens) em vez da transcrição completa (~20.000 tokens), e a maior parte do processamento é feita em código local (Python) com bibliotecas padrão ou OpenCV. Em agentes com suporte a subagentes (como Claude Code), os clipes podem ser processados em paralelo para maior eficiência.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Conz-Wilts/ai-editor/tree/HEAD/.claude/skills/clips

Perguntar na sua IA favorita

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

Documentação

Clipes

Caminhos: ${CLAUDE_SKILL_DIR} é a pasta que contém este SKILL.md, e ${CLAUDE_SKILL_DIR}/../.. é a pasta do editor (o .claude/ deste repositório) dois níveis acima.

Leia ${CLAUDE_SKILL_DIR}/../../PRINCIPLES.md primeiro: as regras que todo vídeo segue (perguntar, parecer real, movimento, história e enquadramento, privacidade, custo).

Toda pergunta ao usuário vai na caixa de perguntas: chame a ferramenta AskUserQuestion (2 a 4 opções, a recomendada primeiro). Somente em um agente sem essa ferramenta, faça perguntas numeradas em texto.

Um vídeo longo entra. Os melhores poucos clipes curtos saem, cada um uma edição vertical finalizada no estilo do usuário.

clipes/<nome>/
  source.mp4          o vídeo longo (um link simbólico para arquivo local; nunca modifique o original)
  source.mp3, cover.jpg  ou, para um podcast só de áudio: o áudio e a arte do programa
  words.raw.json      uma transcrição de tudo (nunca a leia)
  candidates.json     cada candidato com suas características (nunca o leia)
  shortlist.md        os 8 melhores que não se sobrepõem, cerca de 1.500 tokens: o único arquivo que você lê
  shortlist.json      o mesmo, para a página
  picks.html          a página da qual o usuário escolhe
edicoes/<nome>-clip<N>/ uma edição por clipe escolhido: source.mp4, words.raw.json (re-temporizado), clip.json

Execute os scripts com python3 no Mac e Linux, py no Windows. PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py"; python3 "$PY" abaixo executa o venv Python do editor (py "$PY" no Windows). Se estiver faltando, execute o skill setup primeiro. K="${CLAUDE_SKILL_DIR}/scripts/clips.py", C="${CLAUDE_SKILL_DIR}/../../skills/cut/scripts", S="${CLAUDE_SKILL_DIR}/../../skills/style-edit/scripts".

0. Pergunte, uma vez

Leia o perfil e o gosto primeiro (python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/profile.py" show, python3 "${CLAUDE_SKILL_DIR}/../../skills/taste/scripts/taste.py" show). Se não houver perfil ainda: execute a captura de estilo do skill start primeiro, para que os clipes saiam com a aparência do usuário.

Depois, uma chamada de caixa de perguntas, a opção recomendada primeiro:

perguntaopções
Quantos clipes?3 (Recomendado) / 5 / 1
Qual a duração de cada um?20-40 s (Recomendado) / 40-60 s / 60-90 s
Quantas pessoas falam nele?uma (Recomendado) / duas (um podcast ou entrevista)

Pule qualquer pergunta que o usuário já respondeu. Elas substituem a pergunta "cortar primeiro ou tudo de uma vez" do skill de corte: os clipes são executados diretamente, e o usuário aprova as escolhas e as folhas de stills.

1. O vídeo

Um arquivo local (um link físico no mesmo disco, senão um link simbólico, uma cópia apenas como último recurso):

python3 "${CLAUDE_SKILL_DIR}/../../skills/clips/scripts/clips.py" link "<caminho absoluto>" clipes/<nome>

Um link:

python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/links.py" fetch "<url>" clipes/<nome> --max-height 1080

Ele usa o yt-dlp do venv (o setup o instala lá, não no PATH), limita o download a 1080p (um clipe 1080x1920 não precisa de 4K; uma palestra de 20 minutos em 4K tem vários GB) e imprime o caminho do arquivo: clipes/<nome>/source.mp4. Saída 3: o site exige login (o "confirme que você não é um robô" do YouTube). Pergunte na caixa de perguntas antes de reexecutar com --cookies-from-browser chrome (ou o navegador deles). Um podcast (link de feed RSS ou Apple Podcasts): route lista seus episódios mais recentes como opções de ask; pergunte qual deles na caixa de perguntas (o mais novo primeiro), então fetch "<url da opção>" clipes/<nome da opcao> --direct --cover "<imagem da opcao>": o áudio vai para source.mp3 (ou sua própria extensão) e a arte do programa para cover.jpg. Baixe apenas o que o usuário tem o direito de reutilizar: o próprio vídeo, ou um para o qual ele tenha permissão. Diga isso uma vez se o link for de outra pessoa.

2. Transcreva uma vez

python3 "$PY" "$C/transcribe.py" clipes/<nome>/source.mp4 clipes/<nome>/words.raw.json   # o arquivo que fetch imprimiu: source.mp3 para áudio

Diga o tempo primeiro: Whisper leva de 1 a 4 minutos por 3 minutos de vídeo em um laptop (grátis), Scribe cerca de 20 segundos para um vídeo de 13 minutos. Mesmos mecanismos do skill de corte. O Scribe adiciona risadas e outros eventos de áudio, que a pontuação usa. Cada clipe reutiliza esta transcrição: nada é transcrito duas vezes.

3. Candidatos e a lista final

python3 "$K" candidates clipes/<nome> --min 20 --max 40 [--speakers 2] [--style creator-teardowns/<handle>/style.json]

Passe a duração que o usuário escolheu. --style é o primeiro criador do perfil: os movimentos "o que funciona" medidos lá são listados na lista final. O código divide a transcrição em sentenças e faz cada sequência de sentenças inteiras dentro da duração se tornar um candidato (nunca começando com "Mm-hmm" ou terminando no meio de uma palavra), mede cada um, os classifica pelas características e escreve shortlist.md.

Leia apenas shortlist.md. Cada entrada tem o gancho, as primeiras palavras de cada sentença do meio, a última sentença e as características medidas. Julgue cada entrada em quatro perguntas: o gancho funciona sozinho, um estranho consegue segui-lo, ele compensa, há uma afirmação concreta, número ou história.

Nunca leia words.raw.json ou candidates.json. Escolha o número de clipes do usuário a partir da lista final, melhores primeiro. Descarte, independentemente da pontuação:

  • uma leitura de anúncio, um segmento de patrocínio, uma introdução ou um encerramento;
  • um gancho que depende de contexto anterior ("como eu disse", "é por isso", "este aqui");
  • um clipe cujo ponto é uma afirmação datada ("no momento em que estou gravando isso, é o número 40") quando a afirmação já mudou: uma captura ao vivo da página de hoje a contradiria.

4. A página de escolha, depois a caixa de perguntas

python3 "$K" page clipes/<nome> --recommend c12,c40,c7
open clipes/<nome>/picks.html    # Windows: start "" ..., Linux: xdg-open ...

Uma página: cada clipe da lista final com uma prévia de 360 px, sua transcrição (o gancho em negrito), o detalhamento da pontuação e as características medidas, suas escolhas marcadas. Depois pergunte na caixa de perguntas (multi-seleção): suas escolhas primeiro, cada uma rotulada com seu tempo e seu gancho, além de "um diferente da página". Aguarde a resposta.

5. Cada clipe escolhido

python3 "$K" trim clipes/<nome> c12 c40 c7          # -> edicoes/<nome>-clip1, -clip2, -clip3

Cada pasta de edição recebe source.mp4 (precisão de quadro, com preenchimento sem pegar a próxima palavra) e words.raw.json re-temporizado para ela. Uma fonte só de áudio (source.mp3) não tem imagem: o trim faz de cada clipe um source.mp4 com seu áudio sobre a própria capa do podcast (a capa desfocada e escurecida para preencher 1080x1920, a capa nítida acima das legendas; sem arte: preto), e clip.json diz audio_only. Com uma capa, a renderização a move: um zoom lento na capa, o fundo se movendo contra ela, um pequeno pulo no início de cada sentença. Para esses, não pergunte um layout: sobreposição, sem reenquadramento, sem recorte, legendas ativadas (profile.py style as mantém ativadas). Diga uma vez que cada clipe é o áudio sobre a capa do programa com as palavras do locutor como legendas. Antes de executar os clipes, defina a música uma vez para todos eles (style-edit references/plan.md "Music"; o estilo decide a menos que o usuário tenha definido sound.music).

Todos os clipes de uma vez (Claude Code, ou qualquer agente com subagentes): lance um agente clip-editor (clip-editor) por clipe, todos em uma mensagem para que sejam executados ao mesmo tempo. Dê a cada um EDIT (a pasta do clipe, caminho absoluto), ROOT (${CLAUDE_SKILL_DIR}/../..), a linha PY e as respostas: aspecto, layout, música, o mecanismo de transcrição e reenquadramento sim (fonte wide, a menos que a plataforma seja YouTube) ou não, e se a fonte tem legendas incorporadas. Cada um leva seu clipe pelo corte e style-edit até a folha de stills e retorna um JSON curto: status, cut_s, verify, cut_page, sheet, error. Mescle-os; nunca abra a transcrição de um clipe ou a edição de papel. Em seguida, execute o agente stills-critic na folha de cada clipe ready, novamente todos em uma mensagem, e corrija o que eles reprovarem (planeje e stills novamente para aquele clipe). Um clipe failed: execute-o manualmente como abaixo.

Um de cada vez (sem subagentes), para cada clipe em ordem:

  1. Vertical a partir de um vídeo wide: python3 "$PY" "$K" reframe edicoes/<nome>-clip<N> corta para 9:16 com o corte seguindo a cabeça do locutor cena por cena (cortes de câmera encontrados com ffmpeg). Pule quando o perfil for YouTube ou a fonte já for vertical.
  2. Corte: o skill de corte a partir de seu passo 2 (retakes.py propose): a transcrição já está lá. Depois construa, renderize, verifique e a página de corte, como o skill diz. Música sob a voz é medida por arquivo: build_timeline.py corta apenas entre palavras lá.
  3. Estilo: python3 "${CLAUDE_SKILL_DIR}/../../lib/ai_editor/profile.py" style edicoes/<nome>-clip<N>, depois o skill de style-edit a partir de seu passo 2. Se a fonte já tiver legendas incorporadas, defina "captions": {"present": false} no style.json dessa edição, ou as legendas se empilham.

De qualquer forma, abra o cut-check.html de cada clipe e mostre todas as folhas de stills juntas para uma aprovação, faça a pergunta de renderização uma vez para todos eles e renderize. Após a aprovação, execute python3 "${CLAUDE_SKILL_DIR}/../../skills/cut/scripts/judge_cut.py" score na pasta de cada clipe (corte references/judge.md). Entregue as renderizações em uma página de revisão, cada clipe uma aba (start com o clipe 1, alt para os restantes, pasta clipes/<nome>; veja ${CLAUDE_SKILL_DIR}/../../skills/style-edit/references/review.md), depois serve e wait em segundo plano.

Se um script parar

mensagemação
no run of whole sentences lasts <lo>-<hi> spergunte na caixa de perguntas por uma duração maior, execute candidates novamente
no candidate <id>use um id de shortlist.md
links.py fetch saída 3 (um login ou "confirme que você não é um robô")pergunte antes de reexecutar com --cookies-from-browser <browser>
qualquer mensagem de corte ou style-edita tabela "Se um script parar" daquele skill

Regras

  1. Cada palavra, número e nome na tela vem das palavras do próprio clipe. Nada do resto do vídeo, e nada que o locutor não disse.
  2. Sem aparência de IA: ${CLAUDE_SKILL_DIR}/../../skills/style-edit/references/ai-tells.md se aplica a cada clipe.
  3. Um quadro de podcast em close não tem espaço livre: nenhum cartão ou logo vai sobre a cabeça. Menos elementos visuais é o certo; legendas e zooms carregam o conteúdo.
  4. Nunca corte um clipe no meio de uma sentença. Mais curto ou mais longo do que o pedido é melhor do que um pensamento interrompido.

Custo por vídeo longo

Medido em um podcast de 13 minutos com duas pessoas e um vídeo de 12 minutos com cabeça falante (2026-10):

  • Transcrição: Scribe levou 16-18 s; Whisper é grátis e mais lento. Uma vez por vídeo longo.
  • Candidatos e características: 4-6 s de código, $0.
  • Claude lê shortlist.md (cerca de 1.500 tokens), nunca a transcrição (cerca de 20.000).
  • A página de escolha: 30-40 s de ffmpeg para 8 prévias, 7-9 MB.
  • Cada clipe custa então o que um corte e um style-edit custam.

Autoverificação

python3 "$K" demo

Arquivos

  • scripts/clips.py: candidates, page, trim, reframe e a demonstração offline (transcrição sintética). Apenas stdlib, exceto reframe (OpenCV, através do venv).
  • ${CLAUDE_SKILL_DIR}/../../agents/clip-editor.md: um clipe através do corte e style-edit até sua folha de stills.

Individual skills in this repo

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

Conz-Wilts/ai-editor

Reverse-engineers a short-form creator's video format from their real numbers. Pulls a TikTok or YouTube Shorts profile (or pasted links, Instagram reels too) with view, like and save counts, transcribes the top videos word for word, measures pace, pauses and fillers, maps each video into timed beats, and writes a teardown.md someone can film from, a teardown.html page of their graphics, motion and sound, and the style.json the style-edit skill edits from (on its own it can write an edit plan as a table and .srt). Use when the user wants to analyse, break down or study a creator ("analyse @handle", "tear down @handle", "teardown of @handle", "break down this creator", "what makes this creator's videos work"), pastes TikTok, YouTube or Instagram links and asks what the pattern is, or asks to set up creator-teardown. Not for editing the user's own video like a creator (that is start), not for researching a topic, and not for cutting raw footage.

Conz-Wilts/ai-editor

Cuts raw talking-head footage into a clean jump cut. Takes one take or several joined (mp4 or mov, any aspect, 4K phone footage is fine), transcribes it word by word, removes retakes, false starts, fillers and dead pauses, and renders cut.mp4 at the source resolution plus words.json timed to the cut. The user approves the cut on a page with the whole transcript and every removed word struck through. Use when the user says "cut my video", "just cut it", "remove my mistakes", "cut out the retakes", "remove the pauses", "clean up this take", "jump cut this", "tighten this clip", or asks only for the cut of a raw take; start calls it for a full edit. Runs before style-edit. Not for a general request to edit a video or to make it look like a creator (that is start), not for adding captions, zooms or cards (style-edit), and not for analysing someone else's videos (creator-teardown).

Conz-Wilts/ai-editor

Generates new footage with Higgsfield and puts it on the edit's timeline. Prices every generation first, asks the user with the dollar amount (and, for their own footage, whether it may be uploaded to Higgsfield), then submits, waits, downloads into the edit's generated/ folder and adds the result to the timeline's Generated track. Covers motion transfer on a clip of the user's video (their moves onto a character or styled look), b-roll from a sentence (text to video), a still brought to life (image to video) and stills for cards (text to image). Use when the user says "generate b-roll", "make a shot of", "AI b-roll", "generate a clip", "use Higgsfield", "motion transfer", "put my moves on", "restyle this part with AI", or asks for footage they did not film. Not for animated diagrams or motion graphics (motion), not for real screenshots and logos (overlays, logo-pack), and not for the cut (cut).

Conz-Wilts/ai-editor

For the editor's maintainers. Turns what users corrected into lasting fixes in this repo, for every user, enforced by code and tests rather than notes. Reads the suggestions users marked "would help everyone" (~/.ai-video-editor/suggestions.jsonl), taste rules said twice (taste.py report), preview corrections (edits/*/corrections.jsonl), review-page notes (*/review.json) and open GitHub issues labelled feedback; groups repeats; for each item the maintainer accepts, writes the general rule into PRINCIPLES.md and the skill that owns it, adds or tightens the check that enforces it, adds a test that fails before and passes after, and runs the full test set. Use when the maintainer says "improve the editor", "turn feedback into fixes", "process suggestions", "what are users complaining about", "go through the feedback issues". Not for one user's own preferences (that is taste), and not for editing a video.

Habilidades Relacionadas