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.
CLIPPEDenpaper-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
| mensaje | hacer |
|---|---|
no such file / ffmpeg could not read audio | pide la ruta correcta; nunca copies ni conviertas la fuente |
faster-whisper missing / CrisperWhisper missing | ejecuta 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 cita | corrige la cita de ese span o añade occurrence, construye de nuevo |
cannot derive a silence threshold / marked no silence | el 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
- Cada corte cita el transcript. Sin cita, no hay corte.
- 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.
- Nunca copies en streaming (
-c copy) a través de cortes: termina con hasta 2 s de desfase. - 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.