Communitygithub.com

Conz-Wilts/ai-editor

Corta tomas de personas hablando frente a cámara para crear un corte limpio tipo jump cut. Toma una o varias tomas unidas (mp4 o mov, cualquier relación de aspecto, incluso video 4K de teléfono), las transcribe palabra por palabra, elimina retomas, falsos comienzos, muletillas y pausas muertas, y genera cut.mp4 en la resolución original junto con words.json sincronizado con el corte. El usuario aprueba el corte en una página que muestra el transcript completo con cada palabra eliminada tachada.

¿Qué es ai-editor?

Esta skill automatiza el proceso de edición de videos de personas hablando frente a cámara (talking head videos) generando un jump cut limpio. Es ideal para creadores de contenido que graban múltiples tomas o largas tomas con errores. La skill transcribe el audio usando motores como Whisper, CrisperWhisper o Scribe, identifica y elimina retomas, falsos comienzos, muletillas y pausas excesivas, y produce un video recortado (cut.mp4) y un archivo de palabras sincronizadas (words.json). El usuario puede revisar y aprobar el corte mediante una interfaz donde se muestra el transcript completo con las palabras eliminadas tachadas. Funciona en cualquier plataforma que soporte la ejecución de scripts Python y herramientas como ffmpeg, y está diseñada para ser usada antes de aplicar estilos visuales (style-edit).

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Cut

Rutas: ${CLAUDE_SKILL_DIR} es la carpeta que contiene este SKILL.md, y ${CLAUDE_SKILL_DIR}/../.. es la carpeta del editor (la carpeta .claude/ de este repositorio) dos niveles arriba.

Lee ${CLAUDE_SKILL_DIR}/../../PRINCIPLES.md primero: las reglas que sigue cada video.

Toda pregunta va en el cuadro de preguntas: la herramienta AskUserQuestion (2-4 opciones, recomendada primero). Solo en un agente sin ella, haz preguntas numeradas en texto.

edits/<nombre>/  transcript.txt (léelo, nunca words.raw.json), spans.json (qué eliminar, citado),
  candidates.md (qué marcó el código), paper-edit.md (el corte como texto), cut-check.html (el
  transcript), review.json (notas), cut.mp4 + words.json (el render y sus palabras).

<nombre> es un slug del nombre del archivo (IMG_1234.MOV -> img-1234), en la biblioteca (PRINCIPLES.md "Where"). Nunca modifiques, muevas ni copies el archivo fuente: pasa su ruta.

PY="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/run.py"; python3 "$PY" ejecuta el entorno virtual de la herramienta. En Windows, usa py donde estos comandos dicen python3. Sin entorno virtual todavía: ejecuta la skill setup primero. S="${CLAUDE_SKILL_DIR}/scripts".

¿Aún no hay video?

Pide la ruta de su toma. Varios archivos: references/takes.md. Ninguno: cuando AI_EDITOR_SAMPLE_URL está configurada, ofrece esa toma de muestra y descárgala a su carpeta (curl -L -o sample-take.mp4 "$AI_EDITOR_SAMPLE_URL"); de lo contrario, pídele que grabe una (cualquier video de teléfono de él/ella hablando durante 30-60 s funciona).

0. Pregunta: ¿el corte primero, o todo de una vez?

Antes de cualquier otra cosa, haz una pregunta en el cuadro de preguntas (start decide esto para una edición completa):

¿Quieres solo el corte primero, o el corte y la edición estilizada de una vez?

  • Solo el corte primero (Recomendado). Apruebas el corte antes de que añada subtítulos, zooms o visuales, así un cambio en el corte nunca reconstruye los visuales (menos tokens).
  • Todo de una vez. Corto y luego estilizo sin esperar. Aun así verás la página de corte y la hoja de imágenes fijas antes de que se renderice algo.

