groups-compose
Designs and maintains semantic groupings and readable layouts on the filmmaking canvas — scenes, character-reference sets, act…
Generates/edits filmmaking canvas images via generate_image.js and generate_image_pro.js. Use before image CLIs for character/location design, refs, starting frames, storyboards, stills, edits, variations, and downstream video anchors. Video-bound characters default to Pattern 7
Claude Code
$ npx -y skills add utopai-research/pai-code --skill image-compose --agent claude-code
Codex
$ npx skills add utopai-research/pai-code --skill image-compose -a codex -y
Cursor
$ npx skills add utopai-research/pai-code --skill image-compose -a cursor -y
Gemini CLI
$ npx skills add utopai-research/pai-code --skill image-compose -a gemini-cli -y
GitHub Copilot
$ npx skills add utopai-research/pai-code --skill image-compose -a github-copilot -y
OpenCode
$ npx skills add utopai-research/pai-code --skill image-compose -a opencode -y
Windsurf
$ npx skills add utopai-research/pai-code --skill image-compose -a windsurf -y
name: image-compose description: >- Generates/edits filmmaking canvas images via generate_image.js and generate_image_pro.js. Use before image CLIs for character/location design, refs, starting frames, storyboards, stills, edits, variations, and downstream video anchors. Video-bound characters default to Pattern 7 4-panel sheets; one-off static portraits use Pattern 1. Story/script breakdowns should create detailed location anchors plus material character/location variants. Storyboards use Pattern 6: one pro composite mosaic per clip/<=15s shot note.
Standard tier:
node "$PAI_REPO_ROOT/server/cli/generate_image.js" --prompt "..." [--aspect-ratio 16:9] [--image-size 2K] [--label "..."] [--subtype <character|location|edit|reference|split|storyboard>] [--name "..."] [--role "..."] [--description "..."] [--source-node-id <id>] [--ref-source-id <id> ...]
Pro tier for storyboard mosaics and video-bound character sheets:
node "$PAI_REPO_ROOT/server/cli/generate_image_pro.js" --prompt "..." --size 2560x1440 [--label "..."] [--subtype <character|location|edit|reference|split|storyboard>] [--name "..."] [--role "..."] [--description "..."] [--source-node-id <id>] [--ref-source-id <id> ...]
Pro accepts `--size` only; no `--aspect-ratio` / `--image-size`. Common sizes: `1024x1024`, `1280x720`, `720x1280`, `1920x1920`, `2560x1440`, `1440x2560`, `3840x2160`, `2160x3840`.
`--label` defaults to the truncated prompt (≤30 chars) if omitted; pass an explicit one when you have a better caption.
Use `@Image1`, `@Image2`, … in `--ref-source-id` order. The CLI emits one `derived` edge per ref.
Mirror external URLs first with `mirror_url.js --url <URL>`, then pass the returned `node_id` via `--ref-source-id`.
If a note authored the image, pass `--source-node-id <note_id>`.
Do not attempt to invent images via ASCII art or markdown embedding — call the CLI.
For the ask-once flow and per-mode prices, see the project `PROJECT_AGENT.md` § "First-use generation choices".
Mode mapping: `Standard 2K` -> `generate_image.js --image-size 2K`; `Pro 2K` -> pro exact 2K; `Max quality` -> pro exact 4K.
Pick the one that fits. For source lookup, follow the project `PROJECT_AGENT.md` § "Choosing context"; this skill only owns image-specific prompt and CLI shape.
**Character pre-flight.** First ask: will this character appear in downstream video (video, clip, promo, 宣传片, 短片, 连续剧, film, scene, 拍片, shot, short film)?
1. Read `workflow.json` for uploaded refs (`subtype:"reference"`, `metadata.source:"user_upload"`, not archived). 2. Video-bound -> Pattern 7, not Pattern 1. Use ≥3 actor refs when available; with 0-2 refs, generate text-only 4-panel sheet. 3. Announce one line before firing; allow redirect to Pattern 1. 4. One-off static art/poster/portrait -> Pattern 1.
This pre-flight is non-negotiable. Pattern 1's single front portrait gives the video model an anchor that's too narrow; identity drifts shot-to-shot. Skipping straight to Pattern 1 for video work is the single most-common mistake.
**Story/script anchor defaults.** When `script-compose` or `story-to-video-workflow` routes a breakdown here:
Triggers: character portrait/headshot/hero/villain/lead **only** for one-off static stills. Video-bound -> Pattern 7.
> `[style] character portrait of [NAME], [role]. [age, build, wardrobe, distinguishing features]. Front-facing medium close-up, eye-level, looking directly at camera, neutral expression. Plain neutral background, soft even lighting. No dramatic shadows, no stylized lighting, no side profile, no multiple views.`
Triggers: establish/design/picture a location, or approval of a `script-compose` location offer.
> `[style] establishing still of [LOCATION NAME]. [visual brief — architecture, lighting, atmosphere]. Wide shot, eye-level, no characters present.`
Triggers: change/edit/swap/replace/add/remove/tweak/what-if/variation on an existing
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…
Generates and prompts video clips on the filmmaking canvas. Use when the user asks to generate, render, animate, continue,…
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…