Skip to content
maskostudioDocs

All pages

  • Overview/docs/use-cases
  • Mobile app/docs/use-cases#mobile
  • Website/docs/use-cases#website
  • Desktop/docs/use-cases#desktop
  • AI agents/docs/use-cases#agents
  • Videos/docs/use-cases#videos
  • Brand/docs/use-cases#brand
  • Start building/docs/ai-agents
  • Set up once/docs/ai-agents#set-up-once
  • Ask in plain words/docs/ai-agents#ask-in-plain-words
  • What your agent does/docs/ai-agents#what-your-agent-does
  • MCP server/docs/mcp
  • Masko for Cursor/docs/ai-tools/cursor
  • Masko in ChatGPT/docs/ai-tools/chatgpt
  • Masko in Lovable/docs/ai-tools/lovable
  • Masko in Devin/docs/ai-tools/devin
  • Masko in n8n/docs/ai-tools/n8n
  • Masko in Hermes Agent/docs/ai-tools/hermes
  • Masko in OpenClaw/docs/ai-tools/openclaw
  • Start here/docs/tutorials#start-here
  • All tutorials/docs/tutorials
  • Create your first mascot/docs/tutorials/first-mascot
  • Create an animated character/docs/tutorials/first-animation
  • Make a character talk/docs/tutorials/make-it-talk
  • Put your mascot on your website/docs/tutorials/mascot-on-your-website
  • Guide onboarding with a talking mascot/docs/tutorials/web-onboarding-mascot
  • Add a mascot that celebrates progress and welcomes users back/docs/tutorials/web-progress-companion
  • Add a talking support mascot in the bottom right/docs/tutorials/web-support-mascot
  • Show a mascot while your AI thinks/docs/tutorials/ai-loading-mascot
  • Give your AI agent a face/docs/tutorials/ai-agent-face
  • Animate the mascot you already have/docs/tutorials/animate-your-mascot
  • How to make Telegram stickers/docs/tutorials/telegram-stickers
  • How to make Discord stickers/docs/tutorials/discord-stickers
  • Quickstart: your first animation/docs/quickstart
  • Terminal quickstart/docs/terminal
  • API keys and workspaces/docs/authentication
  • CLI browser login/docs/authentication/cli
  • How mascots work/docs/how-mascots-work
  • Credits and costs/docs/credits
  • From text/docs/create/from-text
  • From an image/docs/create/from-image
  • From a website/docs/create/from-website
  • From a brand book/docs/create/from-brand-book
  • Reference images/docs/manage/references
  • Props/docs/manage/props
  • What you can generate/docs/generation
  • Pose-to-animation walkthrough/docs/generate/workflow
  • Images and poses/docs/generate/images
  • Animations/docs/generate/animations
  • Talking animations/docs/generate/talking
  • Sounds/docs/generate/sounds
  • Write good requests/docs/generate/requests
  • Logos, backgrounds and stickers/docs/generate/design-assets
  • Cursor follower/docs/generate/cursor-follower
  • Batch generation/docs/generate/batch
  • Image and video exports/docs/manage/media-exports
  • Canvases and releases/docs/canvas
  • Build a canvas/docs/canvas/build
  • Canvas templates/docs/canvas/templates
  • Generate canvas assets/docs/canvas/generate-all
  • Export a canvas/docs/canvas/export
  • Overview and demo/docs/player
  • Play one animation/docs/player/one-animation
  • Play a canvas/docs/player/canvas
  • Ship in an app with an app key/docs/player/app-keys
  • Play on an ESP32 board/docs/player/esp32
  • Hosting and file formats/docs/generate/cdn
  • File sizes/docs/generate/file-sizes
  • Float a mascot on your Mac/docs/integrations/desktop
  • Jobs and polling/docs/manage/jobs
  • Webhooks/docs/manage/webhooks
  • Manage mascots and assets/docs/manage/collections
  • All endpoints/docs/reference
  • Requests and responses/docs/reference/conventions
  • Errors and recovery/docs/reference/errors
  • Command line reference/docs/terminal/commands
  • TypeScript SDK/docs/sdk/typescript
  • Changelog/docs/reference/changelog
  • Migrate to mascots and canvases/docs/manage/studio-migration
Get an API key
Documentation

Sounds

A mascot can have its own sounds: a giggle, a squeal, a "Hm?", a word or two. Upload them from any audio file. An animation with sound plays one of them, and the mascot moves in time with it. When none fits, the video model makes a sound for it. The price is the animation's normal price.

1. Add the mascot's sounds

Send a public link, or upload the file. MP3, M4A/AAC, WAV, OGG, Opus, FLAC, AIFF and WebM all work, as does the sound of a video, up to 50 MB.

curl -X POST https://api.masko.ai/v1/mascots/MASCOT_ID/sounds \
  -H "Authorization: Bearer $MASKO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/yippee.m4a", "name": "Yippee"}'

To upload a file from your computer, ask for an upload link first with POST /v1/mascots/MASCOT_ID/sounds/uploads and {"file_name": "yippee.m4a", "content_type": "audio/mp4"}. PUT the file to upload_url with upload_headers, then send upload_id and the same file_name to POST /v1/mascots/MASCOT_ID/sounds.

Masko trims the silence around the sound and evens out its loudness. At most 10 seconds of sound remain. It measures the sound's bursts ("sneak, sneak" is two) and its loudest moment. It then listens to it for 15 to 60 seconds and writes down the words, a description, the feeling and the moments it fits.

2. Read them

{
  "data": {
    "sounds": [
      {
        "object": "sound",
        "name": "Yippee",
        "duration": 1.88,
        "parts": [
          { "start": 0, "end": 0.22, "peak": 0.17, "label": "yip" },
          { "start": 0.24, "end": 1.88, "peak": 0.9, "label": "pee" }
        ],
        "peak_at": 0.17,
        "listening": "heard",
        "words": "Yippee!",
        "description": "A very high-pitched, energetic voice shouts 'Yippee!' with great excitement.",
        "feeling": "joyful",
        "kind": "vocal",
        "fits": ["jumping for joy", "celebrating a win"]
      }
    ]
  }
}

Correct a description with PATCH /v1/mascots/MASCOT_ID/sounds/SOUND_ID and {"description": "..."}, since sound picking reads it. Remove a sound with DELETE. Animations already made keep their sound.

3. Animate with sound

Add "sound": true to an animation. It needs the standard model, a picture to start from, 5 to 15 seconds, and a loop or an end picture.

curl -X POST https://api.masko.ai/v1/mascots/MASCOT_ID/generate \
  -H "Authorization: Bearer $MASKO_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"type": "animation", "item_id": "POSE_ITEM_ID", "animation_prompt": "jumps for joy and shouts yippee", "duration": 5, "sound": true}'
  • One of its sounds: a sound the prompt names or describes is used. Otherwise the one that clearly fits, if any. Its loudest moment lands on the key moment of the motion.
  • Otherwise, a sound made for it: the video model makes a sound that fits, unless the mascot only uses its own sounds. That setting is in the mascot's character page in Studio.
  • Never on calm loops: a calm idle loop gets no sound unless the prompt asks for one.

The receipt's sound says which sound was used, when it starts, and why. A finished animation has its sound in every file: MP4, transparent WebM and HEVC, and the files for the Masko player. Players play it unless the app turns sound off.

Through the MCP server, an agent reads the sounds with get_mascot, adds one from a link with update_mascot, and turns sound on with animate_mascot.