The editor

Images

An image can be an element of its own (drop it, paste it or add it, and animate it like anything else) or arrive inside a component you pasted. Either way, the export points at your own file by its path, and the image never leaves your browser: it isn't uploaded or saved to your account.

Three ways in
“Add image” under the layers (or ⌘K, “Add image…”) opens a file picker. Dropping an image file on the stage places it centered where you let go. ⌘V puts a copied image on the stage, like a logo from Figma or a screenshot, unless you’re typing in a field or a dialog is open, where a paste stays a paste.
It’s a component with one tag
A dropped logo.png becomes an element whose markup is <img src="/logo.png" alt="logo" width=… height=… />, named after the file. Presets, tracks, picking and every export dialect treat it exactly like a pasted component, because that’s what it is. The alt text starts as the file name; edit the source to say what the image shows.
Images inside a pasted component
A component copied from a project refers to its images the way that project does (/logo.png), and in the editor those paths point nowhere. ⌘K “Images…” lists every relative path the markup asks for. Give the document a base URL (your dev server counts) to resolve all of them at once, or drop a file onto a single path.
Your images stay on your device
An image you add is kept in this browser’s own storage and nowhere else. The document only names it, by its path and a fingerprint of the file, so saving to your library sends no image anywhere. Nothing on our side could hold one either: the database refuses a document that carries image data, whoever writes it. Your export doesn’t need the file; it points at your own.
On another device
Open the document in another browser, or after this one has cleared its storage, and the stage says which images aren’t on this device. Drop the file on the stage and it relinks by name, or open ⌘K “Images…”, where the row says “not on this device” and takes the file.
The caps
Each image travels to the preview with every change, so each is capped at 512KB and a document’s images at 1MB, refused with a message when you add one. A larger photo is kept as a smaller WebP preview copy instead, and the stage says so. Your export is unaffected, since it references your own file by name.
Where it stops
Markup with an image written into its code (a data:image URI in a src or a url()) is refused when you paste it. Save the image as a file, point the markup at its path, and drop the file in. SVGs and GIFs are never re-encoded (a canvas would flatten the vector and freeze the animation), so a large one is refused. A path written as an expression, like src={logo}, can’t be mapped to a file, and srcSet isn’t rewritten, so an image falls back to its src. Safari may clear a site’s storage after weeks without a visit; an image lost that way is relinked the same way. On a shared link, every image shows as a placeholder.