Skip to content

GetBeholder/Beholder-ST

Repository files navigation

Beholder

test License: AGPL v3

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.


Requirements

  • 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.

Install

  1. In SillyTavern: Extensions → Install extension.
  2. Paste the repo URL: https://github.com/GetBeholder/Beholder-ST
  3. Enable it — a floating panel appears in the chat.

Setup

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.

Configuration

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.

Tests

node --test 'test/*.test.js'

License

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.


getbeholder.com

Issues & feedback — GitHub Issues, the Beholder thread on the SillyTavern Discord, or DM @getbeholder.

About

SillyTavern extension that tracks each character's physical state (worn clothing per body slot, held items, wounds, species) during roleplay via a small local extractor model, and injects it back into the prompt so the model stops forgetting.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors