executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
remotionRemotion video creation in React - dynamic concept catalog for video briefs, cold audience optimization, and technical best practices
Independent GitHub snapshot · Automated classification · Original documentation governs
Use this skill when:
When creating a new Remotion video, follow this 8-step process. Step 2 selects 3-5 concepts from the catalog based on the brief and cold audience optimization. Steps 4 and 5 are approval gates. Do not write code until both are approved.
For the full process document with templates and decision matrices, read references/video-creation-process.md.
Before any creative work, identify the brand. Ask the user: "What brand is this video for?"
If the brand is MIA, use the MIA theme below. No further brand questions needed.
If the brand is not listed, ask the user to provide a brand website URL or brand guidelines. Extract: background color, primary accent, secondary accent, text colors, font family, and theme (light/dark). If no guidelines exist, ask for at minimum: primary color, background color, and font preference.
Gather and lock before any creative work:
Purpose: [Why this video exists]
Audience: [Who is watching]
Core message: [One sentence]
Content type: [blog-post, case-study, webinar, podcast, lead-magnet, product-update, tool-launch, industry-report, event-recap, client-testimonial, playbook, template, ai-demo, custom-gpt]
Channels: [Where it will be distributed]
CTA: [What the viewer should do next]
Source assets: [Files, components, or URLs to reference]
Tone: [Descriptive words for the feel]
Brand: [Brand name from Step 0]
After locking the creative brief, analyze it to select the best video concepts for this specific use case. Do not present a fixed set of variants. Draw from the concept catalog in references/concept-catalog.md.
The catalog contains 18 primary concepts, 8 visual style modifiers, and 5 cold audience hook patterns. Read it before generating recommendations.
Score concepts against the brief. For each concept in the catalog, evaluate:
Apply the cold audience filter. For each scored concept, evaluate:
Select a hook pattern. For each recommended concept, pair it with a hook pattern from the catalog:
Present 3-5 recommended concepts as one-page briefs. For each:
Rank the recommendations. Mark the top recommendation and explain why.
User selects one (or a hybrid of two). Lock the selected concept before proceeding to Step 3.
These rules apply to all concept recommendations and override content-type defaults when they conflict:
Resolve from the brief and selected variant using the format decision matrix:
| Channel | Dimensions | Duration |
|---|---|---|
| LinkedIn/Instagram feed | 1080x1080 | 15-30s |
| Website/presentation | 1920x1080 | 15-60s |
| Reels/TikTok/Stories | 1080x1920 | 15-60s |
| Email (GIF) | 600x600 or 800x450 | 5-10s |
Default FPS: 30. Only use 60 if smooth motion is critical.
Dimensions: [width]x[height]
Duration: [X] seconds ([X * fps] frames)
FPS: 30
Composition ID: [PascalCase]
Loop: [yes/no]
Output formats: [mp4, gif, webm]
Selected concept: [concept-id from catalog, or hybrid]
Define every scene before writing code. Use the selected variant's scene template as the starting structure, then customize for the specific content.
Present the scene table for approval.
Scene table format:
| # | Name | Time | Copy | Animation | Purpose |
|---|---|---|---|---|---|
| 1 | Hook | 0-3s | Exact text | Motion description | Why it exists |
Timing guidelines:
| Duration | Scene Count | Avg Per Scene |
|---|---|---|
| 10s | 3-4 | 2.5-3.3s |
| 15s | 4-6 | 2.5-3.75s |
| 30s | 8-12 | 2.5-3.75s |
| 60s | 12-20 | 3-5s |
Lock copy, timing, and narrative structure before proceeding.
Lock before implementation:
Color palette (minimum required roles):
Brand theme preset (MIA only, skip color questions):
| Brand | Background | Primary Accent | Secondary Accent | Text Primary | Text Muted | Font | Theme |
|---|---|---|---|---|---|---|---|
| MIA | #F7F4FA / #1c1422 (dark) | #F1DE71 (Yellow) | #7184F1 (Purple) | #1c1422 / #f7f4fa (dark) | rgba(28,20,34,0.62) | system-ui, -apple-system, Segoe UI | Light |
MIA accent palette: Blue #71C4F1, Purple #7184F1, Pink #F171C4, Green #71F19E
Custom brands: Colors come from the product's own screens or the brand kit, never from guesses. Define them from the brand website or guidelines provided in Step 0. Fill the same roles: background, primary accent, secondary accent, text primary, text muted, font, theme.
Typography: Font family, weight hierarchy, sizes at target resolution.
Animation style: Spring (bouncy/smooth/snappy), linear, or ease-based. Pick a dominant style.
Source of truth: If matching an existing design, reference the source file.
Agent resolves this based on scene complexity:
| Condition | Approach |
|---|---|
| Under 15 scenes | Single file |
| 15+ scenes or reusable parts | Multi-file with scenes/ directory |
| Shared elements across scenes | Persistent layer with opacity envelope |
Always use a centralized timing constant (const T = { ... }).
When a scene shows a real site, tool or product UI, build it from the site's own code, never redrawn by hand. Follow rules/site-ui-from-code.md: import the components for a React product, or capture and rebuild a plain HTML site with the site motion kit. Every result on screen must be a real output.
Write code against locked decisions. All animation must follow Remotion rules (see Technical Reference below).
Generate a reference doc covering: specs, selected variant, preview/render commands, scene breakdown, color palette, timing config, architecture notes, iteration guide.
Read individual rule files for API details and code examples.
useCurrentFrame(). No CSS transitionsinterpolate(), spring(), easing functions, spring configs<Sequence> and <Series> for timing, delay, and duration controlfrom) and ends (durationInFrames)<TransitionSeries> with fade, slide, wipe, flip, clockWipestaticFile() for public folder assets<Video> with trimming, volume, speed, looping, pitch<Audio> with trimming, volume, speed, pitch<Img> component (ensures load before render)<AnimatedImage> for GIF/APNG/AVIF/WebP@remotion/google-fonts, local fonts via @remotion/fontsmeasureText(), fitText(), fillTextBox().srt files with parseSrt()<Composition>, <Still>, <Folder>, defaultProps<ThreeCanvas> with React Three FiberuseCurrentFrame()<Lottie> component with @remotion/lottietransition-* or animate-* classes)useCurrentScale() for accurate measurementsThese apply to all Remotion code. Violations will produce incorrect output.
useCurrentFrame(). No CSS transitions, no Tailwind animate-* or transition-* classes, no React Three Fiber useFrame()<Img>, <Video>, <Audio>) not native HTML elementsstaticFile() for all assets in the public/ folderfps from useVideoConfig() to get framesuseCurrentFrame() instead)These govern any voiced or reference-matched video. Follow the full launch-video and recording-edit workflow if one is provided.
words.json (see rules/transcribe-captions.md and rules/display-captions.md) and time every caption word by word. The caption style copies the reference video. These safety rules always apply on top: never place captions over a face, and keep the bottom fifth of a 9:16 frame empty.