Skip to main content
LemonSlice avatars always have natural, expressive hand gestures when they speak. Character World Model 1 includes a built-in emotion engine that decides what the character does and feels. Use a preset to give the avatar a more life-like presence, or trigger specific actions and emotions programmatically.
CWM-1 is available to users on Ultra and Enterprise tiers. See pricing.
Looping CWM-1 examples: any character, whole-body motion, collar adjustments, and hair interactions
There are three ways to use actions and emotions, from fully automatic to fully manual.

1. Action Machine (automatic)

Get the full power of actions with no custom logic required. LemonSlice automatically selects and triggers contextually appropriate actions based on the conversation state. Set model and action_engine when creating a session:

Enrich the Action Machine with user state (LiveKit only)

By default, the Action Machine knows two avatar states: IDLING and RESPONDING. You can unlock a third state, LISTENING, by publishing the user’s speech state from your agent code (e.g., agent.py). This lets the avatar react naturally while the user is speaking.

2. LiveKit data messages (manual, lowest latency)

Trigger actions yourself with full control over timing. LiveKit data messages are approximately 250 ms faster than the REST control endpoint, making them the recommended option for LiveKit users. Set model to "cwm-1" when creating a session:
Publish a data message with topic ls.action and a JSON payload containing the action name from the available actions table:

3. Control endpoint (manual, any integration)

Use the control endpoint to trigger actions from any integration (Daily, Agora, WebSocket). If LiveKit data messages are available to you, prefer those for lower latency. Set model to "cwm-1" when creating a session:
Once the session is running, send a POST request with the action name. Replace {session_id} with your active session ID and <ACTION_NAME> with any action from the table below.
When using model="cwm-1", the arguments agent_prompt and agent_idle_prompt are ignored.

Available actions

Actions marked with ✅ work best when the avatar is silent. All other actions can be triggered at any time. Select the eye icon to watch an example.
Action NameDescriptionBest During Silence
adjust_collarAdjusts shirt collar/necklace
angryAngry expression
arms_crossedCrosses arms over chest
blow_kissBlows a kiss✅
clasp_handsClasps hands together
clear_actionEnds the current action
deep_breathTakes a slow, deep breath✅
excitedExcited expression
explainTalking gesture using hands
explain_finger_upRaises a finger to make a point
explain_palms_upTalking gesture with palms up
glance_downGlances downward
glance_down_then_rub_eyeGlances down then rubs eye
glance_rightGlances to the right
glance_side_down_sideGlances to the side then down
glance_side_upGlances to the side then up
glance_sidewaysGlances to the side
glance_upGlances upward
hands_on_hipPlaces hands on hips
hold_chinRests hand on chin
laughLaughs
lean_longSustained forward lean
lean_slowSlow, gentle lean forward
lean_strongPronounced lean forward
listenAcknowledging nods✅
looking_aroundLooks around the room
move_morePronounced body movement
move_subtleSubtle body movement
phone_callTalks on the phone
raise_eyebrowRaises an eyebrow
rub_eyeRubs one eye
rub_eye_then_touch_hairRubs eye then touches hair
shoulder_shimmyPlayful shoulder shimmy✅
smileWarm smile✅
textingTexts on the phone
tilt_head_rightTilts head✅
touch_chinTouches chin thoughtfully
touch_hairTouches or caresses hair
turn_leftTurns body to the left✅
waveWaves hello or goodbye
yawnYawns✅

Frequently Asked Questions

A manual action takes priority. Publishing ls.action, or sending an action event to the control endpoint, cancels the action the Action Machine is playing and starts yours. When your action finishes, the Action Machine resumes if action_engine is set.
Send clear_action on the same channel you use for other actions. It ends the action in progress and returns the avatar to its default behavior.LiveKit data message on topic ls.action:
Control endpoint:
Every action plays once for a fixed duration, before the avatar returns to its default state. Trigger the same action again to hold the action or expression longer.
CWM-1 plays one action at a time, so angry and arms_crossed cannot run together. Wait for the current action to finish, or send clear_action before starting the next one.
Yes, CWM-1 works with any character. Use of actions or emotions does not require any character-specific fine-tuning.