vertical-video-kit
AGENTS.md1 starsChanged 14 days agoMITView on GitHub
Instructions for any AI coding agent working in this repository — Codex CLI, Cursor, Gemini CLI, opencode, GitHub Copilot, Windsurf, Aider, Claude Code, or whatever comes next. This file is the AGENTS.md open standard; Claude Code reads the same content through skills/. No agent is required to use this kit. Every script runs on its own from a terminal — see docs/NO-AGENT.md. If the person has just pointed you at this repository, or asks you to install it, set it…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository6 other files it gives its agents.
- ai-videoSkill
- clip-cutterSkill
- content-directorSkill
- footage-editSkill
- reference-researchSkill
- vertical-videoSkill
The file
We split this AGENTS.md into the rules it gives an agent
9 rules. About 0 are common, 4 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
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 9
No agent is required to use this kit: Every script runs on its own from a terminal — see docs/NO-AGENT.md.
- Distinctive: line 16
If the person has just pointed you at this repository, or asks you to install it, set it up, or get it running: run this first, before …
- Very specific: line 33
Do not skip it, and do not replace it with npm run dev in the foreground — that blocks your turn and they see nothing.
- Distinctive: line 63
Don't wait for a render to check a layout: Use a still — see below.
- Very specific: line 83
If the person asks you to push something that came from private/, tell them the repository is public and let them decide.
- Very specific: line 156
Audio drives timing: Never hardcode a scene duration.
- Distinctive: line 170
Look at one frame of each scene type, not just the first.
- Very specific: line 190
If they write to you in Spanish, answer in Spanish.
- Distinctive: line 207
Look at the frame.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md 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
AGENTS.md
Instructions for any AI coding agent working in this repository — Codex CLI,
Cursor, Gemini CLI, opencode, GitHub Copilot, Windsurf, Aider, Claude Code, or
whatever comes next. This file is the AGENTS.md open
standard; Claude Code reads the same content through
skills/.
No agent is required to use this kit. Every script runs on its own from a
terminal — see docs/NO-AGENT.md.
START HERE — install, then open the studio
If the person has just pointed you at this repository, or asks you to install it, set it up, or get it running: run this first, before reading anything else. It is the whole setup.
python install.py --yes(python3 install.py --yes if python is not on the PATH. On Windows, py
install.py --yes.)
It installs Node, FFmpeg and the Python packages, scaffolds a project in
my-video/, and opens the Remotion studio — the live preview — in the
browser, then exits. The studio keeps running after the command finishes;
that is deliberate, so you are not left holding an open process.
The studio opening is the point. It is how the person sees that it worked.
Do not skip it, and do not replace it with npm run dev in the foreground —
that blocks your turn and they see nothing.
Tell them the URL it printed (http://localhost:3000, or the next free
port). If their browser did not open by itself, that address is what they
paste into it.
If the studio needs opening again later
python skills/vertical-video/scripts/studio.py my-videoSame thing: detached, waits until it is really answering, opens a browser,
exits. Inside a project, npm run dev does it in the foreground instead.
If install.py stops with something missing
It could not install Node or FFmpeg itself — no package manager, or no
permission. It prints exactly what is missing. Give the person the matching
commands from docs/NO-AGENT.md for their platform, then
run python install.py --yes again. On Windows, Node and FFmpeg only land on
the PATH in a new terminal.
What not to do here
- Don't commit the project folder
install.pycreates. It is the person's work, not part of the kit. - Don't run the studio in the foreground as your own command; it never returns.
- Don't wait for a render to check a layout. Use a still — see below.
Company context lives in private/, never in the repo
This repository is public. A company's brand brief, approved scripts,
voices, internal decisions, people's names and numbers belong in private/
at the kit root. It is gitignored, so it stays on this machine.
- Before building anything, read every file in
private/if the folder exists. That is where the person's earlier work and decisions are — what they approved, what they rejected, exact colours and fonts, prompts that worked. Apply it; don't re-ask what it already answers. - Never copy from it into a tracked file, a commit message, a pull request or an issue: not a name, a phone number, an email address, an unpublished figure, not even the company's name as an example. Anything generic the kit should learn goes into the kit in generic words.
- Projects created inside the kit are ignored too:
new_project.pywrites a*.gitignore into each one, whatever its name. Don't delete it. - If the person asks you to push something that came from
private/, tell them the repository is public and let them decide.
What this repo is
A kit for making 9:16 short-form video (TikTok, Reels, Shorts) in code: AI narration, word-by-word captions, and a real 1080×1920 Remotion render.
The one idea everything follows from: content lives apart from design. Changing a line of narration is editing one line and re-running a script — not re-recording and re-cutting.
Read these before you act
| You are asked to | Read first |
| Make a vertical video from scratch | skills/vertical-video/SKILL.md |
| Cut a long video into shorts | skills/clip-cutter/SKILL.md |
| Edit phone footage into one video | skills/footage-edit/SKILL.md |
| Study a reference video | skills/reference-research/SKILL.md |
| Content strategy, series, ideas or scripts for a brand or creator; studying a batch of reference links | skills/content-director/SKILL.md |
| Add or replace shots with AI video, keep an AI character consistent | skills/ai-video/SKILL.md |
| Set the look: style, logo, colors, fonts, design system | skills/vertical-video/references/style.md |
| Make a corporate / brand video | skills/vertical-video/references/corporate.md |
| Lay anything out on screen | skills/vertical-video/references/design.md |
| Write or generate narration | skills/vertical-video/references/voice.md |
| Write the first sentence | skills/vertical-video/references/hooks.md |
Those files are the real instructions. This one is the index.
The flow, in one screen
python install.py --yes # once: dependencies, a project, the studio open
cd my-video
python scripts/brand.py --compare # after asking about the brand: style, logo, colors
# edit script.json (what is SAID) and src/content.ts (what is SEEN)
python scripts/voice.py # narration -> audio/ + src/timings.json
python scripts/captions.py # word-by-word -> src/captions.json
npm run check # does it compile
npm run render # output/video.mp4
python scripts/publish.py # upload/video.mp4, platform-ready
python scripts/share.py # output/video_light.mp4, for email/WhatsAppThe studio reloads by itself on every save, so leave it open while you work —
the person watches the video change as you edit. python scripts/doctor.py
reports on the machine if something later looks wrong.
The studio opens on a brand-new project, before any audio exists: scenes fall
back to 3 seconds each until voice.py has measured the real narration.
Rules that are not negotiable
Never invent facts. Percentages, prices, dates, claims about what a product does, client names. A plausible number typed in to fill a line becomes a promise the person publishing it never made. Ask for the number, or stay at the level of generality you were actually given — and say what you left pending when you hand the video over, instead of burying it in a code comment.
Content and design stay separate. script.json and src/content.ts are
the only files content touches. If a text change requires editing a component,
the change is going the wrong way.
Ask about the look before building. A new project starts in the kit's
placeholder style. Ask about brand guidelines or a design system, logo,
colors, font and feel first, and apply them with scripts/brand.py — see
skills/vertical-video/references/style.md. Never ship the default look by
accident, and never invent brand colors.
Audio drives timing. Never hardcode a scene duration. voice.py measures
the narration and writes src/timings.json; the components read it.
Nothing readable goes in the bottom ~380px or the right ~160px. That is
where TikTok and Reels draw their own interface. Set SHOW_SAFE_AREAS = true
in src/theme.ts and look before you claim a layout is fine.
Check with single frames, not full renders. A render takes minutes, a frame takes seconds:
npx remotion still src/index.ts Short preview/f.png --frame=90Look at one frame of each scene type, not just the first.
Don't commit generated media. audio/, output/, upload/, public/audio/
and node_modules/ are gitignored on purpose. They regenerate.
One Remotion for every project. Projects created inside the kit use the
node_modules at the kit root — Node looks upward for packages. Don't run
npm install inside a project there; new_project.py and studio.py install
the shared one when it is missing. Upgrading Remotion means changing both
package.json (root and template) together; deps.py checks they match.
Who you are usually helping
Often someone in marketing or communications, 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.
If they write to you in Spanish, answer in Spanish. The repo ships
README.es.md, docs/SIN-AGENTE.md and
docs/PROMPTS.es.md for exactly that.
Verifying a change to the kit itself
npm ci # once, at the kit root: shared by every project
python skills/vertical-video/scripts/deps.py # the root and template versions still match
cd template/remotion-vertical
npm run check
python scripts/voice.py --engine edge --voice en-US-AndrewNeural
python scripts/captions.py
npx remotion still src/index.ts Short preview/f.png --frame=60Type checking does not catch a layout that renders text under the platform UI. Look at the frame.
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.

