Communitygithub.com

zriptic/roclicks-skills

Crie trailers de gameplay para jogos Roblox, do início ao fim. Planeja uma lista de cenas a partir do GAME.md do jogo, dirige o personagem em um playtest do Studio para parecer que foi jogado de verdade, adiciona movimentos de câmera cinematográficos, grava a viewport do Studio, edita com ffmpeg e exporta cortes para Roblox e redes sociais.

O que é roclicks-skills?

Esta skill automatiza a produção de trailers de gameplay para jogos Roblox, integrando planejamento, captura de tela e edição de vídeo. Ela lê o arquivo GAME.md do jogo para gerar uma lista de cenas (shot list) que cobre gancho inicial, loop central, momentos raros e sistemas do jogo. Durante a gravação, scripts Luau (TrailerDriver e CameraRig) controlam o personagem em um playtest do Roblox Studio, simulando movimentos humanos e aplicando movimentos de câmera cinematográficos como dolly, órbita, grua e whip pan. A gravação captura apenas a viewport do Studio usando captura de tela do macOS. Na edição, o ffmpeg aplica rampas de velocidade, crossfades, cartões de título com emoji e uma trilha sonora com ducking e loudnorm. O resultado final inclui um corte de 30 segundos em 1920x1080 para upload no Roblox e um corte 9:16 para Shorts/TikTok. A skill também executa QA automático com uma folha de contato para verificar quadros congelados, pixels pretos e outros problemas visuais. Funciona exclusivamente por meio de um servidor MCP do Roblox Studio (comunidade robloxstudio), evitando o uso de Computer Use. O usuário deve manter o Studio em primeiro plano durante a gravação e não interagir com o computador até o término. A skill rejeita cenas falsas que o jogo não pode executar, mas permite manipular resultados reais (como forçar probabilidades) para fins de gravação.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Trailer Roblox

SK=<caminho para esta pasta de skill>. A briefe para a qual esta skill foi construída: "grave, faça parecer que estou jogando e edite também." Tudo por jogo vive em <jogo>/trailer/: shots.json, clips/, out/. Os scripts são genéricos, e cada nome específico do jogo (tags, remotes, texto de prompt, ids de item) vive em shots.json.

Regras básicas (leia primeiro)

  • Grava a tela real do usuário. Antes de gravar, avise ao usuário no chat para manter o Studio em primeiro plano e descoberto, estacionar o mouse fora da view do jogo, e não tocar no computador até você dizer que terminou, e obtenha a confirmação dele. Grave apenas a região calibrada da viewport. Exclua takes de teste e tomadas avulsas com record.py clean. Nunca use -C (cursor).
  • Etiqueta do Studio: use um servidor MCP do Studio para isso (escrito contra o servidor da comunidade robloxstudio, não o Roblox_Studio embutido). Verifique se nenhum outro agente está usando o Studio antes de iniciar um playtest. Importe o kit no modo de edição, remova-o depois, e nunca salve o lugar com ele.
  • Honestidade: a Roblox rejeita vídeos que mostram recursos que o jogo não possui, gráficos aprimorados ou alegações de anúncio. Encenar qual resultado real acontece na câmera (forçar probabilidades para um take, conceder um item) é aceitável. Fingir algo que o jogo não pode fazer não é; reformule a cena (veja a montagem Ouro → Arco-Íris no exemplo).
  • Sem computer-use. Tudo passa por chamadas MCP eval, Python e ffmpeg.
  • Mantenha cards e texto esparsos ("tema sem ruído": sem ruído extra nas ferramentas). A própria UI do jogo é o melhor texto.

Fluxo de trabalho

1. Planejar

Leia references/shot-list-template.md. A partir do GAME.md, FINISHED.md e código-fonte do jogo, escreva a tabela de cenas (gancho nos primeiros 2-3 s, loop central, momento raro, social, base/progressão, um sistema extra, cartão de título, um CTA apenas para social) e mostre ao usuário antes de gravar. Depois escreva <jogo>/trailer/shots.json (esquema em references/luau-api.md; comece de assets/shots.template.json, ou references/example.shots.json para um exemplo completo). python3 $SK/scripts/build_kit.py list --shots <shots.json> soma a filmagem bruta.

2. Cenas de gameplay-POV e cinematográficas (Luau)

  • scripts/TrailerDriver.luau executa uma cena em um cliente de playtest: teletransporta para a pose inicial, desabilita os controles do teclado, percorre waypoints (Humanoid:MoveTo, pathfinding, pulos, tremor humano), vira para enfrentar alvos, pressiona ProximityPrompts (InputHoldBegin/End), invoca remotes ou bindables, e troca câmeras sob comando ou em eventos do jogo. Sua câmera de jogador é um seguimento com atraso semelhante ao do mouse, com tremor e olhares. A HUD do jogo permanece ligada para cenas de gameplay e desliga para cenas cinematográficas; a barra superior do Roblox, CoreGui e cursor estão sempre desligados. Cada execução primeiro para a anterior e restaura tudo depois.
  • scripts/CameraRig.luau tem os presets cinematográficos: dolly/spline/flyover, bezier, orbita, grua, push-in, whip (com motion blur) e estático. Todos são suavizados por curvas TweenService e têm durações configuráveis.
  • Para colocá-los no jogo: build_kit.py rbxmx → import_rbxm para ReplicatedStorage (modo de edição) → inicie o playtest → envie build_kit.py call --shot ID com eval_client_runtime. Execute build_kit.py server --shot ID com eval_server_runtime primeiro se a cena tiver configuração. Detalhes e a lista completa de ações: references/luau-api.md.

