Communitygithub.com

zriptic/roclicks-skills

Créez des bandes-annonces de gameplay pour des jeux Roblox, de bout en bout. Planifiez une liste de prises de vue à partir du fichier GAME.md du jeu, dirigez le personnage dans un playtest Studio pour un rendu naturel, ajoutez des mouvements de caméra cinématographiques, enregistrez la fenêtre Studio avec la capture d'écran macOS, et montez avec ffmpeg pour produire une vidéo pour Roblox, YouTube Shorts ou TikTok.

Qu'est-ce que roclicks-skills ?

Cette compétence est un pipeline complet de création de bandes-annonces pour les jeux Roblox, conçu pour les agents IA comme Claude Code ou Cursor. Elle automatise l'ensemble du processus : planification des plans (à partir du GAME.md du jeu), exécution de séquences de jeu réalistes via un playtest Studio (TrailerDriver.luau gère les waypoints, les prompts, les remotes et une caméra dérivante à la troisième personne), ajout de mouvements de caméra cinématographiques (CameraRig.luau propose des presets : travelling, orbite, grue, push-in, whip avec flou de mouvement synchronisés aux événements du jeu), enregistrement de la fenêtre Studio avec mise à l'échelle macOS, et montage vidéo avec ffmpeg (accélérations, fondus, cartons-titres avec emojis, musique avec ducking et loudnorm). Elle exporte une version 30 s 1920x1080 pour Roblox et un format 9:16 pour Shorts/TikTok, et exécute une QA avec une planche contact. L'agent doit suivre des règles strictes : ne pas utiliser de Computer Use, respecter l'étiquette Studio (un seul agent à la fois), et rester honnête (ne pas montrer de fonctionnalités que le jeu ne possède pas). Les scripts sont en Python/Luau et s'appuient sur le serveur MCP de la communauté Roblox.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Bande-annonce Roblox

