/make-video — pasos 2 a 4: desde la selección hasta el release fusionado
Entrada: selección del usuario de un archivo de ideas de esta worktree («/make-video N» + correcciones) o un objeto nombrado por el usuario.
Salida = DoD (AGENTS.md, «Pipeline de chats»): out/<ep>/release/ — master <ep>_en_1080x1920p60.mp4 y
publish_en.md, dos archivos — entregados al usuario; QA visual aceptado; todo commiteado; rama fusionada en main
(video_wt.py finish); worktree eliminada.
Estándar — docs/quality.md: cine, no infografía; hechos — en palabras, espectáculo — en imagen; final hasta 6 h de GPU.
Solo EN, objetivo 29–29.5 s, máximo 30.0 s (docs/shorts_format.md).
Enlaces: proceso — docs/pipeline.md; aprobación — docs/approval.md; paquete — docs/publish.md; roles —
docs/workflows.md; biblioteca — docs/spacekit.md; tiempos — docs/timings.md; cola — docs/render_queue.md;
agentes, commits, gotchas — AGENTS.md. Comandos — Git Bash desde la raíz de su worktree; <ep> = epNNN_<slug>.
Paso 0 — worktree, cola, commits
- Rama
video/epNNN...después de/next-video— continuar en ella. Chat en copia principal sin/next-video—python tools/video_wt.py start→ ClaudeEnterWorktreeconpath/ Codexworkdir. - Blender, TTS, música, ensamblaje — solo a través de la cola: tarea enviada — el chat continúa con trabajo textual.
- Después de cada bloque — commit
type(<ep>): ...con el modelo trailer. Fin del turno — árbol limpio.
Parte A — hasta aprobación
- Episodio.
python tools/video_wt.py claim <slug>(slug —[a-z0-9_], ≤ 16, según nombre de catálogo). Copiarepisodes/_template/→episodes/<ep>/, enepisode.json—id= nombre de carpeta,languages: ["en"](rutasframes_dir/audio_dirno establecer). Al final del archivo de ideas:Seleccionado: N, <fecha>, correcciones: …, episodio: <ep>. Commitfeat(<ep>): episodio desde la variante N. - Hechos: investigador + verificador (
docs/workflows.md) →facts.md(cada número con enlace, referencias visuales). Commit. - Brief visual
visual_brief.md(rol «Director»): referencias, primer fotograma, money shot, paleta, luz, cámara y evento de cada plano, convenciones, presupuesto. Crítico «Cine/wow» sobre el brief → correcciones. Commit. - Guion
script_9x16.json(EN): 6–8 segmentos, anclasat(s), 29–29.5 s (≤ 30.0 estricto), ≈ 55–70 palabras; primera frase — gancho factual; última conduce al inicio (bucle).en_cap— dígitos,|— saltos manuales (docs/pipeline.md, «Títulos y subtítulos»). Voz del canal — Kokoroaf_heart×0.98. Commit. - Escena y planos.
system.py(parámetros reales → pantalla, convenciones — en docstring); lo faltante — módulosspacekit/(commit separadofeat(spacekit): ..., regresiontools/imgdiff.py).shots_9x16.pysegún brief: 6–10 planos de 2–5 s, cada uno con ≥ 3 profundidades, clave + contraluz, halo/bloom, movimiento de cámara, motion blur, fondo no vacío (docs/quality.md).episode.json(edit, overlaysen, subtítulos en zonas seguras),music_cues.json(propia tonalidad/modo/tempo). Empalmes — a tope, sobre eventos; último fotograma = primero. Σ fotogramas de edición ≤ 1799 a 60 fps.python tools/check_episode.py episodes/<ep>/episode.json. Commit. - Vista previa de tiempos:
python tools/render_queue.py submit preview episodes/<ep>/episode.json --with-tts, estado —status --json. Hojaout/<ep>/9x16/sheet_prev.png; sin Traceback/OVERRUN, con FLASH/EVENT; lista de cues —python tools/cues.py episodes/<ep>/episode.json --logs out/<ep>/9x16/logs. - Hero-frames: por plano
submit preview … --hero --shots vN --frames F,F+1,F+2(F = mejor momento del plano; 100 %, sin--samples— muestras del código del plano, como en el final) →out/<ep>/9x16/hero/,sheet_hero.png. A críticos y propietario — fotograma F; según loghero_vN.log— s/fotograma y ETA (docs/timings.md). Muestras y efectos pesados ajustados enshots_9x16.py(commit, hero de nuevo) para que el final ocupe 4–6 h, no una hora. - Crítica (
docs/workflows.md): «Cine/wow» (puntuación planos 1–10, < 8 — rehacer, hasta 3 rondas), composición, ritmo/gancho, hechos (solo 4 bloqueantesdocs/quality.md); opc. unicidad, sonido. Correcciones → repetir 6–7. Informes — archivos en el episodio, commit por rondafix(<ep>): correcciones según crítica, ronda K. - Video borrador completo (
docs/approval.md, 1a): funcióndraften planos + episódicopreview_movie.pymediantesubmit task. Si no se ensambla — para aprobación sin él, en mensaje «video borrador: no». - Aprobación: mensaje según plantilla
docs/approval.md+ archivos (hero-frames, video borrador). Commit del estado. Detente y espera respuesta. Correcciones — volver al paso necesario.
Parte B — después del «ok»: hasta DoD (sin preguntas, excepto paradas de docs/approval.md)
- Aprobación en el historial. Listos la lista de cues acordada y
publish_en.mdsegúndocs/publish.md(convenciones — en lista). Commitchore(<ep>): aprobado para render(correcciones del usuario — en el cuerpo). - Final.
python tools/render_queue.py submit final episodes/<ep>/episode.json --approved 'aprobación del usuario: fecha, contexto del chat'. La bandera registra el consentimiento ya obtenido, no lo reemplaza. Al usuario — id de tarea, PC, ETA. Worker elige PC, renderiza en porciones de 120 fotogramas y ejecuta framecheck, TTS, música, mix, build_edit, ensamblaje, QA automático y release. El chat puede cerrarse. - Estado y fallos.
status --json(progreso —cursor/steps; fotogramas hasta el final de la tarea están en snapshotsnapshot, no enout/<ep>/).failed— log del paso en snapshot; fallo temporal del entorno —retry JOB; corrección de código/guion —cancel JOB, corregir en worktree, si es necesario nueva aprobación, nueva tarea. Framecheck FAIL — analizar RERENDER, eliminar fotogramas malos en snapshot (y en remote),retry JOB --rerender-shots vN.pause/resume— entre porciones. No matar bash superior. - QA visual.
needs_review= verificaciones automáticas y paquete listos. PNGout/<ep>/9x16/qa_en/y master: no peor que hero-frames (ruido, borroso, sobreexposición, parpadeo), zonas seguras, subtítulos, desincronización, bucle. Limpio —python tools/render_queue.py accept JOB; defecto — corrección y nueva tarea. - Entrega. Ambos archivos
out/<ep>/release/al usuario (Claude — SendUserFile). Si los fuentes cambiaron durante el render, comparar publish del snapshot y JSON de edición antes del commit. - Registro.
episodes/INDEX.md(planos, técnicas, voz, tonalidad, gancho), tabla de episodios enREADME.md, ✅ temas endocs/channel.md, mediciones s/fotograma endocs/timings.md, lecciones — en docs pertinentes. Commitdocs(<ep>): registro y lecciones(código del episodio,edit_9x16_en.json,publish_en.md; sinout/). - Fusión.
python tools/video_wt.py finish— limpio → release → accept →git merge main→ check_episode y tests → ff main →out/<ep>/se traslada a la copia principal. Conflicto — resolver en worktree, commit, repetir. Luego salir de worktree (Claude —ExitWorktreekeep) y desde la copia principalpython tools/video_wt.py remove epNNN; no eliminar worktree de la aplicación (start --here). Solo ahora — «listo».