▶VIDEO.md

Why VIDEO.md looks the way it does

specification says what a package contains. This page says why: the problem it solves, where the ideas come from, and the reasoning behind each decision.

In one line

Every skill has a SKILL.md; every video gets a VIDEO.md. It starts with a card of a few hundred tokens and opens up, level by level, down to a single shot. Every level says how big it is, and keeps what was seen apart from what was inferred.

The card is the video’s ID card: what it is, how it was made, how sure. The package is its file: overview, timeline, single shots. Open the page you need, not the whole folder.

The problem

Breaking down a video produces a lot: per-shot measurements, probabilities for how each shot was made, evidence, subtitle timings, sound effect positions, remake prompts, frames, audio stems. Three kinds of readers want different things from it:

Reader Wants Struggles with
People The verdict, what makes it work, steps to remake it Scattered, technical detail
Models and agents The facts that answer the user’s question Context cost, getting lost in detail, mistaking inference for fact
Programs Stable fields and values Formats that change silently, parsing prose

People get a report. Programs get raw data. Models had nothing made for them.

Handing a model the raw data does not work. A three-minute talking-head video comes to about 190k tokens of JSON; a 75-shot film recap to about 240k. Reading it for every question is slow and expensive, and measurements, inferences and verdicts sit side by side, so “the tools think this is 41% likely a screen recording” turns into “this is a screen recording”.

Handing a model the human report does not work either. It is written for reading top to bottom, with folds and narrative, and there is no stable structure to read only part of it.

VIDEO.md is the format for that missing reader.

Where the ideas come from

Nothing in VIDEO.md is new. It combines a few things that already work.

Agent Skills: progressive disclosure

A skill is a folder. The name and description in the front matter of SKILL.md stay in the agent’s context, a few dozen tokens. The agent reads the body only when the skill is relevant; the body points to files under references/, opened only when needed.

VIDEO.md uses the same structure, with a video in place of a capability:

Agent Skill VIDEO.md
SKILL.md front matter: name, description VIDEO.md front matter: the card (name, description, method mix, confidence)
SKILL.md body: instructions VIDEO.md body: verdict, open questions, map
references/*.md, opened on demand video/*.md, one topic each, opened on demand
Scripts and assets Raw data, frames, audio stems

It goes one step further: every file states its size in tokens, and so does the map. A skill tells the agent what is there; VIDEO.md also tells it what opening it costs, so the model can weigh that before reading.

A small DSL: one line per shot

The timeline is the spine of the package. It is not a JSON array or a Markdown table but a small line format:

#07 16.2-18.5 | seen man talking, chat screenshots pop up | camera static | made~ screen capture 41% | flag low confidence

The idea is the same as SRT subtitles, EDL edit lists or log lines: one record per line, number and time first, then key value pairs. Why:

The DSL is used only there. Cards and shot data are YAML front matter checked by a JSON Schema; explanations are plain Markdown. The compact syntax goes where density matters most, and everywhere else uses formats everyone already reads.

Also

The map in VIDEO.md uses the same line format as the timeline (path | tokens | about), so a package has one small grammar, not two.

Decisions

A small required core

A card needs six fields: version, name, description, source, number of shots, language. A shot needs its number and time. Everything else is optional, including the judgement of how each shot was made.

Skills work the same way: only name and description are required. A tool that only summarises content, or a creator describing their own video, can write a conforming package without inventing data it does not have. A tool that does judge production methods adds made_mix and inferred, and readers that understand them use them.

An identity

The card is called an ID card, so it carries one: source.sha256, the hash of the whole file, and source.url when the video came from a link. Two packages written by two tools for the same video can be matched, compared and merged.

Four levels, each an order of magnitude bigger

Level Size Enough to answer
L0 card 100–300 tokens What it is about, and whether to open it
L1 overview and map 1–2k The verdict, the remake outline, what is uncertain, which file to read next
L2 topics hundreds to thousands One aspect in full: timeline, sound, packaging, remake
L3 shots 500–1000 One shot: what is seen, what is inferred and why, prompts, frames
L4 raw 100k+ Programs

Most questions (“how was this made”, “what material do I need”, “which shots should I check”) are answered at L1. Per-shot questions add the timeline, about 4k tokens in total. Only checking a single shot needs L3.

The levels follow how people ask: about the whole video first, then about one aspect, then about one shot.

The cost is known before reading

Every file has tokens in its front matter, and the map has a column for it. It changes how a model reads: not “open it and see” but “is this worth 14k tokens of remake plan, or is the remake field in the timeline enough?”

Seen and inferred are kept apart

This is the most important rule. A breakdown holds two very different kinds of statement:

Mixed together, a model passes inference on as fact and the user cannot tell which sentence to trust. So VIDEO.md separates them three times: ~ keys in the timeline; separate “seen” and “inferred” sections in shot files; and all inferred fields under inferred, with a probability, alternatives and decided_by (tools, model, agent, human). When they disagree, the frames win.

The timeline is the spine

Video is linear, and nearly every question comes down to “which second, which shot”. The timeline is the one L2 file worth reading in full; topic files and shot files hang off it by shot number. Its flag field marks the shots that need a look, so a model scanning it knows which frames to open.

Fixed form, open content

What programs depend on is fixed: front matter fields, the timeline grammar, the taxonomy ids. What can grow is open: new timeline keys, new topic files, new overlay ids, x- ids for anything outside the taxonomy. Readers ignore what they do not know. Additions keep the version number; only changing a meaning raises it.

So when a producer gets better (a new dimension of camera work, say), existing readers keep working.

It grows with the video

A six-second ad and a two-hour film are the same format. The ad uses the card, a timeline and two shot files. The film adds a scene list, so a model reads a few thousand tokens before choosing where to look, and a timeline split by scene. A one-hour take is split by content into lines that share a take; a reaction video describes each part of the frame under layers; a shot that orbits and then whip-pans lists both moves in order. Each of these is optional and added only when the video needs it, so simple videos stay simple.

Prose for models, ids for programs

Timeline values are prose in the package’s language: “screen capture 41%” or “屏幕录制 41%”, because a model reads them. Stable ids such as screen_capture live in the front matter of shot files and in made_mix, and programs read only those. Each layer does one job, and neither has to be parsed out of the other.

What it gives you

Agents

Programs

People

The ecosystem

What it is not

Alternatives

Approach Problem
Give the model the raw JSON Too big; measurement, inference and verdict mixed
Give the model the report No stable structure; cannot read part of it
Let the model watch the video each time Slow, costly, not reproducible, and blind to frame rate, noise and metadata
One big Markdown file Too long to read, or too short to be useful; no way to open it up
A JSON API only Fine for programs, wasteful for models, unreadable for people

VIDEO.md does not pick one of these. It layers them: the top for models, the middle for models and programs, the bottom for programs.