Director Notes is in beta. Behavior, supported presets, cues, and provider support may change as we continue tuning it.
Styles
A style is the avatar’s baseline direction for the session. It controls the general expression, energy, gaze, and movement style the avatar returns to between cues. Set a style when you create the session token:expressivity is optional. If you omit it, Anam uses the recommended default for the selected style.
Director Notes require a Cara 4 avatar. Set
avatarModel to cara-4 when you need predictable model behavior. Older avatar models ignore Director Notes configuration.Preset styles
UsepresetStyle when one of the supported public styles matches the role you are building. Omit presetStyle for the default neutral behavior.
Custom styles
UsecustomStylePrompt to provide your own short performance direction.
presetStyle or customStylePrompt, not both.
Expressivity
expressivity is a 0 to 1 dial that controls how strongly the avatar follows the active style or cue.
Higher expressivity makes the avatar follow the selected style or current cue more strongly. It also increases movement, including speech-driven articulation such as mouth movement and head motion.
Start with the default by omitting expressivity, or set 0.5 when you want to be explicit. Increase it when you want a stronger performance, and lower it when you want steadier, more restrained motion. Very high values can look exaggerated or unstable.
Cues
Cues temporarily override the baseline style for the current persona speech turn. Use inline cue tags when Anam receives the persona’s speech text, including Turnkey sessions and text passed totalk() or createTalkMessageStream():
Cue support is best effort. When both the TTS provider and avatar model support a cue, it is applied to both voice and avatar direction. For voice changes to follow the same inline tags, use an expressive, tag-capable voice such as a Cartesia Sonic 3.5 voice. If a provider does not support a cue, that side ignores it. For example, a cue may affect the avatar while being ignored by ElevenLabs TTS, or it may affect Cartesia TTS while the avatar falls back to the baseline style.
Anam strips recognized inline cue tags from transcript and other client-visible text output to keep captions and logs clean. The tags still guide voice and avatar direction, and they are not intended to be spoken aloud by the avatar. With JavaScript SDK version 4.20.0 or later, use Director Notes cue events to detect when a cue is applied without parsing transcript text.
Send cues over the data channel
Use data-channel cue messages when Anam does not receive the persona’s speech text, such as in audio passthrough sessions where your own TTS provider generates the audio. Turnkey sessions should continue to generate cues inline in the persona speech text, either through your prompt or the Dynamic toggle in Lab. After the streaming session is connected, send adirector_note_cue message over the WebRTC data channel:
"happy", not "[happy]".
If you are not using the JavaScript SDK, send the same JSON payload over the session WebRTC data channel.
Timing options
Include one timing field for clear intent:number
Absolute offset, in seconds, from the start of the current persona speech turn. Use this when your TTS provider gives word or audio timing data. If your TTS provider returns timing for the cue tag, use the tag’s timestamp. If it only returns timing for spoken words, use the timestamp of the word immediately after the tag. If no persona turn is active yet, Anam can queue the cue briefly for the next turn.
number
Relative delay, in seconds, from when Anam receives the cue. Use this for immediate or near-immediate changes during an active persona speech turn. If no turn is active, Anam rejects the cue.
in_seconds: 0, but sending the timing field explicitly is clearer.
Timing values must be finite and non-negative. Invalid messages, unknown tags, empty tags, and tags longer than 64 characters are dropped.
For audio passthrough, prefer at_seconds when you can align cues to your generated audio:
in_seconds when the cue should apply relative to the current moment in an active response:
Dynamic in Lab
In Anam Lab, the Dynamic toggle is on by default for new personas. Existing personas keep their saved Dynamic state when you open them. When Dynamic is enabled, Lab appends this hidden# STYLE CUES section to the persona system prompt; it does not edit the visible prompt.
This is the current Lab prompt section:
Prompting an LLM to use cues
If your LLM writes the avatar’s responses, add a short instruction to the system prompt:Limitations
- Director Notes require a Cara 4 avatar.
- Preset and cue behavior may change as we continue tuning the model.
- Director Notes guide performance style; they do not provide deterministic gesture, gaze, or pose control.
- Custom styles are experimental and may be followed less consistently than presets.
- Cues only apply within the turn where they appear. Use
directorNotes.presetStyleordirectorNotes.customStylePromptfor persistent session behavior. - Data-channel cue messages are mainly for audio passthrough sessions. In Turnkey sessions, prefer inline cue tags in the persona speech text.
- TTS cue support varies by provider and voice. Use an expressive voice with inline tag support when you want cue tags to affect the voice as well as the avatar.
- Very high expressivity can make motion look exaggerated or unstable. Start with the default and adjust gradually.

