Estilo celular
La regla única: quien lo vea debe sentir que la propia creadora lo editó en el celular, en el editor de Instagram. Nunca debe parecer agencia ni IA. En caso de duda: menos, más crudo, más pequeño. Motion graphics bonitos aquí son un error.
Antes de empezar lee ../perfil-criadora.md y carga (o crea) el perfil.json de la raíz.
Visual — innegociable
| Elemento | Regla |
|---|---|
| Capturas | Capturas reales de la carpeta Mis capturas de la alumna (encabezado de perfil, insights, Me gusta/comentarios/guardados, visualizaciones, DMs, comentarios, publicaciones). Recorte crudo: esquina recta, sin borde, sin sombra, sin marco, sin tarjeta redondeada. Sobre la cabeza. |
| Texto sobre la cabeza | Fuente de título (.tit), blanca, pequeña — títulos 48–70 px, etiquetas 40–48 px en 1080 de ancho. Alineado a la izquierda con el borde izquierdo de la captura. Color de acento (.y) solo en una palabra ocasional. Sans (.sans) solo para etiquetas como "Malo / Bueno / Viral". |
| Sombra | Solo cuando la pared detrás es clara (.sh). Nunca caja, fondo o vidrio detrás del texto. |
| Movimiento | Ninguno. Los elementos entran y salen en corte seco (show()/hide()). Sin fade, slide, zoom, rebote. |
| Emojis | Caracteres reales en la plantilla (✅ ❌ 🔥 ❤️ 👇 🚨 …); montar.mjs los reemplaza por arte Twemoji. Nunca dibujes íconos. |
| Leyenda | Una palabra por vez, 54 px, blanca con sombra suave (nunca contorno). Centrada en el pecho, justo debajo de la barbilla (capTop en reel.json). Corte seco palabra a palabra. |
| Título persistente | Un título de tema puede permanecer en pantalla durante largos tramos mientras las capturas cambian encima. |
| Listas | Checklists de emoji + palabra (✅ Leyenda / ❌ Título), reveladas ítem por ítem al pronunciarse la palabra. |
| Mockups | Evita. Usa captura real. Solo dibuja un mockup si no existe captura Y la alumna lo pide. |
Reglas de corte
- Sin respiración ni pausa: todo por debajo de −30 dB durante ≥ 0,15 s se elimina (
cortar.mjslo hace solo). - Elimina toda repetición, comienzo falso y frase rehecha. Quédate con la última versión, la más limpia.
- El transcriptor oculta repeticiones y se equivoca en los tiempos. Después de cortar, SIEMPRE retranscribe el
clean.mp4y léelo de principio a fin buscando frase duplicada, palabra cortada y verbo faltante. Recorta hasta que quede limpio. - Máximo 90 s, a menos que la alumna pida otra cosa. Di en la entrega lo que quedó fuera.
- J/L cuts activados por defecto (
--jl 6más suave,--no-jldesactiva).
Reglas de velocidad (el PC de la alumna puede ser lento — aplican por encima de los pasos siguientes)
- La transcripción del
novo-projeto.mjsya es--rapido(modelo ligero, solo para elegir el corte). La retranscripción delclean.mp4(la de la leyenda) usa el modelo preciso — ejecútala una vez por versión del corte, no en cada ajuste. - Revisa todas las uniones en UNA llamada (una carga de modelo):
$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas t1,t2,…(tiempos en la línea de tiempo del clean). Nunca una ventana por vez. - No renderices un borrador entero solo para mirar cuadros. Usa
$K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots(una vez por cambio de elemento) y mira los PNGs. Renderiza el video UNA vez, cuando los snapshots estén correctos. Renderiza de nuevo solo para cambios solicitados. - El codificador del raw.mp4 / clean.mp4 se elige solo (NVIDIA / Intel / AMD / Apple, si no CPU). No lo cambies.
- Antes de cada etapa lenta, avisa en una línea corta en español qué se está ejecutando y que puede tomar algunos minutos ("Transcribiendo el video — en tu PC puede tomar unos minutos."), para que la espera nunca parezca un congelamiento.
Flujo (todo comando mediante el lanzador $K)
M=.claude/skills/_motor · K = el lanzador de la skill videos-opus: "<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit, donde <VO> es la carpeta de la skill videos-opus (la que tiene el SKILL.md que te envió a leer esta guía). Pone los programas portátiles en la ruta y ejecuta en la carpeta de trabajo del kit ($K pasta muestra cuál es; los proyectos están en <pasta>\video-projects\<slug>). $K --em <subcarpeta> … ejecuta dentro de ella. Nada de npx, Python o node suelto: todo pasa por $K.
- Proyecto + transcripción rápida:
$K node $M/novo-projeto.mjs "<video>" <slug> .claude/skills/estilo-celular→video-projects/<slug>/conassets/raw.mp4(1080×1920, 30 fps),assets/raw.json,assets/palabras.txt, fuentes ysrc/index.template.html. El slug es corto, en minúsculas, con guiones (promo-engrene). - Encuadre: toma una instantánea de contacto del raw (
$K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/4,scale=180:-1,tile=12x1" -frames:v 1 assets/contacto.png) y MIRA: dónde está la parte superior de la cabeza y la barbilla. Los elementos viven entre y≈100 y la parte superior de la cabeza; la leyenda debajo de la barbilla → escribereel.jsonen la raíz del proyecto:{"capTop": <px>}(por defecto 1380). - Elección del corte: lee
assets/palabras.txty escribeassets/keeps.json({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]}). Cadawhyexplica en español qué se quedó y por qué. - Corte: dentro de
assets/:$K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs→clean.mp4+edit-decisions.json. - Revisión: en la raíz del proyecto:
$K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<términos del perfil>". Repetición o palabra cortada → vuelve al paso 3. Palabra mal escuchada →assets/caption-fixes.json({"cloud":"Claude"}).$K --em video-projects/<slug> ffmpeg -i assets/clean.mp4 -af silencedetect=noise=-30dB:d=0.25 -f null -→ no puede quedar pausa. - Capturas: lista las imágenes de la
carpeta_capturasdel perfil (más recientes primero) y VE cada candidata antes de usarla. Recorta con ffmpeg aassets/capturas/(-vf crop=w:h:x:y), y anota el origen enassets/capturas/ORIGEN.md. Sin captura adecuada → di qué pantalla ayudaría y continúa SIN captura (ella puede pedirla después como ajuste). Nunca inventes una captura. - Composición: edita
src/index.template.html— elementos en el bloqueELEMENTOSy tiempos en el bloqueTIEMPOS. Los tiempos vienen de$K --em video-projects/<slug> node ../../$M/ancoras.mjs "frase" "otra frase"(raíz del proyecto), en la palabra pronunciada. Solo corte seco. - Montaje + verificación:
$K --em video-projects/<slug> node ../../$M/montar.mjs→$K --em video-projects/<slug> hyperframes lint→ instantáneas de cada cambio de elemento ($K --em video-projects/<slug> hyperframes snapshot --at …) y MIRA: rostro nunca cubierto, texto legible, captura alineada con el título. Luego render y entrega (mediante el lanzador, en la carpeta de trabajo del kit):$K node $M/renderizar.mjs <slug>— revisa los bloqueos, renderiza en segundo plano, valida y ya copia alistos/. Salida 3 = aún renderizando: ejecuta$K node $M/renderizar.mjs <slug> --esperarhasta que salga LISTO. Nunca ejecutes$K --em video-projects/<slug> hyperframes renderdirectamente nilistos.mjsa mano. - Entrega: Responde en español, breve: dónde está el video, qué se cortó, capturas usadas, qué quedó en duda. Nunca publiques ni envíes nada.
Ajustes después de la entrega
"quita la parte del precio" → edita keeps.json, repite 4–5, recalcula los TIEMPOS de todo lo que viene después del fragmento con ancoras.mjs y repite 8. "leyenda más abajo" → reel.json y repite 8.
"cambia la captura" → solo 6–8. Nunca rehagas desde cero lo que la alumna no pidió cambiar.