Importing media
Ways in
| Route | Handles |
|---|---|
| Drag from the OS onto the canvas | Images, video, audio — placed where you drop them |
| The Assets panel | Import into the library first, place later |
| Insert → Audio | A file picker for audio |
| Insert → Image Sequence | A multi-file picker; the frames arrive as one timed layer |
| Insert → Lottie import | See Lottie |
Where assets live
| Path | Storage |
|---|---|
| Cloud | Cloudinary, keyed <kind>:<public_id>. Audio is uploaded as resource_type: 'video' |
| Local-first | A content-addressed blob store inside the project bundle |
The Assets panel
Thumbnails and file sizes, folders for organisation, drag-to-canvas to place.
It uses content-visibility, so a large library scrolls without stalling.
Footage is a source
A placed composition and an imported clip are the same shape of thing: both
have an intrinsic size and an intrinsic time, and both go into a host that may
disagree with either. So there is one SourceInfo and one sourceOf() behind
them, not a footage path beside a comp path.
Two consequences worth knowing:
- Footage auto-fits on import. A 4K clip dropped into a 1080 composition used to arrive at 3840 × 2160 — four times the frame, with only its centre visible. It now lands framed.
- Interpretation lives on the asset, not the layer. Correcting a mis-tagged import updates every layer using that file at once, in every composition, after you have already cut with it.
Probing on import
On the desktop, ffprobe runs on import and supplies three facts only a
demuxer knows: the real source frame rate, the container’s pixel aspect, and a
definitive inventory of audio streams. The audio section of the inspector appears
on real stream data rather than waiting for a decode to fail.
Degradation is explicit, and it is not only a browser concern — ffmpeg resolution
falls back to a bare ffmpeg on PATH and may find nothing:
| Tier | What is known |
|---|---|
| Probed | Real source rate, pixel aspect, audio streams |
| Element only | Whatever the <video> element reports |
| None | Import still succeeds, with today’s fallback behaviour |
An import never fails or is skipped because a probe did not run.
The probed rate is written to the asset’s metadata, deliberately not to
interpret.conformFps. Conform means “the user overrode the file” — writing
both would leave nothing to reset to.
Interpret Footage
Per-asset overrides for what the file claims about itself:
| Setting | Notes |
|---|---|
| Conform frame rate | Overrides the probed source rate |
| Pixel aspect ratio | Applied before fit, not after |
| Alpha | Straight or premultiplied — see How a frame is rendered |
| Loop count | — |
| Proxy | See Proxies |
Fit is a command
Fit is something you run, not something the layer stores.
| Command | Result |
|---|---|
| Fit to Comp | Scale to fit inside the composition frame |
| Fit to Width / Fit to Height | Fit one axis |
| Fill Comp | Cover the frame, cropping the overflow |
| Set to Native Size | Back to the source’s intrinsic pixels |
| Centre Anchor Point in Layer Content | Anchor to the middle of what is actually there |
Each computes once and writes the result. This is why the old Media-panel Fit Mode dropdown never appeared to do anything and has been removed: a stored mode has to be re-resolved every frame against a composition size that can change, which puts it in a fight with the selection handles that has no defined winner.
Media controls
Once a media layer exists, Style → Media carries:
| Control | Applies to |
|---|---|
| Source | Which asset the layer points at |
| Trim | In and out points within the source |
| Speed | Playback rate. Note that a speed change mutes the clip’s audio |
| Crop | — |
| Volume | Video and audio — in dB, and keyframable |
Video layers
Video layers seek frame-accurately during export, not just during preview. A video that looks correct scrubbing in the viewport will land correctly in the file. A proxy never substitutes for output.
A video layer also plays and exports its own audio track — see Audio.
Frame blending is available for video whose frame rate does not match the composition’s — it interpolates between source frames rather than duplicating or dropping them. It brackets on the source’s rate when that is known, which is what the import probe supplies. Bracketing on the composition’s rate instead — which is what it used to do — made both bracket times land inside the same decoded frame for a 24 fps source in a 30 fps comp, collapsing the blend to nearest-frame in exactly the mismatched-rate case the feature exists for.
Image sequences
A multi-file import arrives as a single timed layer, not as N layers. Trim, retime and speed it like any other media.
Time controls
For any media layer, the Settings inspector tab adds:
- Time stretch %
- Reverse
- Freeze frame
- Frame blending