From selfie
to embed.
Create an avatar once. It then animates live in any browser, with no runtime cost.
Four steps
- Upload a selfie and confirm consent. It's kept encrypted only until you accept, then deleted.
- Approve the base: a stylized portrait, not the photo.
- Build the expressions: a QA-gated FACS set that unlocks the full emotional range. This takes a few minutes, and happens once.
- Embed anywhere in three lines. Drive it with a command, or let an agent drive it.
Creating an avatar takes a few minutes. After that it runs instantly in the browser, forever, at no cost.
Not a video. A rig.
The avatar is a set of lightweight images plus one small script. The browser turns the pages in real time — one drawing per region, hard cuts, like a flipbook — so there are no model calls while it plays. Avatars also come in a vector edition — one small SVG rig that stays crisp at any size and adds subtle head motion.
<div id="rosto"></div>
<script src="https://studio.rosto.ai/rig/avatar-rig.js?v=ced3a607"></script>
<script>
fetch("https://studio.rosto.ai/pub/PUBLIC_TOKEN/manifest.json").then(r => r.json()).then(m => {
const rig = AvatarRig.mount(document.getElementById("rosto"), m, {size: 320});
rig.direct("await"); // present and waiting
// ONE CALL PER LINE. The drive call is:
// rig.direct({ intent, say, audio, visemes })
// intents: greet · await · attend · ponder · empathize · … (AvatarRig.INTENTS)
// visemes: POST https://studio.rosto.ai/visemes -> AvatarRig.trackFromAudio(buf, units)
});
</script>Same words. Any intent.
The oldest exercise in acting: one line, read many ways. Tap an intent — the words and the voice actor never change, only what your app said the line is.
“So, about your order.”
Every reading below is the same recording session — same voice, same words. Watch the timing change: surprised waits a beat before it speaks.
rig.direct({ intent: "greet", say: "So, about your order.", audio, visemes })