playableintelligence/game-creator/promo-video
Claude Code and agent skill by playableintelligence/game-creator
- community
Checking that the SKILL.md file is still in the repository.
Record a high-FPS autonomous promo video of a Phaser game using Playwright. Triggers on: promo video, gameplay recording, marketing video, game capture.
Install
npx vskill@latest install playableintelligence/game-creator/promo-videoSKILL.md
Promo Video Recording
Record smooth, autonomous promo footage of a Phaser game for marketing / social media. The output is a 50 FPS MP4 in mobile portrait (9:16) — ready for TikTok, Reels, Moltbook, or X.
Technique
Playwright's recordVideo caps at 25 FPS with no config option. We work around it:
- Slow the game to 0.5× by patching all 5 Phaser time subsystems
- Record for 2× the desired duration at Playwright's native 25 FPS
- FFmpeg speed-up 2× → effective 50 FPS output
| Parameter | Default | Effect | |
|---|---|---|---|
SLOW_MO_FACTOR | 0.5 | Game runs at half speed → 50 FPS output | |
WALL_CLOCK_DURATION | DESIRED_GAME_DURATION / SLOW_MO_FACTOR | Record for 2× to get correct game-time | |
VIEWPORT | { width: 1080, height: 1920 } | 9:16 mobile portrait (always default unless user specifies otherwise) | |
DESIRED_GAME_DURATION | 13000 (ms) | ~13s of game-time → ~6.5s promo clip |
Prerequisites
- Playwright — must be installed (
npm install -D @playwright/test && npx playwright install chromium) - FFmpeg — must be available on PATH (
brew install ffmpegon macOS) - Dev server running — game must be served on localhost
Check both before starting:
If FFmpeg is not found, warn the user and skip the promo video step (it's non-blocking — the game still works without it).
Capture Script — Game-Specific Adaptation
Every game gets a custom scripts/capture-promo.mjs. The subagent must read the game's source files to determine:
1. Death/Failure Patching (CRITICAL)
The video must show continuous gameplay — never game over. Read GameScene.js (or equivalent) to find the death/failure method and monkey-patch it out.
How to find it: Search for the method called on collision/death. Common patterns:
this.triggerGameOver()— dodge gamesthis.takeDamage()→this.lives <= 0— multi-life gamesthis.gameOver()— direct calleventBus.emit(Events.PLAYER_HIT)/eventBus.emit(Events.GAME_OVER)— event-driven
Patch template (adapt per game):
2. Input Sequence Generation
The video must show dynamic, natural-looking gameplay. Read the game's input handling to determine:
- Which keys — ArrowLeft/ArrowRight? Space? WASD? Mouse clicks?
- Input style — continuous hold (movement), tap (jump/shoot), or both?
- Movement pattern — should the player sweep across the screen, dodge reactively, jump rhythmically?
Input patterns by game type:
| Game Type | Input Keys | Pattern | |
|---|---|---|---|
| Side dodger | ArrowLeft, ArrowRight | Alternating holds (150-600ms) with variable pauses, occasional double-taps | |
| Platformer / Flappy | Space | Rhythmic taps (80-150ms hold) with variable gaps (200-800ms) | |
| Top-down | WASD / Arrows | Mixed directional holds, figure-eight patterns | |
| Shooter | ArrowLeft/Right + Space | Movement interleaved with rapid fire | |
| Clicker/Tapper | Mouse click / Space | Rapid bursts separated by brief pauses |
Randomize timing to avoid robotic-looking movement:
Add a pause at the start (1-2s) to let the entrance animation play — this is the hook.
3. Game Boot Detection
All Phaser games built with the /viral-game or /make-game pipelines expose these globals:
window.__GAME__— Phaser.Game instancewindow.__GAME_STATE__— GameState singletonwindow.__EVENT_BUS__— EventBus singleton
Wait for both boot and active gameplay:
4. Time Scaling Injection
Slow all 5 Phaser time subsystems for the recording:
The 5 subsystems:
- Update delta —
scene.update(time, delta * factor)slows frame-delta-dependent logic - Tweens —
scene.tweens.timeScaleslows all tween animations - Scene timers —
scene.time.timeScaleslowsscene.time.addEvent()timers - Physics —
scene.physics.world.timeScaleslows Arcade/Matter physics (uses inverse:1/factor) - Animations —
scene.anims.globalTimeScaleslows sprite animation playback
5. Video Finalization
Full Capture Script Template
FFmpeg Conversion
After recording, convert the raw slow-mo WebM to a high-FPS MP4. The convert-highfps.sh script is bundled with this skill at skills/promo-video/scripts/convert-highfps.sh.
The script:
- Applies
setptsto speed up the video by1/factor - Sets output framerate to
25 / factor(= 50 FPS for 0.5× slow-mo) - Encodes H.264 with
crf 23,yuv420p,faststart - Verifies output duration, frame rate, and file size
Viewport Defaults
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/promo-video/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/playableintelligence/game-creator/promo-video)