Docs
One API for every asset an app ships with — how it looks and how it sounds. Call it over HTTP, or connect the MCP server and let your coding agent do it.
Start here
Quickstart
Sign in to mint an API key, then point the MCP server at it. Every generation returns a durable URL you can drop straight into your app.
{
"mcpServers": {
"media": {
"command": "node",
"args": ["/abs/path/to/apps/mcp/dist/index.js"],
"env": {
"MEDIA_API_URL": "https://your-api.workers.dev",
"MEDIA_API_KEY": "mk_your_key_here"
}
}
}
}curl -X POST $MEDIA_API_URL/v1/generate \
-H "authorization: Bearer $MEDIA_API_KEY" \
-H "content-type: application/json" \
-d '{"type":"speech","brief":"Your order is on its way.","voice":"narrator"}'New
Voice, sound and music
Six audio types, powered by ElevenLabs. Speech is spoken exactly as written — the engine never rewrites a script. Sound effects and music get the same intent presets and prompt enhancement as images.
| type | What you get | Notes |
|---|---|---|
speech | Spoken text | `brief` is the script, spoken verbatim. Pick a `voice` by alias, name or id. |
dialogue | Multi-speaker conversation | Pass `lines`. Turns without a voice alternate between two speakers. |
sfx | One sound effect | UI blips, whooshes, impacts, or a seamless ambience loop. |
soundpack | A whole interaction sound pack | Every clip in one style + a manifest mapping name → URL. |
music | A music track or loop | 10s–5min. Background beds, menu loops, audio logos. |
voice | A designed voice | Candidate previews; `saveVoiceAs` returns a reusable voice id. |
Sound packs
One call renders every clip an app's interaction layer needs, in a single style, and returns a manifest.json mapping name → URL. Your brief is the shared style (“soft glassy minimal”, “warm retro arcade”).
| pack | Sounds included |
|---|---|
ui-essentials | tap · toggle-on · toggle-off · success · error · notification · swipe · refresh |
mobile-app | launch · unlock · message-sent · message-received · delete · camera-shutter · achievement · typing |
game-arcade | coin · jump · power-up · level-up · hit · explosion · game-over · menu-select |
notification | subtle-tick · gentle-chime · message · reminder · urgent-alert · celebrate |
checkout | add-to-cart · scan · payment-success · payment-error · receipt · cash |
ambient-loops | rain · cafe · forest · ocean · fireplace |
curl -X POST $MEDIA_API_URL/v1/generate \
-H "authorization: Bearer $MEDIA_API_KEY" \
-H "content-type: application/json" \
-d '{
"type": "soundpack",
"brief": "soft glassy minimal, premium feel",
"pack": "ui-essentials",
"audioFormat": "wav"
}'
# → 8 clips + manifest.json, every clip peak-normalized to -1 dBFSChoosing a voice
voice accepts a built-in alias, a catalog name, or a raw voice id. Aliases include narrator, assistant, guide, calm, friendly, announcer, hero and villain. Browse everything with GET /v1/voices. To give your app its own voice, design one and reuse the id it returns:
# 1 — design (returns 3 candidate previews, saves the first)
{"type":"voice",
"brief":"warm, upbeat female product guide, late twenties, neutral American accent",
"saveVoiceAs":"Acme Guide"}
# → result.meta.voiceId
# 2 — every line from then on
{"type":"speech","brief":"Welcome back!","voice":"<that voiceId>"}Formats
mp3 (default, 44.1 kHz), wav (24 kHz PCM, peak-normalized — best for game engines and Web Audio), pcm, opus, ulaw. Level consistency across a pack requires a linear format, so reach for wav when clips must sit together.
Reference
Visual media types
| type | What you get | Notes |
|---|---|---|
image | A raster image | Auto-optimized to WebP. `variants` + pick-best. |
icon | Full app-icon bundle | iOS AppIcon set, Android mipmaps, web icons, favicon.ico, PWA manifest. |
favicon | Favicon bundle | 16–512px + Apple touch + manifest. Superseded by `icon`, which now includes everything this does. |
social | Social card pack | OG, Twitter, LinkedIn, Instagram square. |
splash | App splash screens | iOS, Android, web PWA sizes. |
screenshot | App store screenshots | iPhone, iPad, Android, feature graphic. |
video | A short video clip | Text-to-video. Poll `get_job`. |
animation | Animated mascot / logo | Image-to-video, transparent WebM. |
svg | A vector graphic | Scales to any size. |
lottie | Lottie JSON animation | lottie-web, dotLottie, RN Lottie. |
Reference
HTTP API
All /v1 routes take authorization: Bearer <api key>. Jobs run asynchronously; a completed job carries result.assets[] (durable URLs) and result.meta (voice used, pack name, manifest URL).
| Method | Path | What it does |
|---|---|---|
POST | /v1/generate | Create a generation job |
GET | /v1/jobs/:id | Job status and result |
GET | /v1/models | The model registry |
GET | /v1/voices | Voice catalog + aliases (filter with ?q= &gender= &accent=) |
GET | /v1/sound-packs | Built-in sound packs + audio intents |
POST | /v1/brands | Declare a brand and resolve its style anchor |
GET | /v1/brands | Your brands and their anchors |
GET | /v1/brands/:slug | One brand's full identity |
PATCH | /v1/brands/:slug | Edit a brand and re-derive its anchor |
DELETE | /v1/brands/:slug | Delete a brand and its stored assets |
Reference
MCP tools
| Tool | What it does |
|---|---|
generate_image | Raster image → durable URL |
generate_icon | iOS/Android/web icon bundle + favicon.ico + PWA manifest |
generate_social_cards | OG / Twitter / LinkedIn / IG pack |
generate_splash_screens | iOS / Android / web splash bundle |
generate_app_screenshots | Store screenshots |
generate_video | Short video clip |
generate_animation | Transparent-background mascot animation |
generate_svg | Vector graphic |
generate_lottie | Lottie JSON animation |
generate_speech | Text to speech in a chosen voice |
generate_dialogue | Multi-speaker dialogue in one take |
generate_sound_effect | One sound effect or ambience loop |
generate_sound_pack | A whole interaction sound pack + manifest |
generate_music | Music track or loop |
design_voice | Design and save a custom voice |
list_voices | Browse voices and aliases |
list_sound_packs | Browse packs and audio intents |
create_brand | Declare a product's visual identity once |
list_brands | Browse your brands and their style anchors |
get_brand | One brand's full identity |
update_brand | Edit a brand and re-derive its anchor |
delete_brand | Delete a brand and its stored assets |
list_models | Browse the model registry |
get_job | Poll a job for its result |