From 1d8526849bfa6f1801da70912a875ae111c1e5af Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=CE=A6=CF=86?= <42910943+Brawlence@users.noreply.github.com>
Date: Wed, 12 Apr 2023 17:42:30 +0300
Subject: [PATCH] SD_api_pictures: Fix for metadata (#1082)
---
extensions/sd_api_pictures/README.MD | 38 ++++++++++++++++++----------
extensions/sd_api_pictures/script.py | 9 +++++--
2 files changed, 32 insertions(+), 15 deletions(-)
diff --git a/extensions/sd_api_pictures/README.MD b/extensions/sd_api_pictures/README.MD
index f1fdb5c2..cf2713de 100644
--- a/extensions/sd_api_pictures/README.MD
+++ b/extensions/sd_api_pictures/README.MD
@@ -1,38 +1,50 @@
## Description:
TL;DR: Lets the bot answer you with a picture!
-Stable Diffusion API pictures for TextGen, v.1.1.0
+Stable Diffusion API pictures for TextGen, v.1.1.1
An extension to [oobabooga's textgen-webui](https://github.com/oobabooga/text-generation-webui) allowing you to receive pics generated by [Automatic1111's SD-WebUI API](https://github.com/AUTOMATIC1111/stable-diffusion-webui)
Interface overview
-![Interface](https://raw.githubusercontent.com/Brawlence/texgen-webui-SD_api_pics/main/illust/Interface.jpg)
+![Interface](https://raw.githubusercontent.com/Brawlence/SD_api_pics/main/illust/Interface.jpg)
-Load it in the `--chat` mode with `--extension sd_api_pictures` alongside `send_pictures` (it's not really required, but completes the picture, *pun intended*).
+Load it in the `--chat` mode with `--extension sd_api_pictures` alongside `send_pictures`
+(it's not really required, but completes the picture, *pun intended*).
-The image generation is triggered either:
+
+## History
+
+Consider the version included with [oobabooga's repository](https://github.com/oobabooga/text-generation-webui/tree/main/extensions/sd_api_pictures) to be STABLE, experimental developments and untested features are pushed in [Brawlence/SD_api_pics](https://github.com/Brawlence/SD_api_pics)
+
+Lastest change:
+1.1.0 → 1.1.1 Fixed not having Auto1111's metadata in received images
+
+## Details
+
+The image generation is triggered:
- manually through the 'Force the picture response' button while in `Manual` or `Immersive/Interactive` modes OR
- automatically in `Immersive/Interactive` mode if the words `'send|main|message|me'` are followed by `'image|pic|picture|photo|snap|snapshot|selfie|meme'` in the user's prompt
-- always on in Picturebook/Adventure mode (if not currently suppressed by 'Suppress the picture response')
+- always on in `Picturebook/Adventure` mode (if not currently suppressed by 'Suppress the picture response')
## Prerequisites
One needs an available instance of Automatic1111's webui running with an `--api` flag. Ain't tested with a notebook / cloud hosted one but should be possible.
To run it locally in parallel on the same machine, specify custom `--listen-port` for either Auto1111's or ooba's webUIs.
-## Features:
-- API detection (press enter in the API box)
-- VRAM management (model shuffling)
-- Three different operation modes (manual, interactive, always-on)
-- persistent settings via settings.json
+## Features overview
+- Connection to API check (press enter in the address box)
+- [VRAM management (model shuffling)](https://github.com/Brawlence/SD_api_pics/wiki/VRAM-management-feature)
+- [Three different operation modes](https://github.com/Brawlence/SD_api_pics/wiki/Modes-of-operation) (manual, interactive, always-on)
+- User-defined persistent settings via settings.json
-The model input is modified only in the interactive mode; other two are unaffected. The output pic description is presented differently for Picture-book / Adventure mode.
+### Connection check
-Connection check (insert the Auto1111's address and press Enter):
-![API-check](https://raw.githubusercontent.com/Brawlence/texgen-webui-SD_api_pics/main/illust/API-check.gif)
+Insert the Automatic1111's WebUI address and press Enter:
+![API-check](https://raw.githubusercontent.com/Brawlence/SD_api_pics/main/illust/API-check.gif)
+Green mark confirms the ability to communicate with Auto1111's API on this address. Red cross means something's not right (the ext won't work).
### Persistents settings
diff --git a/extensions/sd_api_pictures/script.py b/extensions/sd_api_pictures/script.py
index 5eff143b..9bba3d7d 100644
--- a/extensions/sd_api_pictures/script.py
+++ b/extensions/sd_api_pictures/script.py
@@ -138,14 +138,19 @@ def get_SD_pictures(description):
visible_result = ""
for img_str in r['images']:
- image = Image.open(io.BytesIO(base64.b64decode(img_str.split(",", 1)[0])))
if params['save_img']:
+ img_data = base64.b64decode(img_str)
+
variadic = f'{date.today().strftime("%Y_%m_%d")}/{shared.character}_{int(time.time())}'
output_file = Path(f'extensions/sd_api_pictures/outputs/{variadic}.png')
output_file.parent.mkdir(parents=True, exist_ok=True)
- image.save(output_file.as_posix())
+
+ with open(output_file.as_posix(), 'wb') as f:
+ f.write(img_data)
+
visible_result = visible_result + f'\n'
else:
+ image = Image.open(io.BytesIO(base64.b64decode(img_str.split(",", 1)[0])))
# lower the resolution of received images for the chat, otherwise the log size gets out of control quickly with all the base64 values in visible history
image.thumbnail((300, 300))
buffered = io.BytesIO()