Migrate from ElevenLabs
Move from voice agents to animated avatar experiences.
Why migrate?
ElevenLabs Agents excel at voice conversation. Liforma extends that model with real-time avatar animation, richer experiences (worlds, state, tools), and a browser-native character runtime — while offering a familiar API for teams already shipping voice agents.
What maps cleanly
Conversation.startSession→Experience.startSessionagentId→experienceIdonMessage/onModeChange→experience.on('message')/on('modeChange')endSession()→end()elevenlabs-convai→liforma-convaiorliforma-experience
What changes
- You think in Experiences, not agents — characters, worlds, and state are first-class
- Sessions are minted via a Session Manifest, not a thin conversation token
- Transport and runtime details are hidden inside the SDK
- Public embeds use
experienceId+ origin allowlists — no signed URL required
What Liforma adds
- Real-time lip-sync and facial animation
- Multi-character and world/state models
- Tools and structured session state
- Hosted player and iframe options
Compatibility package
For incremental migration, use the ElevenLabs-shaped compatibility layer:
npm install @liforma/elevenlabs-compatible Before (ElevenLabs)
import { Conversation } from '@elevenlabs/client';
const conversation = await Conversation.startSession({
agentId: 'J3Pbu5gP6NNKBscdCdwB'
}); After (Liforma compat)
import { Conversation } from '@liforma/elevenlabs-compatible';
const conversation = await Conversation.startSession({
agentId: 'YOUR_AGENT_ID'
});
await conversation.attach({ container: '#avatar' }); Web component
<script src="https://cdn.liforma.ai/sdk/v1/client.js"><\/script>
<liforma-convai agent-id="YOUR_AGENT_ID"></liforma-convai> API mapping
| ElevenLabs | Liforma |
|---|---|
Conversation | Experience (via compat layer or native SDK) |
agentId | experienceId |
conversationToken | Session Manifest / sessionToken |
onMessage | on('message') |
onModeChange | on('modeChange') |
endSession() | end() |
elevenlabs-convai | liforma-convai / liforma-experience |
Recommended native path
For new projects, use the native Liforma API — simpler, and unlocks avatar animation from day one:
<script>
import { LiformaExperience } from '@liforma/client/svelte';
<\/script>
<LiformaExperience experienceId="exp_01DEMO1SPANISHCAFE" /> The compat package is for brownfield migrations. Greenfield integrations should start with Quick Start.