Brand Video Studio
Make branded videos that hold attention: a brand guide, a chosen animation style, then code-rendered videos checked by actually watching them.
Talk to the user, and write all on-screen text and copy, in the user's language. These instructions are in English only because the skill is shared.
Before you start
Run this once per machine and fix what it reports:
python3 <skill>/scripts/doctor.py
It needs Python 3, ffmpeg, Node (for npx hyperframes) and eyes. Installing eyes is covered in the eyes skill, or uv tool install git+https://github.com/moritzkremb/claude-eyes then eyes setup --fix. Load the hyperframes and eyes skills if they are available: their rules on composition format and video evidence apply here too.
<skill> is this skill's directory.
Choose the job
| The user wants | Do |
|---|---|
| A brand, or has only a logo or references | Brand guide, below |
| X reels from one long video | Brand guide if missing, then references/reels-from-long-video.md |
| A raw video made more watchable | Brand guide if missing, then references/edit-raw-video.md |
| To pick or compare a look | references/animation-styles.md |
Keep each client or channel in its own folder:
<project>/
brand/brand.json BRAND.md assets/
source/words.json
videos/<NN-name>/cut.json spec.json ...
renders/
COPY.md
Brand guide
Reuse a brand.json if the project has one. Otherwise read references/brand-guidelines.md and build it from whatever the user gives you: logo, photos, a website, reference videos. If they have nothing, ask for the brand name and the feel they want, then propose. Show the result and get a yes before making videos, because every video inherits these choices.
Watch before you decide
Never plan from the transcript alone. A strong line over a dark shot is a weak reel, and a quiet stretch may hold the best footage.
python3 <skill>/scripts/transcribe.py source.mp4 source/words.json --lang en --glossary "Names, Terms"
eyes frames source.mp4 --range 1:00-1:30 --fps 1
Read the overview.md that eyes index prints and view its contact sheets. Note strong moments, b-roll, burned-in text and music. If eyes cannot transcribe a long file, set WHISPER_MODEL so transcribe.py falls back to whisper-cli.
Build a video
- Write
videos/<NN-name>/cut.jsonandspec.json.references/spec.mdhas every field. - Assemble it:
python3 <skill>/scripts/make_video.py videos/NN-name --brand brand/brand.json --words source/words.json - Re-sync captions to the clip, because timings measured on a long source drift by up to 3 seconds. Do this before timing any layer to the voice:
eyes transcript videos/NN-name/assets/clip.mp4 --words --json > videos/NN-name/compositions/clip_words.json python3 <skill>/scripts/make_video.py videos/NN-name --brand brand/brand.json --words source/words.json - Check, look, render, level the audio:
cd videos/NN-name npx --yes hyperframes check --json npx --yes hyperframes snapshot --at 0.3,8 npx --yes hyperframes render -q delivery -o ../../renders/NN-name.mp4 --quiet ffmpeg -i in.mp4 -c:v copy -af loudnorm=I=-14:TP=-1.5:LRA=11 out.mp4 - Watch the render with
eyes indexand work throughreferences/review-checklist.md. Fix and re-render. Do this for every video: a cleanchecksays the file is valid, not that it is good.
Render only after the user has seen the plan. Rendering is slow, and a wrong hook wastes it.
Finish
Write COPY.md with a title, caption and hashtags for each video, in the user's language, using the brand's voice from BRAND.md. references/reels-from-long-video.md covers the format and a posting calendar.
Leave posting to the user unless they ask you to do it, and confirm before anything goes public.