A physical-state tracker for SillyTavern roleplay — clothing (per body slot), held items, wounds, and species — kept consistent and shown as a live paper-doll.
→ What it is and why: getbeholder.com
This README is just install & setup. For what Beholder does and why, see the site.
Preview (v0.5). Usable and actively developed; not yet 1.0.
- A recent SillyTavern (staging or release).
- The Beholder extractor model, run one of two ways:
- In-browser (easiest): a WebGPU-capable browser runs the bundled model — one download, no server to manage.
- Your own endpoint: any OpenAI-compatible server (llama.cpp · KoboldCpp · vLLM · LM Studio · Ollama) running the extractor. GGUF weights: GetBeholder/Beholder-GGUF.
- In SillyTavern: Extensions → Install extension.
- Paste the repo URL:
https://github.com/GetBeholder/Beholder-ST - Enable it — a floating panel appears in the chat.
Open the Beholder panel → Settings:
- In-browser model: leave the endpoint blank and enable the local-model card (downloads the weights once, then runs on your GPU).
- Custom endpoint: paste your server's URL, e.g.
http://localhost:5077/v1, and hit Test connection.
⚡ Give the extractor its own endpoint. Don't extract on the same single-slot server that runs your RP model — each extraction evicts your RP context from the KV cache, so the next reply re-prefills everything (slow on a big chat). Use the in-browser model, or run the extractor as its own instance on its own port.
| Setting | Default | What it does |
|---|---|---|
| Endpoint | (blank) | Blank = the in-browser model. A URL = a custom OpenAI-compatible endpoint. |
| Model | ChatML |
Model name sent to a custom endpoint. |
| API key | (none) | Optional bearer token for the endpoint. |
| Inject state as | In-chat | In-chat at depth (recommended) or Don't inject (track only). |
| Injection depth | 1 |
Where the state block lands — 1 = one before the last message. |
| Endpoint concurrency | 1 |
Max parallel extraction requests. Keep 1 for a single-slot local server; raise only for one that truly parallelises (vLLM / multi-slot). |
| Validator | On | Strip structurally-unlikely state (e.g. an eyepatch worn on a hand) before it reaches the doll. |
| Inferred colours | On | Show colours the model inferred, not only ones stated verbatim. |
| Doll layout | Paired | Paper-doll layout: paired / columns / compact list. |
node --test 'test/*.test.js'The extension code in this repository is licensed under GNU AGPL-3.0-only (see LICENSE).
The trained extractor model, its adapters, datasets, validation rule set, and training pipeline are licensed separately and are not part of this repository's AGPL grant. They are not granted for commercial use without explicit permission.
Issues & feedback — GitHub Issues, the Beholder thread on the SillyTavern Discord, or DM @getbeholder.