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

Media platform: upload, transcode, AI

A polished asset upload, playback, and AI-context experience for every generated app. Drop a screenshot, PDF, or video 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, PDFs, and videos. 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, progress, and per-file retry in one tag.

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.

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.

Knowledge files: PDFs the AI references

Open the Knowledge tab in the app editor and upload PDF, DOCX, MD, or TXT files. The worker extracts text, chunks with overlap, embeds via OpenAI, and stores in a per-app pgvector table. From then on, both codegen and chat refinement retrieve the top relevant chunks and inject them into the system prompt - so refining your app “make the pricing page reflect our spec” actually pulls from your spec.

You can also drop a PDF on the home page to scaffold a brand-new app from a product spec or design brief. Loom and YouTube URLs work too - they extract title and description for the AI to reference.

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.

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 delete and export hit POST /api/storage/{appId}/assets/export and DELETE /api/storage/{appId}/assets/all.

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.
Where do Knowledge files live and who can read them?
Each app gets its own pgvector table genmb_apps_{appId}_kbchunks in the shared Cloud SQL instance. Only the codegen and chat refinement paths for that specific app read from it. The source PDF lives in GCS at apps/{appId}/knowledge/{docId}/source.{ext} - same access posture as your other app assets.
What file types are supported?
Images: JPG, PNG, GIF, WebP, SVG, ICO, AVIF, HEIC. Video: MP4, WebM, MOV. Audio: MP3, WAV, M4A. Documents (Knowledge): PDF, DOCX, MD, TXT. Fonts: WOFF, WOFF2, TTF, OTF. Data: JSON, CSV, TXT, XML. Executable extensions are blocked.