* set isForced to true on input * make floating auto-complete follow horizontal scrolling * add callable closure vars * changes to /let and /var for callable closures * fix error message * fix scope for closure arguments * if should return the pipe result from closures * use /run to call closures and no arguments on immediate closures * throw exception from QRs window-function if no match * when to show autocomplete vs info only * autocomplete positioning * autocomplete styling * add theming to autocomplete (theme, dark, light) * improve autocomplete show/hide logic and editor selection * use blur tint color instead of chat tint color and use blur setting * cleanup and docs * use scope macros for QR args * add enter to select autocomplete * fix no executor found * cleanup and comment * fix alias list in help string * fallback to empty string piped value if null or undefined * fix typo * blur textarea on ctrl+enter execute (and refocus after) * stop executeSlashCommand if parser throws * move /let and /var callbacks into functions * switch textarea to monospace when value starts with slash * add double pipe a pipe breaker * fix /? slash * remove some logging * add "/:name" as shorthand for "/run name" after all * move shit around * fix error message * use testRunShorthandEnd * use parseQuotedValue and parseValue to determine name for "/:" QR labels and set names can include spaces * add some adjustments to make autocomplete work properly some hint in there about "/:" would still be nice * add autocomplete style selector * only strip quotes from subcommand if they are at both ends * fix JSDoc * escaping * allow open quotes on dry run * throwing shit at the wall for /: autocomplete * escapes only for symbols * clean up autocomplete * improve performance * fix scope macros * remove unescaping of pipes * fix macros in scope copy * fix "/? slash" * don't run parser for getNameAt if text has not changed * fix options filter * re-enable blur listener * restore selection on non-replace select * fix for escaping first character of value * add support for {{pipe}} and {{var::}} closures * add index support to var macro * add scoped var macro to macro help * more escape fixes * reduce autocomplete render debounce * cleanup * restore old escape handling and parser flag for strict escaping * fix "no match" autocomplete message * add dummy commands for comments and parser flag * fix type annotations * somewhat safer macro replacements * fix autocomplete select on blank / "no match" * fix cutting off handled part in substitution * add parser flag REPLACE_GETVAR Replaces all {{getvar::}} and {{getglobalvar::}} macros with {{var::}}. Inserts a series of command executors before the command with the macros that: - save {{pipe}} to a var - call /getvar or /getglobalvar to get the variable used in the macro - call /let to save the retrieved variable - return the saved {{pipe}} value This helps to avoid double-substitutions when the var values contain text that could be interpreted as macros. * remove old parser * fix send on enter when no match * deal with pipes in quoted values (loose escaping) * add default parser flags to user settings * allow quoted values in unnamed argument * set parser flag without explicit state to "on" * add click hint on parser error toast * dirty more detailed cmd defs * remove name from unnamed arg * move autocomplete into class and floating with details * replace jQuery's trigger('input') on #send_textarea with native events because jQuery does not dispatch the native event * fix ctrl+space * fix arrow navigation * add comments * fix pointer block * add static fromProps * fix up dummy commands * migrate all commands to addCommandObject * remove commented comment command * fix alias in details * add range as argument type * switch to addCommandObject * switch to addCommandObject * fix height * fix floating details position on left * re-enable blur event * use auto width for full details on floating autocomplete * auto-size floating full details * fix typo * re-enable blur listener * don't prevent enter when selected item is fully typed out * add autocomplete details tooltips * add language to slash command examples * move makeItem into option and command and fix click select * use autocomplete parts in /? slash * fix alias formatting * add language to slash command examples * fix details position on initial input history * small screen styles * replace registerSlashCommand with detailed declarations * put name on first line * add missing returns * fix missing comma * fix alias display in autocomplete list * remove args from help string * move parser settings to its own section * jsdoc * hljs stscript lang * add hljs to autocomplete help examples * add missing import * apply autocomplete colors to stscript codeblocks (hljs) * add fromProps * cache autocomplete elements * towards generic autocomplete * remove unused imports * fix blanks * add return types * re-enable blur * fix blank check * Caption messages by id * add aborting command execution * fix return type * fix chat input font reset * add slash command progress indicator * add missing return * mark registerSlashCommand deprecated * why?? * separate abort logic for commands * remove parsing of quoted values from unnamed arg * add adjustable autocomplete width * revert stop button pulse * add progress and pause/abort to QR editor * add resize event on autocomplete width change * add key= argument to all get vars * refactoring * introduce NamedArgumentAsignment * add TODOs * refactoring * record start and end of named arg assignment * refactoring * prevent duplicate calls to show * refactoring * remove macro ac * add secondary autocomplete and enum descriptions * add syntax highlighting to QR editor * add enum descriptions to /while * add /let key=... to scope variable names * add unnamed argument assignment class and unnamed argument splitting * fix QR editor style * remove dash before autocomplete help text * add autocomplete for unnamed enums * fix remaining dom after holding backslash * fix for unnamed enums * fix autocomplete for /parser-flag * add parser-flag enum help * fix type annotations * fix autocomplete result for /: * add colored autocomplete type icons * collapse second line autocomplete help if empty * mark optional named args in autocomplete * fix when what * remove duplicate debug buttons * dispatch input on autocomplete select * prevent grow from editor syntax layer * add auto-adjust qr editor caret color * remove text-shadow from autocomplete * join value strings in /let and /var * add /abort syntax highlight * fix attempting secondary result when there is none * rename settings headers and split autocomplete / stscript * add parser flag tooltips * add tooltips to chat width stops * fix typo * return clone of help item * fix enum string * don't make optional notice for autocomplete arguments smaller * avoid scrollbar in chat input * add rudimentary macro autocomplete * strip macro from helptext * finally remove closure delimiters around root * cleanup * fix index stuff for removed closure delimiters * fix type hint * add child commands to progress indicator * include sub-separator in macro autocomplete * remove all mentions of interruptsGeneration and purge * remove unused imports * fix syntax highlight with newline at end of input * cleanup select pointer events * coalesce onProgress call * add regex to STscript syntax highlighting * fix closure end * fix autocomplete type icon alignment * adjustments for small screens * fix removing wrong element * add missing "at=" arg to /sys, /comment, /sendas * add font scale setting for autocomplete * add target=_blank for parser flag links * fix for searching enums * remove REGEXP_MODE from hljs just causes trouble * fix autocomplete in closures * fix typo * fix type hint * Get rid of scroll bar on load * Add type hint for /send name argument. Fix 'at' types * Add 'negative' arg hint to /sd command * reenable blur event * Allow /summarize to process any text * Compact layout of script toggles * Expand CSS by default * fix double ranger indicator and adjust to narrow container * make custom css input fill available vertical space * reduce scroll lag * use default cursor on scrollbar * Clean-up module loading in index.html * fix tab indent with hljs --------- Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>
Mobile-friendly layout, Multi-API (KoboldAI/CPP, Horde, NovelAI, Ooba, OpenAI, OpenRouter, Claude, Scale), VN-like Waifu Mode, Stable Diffusion, TTS, WorldInfo (lorebooks), customizable UI, auto-translate, and more prompt options than you'd ever want or need + ability to install third-party extensions.
Based on a fork of TavernAI 1.2.8
Important news!
-
We have created a Documentation website to answer most of your questions and help you get started.
-
Missing extensions after the update? Since the 1.10.6 release version, most of the previously built-in extensions have been converted to downloadable add-ons. You can download them via the built-in "Download Extensions and Assets" menu in the extensions panel (stacked blocks icon in the top bar).
-
Unsupported platform: android arm LEtime-web. 32-bit Android requires an external dependency that can't be installed with npm. Use the following command to install it:
pkg install esbuild
. Then run the usual installation steps.
Brought to you by Cohee, RossAscends, and the SillyTavern community
What is SillyTavern or TavernAI?
SillyTavern is a user interface you can install on your computer (and Android phones) that allows you to interact with text generation AIs and chat/roleplay with characters you or the community create.
SillyTavern is a fork of TavernAI 1.2.8 which is under more active development and has added many major features. At this point, they can be thought of as completely independent programs.
Screenshots
Branches
SillyTavern is being developed using a two-branch system to ensure a smooth experience for all users.
- release -🌟 Recommended for most users. This is the most stable and recommended branch, updated only when major releases are pushed. It's suitable for the majority of users.
- staging - ⚠️ Not recommended for casual use. This branch has the latest features, but be cautious as it may break at any time. Only for power users and enthusiasts.
If you're not familiar with using the git CLI or don't understand what a branch is, don't worry! The release branch is always the preferable option for you.
What do I need other than SillyTavern?
On its own SillyTavern is useless, as it's just a user interface. You have to have access to an AI system backend that can act as the roleplay character. There are various supported backends: OpenAPI API (GPT), KoboldAI (either running locally or on Google Colab), and more. You can read more about this in the FAQ.
Do I need a powerful PC to run SillyTavern?
Since SillyTavern is only a user interface, it has tiny hardware requirements, it will run on anything. It's the AI system backend that needs to be powerful.
Questions or suggestions?
We now have a community Discord server
Join our Discord community! Get support, share favorite characters and prompts. |
---|
Or get in touch with the developers directly:
- Discord: cohee or rossascends
- Reddit: /u/RossAscends or /u/sillylossy
- Post a GitHub issue
This version includes
- A heavily modified TavernAI 1.2.8 (more than 50% of code rewritten or optimized)
- Swipes
- Group chats: multi-bot rooms for characters to talk to you or each other
- Chat checkpoints / branching
- Advanced KoboldAI / TextGen generation settings with a lot of community-made presets
- World Info support: create rich lore or save tokens on your character card
- OpenRouter connection for various APIs (Claude, GPT-4/3.5 and more)
- Oobabooga's TextGen WebUI API connection
- AI Horde connection
- Prompt generation formatting tweaking
Extensions
SillyTavern has extensibility support, with some additional AI modules hosted via SillyTavern Extras API
- Author's Note / Character Bias
- Character emotional expressions (sprites)
- Auto-Summary of the chat history
- Sending images to chat, and the AI interpreting the content
- Stable Diffusion image generation (5 chat-related presets plus 'free mode')
- Text-to-speech for AI response messages (via ElevenLabs, Silero, or the OS's System TTS)
A full list of included extensions and tutorials on how to use them can be found in the Docs.
UI/CSS/Quality of Life tweaks by RossAscends
-
Mobile UI optimized for iOS, and supports saving a shortcut to the home screen and opening in fullscreen mode.
-
HotKeys
- Up = Edit last message in chat
- Ctrl+Up = Edit last USER message in chat
- Left = swipe left
- Right = swipe right (NOTE: swipe hotkeys are disabled when the chat bar has something typed into it)
- Ctrl+Left = view locally stored variables (in the browser console window)
- Enter (with chat bar selected) = send your message to AI
- Ctrl+Enter = Regenerate the last AI response
-
User Name Changes and Character Deletion no longer force the page to refresh.
-
Toggle option to automatically connect to API on page load.
-
Toggle option to automatically load the most recently viewed character on page load.
-
Better Token Counter - works on unsaved characters, and shows both permanent and temporary tokens.
-
Better Past Chats View
- New Chat filenames are saved in a readable format of "(character) - (when it was created)"
- Chat preview increased from 40 characters to 300.
- Multiple options for characters list sorting (by name, creation date, chat sizes).
-
By default the left and right settings panel will close when you click away from it.
-
Clicking the Lock on the nav panel will hold the panel open, and this setting be remembered across sessions.
-
Nav panel status of open or closed will also be saved across sessions.
-
Customizable chat UI:
- Play a sound when a new message arrives
- Switch between round or rectangle avatar styles
- Have a wider chat window on the desktop
- Optional semi-transparent glass-like panels
- Customizable page colors for 'main text', 'quoted text', and 'italics text'.
- Customizable UI background color and blur amount
⌛ Installation
[!WARNING]
- DO NOT INSTALL INTO ANY WINDOWS CONTROLLED FOLDER (Program Files, System32, etc).
- DO NOT RUN START.BAT WITH ADMIN PERMISSIONS
- INSTALLATION ON WINDOWS 7 IS IMPOSSIBLE AS IT CAN NOT RUN NODEJS 18.16
🪟 Windows
Installing via Git
- Install NodeJS (latest LTS version is recommended)
- Install Git for Windows
- Open Windows Explorer (
Win+E
) - Browse to or Create a folder that is not controlled or monitored by Windows. (ex: C:\MySpecialFolder)
- Open a Command Prompt inside that folder by clicking in the 'Address Bar' at the top, typing
cmd
, and pressing Enter. - Once the black box (Command Prompt) pops up, type ONE of the following into it and press Enter:
-
for Release Branch:
git clone https://github.com/SillyTavern/SillyTavern -b release
-
for Staging Branch:
git clone https://github.com/SillyTavern/SillyTavern -b staging
- Once everything is cloned, double-click
Start.bat
to make NodeJS install its requirements. - The server will then start, and SillyTavern will pop up in your browser.
- Once everything is cloned, double-click
Installing via SillyTavern Launcher
- Install Git for Windows
- Open Windows Explorer (
Win+E
) and make or choose a folder where you wanna install the launcher to - Open a Command Prompt inside that folder by clicking in the 'Address Bar' at the top, typing
cmd
, and pressing Enter. - When you see a black box, insert the following command:
git clone https://github.com/SillyTavern/SillyTavern-Launcher.git
- Double-click on
installer.bat
and choose what you wanna install - After installation double-click on
launcher.bat
Installing via GitHub Desktop
(This allows git usage only in GitHub Desktop, if you want to use git
on the command line too, you also need to install Git for Windows)
- Install NodeJS (latest LTS version is recommended)
- Install GitHub Desktop
- After installing GitHub Desktop, click on
Clone a repository from the internet....
(Note: You do NOT need to create a GitHub account for this step) - On the menu, click the URL tab, enter this URL
https://github.com/SillyTavern/SillyTavern
, and click Clone. You can change the Local path to change where SillyTavern is going to be downloaded. - To open SillyTavern, use Windows Explorer to browse into the folder where you cloned the repository. By default, the repository will be cloned here:
C:\Users\[Your Windows Username]\Documents\GitHub\SillyTavern
- Double-click on the
start.bat
file. (Note: the.bat
part of the file name might be hidden by your OS, in that case, it will look like a file called "Start
". This is what you double-click to run SillyTavern) - After double-clicking, a large black command console window should open and SillyTavern will begin to install what it needs to operate.
- After the installation process, if everything is working, the command console window should look like this and a SillyTavern tab should be open in your browser:
- Connect to any of the supported APIs and start chatting!
🐧 Linux & 🍎 MacOS
For MacOS / Linux all of these will be done in a Terminal.
- Install git and nodeJS (the method for doing this will vary depending on your OS)
- Clone the repo
- for Release Branch:
git clone https://github.com/SillyTavern/SillyTavern -b release
- for Staging Branch:
git clone https://github.com/SillyTavern/SillyTavern -b staging
cd SillyTavern
to navigate into the install folder.- Run the
start.sh
script with one of these commands:
./start.sh
bash start.sh
Installing via SillyTavern Launcher
For Linux users
- Open your favorite terminal and install git
- Download Sillytavern Launcher with:
git clone https://github.com/SillyTavern/SillyTavern-Launcher.git
- Navigate to the SillyTavern-Launcher with:
cd SillyTavern-Launcher
- Start the install launcher with:
chmod +x install.sh && ./install.sh
and choose what you wanna install - After installation start the launcher with:
chmod +x launcher.sh && ./launcher.sh
For Mac users
- Open a terminal and install brew with:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Then install git with:
brew install git
- Download Sillytavern Launcher with:
git clone https://github.com/SillyTavern/SillyTavern-Launcher.git
- Navigate to the SillyTavern-Launcher with:
cd SillyTavern-Launcher
- Start the install launcher with:
chmod +x install.sh && ./install.sh
and choose what you wanna install - After installation start the launcher with:
chmod +x launcher.sh && ./launcher.sh
📱 Mobile - Installing via termux
[!NOTE] SillyTavern can be run natively on Android phones using Termux. Please refer to this guide by ArroganceComplex#2659:
API keys management
SillyTavern saves your API keys to a secrets.json
file in the server directory.
By default, they will not be exposed to a frontend after you enter them and reload the page.
In order to enable viewing your keys by clicking a button in the API block:
- Set the value of
allowKeysExposure
totrue
inconfig.yaml
file. - Restart the SillyTavern server.
Remote connections
Most often this is for people who want to use SillyTavern on their mobile phones while their PC runs the ST server on the same wifi network.
However, it can be used to allow remote connections from anywhere as well.
IMPORTANT: SillyTavern is a single-user program, so anyone who logs in will be able to see all characters and chats, and be able to change any settings inside the UI.
1. Managing whitelisted IPs
- Create a new text file inside your SillyTavern base install folder called
whitelist.txt
. - Open the file in a text editor, and add a list of IPs you want to be allowed to connect.
Both individual IPs and wildcard IP ranges are accepted. Examples:
192.168.0.1
192.168.0.20
or
192.168.0.*
(the above wildcard IP range will allow any device on the local network to connect)
CIDR masks are also accepted (eg. 10.0.0.0/24).
- Save the
whitelist.txt
file. - Restart your ST server.
Now devices which have the IP specified in the file will be able to connect.
Note: config.yaml
also has a whitelist
array, which you can use in the same way, but this array will be ignored if whitelist.txt
exists.
2. Getting the IP for the ST host machine
After the whitelist has been setup, you'll need the IP of the ST-hosting device.
If the ST-hosting device is on the same wifi network, you will use the ST-host's internal wifi IP:
- For Windows: windows button > type
cmd.exe
in the search bar > typeipconfig
in the console, hit Enter > look forIPv4
listing.
If you (or someone else) want to connect to your hosted ST while not being on the same network, you will need the public IP of your ST-hosting device.
- While using the ST-hosting device, access this page and look for
IPv4
. This is what you would use to connect from the remote device.
3. Connect the remote device to the ST host machine
Whatever IP you ended up with for your situation, you will put that IP address and port number into the remote device's web browser.
A typical address for an ST host on the same wifi network would look like this:
http://192.168.0.5:8000
Use http:// NOT https://
Opening your ST to all IPs
We do not recommend doing this, but you can open config.yaml
and change whitelistMode
to false
.
You must remove (or rename) whitelist.txt
in the SillyTavern base install folder if it exists.
This is usually an insecure practice, so we require you to set a username and password when you do this.
The username and password are set in config.yaml
.
After restarting your ST server, any device will be able to connect to it, regardless of their IP as long as they know the username and password.
Still Unable To Connect?
- Create an inbound/outbound firewall rule for the port found in
config.yaml
. Do NOT mistake this for port-forwarding on your router, otherwise, someone could find your chat logs and that's a big no-no. - Enable the Private Network profile type in Settings > Network and Internet > Ethernet. This is VERY important for Windows 11, otherwise, you would be unable to connect even with the aforementioned firewall rules.
Performance issues?
Try enabling the No Blur Effect (Fast UI) mode on the User settings panel.
I like your project! How do I contribute?
DO's
- Send pull requests
- Send feature suggestions and issue reports using established templates
- Read the readme file and built-in documentation before asking anything
DONT's
- Offer monetary donations
- Send bug reports without providing any context
- Ask the questions that were already answered numerous times
Where can I find the old backgrounds?
We're moving to a 100% original content only policy, so old background images have been removed from this repository.
You can find them archived here:
https://files.catbox.moe/1xevnc.zip
License and credits
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
- TAI Base by Humi: MIT
- Cohee's modifications and derived code: AGPL v3
- RossAscends' additions: AGPL v3
- Portions of CncAnon's TavernAITurbo mod: Unknown license
- kingbri's various commits and suggestions (https://github.com/bdashore3)
- city_unit's extensions and various QoL features (https://github.com/city-unit)
- StefanDanielSchwarz's various commits and bug reports (https://github.com/StefanDanielSchwarz)
- Waifu mode inspired by the work of PepperTaco (https://github.com/peppertaco/Tavern/)
- Thanks Pygmalion University for being awesome testers and suggesting cool features!
- Thanks oobabooga for compiling presets for TextGen
- KoboldAI Presets from KAI Lite: https://lite.koboldai.net/
- Noto Sans font by Google (OFL license)
- Icon theme by Font Awesome https://fontawesome.com (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- AI Horde client library by ZeldaFan0225: https://github.com/ZeldaFan0225/ai_horde
- Linux startup script by AlpinDale
- Thanks paniphons for providing a FAQ document
- 10K Discord Users Celebratory Background by @kallmeflocc
- Default content (characters and lore books) provided by @OtisAlejandro, @RossAscends and @kallmeflocc
- Korean translation by @doloroushyeonse
- k_euler_a support for Horde by https://github.com/Teashrock
- Chinese translation by @XXpE3, 中文 ISSUES 可以联系 @XXpE3