Omítelo solo si el usuario ya respondió ("solo córtalo", "corta y estiliza de una vez") o start o clips llamaron a esta skill. Solo el corte primero: pasos 1-6, luego detente hasta que el usuario apruebe el corte y pida el estilo. Todo de una vez: pasos 1-5, abre la página de corte, continúa directamente a style-edit; un cambio posterior en el corte re-ejecuta style-edit desde su paso de plan.

0b. Lee los gustos del usuario

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

Sigue cada regla en él. Guarda una reacción a un resultado ("demasiado lento") con la skill taste antes de rehacer.

1. Transcripción

python3 "$PY" "$S/transcribe.py" <fuente> edits/<nombre>/words.raw.json [--script <su guión>]

Un guión (o --keyterm Nombre, repetible) ayuda a obtener nombres y jerga correcta (+20% en Scribe).

Di el tiempo primero: Whisper 1-4 min para una toma de 3 min, CrisperWhisper aproximadamente la duración de la toma. Elige Scribe si hay una clave guardada, sino CrisperWhisper si está instalado, sino el Whisper local gratuito (--engine whisper|crisper|scribe para sobrescribir), que elimina algunos ums y falsos comienzos. Sin ninguno, di una vez que setup puede añadir uno (los pesos de CrisperWhisper son solo no comerciales). Nunca descargues un modelo durante la edición: una re-verificación que necesite uno no instalado (código de salida 4) se omite y se menciona en la nota de la ronda.

Nunca leas words.raw.json: el paso 2 escribe transcript.txt, 1/12 del tamaño.

2. Decide qué cortar

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

El código encuentra cada posible corte (una línea repetida, una oración incompleta, "espera, perdón", muletillas) en candidates.md. Cada uno es un lugar para mirar, no una decisión. Lee transcript.txt y candidates.md, sigue references/retake-detection.md, y escribe spans.json (references/shapes.md).

Con un script.md: python3 "$S/script_match.py" edits/<nombre>, lee script-match.md (references/script.md).

La última toma gana, excepto ganchos alternativos. Nunca escribas una marca de tiempo ni marques una pausa.

Solo si el usuario quiere que sea más corto (o sus gustos dicen que ejecute el pase editorial), también lee references/editorial-rules.md y añade cortes redundant (llamadas de contenido).

Un nombre mal escuchado es un solo comando, nunca una reescritura JSON: python3 "$S/retakes.py" fix edits/<nombre> cloud=Claude jiv=Jev (palabras completas, guardadas en fixes.json para los subtítulos).

3. Construcción

python3 "$S/build_timeline.py" <fuente> edits/<nombre> && python3 "$PY" "$S/mirror.py" <fuente> edits/<nombre>

Cada pausa (incluso respiraciones) superior a --max-pause (0.15 s) se convierte en 0.10 s; bajo música solo se recortan los espacios entre palabras. Una construcción ERROR no escribe nada: corrige ese span y ejecútalo de nuevo.

mirror.py dice mirrored cuando un libro, camiseta o letrero se lee al revés (una toma con cámara frontal): pregunta una vez: Mantener como se grabó (Recomendado) (la mayoría de los creadores lo publican así) / Voltearlo para que el texto se lea; al voltear, añade --flip a cada render.py abajo.

En un solo mensaje, inicia la codificación de spans en segundo plano (run_in_background) y las verificaciones del papel; el paso 4 codifica solo lo que cambió:

python3 "$S/render.py" <fuente> edits/<nombre> --segments-only

El agente cut-judge califica paper-edit.md (un error dejado, una mala unión, una buena línea perdida) y corrige spans.json. Los lectores para tomas de más de 5 min van primero, el juez después: references/judge.md. Nunca leas paper-edit.md tú mismo.

  • CLIPPED en paper-edit.md: un corte de pausa se comió una palabra. Aumenta --pad. Sigue ahí: una etiqueta está mal.
  • Las uniones dentro del habla se mueven a un fotograma silencioso. Cualquier still in speech: escucha en el paso 5.

4-5. Renderizar y verificar

En primer plano (render.py espera a la codificación en segundo plano):

