Communitygithub.com

Conz-Wilts/ai-editor

Corta vídeos de fala em planos diretos (headshots) para gerar um jump cut limpo. Transcreve palavra por palavra, remove retomadas, falsos inícios, vícios de linguagem e pausas mortas, e renderiza cut.mp4 na resolução original mais words.json sincronizado com o corte.

O que é ai-editor?

Esta skill automatiza a edição de vídeos de fala (talking-heads) produzindo cortes rápidos (jump cuts) que eliminam erros de gravação, hesitações e pausas longas. Ela transcreve o áudio palavra por palavra usando motores como Whisper, CrisperWhisper ou Scribe, identifica trechos removíveis (repetições, frases incompletas, vícios como 'hã', 'tipo') e gera um arquivo spans.json com os intervalos a serem cortados. O resultado é um vídeo limpo (cut.mp4) acompanhado de words.json com os timestamps exatos das palavras mantidas. A skill oferece um fluxo interativo: o usuário primeiro aprova o corte em uma página web que mostra o transcript completo com as palavras removidas riscadas, e só depois segue para a estilização (adição de legendas, zoom, etc.). É compatível com macOS, Linux e Windows, e foi projetada para ser usada antes da skill style-edit, dentro do ecossistema de edição assistida por IA. Não se destina a edições gerais de vídeo, nem a adicionar efeitos visuais ou analisar vídeos de terceiros.

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

Perguntar na sua IA favorita

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

Documentação

Corte

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.

Toda pergunta vai na caixa de perguntas: a ferramenta AskUserQuestion (2-4 opções, recomendada primeiro). Apenas em um agente sem ela, faça perguntas numeradas em texto.

edits/<nome>/  transcript.txt (leia isto, nunca words.raw.json), spans.json (o que remover, com aspas),
  candidates.md (o que o código sinalizou), paper-edit.md (o corte como texto), cut-check.html (o
  transcript), review.json (notas), cut.mp4 + words.json (a renderização e suas palavras).

<nome> é um slug do nome do arquivo (IMG_1234.MOV -> img-1234), na biblioteca (PRINCIPLES.md "Onde"). Nunca modifique, mova ou copie o arquivo de origem: passe seu caminho.

PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py"; python3 "$PY" executa a ferramenta no venv. No Windows, use py onde estes comandos dizem python3. Nenhum venv ainda: execute a skill setup primeiro. S="${CLAUDE_SKILL_DIR}/scripts".

Ainda não tem vídeo?

Pergunte pelo caminho da gravação. Vários arquivos: references/takes.md. Nenhum: quando AI_EDITOR_SAMPLE_URL estiver definido, ofereça essa amostra e faça o download para a pasta do usuário (curl -L -o sample-take.mp4 "$AI_EDITOR_SAMPLE_URL"); caso contrário, peça para ele gravar um (qualquer vídeo de celular dele falando por 30-60 s serve).

0. Pergunte: só o corte primeiro, ou tudo de uma vez

Antes de qualquer outra coisa, faça uma pergunta na caixa de perguntas (o start decide isso para uma edição completa):

Você quer apenas o corte primeiro, ou o corte e a edição estilizada de uma vez?

  • Apenas o corte primeiro (Recomendado). Você aprova o corte antes de eu adicionar legendas, zoom ou visuais, então um corte alterado nunca reconstrói os visuais (menos tokens).
  • Tudo de uma vez. Eu corto e depois estilizo sem esperar. Você ainda vê a página de corte e a folha de stills antes de qualquer renderização.

Pule isso apenas quando o usuário já respondeu ("só corta", "corta e estiliza de uma vez") ou start ou clips chamou esta skill. Apenas o corte primeiro: etapas 1-6, depois pare até o usuário aprovar o corte e pedir o estilo. Tudo de uma vez: etapas 1-5, abra a página de corte, vá direto para style-edit; uma mudança posterior no corte reexecuta style-edit a partir do passo de planejamento.

0b. Leia o gosto do usuário

python3 "${CLAUDE_SKILL_DIR}/../../skills/taste/scripts/taste.py" show --edit edits/<nome>

Siga todas as regras dele. Salve uma reação a um resultado ("muito lento") com a skill taste antes de refazer.

