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
  • 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
  • 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, 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
  • 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

Cursor follower

Make your mascot look toward the visitor's cursor on a website. Masko draws nine still images of one transparent pose, one per gaze direction, and a small script shows the right one.

Ko looking up and to the leftKo looking upKo looking up and to the right
Ko looking leftKo looking at youKo looking right
Ko looking down and to the leftKo looking downKo looking down and to the right

Ko's nine directions. Try them live on the cursor follower page.

Cost

9 credits for all nine, refunded if generation fails. Downloads and hosting add no generation credits.

What you need

A completed image with a visible face and a completed transparent version in the same mascot. The follower keeps the image's variant, so a Sporty pose gives a Sporty follower.

Check all nine before use: the gaze can miss, and the head or body can shift slightly between images.

Make one in Studio

1

Open your mascot

In the Interactive tab, choose Create Interactive (or use it on an image's page).

2

Pick the image

The Follow cursor template lists images with a transparent version. Choose one, then Create · 9 credits.

3

Check the result

Its page shows a live preview and one button per direction.

4

Download or host it

Download the Follow cursor package, or use hosted URLs from Get Links.

Make one with the API

Send a completed image that has a transparent version. name (up to 60 characters) defaults to the image's name.

curl -X POST https://api.masko.ai/v1/mascots/MASCOT_ID/interactive \
  -H "Authorization: Bearer $MASKO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_asset_id": "SOURCE_IMAGE_ID",
    "kind": "cursor-follower",
    "name": "Website cursor follower"
  }'

The 202 response has data.job_id, asset_id, asset_ids.interactive, variant_id, estimated_cost and poll_url. Poll GET /v1/jobs/JOB_ID?api_version=2026-09-26 until completed (jobs and polling); resending charges a new set.

The job type is interactive_generation; the set is an interactive asset with one interactive_frame asset per direction.

Get the hosted images

With hosting on, GET /v1/mascots/MASCOT_ID/cdn-export lists complete followers under interactions:

{
  "interactions": [
    {
      "version": 1,
      "id": "INTERACTION_ID",
      "name": "Website cursor follower",
      "kind": "cursor-follower",
      "width": 1024,
      "height": 1024,
      "manifest_url": "https://assets.masko.ai/.../manifest.json",
      "frames": {
        "up-left": "https://assets.masko.ai/.../up-left.webp",
        "up": "https://assets.masko.ai/.../up.webp",
        "up-right": "https://assets.masko.ai/.../up-right.webp",
        "left": "https://assets.masko.ai/.../left.webp",
        "center": "https://assets.masko.ai/.../center.webp",
        "right": "https://assets.masko.ai/.../right.webp",
        "down-left": "https://assets.masko.ai/.../down-left.webp",
        "down": "https://assets.masko.ai/.../down.webp",
        "down-right": "https://assets.masko.ai/.../down-right.webp"
      }
    }
  ]
}

Frames are lossless 1024 × 1024 WebP on https://assets.masko.ai, with links that never expire. A pose can have several followers, so pick yours by id; for one made before hosting was on, choose Update links in Get Links.

Put it on your website

The Follow cursor package (follow-cursor.zip) needs no API key or Masko connection:

FileWhat it is
frames/*.webpThe nine directions, lossless WebP
originals/*.pngThe original 1024 × 1024 PNGs
cursor-follower.jsThe script, with no dependencies
cursor-follower.d.tsTypeScript types
CursorFollower.tsxReact component
preview.htmlTest page: open it and move your cursor

Resize the 1024-pixel images to the displayed size to keep the page light.

<div id="mascot"></div>
<script type="module">
  import { mountCursorFollower } from './cursor-follower.js';

  const directions = ['up-left', 'up', 'up-right', 'left', 'center',
    'right', 'down-left', 'down', 'down-right'];

  mountCursorFollower(document.querySelector('#mascot'), {
    frames: Object.fromEntries(
      directions.map((d) => [d, `/mascot/frames/${d}.webp`])
    ),
    size: 240,
    label: 'Ko, our mascot'
  });
</script>

mountCursorFollower(container, options) takes frames (nine image URLs), optional size (64 to 640 pixels) and optional label (alt text). It returns:

  • setDirection(direction), such as 'up-left';
  • setTracking(enabled), to pause or resume tracking;
  • destroy(), to remove the mascot and its listeners.

For example, look away while a password is typed:

const mascot = mountCursorFollower(element, { frames });

password.addEventListener('focus', () => {
  mascot.setTracking(false);
  mascot.setDirection('up-left');
});
password.addEventListener('blur', () => mascot.setTracking(true));

On phones, tablets and with reduced motion, the mascot looks straight at the visitor, though setDirection still works. For reactions to clicks and app events, build a canvas.