--- name: video-style-cloner description: > Style-cloning video director for AI agents. Give it a reference video (local file, screen recording, or YouTube/URL) and a one-line brief, and it autonomously: analyses editing rhythm, shot lengths, BPM, transitions, colour palette and camera moves, selects the matching 2D production style, writes a shot-by-shot storyboard, dispatches parallel production sub-agents, reviews every shot with an independent reviewer agent, assembles and exports the final MP4, and iterates on user feedback. Use when the user says "make a video like this", "clone this style", "video in the same style", "mimic this video", "i want something like X but about Y", "create a video inspired by", or provides a video URL/file and asks for a new one. Do NOT use for: simple video edits, subtitles-only tasks, or when the user has NOT provided a reference video or URL. version: "1.0.0" author: "Mamdouh Aboammar (adapted from edenfunf/reelmimic)" license: MIT source: "https://github.com/edenfunf/reelmimic" hosts: - antigravity - claude - codex - cursor - gemini - universal tags: - video - style-clone - animation - multi-agent - content-creation - motion-graphics - hyperframes - ffmpeg --- # Video Style Cloner > Show an AI agent a video you love. Get a new video in the same style. > The host agent analyses, plans, produces and reviews using the available tools. Production requires an approved storyboard and an installed renderer. $$\text{Reference Video} \xrightarrow{\text{Phase 1: Analyse}} \text{Style DNA} \xrightarrow{\text{Phase 2: Plan}} \text{Storyboard} \xrightarrow{\text{Phase 3: Produce}} \text{Multi-agent Shots} \xrightarrow{\text{Phase 4: Review}} \text{Final MP4}$$ --- ## When to activate **Activate on:** - "make a video like this / in this style" - "clone this video's style" - "create something similar to [URL or file]" - "video inspired by / based on the style of" - user provides video + a creative brief for new content - "mimic / copy the aesthetic / editing rhythm of this video" **Do NOT activate on:** - Simple video trim or subtitle requests → use general-video skill - No reference video provided → ask for one first - 3D rendering requests → skill handles only 2D, explain and proceed with nearest 2D style --- ## Absolute Rules (inherited from source) 1. **Style only - no assets**: Learn technique from reference, never copy footage, characters, logos, or licensed music. 2. **2D only**: Current track supports 2D animation styles only. If reference is 3D or live-action, reproduce rhythm/composition/mood in closest 2D style and inform the user. 3. **User-provided lyrics**: Never transcribe, invent, or quote song lyrics. Only use text the user explicitly provides. 4. **Evidence-gated fixes**: Every "fixed" shot must include before/after frame comparison. A reviewer validates the evidence before accepting the fix. 5. **Human approval gate**: Storyboard/plan must be approved before production starts (unless user explicitly said "just do it" or "decide yourself"). 6. **Asset attribution**: Log every fetched asset (source, author, licence) in `ASSETS.md`. Unknown licence → flag "Licence unconfirmed". --- Set `SKILL_DIR` to the absolute path of this `video-style-cloner` directory before running commands. Engine entry points are named `skills//.md`. The optional Rust CLI coordinates project-provided render/review adapters. It does not generate creative assets or supply an AI reviewer by itself. Read `engine/README.md` before using it. Its technical smoke example proves encoding and approval flow, not visual style fidelity. ## Required Tools / Runtime Read `references/runtime.md` for version requirements and install commands. | Tool | Purpose | Min Version | |---|---|---| | Python | analyse.py, align_lyrics.py, fetch_assets.py | 3.10+ | | FFmpeg | Audio/video encoding, frame extraction | 6.0+ | | yt-dlp | Download YouTube reference (analysis only) | latest | | Node.js | HyperFrames animation renderer | 22.18+ | | faster-whisper | Lyrics timestamp alignment | 0.10+ | --- ## Phase 0: Intake Collect from the user: | Input | Required | Default | |---|---|---| | Reference video | **YES** | None | | Creative brief (what new video is about) | **YES** | None | | Target length | No | 30 s | | Aspect ratio | No | 16:9 | | Music/audio file | No | Silent or user-provided | | LRC/lyrics text | No (needed if lyrics appear in video) | None | | Character design sheets | No | AI-designed original characters | Create project workspace: ``` projects// ├── analysis/ # Output from analyse.py ├── inputs/ # User-provided files (audio, lyrics, design sheets) ├── assets/ # Fetched CC0/CC-BY assets + ASSETS.md log ├── build/ # production.json, rendered frames ├── out/ # Final MP4 output └── STORYBOARD.md # Approved plan ``` --- ## Phase 1: Analyse Reference ```bash python "$SKILL_DIR/skills/video-clone/scripts/analyze.py" "" \ --out projects//analysis ``` This script produces: - `report.json`: video metadata under `video`, audio measurements under `audio`, editing rhythm under `pacing`, and each shot's nested `camera` and `look` measurements under `shot_details`. Read `references/shot-analysis.md` for the emitted schema. - `sheet_1fps.jpg`: one frame per second contact sheet - `sheet_scenes.jpg`: one frame per scene break **After running**, visually inspect `sheet_1fps.jpg` and `sheet_scenes.jpg` using the Read tool. Then write `analysis/STYLE.md`: ```markdown # Style Analysis ## Medium (REQUIRED — first line, determines skill routing) 2d-painted | 2d-crayon | 2d-vector | 2d-pixel | 2d-paper | 2d-lineart | 2d-cel ## Shot List | # | Seconds | Content | Camera Move | Speed | Brightness | |---|---------|---------|------------|-------|-----------| ... ## Colour Arc [Describe colour palette evolution across the video] ## Editing Rhythm - Total shots: X - Avg shot length: Y s (Z beats) - Cuts on beat: Yes/No - Transitions: [list types] ## Narrative Structure [Hook / conflict / resolution / recurring motifs / how jokes land] ## Typography [Caption style, size, placement, animation] ## Key Techniques (why this video works) 1. ... 2. ... 3. ... ``` Report the analysis to the user: shot table + 3-5 "why this video works" insights. --- ## Phase 2: Select Style → Route to Production Engine Read all `styles/*.md` files in this skill directory. Each has frontmatter: ```yaml engine: medium: 2d-painted | 2d-cel | 2d-pixel | ... priority: 1-10 ``` **Routing logic (strict order):** 1. Filter to styles whose `medium` matches the reference medium. 2. Score each matching style against `analysis/STYLE.md` identification features. 3. Pick highest score, break ties with `priority`. 4. If no same-medium style exists, pick closest medium, inform user. 5. If user explicitly names a style or tool → use that. 6. If no style fits → use closest engine, create a new `styles/.md` entry afterwards. Tell the user: "Detected style: X → using engine: Y because [reason]." Load the engine skill and follow its instructions for production details. --- ## Phase 3: Music (skip if silent) If the video has music: 1. User must provide the audio file (do not download copyrighted music). 2. Analyse the audio: ```bash python "$SKILL_DIR/skills/video-clone/scripts/analyze.py" "" \ --out projects//analysis/song ``` 3. Check `report.json`: - `audio.silent: true` → ask user to re-record with system audio - `audio.phase_inverted: true` or `audio.noise_floor_db > -45` → warn user about audio quality 4. Trim to target length starting on a beat: ```bash ffmpeg -ss -t -i audio.wav \ -af "loudnorm=I=-14:TP=-1.5,afade=t=in:d=0.08,afade=t=out:st=:d=2" \ -c:a aac -b:a 192k assets/clip.m4a ``` 5. All shot timings in storyboard use **beats**, not seconds. BPM change = re-render timing only. If user provides lyrics: ```bash python "$SKILL_DIR/skills/video-clone/scripts/align_lyrics.py"