groups-compose
Designs and maintains semantic groupings and readable layouts on the filmmaking canvas — scenes, character-reference sets, act…
Generates and prompts video clips on the filmmaking canvas. Use when the user asks to generate, render, animate, continue, restyle, edit, shoot, or compose a video clip; render script or shot notes as video; animate a storyboard, starting frame, image, character, location, or
Claude Code
$ npx -y skills add utopai-research/pai-code --skill video-compose --agent claude-code
Codex
$ npx skills add utopai-research/pai-code --skill video-compose -a codex -y
Cursor
$ npx skills add utopai-research/pai-code --skill video-compose -a cursor -y
Gemini CLI
$ npx skills add utopai-research/pai-code --skill video-compose -a gemini-cli -y
GitHub Copilot
$ npx skills add utopai-research/pai-code --skill video-compose -a github-copilot -y
OpenCode
$ npx skills add utopai-research/pai-code --skill video-compose -a opencode -y
Windsurf
$ npx skills add utopai-research/pai-code --skill video-compose -a windsurf -y
name: video-compose description: Generates and prompts video clips on the filmmaking canvas. Use when the user asks to generate, render, animate, continue, restyle, edit, shoot, or compose a video clip; render script or shot notes as video; animate a storyboard, starting frame, image, character, location, or reference; use image, video, audio, storyboard, starting-frame, or voice refs; compose an ad, brand film, product promo, music-video shot, or video sequence; or before calling generate_video.js. Owns video CLI flags, refs, prompt construction, audio-ref handling, and video-specific failure hints.
Intent dispatcher. Patterns name trigger, call, edges, and prompt reference.
For the ask-once flow and per-mode prices, see the project `PROJECT_AGENT.md` § "First-use generation choices". Pass `--resolution` only for `480p Draft` or `1080p Final`.
node "$PAI_REPO_ROOT/server/cli/generate_video.js" --prompt "..." [--version <2.0|2.5>] [--duration <seconds>] [--aspect-ratio 16:9] [--resolution <480p|720p|1080p>] [--no-audio] [--label "..."] [--ref-source-id <id> ...] [--ref-audio-source-id <audio_id> ...] [--source-node-id <id>] [--shot-id <N>]
Calls go via `--stage` — see the project `PROJECT_AGENT.md` § "Draft gate".
`--label` defaults to truncated prompt. Use `--ref-source-id` for image/video refs, `--ref-audio-source-id` for audio refs, and `--source-node-id` for the authoring note. Mirror external URLs first. Do not set `--shot-id` during speculative/partial generation unless user asks for a reel position; story sequences assign Timeline order after planned clips land.
Match stated single-clip duration with `--duration`; omit for 15s default. Split or chain >15s totals.
Each clip costs real money even after staging — only stage after the user has explicitly asked for a video.
Omit it for `2.0` (today's model): output 4-15s, priced per output second by resolution.
`--version 2.5` renders PAI Video 2.5. Differences that change how you call it:
`16:9 | 9:16 | 4:3 | 3:4 | 1:1 | 21:9 | adaptive`.
reference-video second (each clip measured locally with ffprobe and rounded up). Hard cap 60 billed seconds; over that the CLI refuses before staging and names both halves. Tier prices are in the project `PROJECT_AGENT.md` § "Media CLIs (`server/cli/`)" — quote them from there, never from memory.
Stage 2.5 clips outside Auto.
fails with `infra` rather than guessing a price.
On failure the `limits` blob is model-scoped: read `min_output_sec` / `max_output_sec` and `max_billed_sec` off the returned JSON rather than assuming 2.0's numbers.
**2.0 (`video-generation`)** — ≤9 image refs, ≤3 audio refs, ≤3 video refs; video refs cap at **15s aggregate**.
**2.5** — ≤30 image refs, ≤10 audio refs, ≤10 video refs; reference video caps at **30s aggregate**, and every reference second also counts toward the 60s billed-duration cap.
Both: audio/video refs must be **1.8s-15.2s each** (the shared reference-upload step's window), and audio refs need an image or video anchor — on 2.5 that one is checked only after credits are frozen, so the CLI refuses it locally. Read durations from `workflow.json`; on failure use the returned `limits` + `sent`, which are model-scoped.
Prompt wording binds each ref role:
| Role | Flag | Wording in prompt | |---|---|---| | Character identity | `--ref-source-id` (image) | "the character in @Image1" | | Location / setting | `--ref-source-id` (image) | "the location shown in @Image1" | | Opening frame | `--ref-source-id` (image) | "opening frame @Image1, …" | | Closing frame | `--ref-source-id` (image) | "closing on the frame from @Image1" | | Source clip — continue (next clip in a chain) | `--ref-source-id` (video) | **Default = hard cut:** "Hard cut from @Video1: open on a NEW camera angle; do not match its final frame." Same-shot ("Continue from @Video1 … maintain camera position") only for an authored held beat / oner / explicit user request — see [`references/video-extension.md`](references/video-extension.md) | | Source clip — transform | `--ref-source-id` (video) | "Re-render @Video1 in …" | | Camera-move source | `--ref-source-id` (video) | "camera moves match @Video1" | | Action source | `--ref-source-id` (video) | "action choreography matches @Video1" | | VFX template | `--ref-source-id` (video) | "use the visual-effects template from @Video1" | | Voice / timbre anchor | `--ref-audio-source-id` | "Use @Audio1 as voice/timbre reference. Speak once, no echo." |
The local AI filmmaking studio, driven from your coding agent. [, story/concept (iterate then…
Orchestrates story, script, screenplay, concept, product promo, and multi-shot idea work into finished video. Use first when the…
Designs and attaches voice samples or final narration/line audio on the filmmaking canvas via the local generate_voice.js CLI.…
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…