SK=<chemin vers ce dossier de compétence>. Le brief pour lequel cette compétence a été construite : "enregistre-la, fais comme si je jouais, et monte-la aussi." Tout ce qui concerne un jeu se trouve dans <jeu>/trailer/ : shots.json, clips/, out/. Les scripts sont génériques, et chaque nom spécifique au jeu (tags, remotes, texte des prompts, identifiants d'objets) se trouve dans shots.json.

Règles de base (à lire d'abord)

  • Il enregistre l'écran réel de l'utilisateur. Avant d'enregistrer, dites à l'utilisateur dans le chat de garder Studio au premier plan et non couvert, de garer la souris en dehors de la vue du jeu, de ne pas toucher l'ordinateur jusqu'à ce que vous disiez que c'est fait, et obtenez son accord. Enregistrez uniquement la région calibrée de la fenêtre. Supprimez les prises de test et les prises non désirées avec record.py clean. N'utilisez jamais -C (curseur).
  • Étiquette Studio : utilisez un seul serveur MCP Studio pour cela (écrit pour le serveur robloxstudio de la communauté, pas le Roblox_Studio intégré). Vérifiez qu'aucun autre agent n'utilise Studio avant de lancer un playtest. Importez le kit en mode édition, retirez-le après, et ne sauvegardez jamais la place avec.
  • Honnêteté : Roblox rejette les vidéos qui montrent des fonctionnalités que le jeu ne possède pas, des graphismes améliorés ou des allégations publicitaires. Mettre en scène quel résultat réel arrive devant la caméra (forcer les chances pour une prise, offrir un objet) est acceptable. Simuler quelque chose que le jeu ne peut pas faire ne l'est pas ; restructurez plutôt le plan (voir le montage Or→Arc-en-ciel dans l'exemple).
  • Pas d'utilisation d'ordinateur. Tout passe par des appels MCP eval, Python et ffmpeg.
  • Gardez les cartons et le texte minimalistes ("thème sans bruit" : pas de bruit supplémentaire sur les outils). L'interface utilisateur du jeu elle-même est le meilleur texte.

Flux de travail

1. Planifier

Lisez references/shot-list-template.md. À partir du GAME.md, FINISHED.md et du code source du jeu, rédigez le tableau des prises de vue (accroche dans les 2-3 premières secondes, boucle de jeu principale, moment rare, social, base/progression, un système supplémentaire, carton-titre, un appel à l'action pour le social uniquement) et montrez-le à l'utilisateur avant d'enregistrer. Ensuite, écrivez <jeu>/trailer/shots.json (schéma dans references/luau-api.md ; commencez à partir de assets/shots.template.json, ou references/example.shots.json pour un exemple complet). python3 $SK/scripts/build_kit.py list --shots <shots.json> résume la durée brute des séquences.

2. Prises de vue en mode jeu et cinématiques (Luau)

  • scripts/TrailerDriver.luau exécute une prise sur un client de playtest : se téléporte à la position de départ, désactive les contrôles clavier, parcourt les waypoints (Humanoid:MoveTo, pathfinding, sauts, tremblement humain), se tourne vers les cibles, appuie sur les ProximityPrompts (InputHoldBegin/End), invoque des remotes ou bindables, et change de caméra sur signal ou sur événement de jeu. Sa caméra joueur est un suivi avec retard, dérive de souris, tremblement et regards. Le HUD du jeu reste allumé pour les plans de gameplay et s'éteint pour les cinématiques ; la barre supérieure Roblox, les CoreGui et le curseur sont toujours désactivés. Chaque exécution arrête d'abord la précédente et restaure tout ensuite.
  • scripts/CameraRig.luau contient les presets cinématographiques : travelling/spline/survol, Bézier, orbite, grue, push-in, whip (avec flou de mouvement) et statique. Tous sont animés en douceur via TweenService et ont des durées configurables.
  • Pour les installer : build_kit.py rbxmx → import_rbxm dans ReplicatedStorage (mode édition) → démarrer le playtest → envoyer build_kit.py call --shot ID avec eval_client_runtime. Lancez d'abord build_kit.py server --shot ID avec eval_server_runtime si la prise nécessite une configuration. Détails et liste complète des actions : references/luau-api.md.

3. Enregistrer

references/recording.md. En résumé : record.py calibrate une fois (le conducteur colore la fenêtre en cyan et le script la trouve), puis pour chaque prise record.py shot ID --start-ms <startsAtMs> --dur <dur>. Il attend le démarrage planifié du conducteur, enregistre le pré-rouleau + prise + fin de la fenêtre uniquement, et stocke le décalage de coupe exact. Si l'enregistrement d'écran n'est pas disponible, record.py stitch transforme les captures d'écran sauvegardées en clip.

4. Monter

references/editing.md. edit.py build --cut roblox --format landscape crée l'export Roblox (30 s max, 1080p60 H.264, sans appel à l'action). --cut social --format both crée un format 16:9 plus 9:16. Le texte est dessiné avec Pillow car le ffmpeg de Homebrew peut ne pas avoir drawtext. Si Fredoka One n'est pas installée, demandez avant de la télécharger dans assets/fonts/ ; elle se rabat sur Arial Rounded Bold.

5. QA

qa.py clips --shots ... après l'enregistrement ; qa.py final <mp4> --roblox après le montage. Il vérifie les images perdues, les images noires et figées, les bandes d'interface Studio sur les bords, le drapeau du curseur et les limites Roblox, et écrit une planche contact. Ouvrez la planche avec Read et regardez-la : un panneau Studio égaré, un curseur ou un mauvais état du HUD s'y voient. Montrez ensuite la coupe à l'utilisateur (chemin plus planche) et prenez des notes pour un nouveau montage. Les nouveaux montages ne nécessitent que edit.py.

6. Nettoyer

Arrêtez le playtest, supprimez ReplicatedStorage.TrailerKit, lancez record.py clean --out <trailer> --shots <shots.json>, et supprimez <trailer>/build/. Gardez clips/ (les séquences sources) et out/.

Table des références

FichierQuand le lire
references/shot-list-template.mdplanification ; transformer GAME.md en plans
references/luau-api.mdécrire shots.json ; API du conducteur et du rig ; cibles, actions, déclencheurs, presets
references/recording.mdavant la première prise ; calibration, synchronisation, solutions de secours, plans à deux joueurs
references/editing.mdbloc de montage, transitions, cartons, polices et emojis, audio, vertical
references/roblox-video-specs.mdlimites de téléversement Roblox et règles de contenu, avec sources
references/worked-example.md + example.shots.jsonexemple complet (un jeu de tirage d'œufs à éclore, "🥚 Pet Roll")

Scripts

ScriptObjectif
scripts/TrailerDriver.luau, scripts/CameraRig.luauexécution (client)
scripts/build_kit.pykit rbxmx, snippets eval, solution de secours en ligne, snippets serveur, liste de plans
scripts/record.py (wrapper record.sh)fenêtres, calibrer, prise, assembler, nettoyer
scripts/edit.pyconstruire les coupes, prévisualiser les cartons, lister les polices
scripts/qa.pyvérifications des clips et finales, planches contact
scripts/check_luau.shluau-analyze avec un préambule de globales Roblox (fonctionne sans les définitions de types Roblox installées)

Validez après avoir modifié les scripts : python3 -m py_compile $SK/scripts/*.py et $SK/scripts/check_luau.sh $SK/scripts/*.luau.

Lacunes connues (corrigez-les ici quand vous les rencontrez)

  • Le conducteur ne peut pas cliquer sur les boutons de l'interface graphique. Utilisez la remote que le bouton appelle (invoke), comme le fait la prise d'éclosion.
  • Un localOffset fixe depuis un tag est une première estimation ; attendez-vous à l'ajuster après la première prise de chaque plan.
  • La caméra joueur ne modélise pas le zoom de la molette de la souris. Utilisez look.dist pour changer la distance entre les battements.
  • La configuration serveur ne peut pas require les modules en direct du jeu : execute_luau/eval_server_runtime reçoivent un cache require FRAIS (mesuré le 2026-10-11 sur un jeu d'éclosion d'œufs : PlayerState.all() était vide alors que le joueur était chargé). Placez la configuration dans un Script RunContext=Server importé près du kit qui expose un BindableFunction, et faites en sorte que les snippets server l':Invoke. Motif : un Script TrailerHook (uniquement pour la bande-annonce, jamais sauvegardé dans la place) qui require les propres modules du jeu depuis la VM serveur du jeu et crée ServerStorage.TrailerHook (BindableFunction, :Invoke(cmd, args) -> (ok, result)), avec une petite commande par étape de configuration (donner de l'argent, ajouter un objet d'un certain niveau, préparer un minuteur, forcer les chances du prochain tirage, restore). Il enregistre chaque valeur de configuration qu'il modifie et les restaure sur restore et lorsque le Script est détruit. Regroupez-le en un .rbxmx de la même manière que build_kit.py regroupe le kit.
  • La fenêtre de Studio avec l'Explorateur/Propriétés ancré est d'environ 1.26:1 sur un écran de 1470x956 pt ; masquez les panneaux (ou Affichage > Plein écran) avant de calibrer, sinon le recadrage 16:9 jette un tiers de l'image.

Individual skills in this repo

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

Skills associés