Remotion Best Practices
lyonjs/shortvid.io
Best practices for Remotion - Video creation in React. An agent skill from lyonjs/shortvid.io.
Full production pipeline covering story to scenes, Z-Image start frames, Qwen Edit end frames, WAN FLF video clips, ffmpeg concatenation
$ npx skills add artokun/comfyui-mcp --skill director -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install artokun/comfyui-mcp director --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugin/skills/director .claude/skills/director && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "director" agent skill from https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/director into .claude/skills/director/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "director", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/directorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add artokun/comfyui-mcp --skill director -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install artokun/comfyui-mcp director --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugin/skills/director .agents/skills/director && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "director" agent skill from https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/director into .agents/skills/director/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "director", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add artokun/comfyui-mcp --skill director -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install artokun/comfyui-mcp director --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugin/skills/director .cursor/skills/director && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "director" agent skill from https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/director into .cursor/skills/director/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "director", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/artokun/comfyui-mcp.git --path plugin/skills/director--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add artokun/comfyui-mcp --skill director -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install artokun/comfyui-mcp director --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugin/skills/director .gemini/skills/director && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "director" agent skill from https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/director into .gemini/skills/director/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "director", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install artokun/comfyui-mcp directorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add artokun/comfyui-mcp --skill director -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugin/skills/director .github/skills/director && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "director" agent skill from https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/director into .github/skills/director/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "director", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add artokun/comfyui-mcp --skill director -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install artokun/comfyui-mcp director --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugin/skills/director .opencode/skills/director && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "director" agent skill from https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/director into .opencode/skills/director/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "director", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
directorFull production pipeline covering story to scenes, Z-Image start frames, Qwen Edit end frames, WAN FLF video clips, ffmpeg concatenation
Director is an agent skill from artokun/comfyui-mcp. Full production pipeline covering story to scenes, Z-Image start frames, Qwen Edit end frames, WAN FLF video clips, ffmpeg concatenation
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Video production. It works with Qwen and FFmpeg. The repository describes itself as: Local-first, agent-native control plane for ComfyUI — MCP server + sidebar agent that generates images, video & audio, authors and runs workflows, and edits your live graph in… The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6ad6fc0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ffmpegFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Director loads about 4.5k tokens when it runs. Until then it costs about 36 tokens; SKILL.md has 1,696 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from artokun/comfyui-mcp at commit 6ad6fc0, republished under its MIT licence (© artokun). 1,696 words, ~4,536 tokens.
.claude/skills/director/SKILL.md (or your agent's skills folder).The Director skill runs a complete short film production from a text story. It breaks the story into scenes, generates start/end frames for each, creates video clips from frame pairs, and concatenates everything into a final video.
The pipeline runs Story Planning → Z-Image Hero + Character Refs → Qwen Edit Chain (all frames) → WAN 2.2 FLF Video Clips → ffmpeg Concatenation.
Key architectural decisions:
clear_vram between every model family switchThis pipeline drives the user's live canvas across many stages, so two habits are non-negotiable:
panel_run, check each node's mode (panel_graph_outline marks [bypass]/[mute]; panel_query_graph detail rows carry it). A bypass node is skipped (passes input through); a mute node and everything downstream don't execute. If the path, branch, or switch you need is bypassed or muted, enable it with panel_set_node_mode (set the wanted node active, the unwanted one bypass/mute). Never assume a switch or route is already active.VHS_VideoCombine / LTX / WAN clip, do NOT rely on get_history / queue (action:"status") to confirm it exists. VHS-style video nodes write the .mp4 but frequently do NOT register an output in ComfyUI's /history (prompt shows done, empty outputs, no error). Confirm the file with get_image (action:"list_outputs") (now lists videos too, tagged kind: "video") by filename_prefix + fresh mtime, then chain it forward with upload_image (action:"stage").panel_set_node_mode(mode:"bypass") that stage's nodes BEFORE you panel_run the next stage. Otherwise panel_run re-executes the whole graph and you pay for and wait on already-finished work, a real and costly failure mode. Keep only the active stage live; feed the prior output forward with upload_image (action:"stage") (bypass the producer, feed its captured output to the consumer's loader).Independent Z-Image generations per scene produce different-looking characters. This was the #1 problem discovered during testing. The solution:
Phase 1: Story Planning → Break story into scenes (Claude reasoning, no ComfyUI)
Phase 2: Hero + Refs → Z-Image: 1 hero frame + character ref portraits + background ref
Phase 3: Hero Review → Visual verify hero and refs, user approves
Phase 4: Edit Chain → Qwen Edit: chain ALL scene frames from hero (with char refs in slots 2-3)
Phase 5: Frame Review → Visual verify all frames, approve/reject/retry
Phase 6: Video Clips → WAN 2.2 FLF dual Hi-Lo (one clip per scene)
Phase 7: Video Review → Preview each clip
Phase 8: Final Assembly → ffmpeg concat all clips into one MP4Saved at ~/code/comfyui-mcp/workflows/director_state_{project_id}.json. Updated after every edit or phase completion.
{
"project_id": "story_20260216_143022",
"created": "2026-02-16T14:30:22Z",
"story": "Original user story text",
"current_phase": 4,
"orientation": "portrait",
"hero_frame": { "file": "director_hero_00001_.png", "seed": 428571, "approved": true },
"character_refs": {
"man": "director_ref_man.png",
"cat": "director_ref_cat.png",
"woman": "director_ref_woman.png",
"background": "director_ref_bedroom.png"
},
"scenes": [
{
"id": 1,
"description": "Brief scene description",
"edit_prompt_start": "Qwen Edit instruction to create start frame from source",
"edit_prompt_end": "Qwen Edit instruction to create end frame from source",
"edit_source_start": "hero",
"edit_source_end": "hero",
"video_prompt": "WAN motion description",
"start_frame": { "file": "director_s1_start_00001_.png", "seed": 12345, "approved": true },
"end_frame": { "file": "director_hero_00001_.png", "seed": null, "approved": true },
"video_clip": { "file": "director_s1_00001.mp4", "seed": 11111, "approved": false },
"status": "video_pending"
}
],
"final_video": null,
"settings": {
"start_frame_resolution": [832, 1472],
"video_resolution": [480, 720],
"video_frames": 81,
"video_fps": 16
}
}| Phase | Model Family | Key Models | VRAM |
|---|---|---|---|
| 2: Hero + Refs | Z-Image | redcraftRedzimageUpdatedJAN30_redzibDX1.safetensors | ~17GB |
| 4: Edit Chain | Qwen Edit | qwen_image_edit_2511_bf16.safetensors + Lightning LoRA | ~17-18GB |
| 6: Video Clips | WAN 2.2 I2V | Remix NSFW Hi+Lo (built-in lightning) | ~22-24GB |
CRITICAL: clear_vram between every model family switch.
Break the story into 2 to 6 scenes. For each scene, identify:
Identify a hero frame, the single most representative scene image that establishes the main character and setting. This hero will anchor all other frames via Qwen Edit.
Also identify which character reference images are needed (portraits of each character, key props, background).
The end frame of Scene N must be the EXACT same image file as the start frame of Scene N+1. Do NOT create separate Qwen-edited start frames for subsequent scenes. That causes visible jumps at scene boundaries when the videos are concatenated.
The frame chain for video generation:
Scene 1: S1_start (unique) → hero (end)
Scene 2: hero (= S1 end) → S2_end
Scene 3: S2_end (= S2 end) → S3_end
Scene 4: S3_end (= S3 end) → S4_end
Scene 5: S4_end (= S4 end) → S5_endOnly Scene 1 needs a unique start frame. All other scenes inherit their start from the previous scene's end.
The edit chain produces only end frames (plus Scene 1's unique start frame). Map which end frame derives from which source:
Example chain:
Hero (man+cat on bed)
├─ S1 Start: edit hero → remove cat, man alone
├─ S2 End: edit hero → replace cat with woman
│ └─ S3 End: edit S2End → both sit up, man startled
│ └─ S4 End: edit S3End → sitting close, warm smiles
│ └─ S5 End: edit S4End → warm embraceGenerate with Z-Image RedCraft DX1 (10 steps, CFG 1, euler/simple):
Add to negative prompts for character refs to exclude wrong subjects (e.g., "woman, female" when generating man portrait).
{
"1": { "class_type": "CheckpointLoaderSimple", "inputs": { "ckpt_name": "redcraftRedzimageUpdatedJAN30_redzibDX1.safetensors" }},
"2": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["1", 1], "text": "<hero_prompt>" }, "_meta": { "title": "Positive" }},
"3": { "class_type": "CLIPTextEncode", "inputs": { "clip": ["1", 1], "text": "3D, ai generated, semi realistic, illustrated, drawing, comic, digital painting, 3D model, blender, video game screenshot, render, smooth textures, CGI, text, writing, subtitle, watermark, logo, blurry, low quality, jpeg artifacts, grainy" }, "_meta": { "title": "Negative" }},
"4": { "class_type": "EmptyLatentImage", "inputs": { "width": 832, "height": 1472, "batch_size": 1 }},
"5": { "class_type": "KSampler", "inputs": {
"model": ["1", 0], "positive": ["2", 0], "negative": ["3", 0], "latent_image": ["4", 0],
"seed": 42, "steps": 10, "cfg": 1, "sampler_name": "euler", "scheduler": "simple", "denoise": 1
}},
"6": { "class_type": "VAEDecode", "inputs": { "samples": ["5", 0], "vae": ["1", 2] }},
"7": { "class_type": "SaveImage", "inputs": { "images": ["6", 0], "filename_prefix": "director_hero" }}
}Queue hero + all refs while Z-Image checkpoint is loaded (same checkpoint, different prompts).
Show hero frame and all character refs. User approves or requests regeneration with new seed.
{
"1": { "class_type": "UNETLoader", "inputs": { "unet_name": "qwen_image_edit_2511_bf16.safetensors", "weight_dtype": "default" }},
"2": { "class_type": "LoraLoaderModelOnly", "inputs": { "model": ["1", 0], "lora_name": "Qwen-Image-Edit-2511-Lightning-4steps-V1.0-bf16.safetensors", "strength_model": 1 }},
"3": { "class_type": "CLIPLoader", "inputs": { "clip_name": "qwen_2.5_vl_7b_fp8_scaled.safetensors", "type": "qwen_image" }},
"4": { "class_type": "VAELoader", "inputs": { "vae_name": "qwen_image_vae.safetensors" }},
"5": { "class_type": "LoadImage", "inputs": { "image": "<source_scene.png>" }, "_meta": { "title": "Source Scene" }},
"5b": { "class_type": "LoadImage", "inputs": { "image": "<character_ref.png>" }, "_meta": { "title": "Character Ref" }},
"5c": { "class_type": "LoadImage", "inputs": { "image": "<background_ref.png>" }, "_meta": { "title": "Background Ref" }},
"6": { "class_type": "TextEncodeQwenImageEditPlusAdvance_lrzjason", "inputs": {
"clip": ["3", 0], "prompt": "<edit_prompt>", "vae": ["4", 0],
"vl_resize_image1": ["5", 0],
"vl_resize_image2": ["5b", 0],
"vl_resize_image3": ["5c", 0],
"target_size": 1024, "target_vl_size": 384,
"upscale_method": "lanczos", "crop_method": "pad"
}},
"7": { "class_type": "ConditioningZeroOut", "inputs": { "conditioning": ["6", 0] }},
"8": { "class_type": "KSampler", "inputs": {
"model": ["2", 0], "positive": ["6", 0], "negative": ["7", 0], "latent_image": ["6", 1],
"seed": 42, "steps": 4, "cfg": 1, "sampler_name": "euler", "scheduler": "simple", "denoise": 1
}},
"9": { "class_type": "VAEDecode", "inputs": { "samples": ["8", 0], "vae": ["4", 0] }},
"10": { "class_type": "SaveImage", "inputs": { "images": ["9", 0], "filename_prefix": "director_s1_start" }}
}Slots 5b and 5c matter. Feed character reference and background reference into vl_resize_image2 and vl_resize_image3. This helps the vision encoder maintain character appearance across edits.
Edits are sequential; each depends on the previous output:
upload_image (action:"stage") (pass the output's { filename, subfolder?, type? }); it returns the registered input filenameimage in the next edit's LoadImageIndependent edits (both from hero) can run in parallel.
To pipe ANY stage's output into the next stage's loader (LoadImage here, VHS_LoadVideo / LoadAudio in the video phases), call upload_image (action:"stage") with the output's { filename, subfolder?, type? } and drop the returned input filename into the loader's image/video/audio widget. For a file already on local disk, use upload_image with action "image" / "video" / "audio". NEVER copy the output file into, or guess, a filesystem input/ path. ComfyUI's input and output directories may be CUSTOM (--input-directory / --output-directory), so a guessed path makes the loader reject the file (Invalid image file) and wastes the render. upload_image (action:"stage") goes through the server API (/view → /upload/image), which resolves the real dirs correctly.
For each frame, show via Read for visual inspection. User approves or provides feedback. Re-run individual edits without redoing the whole chain.
(Same as wan-flf-video skill: Remix NSFW Hi+Lo, 4-stack LoRA, ImageResizeKJv2, dual KSamplerAdvanced)
Key settings:
For transformation scenes (e.g., cat→woman), add morph LoRA to Hi/Lo Common stacks:
wan2.2_i2v_magical_morph_highnoise.safetensors → Hi Common slot 1 (strength 1.0)wan2.2_i2v_magical_morph_lownoise.safetensors → Lo Common slot 1 (strength 1.0)Use 1.0 strength; it tested without sparkle issues. Lower values (0.7-0.85) produce weaker morph effects that may look like a dissolve rather than a true morph.
Swap per scene: start/end image filenames, positive prompt text, noise_seed, filename_prefix.
All 5 clips can be queued at once. They run sequentially in ComfyUI, sharing loaded models.
Report each clip's filename. User previews externally.
cd "<ComfyUI_output_dir>"
printf "file 'director_s1_00001.mp4'\nfile 'director_s2_00001.mp4'\n..." > concat_list.txt
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy director_final_{project_id}.mp4All clips share resolution/codec/framerate, so copy-concat works without re-encoding.
After context compaction:
director_session_notes.md if it existscurrent_phase and per-scene statusclear_vram before loading the model family for the current phase| Phase | Per Scene | 5 Scenes |
|---|---|---|
| Hero + Refs (Z-Image) | ~10s each | ~50s (one-time) |
| Edit Chain (Qwen 4-step) | ~35s each | ~280s (8 edits) |
| Video Clip (WAN FLF 81 frames) | ~140s | ~700s |
| VRAM swaps (3x clear_vram) | ~30s each | ~90s |
| Total generation | ~19 min |
Use distinctive visual elements that transfer between characters/forms to create narrative connections:
© artokun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugin/skills/director of artokun/comfyui-mcp.
Open the folder on GitHubat commit 6ad6fc0
Director next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Director this skillartokun/comfyui-mcp | 800 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Remotion Best Practiceslyonjs/shortvid.io | 147 | 33 repos | ~1k | Automated safety check: Pass | MIT | |
| HyperFrames Video Entry Pointheygen-com/hyperframes | 59k | 3 repos | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| Vox DirectorAlisa0808/vox-director | 2.2k | — | ~5.6k | Automated safety check: Pass | MIT | |
| Video Synceternityspring/reelbench-skills | 872 | 1 repos | ~1k | Automated safety check: Notes | Apache-2.0 | |
| Ffmpeg Skillkajisho5/ffmpeg-skill | 1.9k | — | ~7.4k | Automated safety check: Pass | MIT |
lyonjs/shortvid.io
Best practices for Remotion - Video creation in React. An agent skill from lyonjs/shortvid.io.
heygen-com/hyperframes
Entry point for making, editing and rendering videos from HTML compositions with HyperFrames, routing each request to the right workflow.
Alisa0808/vox-director
Turn ONE topic into a finished Vox-style paper-collage explainer / ad video, end to end on the Atlas Cloud API + local ffmpeg — script, collage keyframes, motion, voice-over, music, captions, all…
eternityspring/reelbench-skills
把拉片数据和原片合成一条能直接看的视频:一边是画面,一边是这一镜的分镜信息 (镜号、起止、时长、景别、类别、运镜、画面描述、台词),镜头切了信息跟着切, 镜头表自动滚动并高亮当前这一镜。
kajisho5/ffmpeg-skill
Edit video and audio with local FFmpeg from natural-language requests: cut, trim, join, resize/reframe (9:16, 1:1), speed change, captions and subtitles (SRT/ASS, animated, karaoke), logos and text…
tuzhechen2005/opus-video-skills
Make hand-painted watercolour-and-ink cartoon videos (MP4) with code — p5.js + p5.brush rendered frame by frame in headless Chrome, encoded with ffmpeg — starring Clawd or any character.
artokun/comfyui-mcp
Train custom LoRAs with ostris AI-Toolkit. An agent skill from artokun/comfyui-mcp.
artokun/comfyui-mcp
Anime/illustration text-to-image (ANIMA 1.0, ~2B Cosmos DiT).
artokun/comfyui-mcp
Discover Civitai models with the BUILT-IN downloadmodel action:"searchcivitai" and install/generate them locally.
artokun/comfyui-mcp
Diagnose and fix video/image color OBJECTIVELY with the getimage (action:"analyzecolor") tool (scopes/stats such as black/white points, contrast, saturation, clipping, cast) instead of eyeballing a…
artokun/comfyui-mcp
Authoring ComfyUI v2 frontend extensions with @comfyorg/extension-api, covering defineNode/defineExtension/defineWidget, shell UI (sidebar tabs, commands, hotkeys), typed events, and handles.
artokun/comfyui-mcp
Pick the right ComfyUI startup flags for VRAM, attention, caching, and speed.
Categories
Full production pipeline covering story to scenes, Z-Image start frames, Qwen Edit end frames, WAN FLF video clips, ffmpeg concatenation. Director is an agent skill from artokun/comfyui-mcp.
Director fits situations like: tasks that involve Video production.
Run `npx skills add artokun/comfyui-mcp --skill director -a claude-code`. Or copy the skill folder (plugin/skills/director in artokun/comfyui-mcp) into .claude/skills/director in your project. Claude Code loads it when a task matches its description.
Run `npx skills add artokun/comfyui-mcp --skill director -a codex`. Or copy the skill folder (plugin/skills/director in artokun/comfyui-mcp) into .agents/skills/director in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add artokun/comfyui-mcp --skill director -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/director, .gemini/skills/director, .github/skills/director and .opencode/skills/director in your project.
Going by SKILL.md and its folder, Director needs the command-line tools its instructions call (ffmpeg).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Director is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Director: Remotion Best Practices (lyonjs/shortvid.io, 147 stars), HyperFrames Video Entry Point (heygen-com/hyperframes, 59k stars), Vox Director (Alisa0808/vox-director, 2.2k stars) and Video Sync (eternityspring/reelbench-skills, 872 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
artokun (a GitHub user) maintains it in artokun/comfyui-mcp, which has 800 GitHub stars. The repository holds 42 skills in this directory. The repository was last updated on October 5, 2026.
Source: artokun/comfyui-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.