diff --git a/colab/GPU.ipynb b/colab/GPU.ipynb
index caf939c44..194ba8dea 100644
--- a/colab/GPU.ipynb
+++ b/colab/GPU.ipynb
@@ -98,7 +98,7 @@
"!git clone https://github.com/Cohee1207/tts_samples\n",
"!npm install -g localtunnel\n",
"!pip install -r requirements-complete.txt\n",
- "!pip install tensorflow==2.11\n",
+ "!pip install tensorflow==2.12\n",
"\n",
"\n",
"cmd = f\"python server.py {' '.join(params)}\"\n",
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 59b67738d..9b91526c4 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -1,12 +1,13 @@
version: "3"
services:
- tavernai:
+ sillytavern:
build: ..
- container_name: tavernai
- hostname: tavernai
- image: tavernai/tavernai:latest
+ container_name: sillytavern
+ hostname: sillytavern
+ image: cohee1207/sillytavern:latest
ports:
- "8000:8000"
volumes:
- "./config:/home/node/app/config"
- restart: unless-stopped
\ No newline at end of file
+ - "./config.conf:/home/node/app/config.conf"
+ restart: unless-stopped
diff --git a/public/backgrounds/_black.jpg b/public/backgrounds/_black.jpg
new file mode 100644
index 000000000..a451bc161
Binary files /dev/null and b/public/backgrounds/_black.jpg differ
diff --git a/public/backgrounds/_white.jpg b/public/backgrounds/_white.jpg
new file mode 100644
index 000000000..a7c12e675
Binary files /dev/null and b/public/backgrounds/_white.jpg differ
diff --git a/public/scripts/openai.js b/public/scripts/openai.js
index 55fe7c3c6..19ee009ed 100644
--- a/public/scripts/openai.js
+++ b/public/scripts/openai.js
@@ -562,13 +562,19 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
const decoder = new TextDecoder();
const reader = response.body.getReader();
let getMessage = "";
+ let messageBuffer = "";
while (true) {
const { done, value } = await reader.read();
let response = decoder.decode(value);
tryParseStreamingError(response);
-
- let eventList = response.split("\n");
+
+ // ReadableStream's buffer is not guaranteed to contain full SSE messages as they arrive in chunks
+ // We need to buffer chunks until we have one or more full messages (separated by double newlines)
+ messageBuffer += response;
+ let eventList = messageBuffer.split("\n\n");
+ // Last element will be an empty string or a leftover partial message
+ messageBuffer = eventList.pop();
for (let event of eventList) {
if (!event.startsWith("data"))
diff --git a/readme.md b/readme.md
index 8e0caa8f3..01d07057f 100644
--- a/readme.md
+++ b/readme.md
@@ -65,6 +65,8 @@ Get in touch with the developers directly:
* Character emotional expressions
* 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)
## UI Extensions 🚀
@@ -76,6 +78,8 @@ Get in touch with the developers directly:
| D&D Dice | A set of 7 classic D&D dice for all your dice rolling needs.
*I used to roll the dice.
Feel the fear in my enemies' eyes* | None |
|
| Author's Note | Built-in extension that allows you to append notes that will be added to the context and steer the story and character in a specific direction. Because it's sent after the character description, it has a lot of weight. Thanks Aliážµ#2222 for pitching the idea! | None |  |
| Character Backgrounds | Built-in extension to assign unique backgrounds to specific chats or groups. | None |
|
+| Stable Diffusion | Use local of cloud-based Stable Diffusion webUI API to generate images. 5 presets included ('you', 'your face', 'me', 'the story', and 'the last message'. Free mode also supported via `/sd (anything_here_)` command in the chat input bar. Most common StableDiffusion generation settings are customizable within the SillyTavern UI. | None |
|
+| Text-to-Speech | AI-generated voice will read back character messages on demand, or automatically read new messages they arrive. Supports ElevenLabs, Silero, and your device's TTS service. | None |
|
## UI/CSS/Quality of Life tweaks by RossAscends