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.startSessionExperience.startSession
  • agentIdexperienceId
  • onMessage / onModeChangeexperience.on('message') / on('modeChange')
  • endSession()end()
  • elevenlabs-convailiforma-convai or liforma-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

ElevenLabsLiforma
ConversationExperience (via compat layer or native SDK)
agentIdexperienceId
conversationTokenSession Manifest / sessionToken
onMessageon('message')
onModeChangeon('modeChange')
endSession()end()
elevenlabs-convailiforma-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.