Communitygithub.com

zriptic/roclicks-skills

Crea tráileres de jugabilidad para juegos de Roblox de principio a fin. Planifica una lista de tomas desde el GAME.md del juego, conduce al personaje en una prueba de juego de Studio para que parezca jugado a mano, añade movimientos de cámara cinematográficos, graba solo la ventana de Studio y edita con ffmpeg.

¿Qué es roclicks-skills?

Este skill automatiza la producción de tráileres de video para juegos de Roblox. Lee el archivo GAME.md del juego para planificar las tomas, luego controla un personaje en una prueba de juego de Roblox Studio usando scripts Luau (TrailerDriver.luau y CameraRig.luau) para simular jugabilidad real y movimientos de cámara profesionales. Graba solo la ventana de Studio en macOS y edita el metraje con ffmpeg, incluyendo transiciones, tarjetas de título, banda sonora y cumplimiento de las normas de Roblox. Soporta la exportación para subida directa a Roblox (1920x1080, 30 s) y formatos verticales para Shorts/TikTok (9:16). Ejecuta controles de calidad finales con hojas de contacto. Está diseñado para agentes de IA (como Claude Code) que usan MCP y scripts de Python, y el usuario solo debe mantener Studio en primer plano mientras se graba.

Compatible con~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/zriptic/roclicks-skills/tree/HEAD/roblox-trailer

Preguntar en tu IA favorita

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

Documentación

Tráiler de Roblox

SK=<ruta a esta carpeta del skill>. El resumen para el que se construyó este skill: "grábalo, haz que parezca que lo estoy jugando, y edítalo también". Todo lo específico de cada juego vive en <juego>/trailer/: shots.json, clips/, out/. Los scripts son genéricos, y cada nombre específico del juego (tags, remotes, texto de prompts, ids de objetos) vive en shots.json.

Reglas básicas (léelas primero)

  • Graba la pantalla real del usuario. Antes de grabar, dile al usuario en el chat que mantenga Studio en primer plano y descubierto, que aparque el ratón fuera de la vista del juego y que no toque el ordenador hasta que le digas que has terminado, y obtén su confirmación. Graba solo la región calibrada de la ventana. Borra las tomas de prueba y las erráticas con record.py clean. Nunca uses -C (cursor).
  • Etiqueta de Studio: usa un servidor MCP de Studio para esto (escrito para el servidor comunitario robloxstudio, no el integrado Roblox_Studio). Comprueba que ningún otro agente esté usando Studio antes de iniciar una prueba de juego. Importa el kit en modo edición, elimínalo después y nunca guardes el lugar con él.
  • Honestidad: Roblox rechaza videos que muestren características que el juego no tiene, gráficos mejorados o afirmaciones publicitarias. Escenificar qué resultado real ocurre en cámara (forzar probabilidades para una toma, conceder un objeto) está bien. Fingir algo que el juego no puede hacer no lo está; reestructura la toma en su lugar (véase el montaje Oro→Arcoíris en el ejemplo).
  • No uses computer-use. Todo se hace a través de llamadas MCP eval, Python y ffmpeg.
  • Mantén las tarjetas y el texto escasos ("tema sin ruido": sin ruido extra en las herramientas). La propia interfaz de usuario del juego es el mejor texto.

Flujo de trabajo

1. Planificar

Lee references/shot-list-template.md. A partir del GAME.md, FINISHED.md y el código fuente del juego, escribe la tabla de tomas (gancho en los primeros 2-3 s, bucle principal, momento raro, social, base/progresión, un sistema extra, tarjeta de título, un CTA solo para redes sociales) y muéstrala al usuario antes de grabar. Luego escribe <juego>/trailer/shots.json (esquema en references/luau-api.md; empieza desde assets/shots.template.json, o references/example.shots.json para un ejemplo completo). python3 $SK/scripts/build_kit.py list --shots <shots.json> resume el metraje en bruto.

2. Tomas en primera persona y cinematográficas (Luau)

  • scripts/TrailerDriver.luau ejecuta una toma en un cliente de prueba de juego: teletransporta a la pose inicial, desactiva los controles del teclado, recorre waypoints (Humanoid:MoveTo, pathfinding, saltos, temblor humano), gira para mirar objetivos, presiona ProximityPrompts (InputHoldBegin/End), invoca remotes o bindables, y cambia de cámara cuando se le indica o según eventos del juego. Su cámara de jugador es un seguimiento con retardo similar al del ratón, con deriva, temblor y miradas. El HUD del juego permanece activo para las tomas de jugabilidad y se desactiva para las cinematográficas; la barra superior de Roblox, el CoreGui y el cursor siempre están desactivados. Cada ejecución detiene primero la anterior y restaura todo después.
  • scripts/CameraRig.luau tiene los preajustes cinematográficos: dolly/spline/sobrevuelo, bezier, órbita, grúa, zoom, whip (con desenfoque de movimiento) y estático. Todos se suavizan mediante curvas de TweenService y tienen duraciones configurables.
  • Cómo cargarlos: build_kit.py rbxmx → import_rbxm en ReplicatedStorage (modo edición) → iniciar la prueba de juego → enviar build_kit.py call --shot ID con eval_client_runtime. Ejecuta primero build_kit.py server --shot ID con eval_server_runtime si la toma tiene configuración inicial. Detalles y la lista completa de acciones: references/luau-api.md.