1. Transcrever

python3 "$PY" "$S/transcribe.py" <origem> edits/<nome>/words.raw.json [--script <roteiro deles>]

Um roteiro (ou --keyterm Nome, repetível) acerta nomes e jargões (+20% no Scribe).

Diga o tempo primeiro: Whisper 1-4 min para uma gravação de 3 min, CrisperWhisper aproximadamente o comprimento da gravação. Ele escolhe Scribe quando uma chave está salva, senão CrisperWhisper se instalado, senão o Whisper local gratuito (--engine whisper|crisper|scribe substitui), que descarta alguns "hãs" e falsos inícios. Sem nenhum dos dois, diga uma vez que o setup pode adicionar um (os pesos do CrisperWhisper são apenas para uso não comercial). Nunca baixe um modelo durante a edição: uma reverificação que precise de um não instalado (código de saída 4) é ignorada e mencionada na nota da rodada.

Nunca leia words.raw.json: a etapa 2 escreve transcript.txt, com 1/12 do tamanho.

2. Decidir o que cortar

python3 "$S/retakes.py" propose edits/<nome>

O código encontra todos os possíveis cortes (uma linha repetida, uma frase inacabada, "espera, desculpa", vícios de linguagem) em candidates.md. Cada um é um lugar para olhar, não uma decisão. Leia transcript.txt e candidates.md, siga references/retake-detection.md, e escreva spans.json (references/shapes.md).

Com um script.md: python3 "$S/script_match.py" edits/<nome>, leia script-match.md (references/script.md).

A última gravação vence, exceto para ganchos alternativos. Nunca digite um timestamp ou crie um intervalo de pausa.

Apenas se o usuário quiser algo mais curto (ou o gosto dele disser para executar a passagem editorial), também leia references/editorial-rules.md e adicione cortes redundantes (chamadas de conteúdo).

Um nome ouvido errado é um comando, nunca uma reescrita de JSON: python3 "$S/retakes.py" fix edits/<nome> cloud=Claude jiv=Jev (palavras inteiras, mantidas em fixes.json para as legendas).

3. Construir

python3 "$S/build_timeline.py" <origem> edits/<nome> && python3 "$PY" "$S/mirror.py" <origem> edits/<nome>

Toda pausa (respirações também) acima de --max-pause (0,15 s) vira 0,10 s; sob música apenas lacunas entre palavras são aparadas. Um ERROR na construção não escreve nada: corrija esse intervalo e execute novamente.

mirror.py diz mirrored quando um livro, camiseta ou placa aparece ao contrário (gravação com câmera frontal): pergunte uma vez, Manter como foi gravado (Recomendado) (a maioria dos criadores publica assim) / Inverter para o texto ficar legível; ao inverter, adicione --flip a cada render.py abaixo.

Em uma única mensagem, inicie a codificação dos intervalos em segundo plano (run_in_background) e as verificações de papel; a etapa 4 então codifica apenas o que mudou:

python3 "$S/render.py" <origem> edits/<nome> --segments-only

O agente cut-judge avalia paper-edit.md (um erro deixado, uma junção ruim, uma boa linha perdida) e corrige spans.json. Leitores para gravações com mais de 5 min vão primeiro, o juiz depois: references/judge.md. Nunca leia paper-edit.md você mesmo.

  • CLIPPED em paper-edit.md: um corte de pausa comeu uma palavra. Aumente --pad. Ainda assim: um rótulo está errado.
  • Junções dentro da fala movem-se para um quadro silencioso. Qualquer still in speech: ouça na etapa 5.

4-5. Renderizar e verificar

Primeiro plano (render.py espera a codificação em segundo plano):

R="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/review.py"
python3 "$S/build_timeline.py" <origem> edits/<nome> && \
python3 "$S/render.py" <origem> edits/<nome> && \
python3 "$PY" "$S/verify_cut.py" edits/<nome> --engine <mesmo motor da etapa 1> && \
python3 "$S/preview_cut.py" edits/<nome> --no-open && \
python3 "$R" edits/<nome> start --video edits/<nome>/cut.mp4 --stage cut --transcript edits/<nome>/words.json

Verificação limpa: a página de corte está pronta. A verificação compara o transcript do corte com as palavras mantidas (código de saída 1 interrompe a cadeia):

  • MISSING: uma palavra mantida não está na renderização. Aumente --pad (ou estreite o intervalo), reconstrua, renderize novamente.
  • SURVIVED: um intervalo a adicionar para uma repetição ou tropeço real, nunca um que corte uma linha mantida.
  • HEARD DIFFERENTLY ("jev -> jeff") e notas de vício de linguagem são variação do transcritor: sem reconstrução.
  • DOUBLED: palavras ditas duas vezes seguidas. Natural ("muito, muito"): mantenha. Um tropeço: adicione seu intervalo.
  • N junção(ões) na fala: ouça. Cortado: splice_check.py edits/<nome> --fix, renderize novamente.

Um ciclo de correção (a mesma cadeia), depois mostre ao usuário o que resta.

6. O usuário aprova

A cadeia abriu a página de revisão (../style-edit/references/review.md). serve e wait em segundo plano. Diga os segundos cortados. Notas: "manter ": estreite ou exclua esse intervalo; "cortar ": adicione um; pausas erradas: --max-pause. Depois etapas 4-5, resolve cada nota (--reply: o que mudou), por último round --video edits/<nome>/cut.mp4 (nunca um segundo start), depois faça qualquer pergunta de aprendizado.

Após a aprovação, uma chamada Bash: python3 "$S/trend.py" log edits/<nome> (tally: tendência), a verificação de gancho. Depois variantes de gancho se hooks.json existir (references/retake-detection.md); chamado por start, pergunte isso na mesma caixa de perguntas que a aprovação de stills do style-edit, não antes.

Apenas a aprovação finaliza o corte; cut.mp4, words.json vão para style-edit. Em "apenas o corte primeiro", diga que podem pedir o estilo. Nunca inicie style-edit por conta própria. Chamado por start: assim que a página abrir, inicie visual-prep em segundo plano; seus motion_briefs: um clip-builder em segundo plano cada um de uma vez; diga um motion_note uma vez.

Se um script parar

mensagemfaça
no such file / ffmpeg could not read audiopeça o caminho correto; nunca copie ou converta a origem
faster-whisper missing / CrisperWhisper missingexecute com python3 "$PY", ou a etapa 3 da skill setup
no ElevenLabs key (saída 2) / HTTP 4xx, unreachable (3)remova --engine scribe, ou salve a chave novamente com a skill setup
ERROR na construção em uma citaçãocorrija a citação desse intervalo ou adicione occurrence, construa novamente
cannot derive a silence threshold / marked no silencefala e fundo estão a menos de 10 dB de diferença: ffmpeg -i <origem> -af volumedetect -vn -f null -, passe --noise cerca de 10 dB acima da média
ERROR ... na renderizaçãodiga isso; execute a renderização novamente uma vez

Regras

  1. Cada corte cita o transcript. Sem citação, sem corte.
  2. Um roteiro desempata entre gravações e mantém toda gravação de uma linha que ele repete. Nada é cortado por estar fora do roteiro.
  3. Nunca copie em stream (-c copy) entre cortes: pode resultar em até 2 s de diferença.
  4. Nunca entregue uma renderização que não tenha sido verificada e aprovada.

Autoverificação

test_build_timeline.py, test_retakes.py, test_media.py (ffmpeg); demo em transcribe.py, trend.py, splice_check.py, script_match.py, mirror.py.

Individual skills in this repo

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

Conz-Wilts/ai-editor

Turns one long video or podcast (a local file or a YouTube link) into the best 3-5 short vertical clips, each cut and styled in the user's profile style. Transcribes once, splits the talk into candidate clips at sentence boundaries inside the chosen length, scores every candidate in code (speech rate, loudness, laughter, numbers and names said), shows the shortlist on one page with a preview of each, then trims, cuts and style-edits each pick as its own edit. Use when the user says "clip this video", "make shorts from my podcast", "find the best clips", "cut this into TikToks", "turn this YouTube video into reels", "repurpose this long video", or drops a long video (over about 3 minutes) or a YouTube link and wants short clips. Not for editing one short take (that is start or cut), and not for measuring someone else's style (that is creator-teardown).

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

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