3. Gravar

references/recording.md. Resumindo: record.py calibrate uma vez (o driver pinta a viewport de ciano e o script a encontra), então para cada cena record.py shot ID --start-ms <iniciaEmMs> --dur <duracao>. Ele espera o início agendado do driver, grava pré-rolagem + cena + cauda apenas da viewport, e armazena o deslocamento de corte exato. Se a gravação de tela não estiver disponível, record.py stitch transforma quadros salvos de capture_screenshot em um clipe.

4. Editar

references/editing.md. edit.py build --cut roblox --format landscape faz o upload Roblox (30 s no máximo, 1080p60 H.264, sem CTA). --cut social --format both faz 16:9 mais 9:16. O texto é desenhado com Pillow porque o ffmpeg do Homebrew pode não ter drawtext. Se Fredoka One não estiver instalada, pergunte antes de baixá-la em assets/fonts/; ela cai para Arial Rounded Bold.

5. QA

qa.py clips --shots ... após a gravação; qa.py final <mp4> --roblox após a edição. Verifica quadros perdidos, quadros pretos e congelados, bordas da UI do Studio nas laterais, a flag de cursor e os limites do Roblox, e escreve uma folha de contato. Abra a folha com Read e olhe para ela: um painel perdido do Studio, um cursor ou o estado errado da HUD aparecem lá. Depois mostre ao usuário o corte (caminho mais folha) e anote para um recorte. Recortes só precisam de edit.py.

6. Limpar

Pare o playtest, exclua ReplicatedStorage.TrailerKit, execute record.py clean --out <trailer> --shots <shots.json>, e remova <trailer>/build/. Mantenha clips/ (a filmagem fonte) e out/.

Mapa de referências

ArquivoQuando ler
references/shot-list-template.mdplanejamento; transformar GAME.md em cenas
references/luau-api.mdescrever shots.json; API do driver e rig; alvos, ações, gatilhos, presets
references/recording.mdantes do primeiro take; calibração, sincronização, fallbacks, cenas de 2 jogadores
references/editing.mdbloco de edição, transições, cards, fontes e emoji, áudio, vertical
references/roblox-video-specs.mdlimites de upload Roblox e regras de conteúdo, com fontes
references/worked-example.md + example.shots.jsonexemplo completo (um jogo de rolagem para chocar pets, "🥚 Pet Roll")

Scripts

ScriptPropósito
scripts/TrailerDriver.luau, scripts/CameraRig.luauruntime (cliente)
scripts/build_kit.pykit rbxmx, snippets eval, fallback inline payload, snippets servidor, lista de cenas
scripts/record.py (wrapper record.sh)windows, calibrate, shot, stitch, clean
scripts/edit.pyconstruir cortes, cards de pré-visualização, listar fontes
scripts/qa.pyverificação de clipes e finais, folhas de contato
scripts/check_luau.shluau-analyze com um prelúdio de globais Roblox (funciona sem definições de tipo Roblox instaladas)

Valide após alterar scripts: python3 -m py_compile $SK/scripts/*.py e $SK/scripts/check_luau.sh $SK/scripts/*.luau.

Lacunas conhecidas (corrija-as aqui quando encontrá-las)

  • O driver não consegue clicar em botões GUI. Use o remote que o botão chama (invoke), como faz a cena de chocar.
  • Um localOffset fixo a partir de uma tag é um primeiro palpite; espere ajustá-lo após o primeiro take de cada cena.
  • A câmera do jogador não modela o zoom da roda do mouse. Use look.dist para alterar a distância entre os beats.
  • A configuração do servidor não pode require os módulos ativos do jogo: execute_luau/eval_server_runtime obtém um cache require NOVO (medido em 2026-10-11 em um jogo de chocar pets: PlayerState.all() estava vazio enquanto o jogador estava carregado). Coloque a configuração em um Script RunContext=Server importado ao lado do kit que expõe uma BindableFunction, e faça os snippets server :Invoke-la. Padrão: um Script TrailerHook (apenas trailer, nunca salvo no lugar) que require os próprios módulos do jogo de dentro da VM do servidor e cria ServerStorage.TrailerHook (BindableFunction, :Invoke(cmd, args) -> (ok, resultado)), com um pequeno comando por etapa de configuração (dar dinheiro, adicionar um item de um determinado tier, deixar um timer pronto, forçar as probabilidades da próxima rolagem, restore). Ele salva todo valor de configuração que altera e os restaura em restore e quando o Script é destruído. Empacote-o em um .rbxmx da mesma forma que build_kit.py empacota o kit.
  • A viewport do Studio com Explorer/Properties encaixados tem cerca de 1,26:1 em uma tela de 1470x956 pt; oculte os painéis (ou View > Tela Cheia) antes de calibrar, ou o corte 16:9 joga fora um terço da imagem.

Individual skills in this repo

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

Habilidades Relacionadas