3. Grabar

references/recording.md. En resumen: record.py calibrate una vez (el driver pinta la ventana de cian y el script la encuentra), luego para cada toma record.py shot ID --start-ms <startsAtMs> --dur <dur>. Espera al inicio programado por el driver, graba prerroll + toma + cola solo de la ventana, y almacena el desplazamiento exacto de edición. Si la grabación de pantalla no está disponible, record.py stitch convierte los fotogramas guardados de capture_screenshot en un clip.

4. Editar

references/editing.md. edit.py build --cut roblox --format landscape genera la subida a Roblox (30 s máximo, 1080p60 H.264, sin CTA). --cut social --format both genera 16:9 más 9:16. El texto se dibuja con Pillow porque el ffmpeg de Homebrew puede no tener drawtext. Si Fredoka One no está instalada, pregunta antes de descargarla en assets/fonts//; se usa como alternativa Arial Rounded Bold.

5. QA

qa.py clips --shots ... después de grabar; qa.py final <mp4> --roblox después de editar. Comprueba fotogramas perdidos, fotogramas negros y congelados, bandas de la interfaz de Studio en los bordes, el flag del cursor y los límites de Roblox, y escribe una hoja de contacto. Abre la hoja con Read y mírala: un panel errante de Studio, un cursor o el estado incorrecto del HUD se ven ahí. Luego muestra al usuario el corte (ruta más hoja) y toma notas para un recorte. Los recortes solo necesitan edit.py.

6. Limpiar

Detén la prueba de juego, elimina ReplicatedStorage.TrailerKit, ejecuta record.py clean --out <trailer> --shots <shots.json>, y elimina <trailer>/build/. Conserva clips/ (el metraje fuente) y out/.

Mapa de referencias

ArchivoCuándo leerlo
references/shot-list-template.mdplanificación; convertir GAME.md en tomas
references/luau-api.mdescribir shots.json; API del driver y el rig; objetivos, acciones, disparadores, preajustes
references/recording.mdantes de la primera toma; calibración, sincronización, alternativas, tomas de 2 jugadores
references/editing.mdbloque de edición, transiciones, tarjetas, fuentes y emojis, audio, vertical
references/roblox-video-specs.mdlímites de subida de Roblox y reglas de contenido, con fuentes
references/worked-example.md + example.shots.jsonejemplo completo (un juego de tirada de huevos mascota, "🥚 Pet Roll")

Scripts

ScriptPropósito
scripts/TrailerDriver.luau, scripts/CameraRig.luautiempo de ejecución (cliente)
scripts/build_kit.pykit rbxmx, fragmentos eval, fallback de carga útil en línea, fragmentos de servidor, lista de tomas
scripts/record.py (envoltorio record.sh)ventanas, calibrar, toma, stitch, limpiar
scripts/edit.pyconstruir los cortes, tarjetas de vista previa, listar fuentes
scripts/qa.pycomprobaciones de clips y finales, hojas de contacto
scripts/check_luau.shluau-analyze con un preludio de globales de Roblox (funciona sin las definiciones de tipos de Roblox instaladas)

Valida después de cambiar los scripts: python3 -m py_compile $SK/scripts/*.py y $SK/scripts/check_luau.sh $SK/scripts/*.luau.

Brechas conocidas (arréglalas aquí cuando las encuentres)

  • El driver no puede hacer clic en botones GUI. Usa el remote que llama el botón (invoke), como hace la toma de eclosión.
  • Un localOffset fijo desde un tag es una primera suposición; espera ajustarlo después de la primera toma de cada toma.
  • La cámara del jugador no modela el zoom de la rueda del ratón. Usa look.dist para cambiar la distancia entre tiempos.
  • La configuración del servidor no puede require los módulos del juego en vivo: execute_luau/eval_server_runtime obtienen una caché de require FRESCA (medido el 2026-10-11 en un juego de eclosión de mascotas: PlayerState.all() estaba vacío mientras el jugador estaba cargado). Pon la configuración en un Script RunContext=Server importado junto al kit que expone una BindableFunction, y haz que los fragmentos de server la :Invoke. Patrón: un Script TrailerHook (solo del tráiler, nunca guardado en el lugar) que require los módulos propios del juego desde dentro de la VM del servidor del juego y crea ServerStorage.TrailerHook (BindableFunction, :Invoke(cmd, args) -> (ok, result)), con un comando pequeño por paso de configuración (dar dinero, añadir un objeto de un nivel dado, preparar un temporizador, forzar las probabilidades del siguiente lanzamiento, restore). Guarda cada valor de configuración que cambia y los restaura con restore y cuando el Script se destruye. Empaquétalo en un .rbxmx de la misma manera que build_kit.py empaqueta el kit.
  • La ventana de Studio con el Explorador/Propiedades acoplados es aproximadamente 1.26:1 en una pantalla de 1470x956 pt; oculta los paneles (o Vista > Pantalla completa) antes de calibrar, o el recorte 16:9 descarta un tercio de la imagen.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados