The eight expressions
The Live page's collapsed Expression section (or keys 1–8 while the Live page is focused) switches the face:
| Key | Expression | API name |
|---|---|---|
| 1 | Neutral | neutral |
| 2 | Smile | smile |
| 3 | Shy | shy |
| 4 | Surprised | surprise |
| 5 | Half-lidded | halfLidded |
| 6 | Angry | angry |
| 7 | Sad | sad |
| 8 | Wink | wink |
An expression is layered over tracking: blinking, gaze and the mouth keep following the camera and microphone, while eyes, brows and blush hold the expression. Switching fades smoothly, and expressions reach the stream view even without camera or microphone. Brows hidden under bangs show less difference between half-lidded, angry and sad.
Expressions need their drawn variants (sad/surprised eyes, angry/sad closed mouths) to look their best — see step 4 of the creation guide.
Switch expressions while OBS is in front
Browser hotkeys only fire on the focused page. To switch while another app is in front, send a request to the development server (open Expression → Switch from other apps on the Live page for your URL and token):
curl -X POST http://127.0.0.1:5173/__live/expression -H "X-Studio-Token: <token>" -H "Content-Type: application/json" -d '{"expression": "smile"}'
- Stream Deck: use a plugin action that sends web requests in the background — POST, same URL, header and JSON body, one button per expression. (The built-in "Website" action opens a tab instead and does not work.)
- macOS Shortcuts: a Run Shell Script action with the same curl, then Add Keyboard Shortcut. These go through the Services menu and do not fire in every app — for keys that work anywhere use Raycast, Hammerspoon or a Stream Deck running the same command.
- The token lives in
projects/.expression-token; regenerate it and old shortcuts get 401. Only apps on your machine can reach the server.
Lighting: optional, off by default
Open the Lighting section (below the preview tabs, or near the bottom of the Live page) and enable it. A draggable light handle appears over the preview; the shape used for shading is inferred from your single illustration — silhouettes are rounded, the head treated as an ellipsoid, painted strokes adding shallow relief. Painted shadows in the artwork are kept.
| Control | Effect |
|---|---|
| Light height / spread | Side vs frontal light; how far it reaches |
| Intensity / ambient | Direct light vs even base light |
| Gloss / rim light | Small highlights; light along edges facing the light |
| Stroke relief | Relief taken from painted strokes (hair lines) |
| Shading: Soft or Cel | Cel is stepped, anime style |
| Drop shadow | Soft silhouette shadow opposite the light |
Eight lighting presets (Shift+1–8)
The Live page's preset slots store every lighting setting — position, colors, shading, on/off. Save a normal light in slot 1, then try a red light from below for a horror game or a sunset color in the others. Switch with a click or Shift+1–8 while the Live page is focused. Presets and current lighting are remembered per project in your browser.
Presets and expressions are independent — one does not change the other. Other apps switch presets the same way as expressions: POST /__live/lighting with {"preset": 2}.