SillyTavern Character Expressions: set up sprites
Updated
Character Expressions is a built-in SillyTavern extension that shows a picture of the character matching the mood of each reply. Make one image per emotion label, named after the label (joy.png, anger.png, neutral.png), upload them in the extension panel or as a ZIP, and pick how mood is detected: a local classifier, your connected model, or manual. With UnsavedAI's API, the local classifier avoids an extra request per reply.
Try it now, free, no account neededStart a story with Mika TachibanaYour rival teammate swears she can't stand youWhat you see when it works
Each time a character replies, the extension reads the reply, decides on an emotion label, and shows the matching sprite beside the chat. A rival who has just lost a bet flips from smug to annoyed; a nervous confession shows the embarrassed sprite. In a group chat with visual novel mode on, every member's sprite stands on screen together, like a dating sim.
It is presentation only. The model never sees the image, and expressions do not change what the character writes.
Make a sprite set
The default label list has 28 emotions, from admiration and amusement through to sadness and surprise. You do not need all of them. Start with neutral plus five to eight that fit the character, then set a fallback so missing labels show something sensible.
| Label | When it shows | Sprite tip |
|---|---|---|
| neutral | Calm or unclear replies | Your default pose; make it the best image |
| joy | Laughing, delighted | Open expression, eyes engaged |
| anger | Shouting, cold fury | Change the brows and mouth, not only colour |
| embarrassment | Flustered, caught out | A blush or look away reads instantly |
| sadness | Grief, disappointment | Lowered gaze, softer posture |
| surprise | Twists, reveals | Wide eyes; good for mysteries |
- Name each file exactly after its label: joy.png, anger.png. PNG with a transparent background is safest; animated GIF and WEBP work too.
- Keep framing, size and art style identical across the set, or the character seems to jump around.
- Upload sprites one label at a time from the extension's panel, or upload a ZIP of the whole set.
- On disk they live in a folder named exactly after the character inside SillyTavern's characters data folder, so a renamed card loses its sprites until the folder matches.
Choosing how the mood is read
| Classifier | How it works | Trade-off |
|---|---|---|
| Local | A small emotion model that runs where SillyTavern runs | Free and quick; reads English best |
| LLM | Asks your connected model to pick a label | Better with subtle or non-English replies; costs a request each time |
| None | No detection; set expressions yourself | Full control, no automation |
The LLM option sends a second request after every reply. On UnsavedAI, Free writes one reply at a time, so that classification waits its turn and adds a pause before you can send again. The local classifier skips the round trip. If your story is not in English, or the local pick keeps landing on neutral, try the LLM classifier and accept the small wait. Priority's two-at-a-time limit absorbs the extra request better.
When sprites will not show
- Is the extension enabled in the Extensions panel?
- Does the folder name match the character's name exactly, including capitals and spaces?
- Do the file names match labels from the list, with no typos like happy.png for joy?
- Is there a neutral sprite or fallback for labels you did not draw?
- Did you reload after copying files in by hand?
- In a group, is visual novel mode on in user settings?
If the wrong emotion keeps appearing, look at the reply rather than the extension: long action paragraphs full of combat words read as anger even in a playful scene. Switching classifier usually fixes persistent misreads.
Characters with range worth drawing
Sprites pay off on characters whose mood swings often. Mika Tachibana swears she cannot stand you and flusters the moment you are kind, Seraphina Nyx is sweet right up to the alarming part, and Kiko Aoyama switches between stage smile and real one. If you build your own card at /chat/custom and export it for SillyTavern, the sprite folder is the last step that brings it to life.
Questions people ask
Can I use AI-generated sprites?
Yes, as long as you have the right to use the images. Generate one base pose, then vary only the face so the set stays consistent.
Do expressions work over an API like UnsavedAI's?
Yes. The local classifier never touches the API; the LLM classifier uses your connected model for one short extra request per reply.
Can one character have more than one sprite per emotion?
Recent versions allow several images for a label and pick between them. If yours does not, keep one image per label.


