Skip to content

Media & Storage

Highlight handles media upload, processing, and storage for your collection assets. All media is stored centrally with optional decentralized backup to Arweave.

TypeUse caseMax size
ImageToken artwork, collection logos50 MB
VideoAnimated token artwork500 MB
AudioAudio-based tokens250 MB
ArchiveSeries assets, generative code1 GB
MetadataToken metadata JSON1 MB
  1. Create an upload session — Provide fileName, mimeType, and fileSize to get a signed upload URL
  2. Upload your file — Send the file to the signed URL via PUT
  3. Poll for readiness — Check media.status until it reaches Ready

The media type (Image, Video, Audio, Archive, Metadata) is inferred from the mimeType and fileName. The platform validates file size against the type limits above.

Every media asset has an explicit status:

  • Pending — Upload session created, waiting for bytes
  • Processing — Upload received, extraction in progress (archives only)
  • Ready — Fully available for use
  • Failed — Processing failed (retryable via POST /media/:id/retry)

For non-archive types, status goes directly from Pending to Ready on upload. For archives, the extraction step runs automatically and the asset transitions through Processing to Ready.

For permanent decentralized storage, you can sync media to Arweave:

  • Pending — Sync has been requested
  • Succeeded — File is stored on Arweave with a permanent URI
  • Failed — Sync encountered an error

Arweave backup is optional but recommended for long-term preservation of token assets.

Archives (zip files) are used for:

  • Series collections — Bundle all token images and metadata in a single zip
  • Generative collections — Package your generative code (HTML, JS, CSS, assets)

Uploaded zips are automatically extracted. The original zip is deleted after successful extraction. The media entity includes an archive field with the manifest of extracted files, each with a relative key, size, and mimeType.