Skip to content

For ESP32 builders · Coming soon

Expressive,
event-driven
characters.

Give your physical AI agent, desk companion or little robot a character of its own. A wave when it needs you. A celebration when the work is done. Coming to ESP32.

ESP32-S3 first. Your hardware. Your character.

Your agent is on it.
Working
01 A character on a real screen.
A reason to glance up.

ESP32-S3 display concept. Animated browser preview; hardware testing is next.

The Masko Desktop idea, on your desk

See what your agent is up to.

Masko for Mac already turns agent activity into character reactions. Here’s the idea for a physical companion: your computer runs the agent, and the little screen gives it a face.

Example session

› Refactor the sign-in flow

my-app / src / auth

Reading files and updating the sign-in flow…

Example behaviorbehavior::working

The agent is doing the work. Ko stays focused until the next event.

Desktop-to-device bridge · Planned
On it.
masko

States hold a loop. Short transition clips can connect them, for example 2–3 seconds when that suits the character. This preview switches between existing clips.

See Masko for Mac

More than a face on a screen

Make the character part of the experience.

A blacksmith works at an anvil. A robot perks up when you tap. A desk companion cheers when your focus timer ends. The same event can have a personality of its own.

01

Actions that fit your character

Create an original mascot and its animations in Masko Studio. Give “working,” “waiting” and “done” a performance that fits its world.

02

Reactions with a reason

Show progress while an agent works, greet a tap, or mark a finished task. The prototype maps commands to animations; your app decides when to send them.

03

A fit for your board

We’re working on export settings for resolution, frame rate, quality and background, with a size estimate. Start with local playback and test the fit on your screen.

How the character reaches the screen

Local files first. Connected options next.

The animations and the events are two different things. A character can live on an SD card while a connected agent tells it when to react.

Prototype · hardware testing next

Store the character. Play it locally.

Copy the converted character pack to a microSD card. The player reads the state graph and animation frames from the card, without fetching every frame from the internet.

Masko exportConverted packmicroSD cardESP32 screen

What triggers a reaction?
Computer or device event → USB command → local character reaction

The prototype accepts USB commands. Animation playback is local; a cloud-based agent can still need internet on the computer.

Example pack on the card
/masko/ko/
  mascot.json        # states, transitions and rules
  clips/
    idle.mjpk        # JPEG animation frames
    working.mjpk
    idle-working.mjpk

Illustrative filenames. The converter writes clip IDs into the real pack.

Prototype format

JSON state graph + .mjpk clips containing JPEG frames. Example settings: 233 × 233 px, 12 fps, black background.

What about transparency?

JPEG is opaque. Black gives the floating-character effect on OLED. An alpha-preserving export such as RGB565A8 + LZ4 is experimental and needs a compatible player.

The device prototype has been tested on a computer and compiled for ESP32-S3. Playback on physical hardware is the next test. Studio device-export controls, Wi-Fi sync and streaming are planned or exploratory.

For the build you have in mind

Your character. Your hardware. Your questions.

Can I use the ESP32 mascot SDK today?

The SDK is in development. Join the waitlist for early-access updates, or apply to help test character playback on your own hardware. There is no public release date yet.

Which devices are you starting with?

The first firmware target is the Waveshare ESP32-S3-Touch-AMOLED-1.75 with a microSD slot. The prototype has computer tests and a successful firmware build; playback on a physical board is the next step. Other boards need the right display driver and pin configuration. Tell us your exact board and screen when applying to test.

Can I make my own character and its actions?

Yes. Masko Studio lets you create an original mascot and its animations. Working could mean typing for one character and hammering at an anvil for another. Device export is in development, so creating the artwork and running it on an ESP32 are separate steps today.

Is it just a list of states, or can animations transition?

The prototype follows a character’s state graph, including loops, transition clips and rules. A loop can hold “working,” and a short authored clip can lead into “done.” A 2–3 second transition is an example, not a requirement. The number of states and transitions depends on your character and storage budget; this page’s demo switches directly between existing clips.

What can trigger a character reaction?

The prototype accepts behavior commands over USB and includes a touch reaction in the firmware. Your application can map events such as task started, waiting or task complete to those commands, without asking an AI model to choose every reaction. Sensor, timer, MQTT and Home Assistant events are possible integration ideas, not ready-made adapters today.

Does the SDK include an AI agent, voice or lip sync?

The device prototype handles character playback. Your application supplies the agent, event logic and any speech service. Listening, thinking and speaking are useful animation ideas, but the prototype does not include speech recognition, audio playback or automatic lip sync. Testing animation alongside audio and networking is part of the hardware work ahead.

Which animation format does the prototype use?

A local converter turns Masko clips into JPEG frames inside custom .mjpk files, with a JSON graph describing states and transitions. It currently runs on a developer’s computer with Node and ffmpeg. A guided Studio export is planned. The device player does not directly play arbitrary MP4, WebM or GIF files.

Will the background be transparent?

The current JPEG export is opaque, with the character placed on black. On an OLED, black can make it look like the character floats on the screen, but it is not transparency. A selectable background color is planned. True alpha options such as RGB565A8 with LZ4 compression remain experimental and need a compatible player.

How much storage will a character need?

It depends on resolution, frame rate, clip length, visual detail and the number of states and transitions. One measured Ko export was about 44 MB at 233 × 233 pixels and 12 fps. That is a pack-size example, not a RAM requirement or a size promise for every character. Planned export controls will help compare quality and total size before downloading.

Do animations need an internet connection?

The prototype reads converted animation packs from a microSD card and accepts events over USB. The animations play locally; a cloud-based agent can still need internet on the computer. Download-and-cache over Wi-Fi is a proposed next step. Continuous frame streaming is exploratory, with no implementation or performance benchmark yet.

Can I add this to Muse Gadgets or my existing firmware?

That needs an integration with the firmware’s events, display and media player. Masko packs are not a drop-in format for every gadget. Muse compatibility and other ready-made integrations have not been validated. Include your firmware or agent stack in the tester application so we can understand what you want to connect.

Will I need a subscription?

Device SDK pricing and licensing have not been announced. Local playback in the prototype uses files stored on the card rather than a continuous animation stream. Creating assets in Masko and using any external AI or voice services have their own costs. Joining this waitlist does not start a paid plan.

Are you selling the device in the preview?

The ESP32-style board is a concept illustration showing the character on a screen. This is early access to software and an SDK. You bring your own hardware.

What would SDK testing involve?

Share your exact board, screen, firmware and project idea. Selected testers will try playback and event reactions, check frame rate, storage and setup, and report what gets in the way. We also want to learn how animation behaves alongside audio and network activity. Paul will contact selected testers with next steps; no SDK download is promised immediately after signup.