R="${CLAUDE_SKILL_DIR}/../../lib/ai_editor/review.py"
python3 "$S/build_timeline.py" <fuente> edits/<nombre> && \
python3 "$S/render.py" <fuente> edits/<nombre> && \
python3 "$PY" "$S/verify_cut.py" edits/<nombre> --engine <mismo motor que paso 1> && \
python3 "$S/preview_cut.py" edits/<nombre> --no-open && \
python3 "$R" edits/<nombre> start --video edits/<nombre>/cut.mp4 --stage cut --transcript edits/<nombre>/words.json

Verificar limpio: la página de corte está lista. Verificar compara el transcript del corte con las palabras mantenidas (código de salida 1 detiene la cadena):

  • MISSING: una palabra mantenida no está en el render. Aumenta --pad (o reduce el span), reconstruye, re-renderiza.
  • SURVIVED: un span para añadir por una repetición o tropiezo real, nunca uno que corte una línea mantenida.
  • HEARD DIFFERENTLY ("jev -> jeff") y notas de muletillas son variación del transcriptor: no reconstruir.
  • DOUBLED: palabras dichas dos veces seguidas. Natural ("muy, muy"): mantener. Un tropiezo: añadir su span.
  • N unión(es) en el habla: escuchar. Recortado: splice_check.py edits/<nombre> --fix, re-renderizar.

Un ciclo de corrección (la misma cadena), luego mostrar al usuario lo que queda.

6. El usuario aprueba

La cadena abrió la página de revisión (../style-edit/references/review.md). serve y wait en segundo plano. Di los segundos cortados. Notas: "mantener <línea>": reducir o eliminar ese span; "cortar <línea>": añadir uno; pausas mal: --max-pause. Luego pasos 4-5, resolve cada nota (--reply: qué cambió), por último round --video edits/<nombre>/cut.mp4 (nunca un segundo start), luego preguntar cualquier cuestión de aprendizaje.

Después de la aprobación, una llamada Bash: python3 "$S/trend.py" log edits/<nombre> (tally: tendencia), la verificación del gancho. Luego variantes del gancho si existe hooks.json (references/retake-detection.md); llamado por start, pregúntalo en el mismo cuadro de preguntas que la aprobación de imágenes fijas de style-edit, no antes.

Solo la aprobación finaliza el corte; cut.mp4, words.json van a style-edit. En "solo el corte primero", di que pueden pedir el estilo. Nunca inicies style-edit por tu cuenta. Llamado por start: al abrir la página, inicia visual-prep en segundo plano; sus motion_briefs: un clip-builder en segundo plano cada uno de una vez; di un motion_note una vez.

Si un script se detiene

mensajehacer
no such file / ffmpeg could not read audiopide la ruta correcta; nunca copies ni conviertas la fuente
faster-whisper missing / CrisperWhisper missingejecuta con python3 "$PY", o el paso 3 de la skill setup
no ElevenLabs key (código de salida 2) / HTTP 4xx, unreachable (3)quita --engine scribe, o vuelve a guardar la clave con la skill setup
build ERROR en una citacorrige la cita de ese span o añade occurrence, construye de nuevo
cannot derive a silence threshold / marked no silenceel habla y el fondo están a menos de 10 dB de diferencia: ffmpeg -i <fuente> -af volumedetect -vn -f null -, pasa --noise unos 10 dB por encima de la media
render ERROR ...dilo; re-ejecuta render una vez

Reglas

  1. Cada corte cita el transcript. Sin cita, no hay corte.
  2. Un guión rompe empates entre tomas y mantiene cada toma de una línea que dice dos veces. Nada se corta por estar fuera del guión.
  3. Nunca copies en streaming (-c copy) a través de cortes: termina con hasta 2 s de desfase.
  4. Nunca entregues un render que no haya sido verificado y aprobado.

Autocomprobación

test_build_timeline.py, test_retakes.py, test_media.py (ffmpeg); demo en 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.

Skills relacionados