vertical-video
Skill1 starsChanged 14 days agoMITView on GitHub
Makes short-form vertical videos for TikTok, Instagram Reels and YouTube Shorts in code — AI narration that does not sound robotic, word-by-word captions, and a Remotion render at 1080x1920 in the brand's own look — its logo, colors, fonts or design system. Use it whenever someone wants to make a TikTok, a Reel, a Short or any 9:16 video; turn a script, an article or a post into a video; add a voice-over or captions to something; batch out variations of one video; or fix a vertical video that looks amateurish, has text hidden under the platform UI, or sounds like a text-to-speech robot, or needs to match a brand.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- robgallardof/davinci-resolve-mcptheir own version, first seen Nov 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- robgallardof/davinci-resolve-mcp★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ai-videoSkill
- clip-cutterSkill
- content-directorSkill
- footage-editSkill
- reference-researchSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 3 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 41
If the person wants to drive it themselves rather than through you, scripts/wizard.py asks five questions and produces the finished MP4 …
- Very specific: line 62
If they already have the content somewhere — a post, an article, a long video — start from that rather than from a blank page.
- Distinctive: line 101
Write both completely first.
- Very specific: line 108
If private/ exists at the kit root, read it first: it holds the company's own brief, approved scripts and decisions, kept out of the public …
- Distinctive: line 110
Use it, and never copy it into a tracked file, commit or pull request.
- Very specific: line 112
If the video carries a company's name, read references/corporate.md before writing — brand, approvals and what may not be claimed all …
- Distinctive: line 209
Captions as an afterthought: Add them last and they fight the layout you already built.
- Very specific: line 218
Rendering the whole thing to check one detail: Use still.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Short-form video in code
Content lives apart from design. That is the entire idea, and everything else here follows from it: changing a line of narration is editing one line and re-running a script, not re-recording and re-cutting.
It is the opposite of an editor timeline, where every fix means dragging things around again — which is why videos made that way ship with mistakes nobody was willing to go back and correct.
Who you are usually helping
Often someone in marketing or content, frequently non-technical. They do not care what Node or React is, and they should not have to.
Handle the technical side yourself. Talk about what they care about: the hook, the script, how long it runs, how it looks on a phone. Never ask them to edit code — ask for the words and put them where they go.
The flow
1. Get the environment ready
python scripts/doctor.py --installReports what is missing and installs the Python pieces. Node and FFmpeg it will not install silently — it prints the exact command for the platform.
On a machine with nothing on it, python install.py --yes from the kit root
does the whole setup in one command — dependencies, a project, and the
Remotion studio open in the browser. (setup.sh / setup.ps1 bootstrap
Python itself first, if it is missing.)
If the person wants to drive it themselves rather than through you,
scripts/wizard.py asks five questions and produces the finished MP4 with no
agent involved. docs/NO-AGENT.md and docs/PROMPTS.md are the handover
documents for that.
2. Decide what the video is before building anything
Short-form is unforgiving about this. A 40-second video that starts badly is not a 40-second video, it is a 2-second video.
What you need before writing a line:
- Who it is for and what they should do after watching. "Brand awareness" is not an answer you can build from.
- The hook — the first sentence. See
references/hooks.md. Get this approved before anything else; everything downstream is built on its timing. - Where it is going. TikTok, Reels and Shorts all take 1080x1920, but they cover different parts of the frame with their own interface.
- How long. Under 60s unless there is a real reason.
- What it should look like. Their brand, not the template's — step 4.
If they already have the content somewhere — a post, an article, a long video —
start from that rather than from a blank page. For a long video, use the
clip-cutter skill instead of writing anything new.
3. Create the project
python scripts/new_project.py my-video
python scripts/new_project.py my-video --engine edge --voice es-CO-SalomeNeural4. Settle the look — ask, don't assume
A new project starts in the bold style, which is a placeholder, not a
decision. Before building scenes, ask in one message about brand guidelines or
a design system, the logo, colors, font, the feel and the captions — then
write the answers into src/brand.json with scripts/brand.py:
python scripts/brand.py --import tokens.json # a design system
python scripts/brand.py --logo logo.svg --accent "#0B5FFF" --font "Montserrat"
python scripts/brand.py --compare # their video in every style--compare renders their first scene in each of the five styles (bold, clean,
editorial, playful, corporate) into preview/styles.jpg. Send them that image
and let them point.
references/style.md has the questions, how each answer maps to a
command, and the rules (never sample colors from a screenshot, ask for the
logo version that fits the background, read the contrast report).
5. Write both texts — before touching design
Two files, and they are the only ones content touches:
src/content.ts— what is seenscript.json— what is said
Write both completely first. Adjusting design against half-written text means redoing the design when the real text arrives.
They are different texts on purpose. The screen can carry fragments; the voice needs whole sentences. Writing one and pasting it into the other is the most common reason a video sounds like a machine reading a slide.
If private/ exists at the kit root, read it first: it holds the company's
own brief, approved scripts and decisions, kept out of the public repository.
Use it, and never copy it into a tracked file, commit or pull request.
If the video carries a company's name, read references/corporate.md before
writing — brand, approvals and what may not be claimed all change the job. A
project scaffolded by new_project.py ships a BRAND.md to fill in once per
company; if it has anything in it, read it first.
Never invent facts. Percentages, prices, dates, claims about what a product does. A plausible number typed in to fill a line becomes a promise the person publishing it did not make. If a detail is missing, ask for it or stay at the level of generality you were actually given — and say what you left pending when you hand the video over, rather than burying it in a code comment.
6. Generate the voice — and let it set the timing
python scripts/voice.pyWrites one MP3 per scene, measures each one, and writes src/timings.json.
Audio first, animation second. A scene lasts exactly as long as its narration. Change the script, re-run, everything re-syncs itself.
Making it sound human is a craft with real rules — read
references/voice.md before generating anything. Short version: the engine
matters much less than the text you feed it.
7. Generate the captions
python scripts/captions.pyTranscribes the narration you just made and writes word-level timings to
src/captions.json. Most of the feed is watched with the sound off, so this
is not a finishing touch — it is the video.
8. Build the scenes
The template ships with scene types (hook, point, list, stat, quote,
cta). Declare content, the layout follows. Only write a new type when none
of them can carry the idea.
references/design.md has the rules that decide whether this looks
professional or homemade. Read it before laying anything out — especially
the safe areas, which are where most of these videos go wrong.
Leave the studio open while you work. It reloads on every save, so the person watches the video change as you edit instead of waiting for a render:
python skills/vertical-video/scripts/studio.py my-video # detached, opens a browserIt works on a brand-new project, before any audio exists — scenes hold 3
seconds each until voice.py has measured the real narration. Inside a
project, npm run dev does the same in the foreground; never run that as your
own command, it does not return.
9. Check with single frames, not full renders
npm run check # does it compile
npx remotion still src/index.ts Short preview/f.png --frame=90 # how it looksA full render takes minutes; a frame takes seconds. Look at one frame of each scene type, not just the first. Look for text under the platform UI, bad line breaks, low contrast, anything past the margin.
10. Render and publish
npm run render # output/video.mp4
python scripts/publish.py # upload/video.mp4, encoded the way platforms want
python scripts/share.py # output/video_light.mp4, under 25 MB for email/WhatsAppHow to hand it over
Show the result, don't explain the code. What actually helps them:
- Where the file is and how long it runs
- That changing any text costs them one sentence to you, not a re-edit
- What is still pending and why
Mistakes that cost the most
Building before the hook is agreed. The most expensive one, every time.
Shipping the default look. The bold style is the kit's, not theirs. If nobody asked about the brand, the first thing they will ask for is a redo.
Text in the bottom third. TikTok's caption, username and music ticker live
there; Reels covers roughly the same band. Text placed there is not "a little
tight" — it is invisible to most of the audience. Turn on SHOW_SAFE_AREAS in
src/theme.ts and look.
Captions as an afterthought. Add them last and they fight the layout you already built. The template reserves their space from the start; keep it.
Feeding the voice engine screen text. Fragments, acronyms and symbols are
exactly what makes TTS sound like TTS. See references/voice.md.
A hook that explains before it hooks. "In this video I'm going to talk about..." is a two-second goodbye.
Rendering the whole thing to check one detail. Use still.
Sampling brand colors from a screenshot or a video frame. Compression shifts them. Take colors from a brand kit or a clean logo export.
Resources
references/hooks.md— how the first two seconds work, with patternsreferences/voice.md— engines, and how to make TTS sound humanreferences/captions.md— caption styles and timingreferences/design.md— safe areas, type, motion. Read before laying out.references/style.md— the questions about the look, andbrand.pyreferences/corporate.md— brand, approvals, what may not be claimedscripts/—doctor·new_project·wizard·studio·diagnose. All take--help.install.pyat the kit root — the one-command setup- Inside a project:
scripts/brand.py·voice.py·captions.py·publish.py·share.py
Related skills: clip-cutter (long video into vertical clips), footage-edit (phone takes into one video, no narration), reference-research (take apart a short that works).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

