Media
The Media panel is your account's CDN-backed asset library. Upload images, videos, and audio once; reference them by URL in any movie JSON. JSON2Video hosts them at a stable URL and serves them with the same edge-cached infrastructure used for rendered videos.
Media lives at json2video.com/dashboard/media.
TODO: capture screenshot of the media panel in grid view with a folder expanded.
When to use the Media panel
- You have static brand assets (logos, intros, outros, background music) used across many videos.
- Your source images live on a server with rate limits or that may go down — putting them on the JSON2Video CDN avoids transient fetch errors mid-render.
- You don't want to host assets yourself or set up your own S3 bucket.
If your assets are already on a public CDN (S3, Cloudflare, your own server), you can reference them directly by URL in the movie JSON. The Media panel is an option, not a requirement.
Uploading
- Open json2video.com/dashboard/media.
- Either click Upload or drag-and-drop files into the panel. Both work.
- Wait for the upload progress bar to finish. Each file gets a unique URL.
Supported types:
- Images:
png,jpg,jpeg,gif,bmp,tiff,webp. - Videos:
mp4,mov,webm, and any container with the codecs listed in the errors reference. - Audio:
mp3,wav,flac,aac,opus,ogg.
Total storage and per-file size limits depend on your plan — see credits & limits.
Browsing
The media panel has two views, toggleable in the top-right:
- Grid — thumbnail tiles. Best for visual browsing.
- List — table with name, size, type, and modified date. Best for finding by name.
Sort by Date or Name with the sort dropdown.
Organising with folders
Click New folder to create a folder. Folders can be nested. Use folders to:
- Separate clients (
/customer-a,/customer-b). - Group by campaign (
/black-friday-2026). - Split by asset type if you prefer (
/logos,/music).
To move files into a folder: select them (checkbox on grid view, row click on list view) and drag onto the target folder, or use the row menu → Move to folder.
Copying URLs to use in API calls
Each uploaded file gets a stable URL on the JSON2Video CDN:
https://cdn.json2video.com/clients/<your-client-id>/<folder>/<filename>
To copy the URL:
- Click a file in the panel — the preview opens.
- Click the Copy URL button.
- Paste the URL as the
srcof animage,video, oraudioelement in your movie JSON.
{
"type": "image",
"src": "https://cdn.json2video.com/clients/abc123/logos/brand-mark.png"
}
Previewing
Click any file to preview:
- Images — full-resolution preview.
- Videos — inline player.
- Audio — inline player with waveform.
The preview view also shows metadata: dimensions, duration (for video/audio), codec, file size.
Deleting files
- Single file: row menu → Delete.
- Bulk: select multiple files, then Delete selected in the action bar.
Deleted files are removed immediately. Any movie JSON still referencing the URL will fail to render with a 404 on that element. The dashboard does not check for in-use references before delete — be careful with production assets.
Programmatic access
The same files are accessible through the media API:
GET /v2/media— list files.POST /v2/media— upload a file.PUT /v2/media— move / rename.DELETE /v2/media— delete.
This is useful for automating uploads from your own backend (e.g. push a new logo from your CI pipeline).
Persisted generated assets
The Drive can also hold assets produced by the JSON2Video AI / rendering pipeline — not just files you uploaded. Any generable element (image, video, audio, voice, html, component) can be persisted to the Drive by adding save-to-media: true to the source item, in POST /v2/preloads, in movie.preload[], or inside scene.elements[]. See the Save generated assets to Media guide for the full opt-in flow.
Persisted generated assets land in a reserved generated/ folder, sub-grouped by element type:
/generated/image/...
/generated/video/...
/generated/audio/...
/generated/voice/...
/generated/html/...
/generated/component/...
The filename is derived from the source item's id (when it matches ^[a-zA-Z0-9_-]+$) or from the first 12 characters of the asset hash. The extension comes from the real codec returned by the generator — a Flux model that produces WebP yields .webp, an MP3 voice yields .mp3.
Once in the Drive, persisted generated assets behave exactly like uploaded files: same URLs, same management UI, same quota counters, same API endpoints. You can move them out of /generated/ if you prefer a different layout — new persistence calls always land in /generated/{type}/ first.
Deletion
Deleting a persisted generated asset from the Drive also clears the engine's internal backreference to it. The next time you preload the same prompt with save-to-media: true, a fresh file is created.
Quota
Persisted generated assets count against your Media storage quota exactly like uploaded files. If the Drive is blocked (over quota, billing hold), a save-to-media request degrades gracefully: the asset is still generated, the response carries persistent: false and warning: "quota_blocked", and the URL points to the 3-day cache instead. The request never fails because of quota.