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 here/docs/tutorials#start-here
  • All tutorials/docs/tutorials
  • Create your first mascot/docs/tutorials/first-mascot
  • Make your mascot move/docs/tutorials/first-animation
  • Make your mascot talk/docs/tutorials/make-it-talk
  • Put your mascot on your website/docs/tutorials/mascot-on-your-website
  • 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
  • Quickstart: your first animation/docs/quickstart
  • API keys and workspaces/docs/authentication
  • 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
  • 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
  • Logos, scenes and stickers/docs/generate/design-assets
  • Cursor follower/docs/generate/cursor-follower
  • Batch generation/docs/generate/batch
  • 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
  • Smooth mascot playback/docs/integrations/playback
  • Hosting and file formats/docs/generate/cdn
  • File sizes/docs/generate/file-sizes
  • Image and video exports/docs/manage/media-exports
  • Terminal quickstart/docs/terminal
  • Desktop commands/docs/terminal/commands
  • CLI browser login/docs/authentication/cli
  • Swift SDK/docs/sdk/swift
  • TypeScript and Electron SDK/docs/sdk/typescript
  • Jobs and polling/docs/manage/jobs
  • Webhooks/docs/manage/webhooks
  • Manage mascots and assets/docs/manage/collections
  • Connect an AI agent/docs/ai-agents
  • Masko in ChatGPT/docs/ai-tools/chatgpt
  • Masko for Cursor/docs/ai-tools/cursor
  • Masko for Muse/docs/ai-tools/muse
  • Masko skill for coding agents/docs/ai-tools/skills
  • All endpoints/docs/reference
  • Requests and responses/docs/reference/conventions
  • Errors and recovery/docs/reference/errors
  • Changelog/docs/reference/changelog
  • Migrate to mascots and canvases/docs/manage/studio-migration
Get an API key
Documentation

Make a desktop pet
that reacts to everything.

Patata gets excited when your cursor comes close, kicks her legs when you pick her up, gets dizzy when you shake her, types when you type and falls asleep when you leave her alone. You build the app. Masko makes the character, all her animations and the state machine that decides which one plays.

Patata82%
To-do

What Masko made

One loop for each reaction and one animation for each move. Hover a clip to play it.

  • Restloop
  • Ooh, a Cursor!pointerHover
  • Wheee, Up We GoheldContact
  • Mashed and DizzyheldShake
  • Dizzy landinglet go mid-shake
  • Droppedlet go
  • Keyboard Hurricaneworking
  • Hey! Over Here!attention
  • Potato Partycelebrate
  • Full Potato Panicerror
  • Napafter 8 rest loops

How it works

  1. 1

    Make the character and one pose per reaction

    Create your pet from a prompt or a picture, then make each pose as an image of the same character: rest, noticed you, dangling, dizzy, typing, calling out, party, panic and nap.

    Create a mascot
  2. 2

    Connect the poses in a state graph

    Each pose is a node with its own loop. Each arrow has the input that triggers it, such as heldContact for a drag. Most ways back to rest are the move played backwards, which is free.

    Build a canvas
  3. 3

    Let Masko animate it, then play it in a window

    Generate all makes every loop and move as transparent WebM and HEVC. Export the canvas and play it in a transparent window that floats above other apps.

    Export a canvas

Some moves on Patata’s canvas

{
  "edges": [
    { "id": "idle-to-dangling",
      "conditionGroups": [
        [{ "input": "behavior::heldContact", "op": "==", "value": true }],
        [{ "input": "behavior::heldShake", "op": "==", "value": true }]
      ] },
    { "id": "dangling-to-mashed-and-dizzy",
      "conditions": [{ "input": "behavior::heldShake", "op": "==", "value": true }] },
    { "id": "idle-to-typing-frenzy",
      "conditions": [{ "input": "behavior::working", "op": "==", "value": true }] },
    { "id": "typing-frenzy-to-idle", "reverse": true,
      "conditions": [{ "input": "behavior::working", "op": "==", "value": false }] },
    { "id": "idle-to-nap-time",
      "conditions": [{ "input": "node::loopCount", "op": ">=", "value": 8 }] }
  ]
}

The pet window, in Electron

// main.js: a frameless, transparent window above other apps
const { app, BrowserWindow } = require('electron');

app.whenReady().then(() => {
  const pet = new BrowserWindow({
    width: 240,
    height: 240,
    transparent: true,
    frame: false,
    hasShadow: false,
    resizable: false,
    alwaysOnTop: true
  });
  pet.loadFile('pet.html'); // plays the exported canvas
});

Questions

Do I need a Masko SDK?

No. The export is JSON plus transparent videos, so your own player runs it. The playback guide shows the two-player handoff in HTML, React and Swift. The Masko Swift and TypeScript SDKs show hosted characters such as Ko in their own floating window.

How does the pet float above my other windows?

In Electron, use a frameless transparent BrowserWindow with alwaysOnTop, as in the code above, and play the WebM clips. In a Swift app, use a borderless NSWindow with a clear background at the floating level, and play the HEVC clips with two AVPlayer layers.

How does she move around the screen?

Move the window, not the video. While the pet is held, send the pointer position to the main process and move the window there. On release, drop it to the bottom of the screen while the landing clip plays.

Can my desktop pet talk?

Yes. Give the mascot a voice, then make a talking clip from a line of text: the mouth moves with the words and the clip comes with its sound. Play it when your app has something to say.

How much did Patata cost?

411 credits: 11 for the poses, including two redraws, and 400 for twenty animations, including one redo. The seven ways back are moves played backwards, so they are free.

Does it work on Windows?

The clips are transparent WebM and HEVC, so an Electron pet plays the WebM on Mac and Windows. A native Mac app plays the HEVC.