A video can be a layer now
A clip is a picture that changes. Everything hard about putting one in a composition comes from that: a frame is drawn synchronously, and getting a particular frame out of a video decoder is not synchronous at all.
The editor could export video and never contain one
What existed was a YouTube iframe behind the canvas. It is a reference backdrop — something to line an overlay up against while you work — and it composites nothing: it was never in the exported file and was never meant to be.
A clip is a layer now. It sits in the stack with everything else, carries the same transform, the same opacity, the same corner radius and border, and is keyed like anything else. Upload one from the toolbar, or add a video element and give it a file.
Silent on purpose. Sound here is its own system, with its own tracks and its own mixing, and an export that suddenly carried a clip's dialogue under the soundtrack would be a surprise nobody asked for.
Twenty-five megabytes, and where that number comes from
Three things bind the limit and none of them is storage. The container that takes the upload refuses a request body over thirty-two mebibytes, so a larger number would break at the edge before any message about it reached you. The backend holds the whole upload in memory while it checks what the file actually is, on a gigabyte shared by eighty requests at once. And twenty-five megabytes is some twenty seconds of 1080p, against compositions that run six.
mp4 and webm, which are the two containers a browser can decode without help. The file is read rather than believed: an mp4 is checked for its ftyp box and a webm for its EBML header, because an extension is a request and not a fact.
A file over the line is refused with what to try instead — a shorter clip, or the same one exported smaller — rather than with the name of a rule.
It showed its first frame at every moment of the piece
Found by trying it with a real file, which is the only way this one could have been found. The asset store answered every read whole, which is exactly right for a photograph. A video element does not ask for a whole file: it asks for the bytes around the moment it is seeking to, and an answer that ignores the question leaves it reporting a duration it knows and a position it cannot reach.
Ranges are served now. A piece comes back as a partial answer that names which piece it is, and a range naming no part of the file is refused rather than guessed at. Video was missing from the list of file types besides, so a clip arrived announced as an anonymous stream of bytes.
One wrong turn is worth writing down. The first file tested with was a recording made in the browser, which is a streaming container with no seek index — it reports a duration and can reach none of it either. For a while the symptom had two causes and the wrong one got the blame.

And it costs the slice rather than the file
Serving used to read the whole object on every request. For a picture that is one read and the end of it. For a clip being scrubbed it put the file's entire length through the container once per seek, which is the sort of thing that is invisible on one laptop and expensive with people on it.
A range now costs the metadata and the slice it asked for.
All the way into the exported file
A layer the renderer cannot draw is skipped and the rest of the frame composited without it, in silence. So the failure worth guarding against is not a crash: it is a finished video with a hole where the clip was, handed over as a success.
Both export paths prepare before they draw. Every clip is seeked to the moment being drawn, and only then is the frame copied off it. The proof is that the frames differ from one another — a clip drawn once and reused, or a hole, gives the same picture over and over, and that is what the test measures rather than anything about how it was built.
A clip runs from its own start, so trimming when it appears does not also change which second of it is showing.
Questions
- What video files can I upload?
- mp4 and webm, up to twenty-five megabytes. The file itself is checked rather than its name, so a renamed file of another kind is refused.
- Why twenty-five megabytes?
- The upload is held in memory while it is checked, and the service that receives it refuses a body over thirty-two mebibytes. Twenty-five megabytes is roughly twenty seconds of 1080p, against compositions that run six.
- Does the clip's own sound play?
- No. Video layers are silent. Sound is a separate system here with its own tracks and mixing, and a clip does not add itself to it.