Archived docs Get your API Key
Get started
Tutorials
Guides
Reference
Help for coding agents
🤖 AI Assistant

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

  1. Open json2video.com/dashboard/media.
  2. Either click Upload or drag-and-drop files into the panel. Both work.
  3. 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:

  1. Click a file in the panel — the preview opens.
  2. Click the Copy URL button.
  3. Paste the URL as the src of an image, video, or audio element 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.

Retention

Media files have no expiry date, unlike rendered videos (deleted after 7 days) and cached generated assets (3 days). They are kept as long as your account holds credits: if the balance stays at zero for 30 days, media files and rendered videos are permanently deleted. Topping up at any point during those 30 days cancels the deletion. See File retention for the full picture.

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.

See also