Skip to main content
Docs/Media Platform
DocsMedia platform: upload, transcode, AI
Free

Media platform: upload, transcode, AI

A polished asset upload and playback experience for every generated app. Drop an image, video, or audio file and the widgets handle the rest.

Drop anywhere, upload everywhere

The home generator and chat input accept paste-from-clipboard, drag-drop, and a full-page dropzone for images. Inside generated apps, the GenMB SDK exposes a<genmb-uploader> Web Component plus a low-levelwindow.genmb.storage API. Files larger than 8MB upload via the GCS resumable protocol so they survive flaky networks.

Use <genmb-uploader accept="image/*" multiple folder="avatars"> instead of building your own file input. It handles drag-drop, multiple files, instant previews, per-file progress, and retry in one tag. On phones it opens the camera or photo gallery.

Per-file caps follow the app owner's plan: 50MB on Free, 500MB on Pro and Team, and 5GB on Business. Storage per app is 1GB on Free, 250GB on Pro and Team, and 2TB on Business. No API keys and no bucket setup: the file-storage capability switches on automatically when your app needs uploads.

Images: AVIF, WebP, blurhash, AI alt-text

Every image upload is processed in the background: AVIF + WebP + JPEG variants at 200 / 600 / 1200 / 2400 px widths, blurhash placeholder, dominant color, and AI-generated alt text. Use <genmb-image src="..." width="800"> and the right variant is served via <picture>. EXIF is stripped on save.

Video: HLS, thumbnails, captions, chapters

Upload an MP4/WebM/MOV and the media-worker transcodes to an HLS multi-bitrate ladder (480p / 720p / 1080p), extracts a thumbnail at 10% of the duration, generates a 3-second GIF preview, runs Whisper for captions, and segments the transcript into chapters.

Drop <genmb-video src="..." controls captions chapters> in your app and it plays the original immediately while the optimized renditions roll in. Seeking works in every browser, including iPhone Safari, and the transcoder thumbnail becomes the poster automatically.

Free tier transcodes up to 5 minutes per app per day. Pro tier gets 60 min/day, Business gets 600 min/day. Anything beyond the cap still uploads and plays as the original MP4.

Audio: waveforms and transcripts

Upload audio and you get a <genmb-audio waveform transcript> widget with a click-to-seek transcript and a waveform strip. Whisper handles English natively.

PDFs, ebooks, and documents

<genmb-pdf src="..." height="600"> shows a PDF inline, no download needed. EPUB and MOBI ebooks and Word, Excel, and PowerPoint files upload the same way as any other file.

Every upload returns a permanent URL that never expires, so it is safe to store in your database. For files that should not be public, such as paid downloads or per-user documents, window.genmb.storage.getSignedUrl(filename, ttlSeconds) returns a short-lived signed link.

Governance: scanning, versioning, GDPR

Daily ClamAV scans quarantine infected uploads automatically. Every overwrite is kept as a version with one-click rollback in the assets panel. The Storage Analytics panel shows live quota usage and 30-day transcoding trends. GDPR deletion runs through the owner-gated app-deletion flow, which purges every stored asset for the app.

FAQs

Do I have to use the widgets or can I keep my own <img> and <video> tags?▾
Existing <img> and <video> tags keep working. The widgets are opt-in - we recommend them because they give you HLS playback, AVIF/WebP variants, blurhash placeholders, captions, and chapter rails for free. The AI codegen prefers them when the file-storage capability is active.
How does the resumable upload work?▾
Files larger than 8MB automatically switch to the GCS resumable upload protocol. The SDK chunks the file into 8MB pieces, PUTs each chunk to a signed session URL, and finalizes via /api/storage/{appId}/upload/resumable/{sessionId}/finalize. Per-chunk retries with exponential backoff happen transparently. Your code only sees await window.genmb.storage.upload(file).
What happens to a video while it transcodes?▾
The original MP4 plays immediately in <genmb-video>. As soon as the media-worker finishes transcoding (typically 1-2 min for a 5-min video), the widget swaps to HLS streaming via a Server-Sent Event. Mobile Safari uses native HLS; everywhere else uses bundled hls.js.
What file types are supported?▾
Images: JPG, PNG, GIF, WebP, SVG, ICO, AVIF, HEIC. Video: MP4, WebM, MOV. Audio: MP3, WAV, M4A. Documents: PDF, Word, Excel, PowerPoint. Ebooks: EPUB, MOBI. Fonts: WOFF, WOFF2, TTF, OTF. Data: JSON, CSV, TXT, XML, Markdown. Executable extensions are blocked.
How big can uploads be?▾
Per file: 50MB on Free, 500MB on Pro and Team, 5GB on Business. Storage per app: 1GB on Free (200 files), 250GB on Pro and Team (100,000 files), 2TB on Business. The limits follow the app owner's plan, and the uploader applies them for you.
Do file links expire?▾
No. The URL an upload returns is permanent, so you can save it in your data and it keeps working. For private files (paid downloads, per-user documents) call window.genmb.storage.getSignedUrl(filename, ttlSeconds) to hand out a short-lived signed link instead.