Communitygithub.com

WEBGRS/reframe

Reencuadra footage horizontal a formato vertical (9:16), cuadrado o 4:5, recortando cada plano en lo que importa (el hablante, lo que se mueve, el tema del plano), siguiendo al sujeto que cruza el encuadre, sin re-codificar el video. Mide cada plano primero, dibuja cada ventana para que revises, y verifica el film.html final contra las mismas reglas.

¿Qué es reframe?

Reframe es una habilidad para agentes de IA (como Claude Code, Cursor o Codex) que reencuadra videos horizontales (16:9) a formatos verticales (9:16), cuadrados (1:1) o 4:5, manteniendo el contenido relevante en el centro del encuadre en cada momento. A diferencia de un simple recorte central o de barras borrosas, Reframe analiza cada plano individualmente: mide el movimiento, el detalle, el contraste de color y los tonos de piel diez veces por segundo, y propone ventanas de recorte fijas, divididas o completas. El video nunca se re-codifica; se recorta mediante `#t=` y CSS (`object-fit: cover` con `object-position` o `translate`), conservando el audio original y la calidad del archivo fuente. La habilidad genera una hoja de revisión con cada ventana dibujada sobre los fotogramas, marcando los momentos débiles y las discrepancias. Además, incluye un comando `check` que verifica que el film.html final cumpla las reglas (sujeto entero, encuadre calmado, sin re-codificación) y señala con `!` lo que debe corregirse. Es ideal para creadores de contenido, editores y equipos que necesitan adaptar material horizontal a plataformas verticales como TikTok, Instagram Reels o YouTube Shorts de manera precisa y sin pérdida de calidad.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WEBGRS/openfilm-reframe/tree/HEAD/skills/reframe

Preguntar en tu IA favorita

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

Documentación

¿Qué hace reframe?

El footage horizontal de la persona convertido en un film vertical o cuadrado que parece grabado para ese formato: en cada momento el espectador ve de qué trata el plano, nunca la pared de al lado, nunca media cara.

Qué lo define

Cada plano se encuadra sobre su propio contenido. Un solo recorte central para todo el video no es esto, por muy limpio que sea, ni tampoco todo el fotograma horizontal reducido entre barras borrosas.

Qué debe cumplirse

  • Medido, luego mirado. Cada ventana proviene de la medición y de tus propios ojos sobre sus imágenes. La medición puede fallar; las imágenes deciden.
  • El sujeto permanece entero. Los rostros, el hablante, lo que se mueve y las palabras importantes permanecen dentro del encuadre con espacio alrededor. Cuando dos cosas importan y no caben ambas, el encuadre va a la que corresponde al momento (quién habla, qué se mueve, qué nombra la narración), y la persona escucha lo que quedó fuera.
  • Encuadre calmado. Un sujeto quieto recibe una sola ventana fija para el plano. La ventana se mueve solo cuando lo hace el sujeto: un reposicionamiento firme al menos un segundo después del último, o un seguimiento suave; nunca un recorte que deriva o tiembla.
  • Su footage tal cual. El mismo archivo recortado con #t= y encuadrado por el CSS propio del clip (object-fit: cover con un object-position, o una caja de la forma del footage movida con translate); nunca re-codificado, recortado a un nuevo archivo, o cambiado de velocidad. Los clips de un plano se encuentran fotograma con fotograma, para que el sonido del plano continúe sin interrupción.

Lo que tienes

node <carpeta de esta habilidad>/scripts/reframe.mjs <video> --aspect 9:16 --src assets/<archivo> (en la carpeta del film) escribe reframe/<nombre>.json, una página de revisión y reframe/<nombre>-sheet.jpg. Encuentra los planos, pondera el movimiento (quitando el propio movimiento de la cámara), el detalle, el contraste de color y los tonos de piel diez veces por segundo, y asigna a cada plano una ventana fixed (un clip), split (varios clips del mismo archivo, cada uno de al menos un segundo, cada uno con su propia posición) o whole (la forma original del footage), con líneas <video> listas en sus segundos de origen.

Lee cada hoja que imprime (look: … (Read it)). Cada imagen es un momento (el inicio de cada clip, su momento más débil marcado como WEAKEST, uno cada 1.5 s): el fotograma con la ventana delineada y el exterior atenuado, una regla en % del fotograma, y el recorte tal como lo muestra el film. Donde el sujeto esté fuera de la ventana o cortado por ella, establece object-position tú mismo; la salida da la fórmula. held indica con qué frecuencia la ventana coincide con la medición, no es prueba de que el sujeto esté dentro. Las líneas marcadas con ! indican dónde mirar con más atención.

Un seguimiento suave (--follow): @keyframes follow-N de translate para la trayectoria de un plano dividido y el único clip <video> que las lleva, también en reframe/<nombre>-follow.css. Coloca los keyframes en el <style> de film.html. La animación se ejecuta en el tiempo propio del clip desde su at: un clip recortado para comenzar a segundos después del inicio del plano toma animation-delay: -a s. El clip conserva su propio sonido.

Recortar un plano conserva solo los clips dentro del nuevo #t=, los dos exteriores se cortan hasta él, las posiciones no cambian.

El film tal como está escrito: node <carpeta de esta habilidad>/scripts/reframe.mjs check en la carpeta del film lee los recortes propios de film.html e imprime cada ventana, cuánto tiempo se mueve, cada reposicionamiento, los momentos donde la ventana conserva menos de lo que la medición encontró, y los dibuja en una hoja. Lista con ! lo que rompe las reglas anteriores. Corrige cada ! y ejecútalo de nuevo.

La forma del film es su viewport (<meta name="viewport" content="width=1080, height=1920">). npx openfilm look muestra el film recortado.

Con la persona

Lo que pidan viene primero: la forma (9:16 cuando dicen vertical), los planos que deben estar, cualquier cosa que deba permanecer en el encuadre (un producto, un logo, un segundo hablante). Pregunta sin retrasar el trabajo. Cuando termines, di por plano: held, cada línea !, cada ventana que moviste y por qué, y qué dejó fuera el recorte.

Skills relacionados