Directs video projects by applying specific creative profiles for pacing, shot planning, and editing.
Install
mkdir -p .claude/skills/video && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/19375" && unzip -o skill.zip -d .claude/skills/video && rm skill.zipInstalls to .claude/skills/video
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use for video direction, motion and pacing, shot and scene planning, captions, voiceover, trailers, Shorts, and edit critique when the user's Emulo video taste should guide the task. Do not use for unrelated execution, backend work, UI/UX design, or marketing copy alone.Key capabilities
- →Apply Emulo video profiles to creative tasks
- →Manage video direction and pacing
- →Plan shot and scene sequences
- →Generate voiceover and caption instructions
- →Critique edits based on personal preferences
How it works
The skill locates and executes the emulo.py script to retrieve and apply specific video profiles for creative guidance.
Inputs & outputs
When to use video
- →Plan shot sequences for a short video
- →Critique an edit based on established pacing
- →Generate voiceover and caption instructions
About this skill
Emulo video
You take a brief and hand back a film. Not a prompt, a film: the prompt that built it, the composition files, and frames somebody can look at.
0. Load the profile before you write a word
- Locate
emulo.pytwo directories above this skill; fall back to./emulo.pyonly for a direct repo checkout. - Store the resolved absolute path as
EMULO_PY, then runpython "$EMULO_PY" plugin profile-path --domain video. - If it exits nonzero, give its exact recovery instruction and stop loading personal context. Never substitute a generic creative persona.
- Read every returned path completely. First is the core working profile, second is the video profile. Both outrank anything below.
- If the repo has
videos/README.md, it routes short-form work. This skill owns long-form and commercial film only. A vertical Reel that is a designed film, not a screen recording, is this skill.
1. What you hand back
A folder the person can upload to Claude Design and get a film. That is the deliverable. Not a prompt in a chat message, not a description of a film, not a list of ideas. A folder.
Build it at videos/_kits/<brand>/ in this exact shape, because the shape is
what makes it work:
| # | Artefact | Why it is there |
|---|---|---|
| 1 | PROMPT.md | the brief. One page, in the engine's language |
| 2 | START-HERE.md | the upload order. Which files, in which order, in one message. Without it the person guesses and the guess is wrong |
| 3 | ATTACH/ | every asset the film needs, including animations-v3.jsx itself |
| 4 | frames/ | reference stills whose filenames carry the instruction |
| 5 | KIT.md | the manifest: every file, its pixel size, its known defects |
Optionally, and only after the four above are finished: build/piece.jsx plus
build/frames/, the film built and rendered locally so you can look at it before
anyone else does. That is verification, not the deliverable. A kit with no local
build still ships. A local build with no kit does not.
The three things that decide whether the folder works
Ship the engine inside ATTACH/. animations-v3.jsx goes in the folder with
the assets. Claude Design needs the runtime it is being asked to write against.
Leaving it out is the most common way a good prompt produces a bad film.
Isolated parts, never a screenshot of a whole screen. One object per file, transparent, 1600px minimum on the long edge, plus 4K plates at the film's aspect ratio. A whole screen dropped in is a slab and reads as broken. Claude Design films fail on missing assets, never on prompt length.
Put the instruction in the filename. REF-VERCEL_03_object-became-the-mark.png
teaches; ref3.png does not. The person uploading them keeps the names, so every
file carries its own lesson into the context.
Name what is missing. Never invent a substitute.
If an asset does not exist, say so in PROMPT.md under its own heading, and say
what to do instead. A brief that admits two missing assets is usable. A brief that
quietly fakes them produces a film with two broken beats and no way to tell why.
Every prompt contains, in this order and by name
- the brief in the engine's language:
OM_SCENES,CUES, namedEasing - the transformation chain, as match anchors: what becomes what
- the asset list, with real filenames, so no beat is blocked on a missing part
- the failure conditions for this specific film, not generic ones
- the verification commands, so the claim "it works" has an output behind it
A worked example of the whole shape is videos/_kits/claude/: brief, upload
order, 31 assets with the official mark split into stackable layers, twelve
instruction-named frames, and two missing assets named rather than faked.
2. The engine
animations-v3.jsx is the Claude Design runtime. Read
videos/_kits/_engine/README.md once, then work from this table.
Never edit animations-v3.jsx. Its own header says re-running
copy_starter_component overwrites it. Every improvement made there is
destroyed on the next host copy. The leverage is in the brief.
| Use | Never use |
|---|---|
Easing.easeOutExpo and the named curves | cubic-bezier(...), any CSS string |
OM_SCENES named sections with dur | absolute frame numbers as the structure |
CUES.SectionName to key choreography | wall clock, setTimeout, requestAnimationFrame |
animate({from, to, start, end, ease})(T) | useEffect painting anything visible |
interpolate([...], [...], ease)(T) | CSS keyframes running on their own |
<Shot from to> for a hard cut | conditional mounting per section |
one <CompositionStage> as the only exportable root | the exportable attribute anywhere else |
The model in one sentence: the animation is one element tree rendered as a pure function of one authored time axis, so nothing mounts or unmounts at a section boundary and any object can persist, move or morph across the whole film by ordinary interpolation. That is why this engine suits the work. Zero cuts, one object transforming across the entire film, and the collision law are its defaults instead of things a brief has to fight for.
<CompositionStage width={1080} height={1920} bg="#161309"
scenes={window.OM_SCENES} playback={window.OM_PLAYBACK}>
<Piece /> // ONE component, the whole film
</CompositionStage>
useComposition() -> { T, CUES, time, duration, authoredTotal, playing }
OM_SCENES and OM_PLAYBACK are JSON string literals in plain inline
<script> tags of the main document, not type="text/babel", passed through
untouched. Every entry needs a desc, one plain sentence, because the user
reads it in the timeline popover. Never hand-set nat.
<script>window.OM_SCENES = '[{"name":"Strike","dur":2.5,"desc":"The mark lands and throws green across the ground"}]';</script>
<script>window.OM_PLAYBACK = '{"mode":"loop"}';</script>
Easing, the complete list. linear; easeIn/easeOut/easeInOut for Quad,
Cubic, Quart, Expo, Sine; easeInBack, easeOutBack, easeInOutBack;
easeOutElastic. Back and elastic overshoot, so they are the game-feel curves
and belong nowhere near a logo or an official brand file.
Render from T only. The exporter seeks each frame with a synchronous
commit and may serialise the stage the moment the seek returns, so anything
painted from an effect or a private animation loop exports stale.
Never render <Captions>. Ohad films the export off his phone and adds his
own Hebrew and English. A burned caption ruins that. Locked on-screen copy is a
normal element placed where the composition wants it.
Set bg to the film's ground, never the #0b0b0e default, and never
#000000. A designed world needs somewhere for light to fall off to.
Define exactly three or four motion helpers up front and use no easing or transform outside them:
MOTION.slam Easing.easeOutExpo arrivals and impacts
MOTION.snap Easing.easeOutBack chips landing, overshoot capped at 6%
MOTION.drive Easing.easeInOutQuart travel, light, drift
MOTION.settle Easing.easeOutQuart the final resolve
3. Assign the references. Never average them.
Every reference gets one job and an explicit do-not-copy list. Without the line "do not average the references" the model blends three styles into mush. This is the single cheapest fix in the whole system.
| Reference | Its one job | Never take |
|---|---|---|
videos/vercel-spec/vercel-spec_1920x1080_60fps.mp4 | transformation, depth, scale contrast, the zero-cut continuous composition | its palette, and never its grey placeholder chrome, which is what the no-kit build produced |
Spotify, videos/refnces/motion/Video-53319.mp4 | camera and easing: three events, the hold, the settle | its green, its product |
Claude, videos/refnces/motion/oFSdbD1WKeB9fUJJ.mp4 | monochrome identity, typography, restraint | its brand, its interface |
videos/_kits/duolingo/ | the logo built by assembly, and the one-object-huge-on-dark grammar | its colour, its mascot |
Write it into the prompt in this shape:
Use X as the PRIMARY authority for: pacing, restraint, match anchors, scale
contrast, camera push and pull, depth, the final hold.
Use Y only for: monochrome identity, typography, exact logo, clarity.
Do not copy X's design. Do not introduce X's colour. Do not average the
references.
Read the source. Five films, one engine.
videos/_handoff/_film-sources/ holds the source of five different finished
films, all built on the same engine. Read across them. One film teaches you
that film; five films on one engine teach you the workflow, which is the thing
this skill is actually for.
| File | The film |
|---|---|
vercel-film.jsx (49 KB) | the spec commercial that got 321 upvotes on r/ClaudeAI |
claude-master.jsx (68 KB) | the Claude cinematic master, 1920x1080 60fps 20.0s |
claude-film.jsx (41 KB) | an earlier Claude cut, so you can diff a film against its own revision |
film.jsx (62 KB) | a third long film |
reel.jsx (16 KB) and clip.jsx (5 KB) | the same grammar at reel and clip length |
Supporting them:
| File | What it gives you |
|---|---|
animations-v3.jsx (55,474 bytes) | the engine. Byte-identical in every one of the three source archives, verified by hash. It is a fixed substrate, not a per-film thing. Never edit it |
PROMPT-1.md and PROMPT-2.md | the real prompt pair that produced one of these films. The storyboard-gate prompt, then the build prompt |
camera_keyframes.json | real camera data from a finished film, instead of invented easing |
ui.jsx, tweaks-panel.jsx, support.js | the host scaffold the films run inside |
How to read them, and this is the point. Do not copy one film. Open at least three and ask what is the same in all of them: how a scene list is declar
Content truncated.
When not to use it
- →Unrelated execution tasks
- →Backend development work
- →Marketing copy generation alone
Prerequisites
Limitations
- →Requires active video domain profile
- →Cannot substitute generic personas when domain is inactive
How it compares
It relies on a specific personal video profile rather than applying generic creative standards.
Compared to similar skills
video side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| video (this skill) | 0 | 1mo | No flags | Intermediate |
| video-ai-direction | 0 | 3mo | Review | Intermediate |
| video-creation | 0 | 2mo | Review | Intermediate |
| skills | 0 | 5mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
video-ai-direction
cardinalconseils
AI video generation direction for Kling API — prompt engineering, motion design, platform specs, text-to-video and image-to-video workflows for marketing content
video-creation
Sheldon-92
Professional video production judgment for AI coding agents — storytelling, motion design, audio, tools (HyperFrames/Remotion)
skills
OpenDemon
噼哩噼哩 Pilipili-AutoVideo 是一个全自动 AI 视频生成代理,可将自然语言主题转化为完整的短视频(含配音、字幕、转场),并自动生成剪映草稿文件。
ugc-video-prompts
palmier-io
Generate ultra-realistic UGC/influencer-style video clips inside Palmier Pro — talking selfies, product demos, candid lifestyle motion — using the proven still-then-animate pipeline instead of cold text-to-video. Drives Palmier Pro's generate_video, get_timeline, and get_media tools directly, with m
video-editing
DrinkBoooz
AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video
video-report
remotion-dev
Generate a report about a video