diff --git a/CHANGES.md b/CHANGES.md
index 77561e0c..752111f6 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -21,6 +21,10 @@
Our focus continues to remain on an easy installation experience, and an easy user-interface. While still remaining pretty powerful, in terms of features and speed.
### Detailed changelog
+* 2.5.30 - 28 Mar 2023 - Refactor task entry config to use a generating method. Added ability for plugins to easily add to this. Removed confusing sentence from `contributing.md`
+* 2.5.30 - 28 Mar 2023 - Allow the user to undo the deletion of tasks or images, instead of showing a pop-up each time. The new `Undo` button will be present at the top of the UI. Thanks @JeLuf.
+* 2.5.30 - 28 Mar 2023 - Support saving lossless WEBP images. Thanks @ogmaresca.
+* 2.5.30 - 28 Mar 2023 - Lots of bug fixes for the UI (Read LoRA flag in metadata files, new prompt weight format with scrollwheel, fix overflow with lots of tabs, clear button in image editor, shorter filenames in download). Thanks @patriceac, @JeLuf and @ogmaresca.
* 2.5.29 - 27 Mar 2023 - Fix a bug where some non-square images would fail while inpainting with a `The size of tensor a must match size of tensor b` error.
* 2.5.29 - 27 Mar 2023 - Fix the `incorrect number of channels` error, when given a PNG image with an alpha channel in `Test Diffusers`.
* 2.5.29 - 27 Mar 2023 - Fix broken inpainting in `Test Diffusers` (beta).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 02ce6fc6..c01d489a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -42,8 +42,6 @@ or for Windows
10) Congrats, now any changes you make in your repo `ui` folder are linked to this running archive of the app and can be previewed in the browser.
11) Please update CHANGES.md in your pull requests.
-Check the `ui/frontend/build/README.md` for instructions on running and building the React code.
-
## Development environment for Installer changes
Build the Windows installer using Windows, and the Linux installer using Linux. Don't mix the two, and don't use WSL. An Ubuntu VM is fine for building the Linux installer on a Windows host.
diff --git a/scripts/on_sd_start.bat b/scripts/on_sd_start.bat
index 50bf7dbe..f95bea97 100644
--- a/scripts/on_sd_start.bat
+++ b/scripts/on_sd_start.bat
@@ -95,7 +95,7 @@ if "%ERRORLEVEL%" EQU "0" (
set PYTHONNOUSERSITE=1
set PYTHONPATH=%INSTALL_ENV_DIR%\lib\site-packages
- call python -m pip install --upgrade sdkit==1.0.59 -q || (
+ call python -m pip install --upgrade sdkit==1.0.61 -q || (
echo "Error updating sdkit"
)
)
@@ -106,7 +106,7 @@ if "%ERRORLEVEL%" EQU "0" (
set PYTHONNOUSERSITE=1
set PYTHONPATH=%INSTALL_ENV_DIR%\lib\site-packages
- call python -m pip install sdkit==1.0.59 || (
+ call python -m pip install sdkit==1.0.61 || (
echo "Error installing sdkit. Sorry about that, please try to:" & echo " 1. Run this installer again." & echo " 2. If that doesn't fix it, please try the common troubleshooting steps at https://github.com/cmdr2/stable-diffusion-ui/wiki/Troubleshooting" & echo " 3. If those steps don't help, please copy *all* the error messages in this window, and ask the community at https://discord.com/invite/u9yhsFmEkB" & echo " 4. If that doesn't solve the problem, please file an issue at https://github.com/cmdr2/stable-diffusion-ui/issues" & echo "Thanks!"
pause
exit /b
diff --git a/scripts/on_sd_start.sh b/scripts/on_sd_start.sh
index 4b725653..4f887394 100755
--- a/scripts/on_sd_start.sh
+++ b/scripts/on_sd_start.sh
@@ -103,7 +103,7 @@ if python ../scripts/check_modules.py sdkit sdkit.models ldm transformers numpy
export PYTHONNOUSERSITE=1
export PYTHONPATH="$INSTALL_ENV_DIR/lib/python3.8/site-packages"
- python -m pip install --upgrade sdkit==1.0.59 -q
+ python -m pip install --upgrade sdkit==1.0.61 -q
fi
else
echo "Installing sdkit: https://pypi.org/project/sdkit/"
@@ -111,7 +111,7 @@ else
export PYTHONNOUSERSITE=1
export PYTHONPATH="$INSTALL_ENV_DIR/lib/python3.8/site-packages"
- if python -m pip install sdkit==1.0.59 ; then
+ if python -m pip install sdkit==1.0.61 ; then
echo "Installed."
else
fail "sdkit install failed"
diff --git a/ui/easydiffusion/renderer.py b/ui/easydiffusion/renderer.py
index fd8b7f7a..8270d232 100644
--- a/ui/easydiffusion/renderer.py
+++ b/ui/easydiffusion/renderer.py
@@ -147,7 +147,7 @@ def filter_images(task_data: TaskData, images: list, user_stopped):
def construct_response(images: list, seeds: list, task_data: TaskData, base_seed: int):
return [
ResponseImage(
- data=img_to_base64_str(img, task_data.output_format, task_data.output_quality),
+ data=img_to_base64_str(img, task_data.output_format, task_data.output_quality, task_data.output_lossless),
seed=seed,
)
for img, seed in zip(images, seeds)
diff --git a/ui/easydiffusion/types.py b/ui/easydiffusion/types.py
index ebacc864..bbec0afa 100644
--- a/ui/easydiffusion/types.py
+++ b/ui/easydiffusion/types.py
@@ -43,6 +43,7 @@ class TaskData(BaseModel):
block_nsfw: bool = False
output_format: str = "jpeg" # or "png" or "webp"
output_quality: int = 75
+ output_lossless: bool = False
metadata_output_format: str = "txt" # or "json"
stream_image_progress: bool = False
stream_image_progress_interval: int = 5
diff --git a/ui/easydiffusion/utils/save_utils.py b/ui/easydiffusion/utils/save_utils.py
index d571d1b8..950f04b0 100644
--- a/ui/easydiffusion/utils/save_utils.py
+++ b/ui/easydiffusion/utils/save_utils.py
@@ -45,15 +45,18 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR
file_name=make_filename,
output_format=task_data.output_format,
output_quality=task_data.output_quality,
+ output_lossless=task_data.output_lossless,
)
- if task_data.metadata_output_format.lower() in ["json", "txt", "embed"]:
- save_dicts(
- metadata_entries,
- save_dir_path,
- file_name=make_filename,
- output_format=task_data.metadata_output_format,
- file_format=task_data.output_format,
- )
+ if task_data.metadata_output_format:
+ for metadata_output_format in task_data.metadata_output_format.split(','):
+ if metadata_output_format.lower() in ["json", "txt", "embed"]:
+ save_dicts(
+ metadata_entries,
+ save_dir_path,
+ file_name=make_filename,
+ output_format=metadata_output_format,
+ file_format=task_data.output_format,
+ )
else:
make_filter_filename = make_filename_callback(req, now=now, suffix="filtered")
@@ -63,6 +66,7 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR
file_name=make_filename,
output_format=task_data.output_format,
output_quality=task_data.output_quality,
+ output_lossless=task_data.output_lossless,
)
save_images(
filtered_images,
@@ -70,6 +74,7 @@ def save_images_to_disk(images: list, filtered_images: list, req: GenerateImageR
file_name=make_filter_filename,
output_format=task_data.output_format,
output_quality=task_data.output_quality,
+ output_lossless=task_data.output_lossless,
)
if task_data.metadata_output_format.lower() in ["json", "txt", "embed"]:
save_dicts(
diff --git a/ui/index.html b/ui/index.html
index 113aca52..f7dcf114 100644
--- a/ui/index.html
+++ b/ui/index.html
@@ -30,7 +30,7 @@
Easy Diffusion
- v2.5.29
+ v2.5.30
@@ -237,6 +237,9 @@
+
+
+
@@ -289,18 +292,16 @@
-
- Type a prompt and press the "Make Image" button.
You can set an "Initial Image" if you want to guide the AI.
- You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section
- and selecting the desired modifiers.
- Click "Image Settings" for additional settings like seed, image size, number of images to generate etc.
Enjoy! :)
-
-
+
+
+
+ Type a prompt and press the "Make Image" button.
You can set an "Initial Image" if you want to guide the AI.
+ You can also add modifiers like "Realistic", "Pencil Sketch", "ArtStation" etc by browsing through the "Image Modifiers" section
+ and selecting the desired modifiers.
+ Click "Image Settings" for additional settings like seed, image size, number of images to generate etc.
')
+}
+
function createTask(task) {
let taskConfig = ''
@@ -913,33 +999,8 @@ function createTask(task) {
let w = task.reqBody.width * h / task.reqBody.height >>0
taskConfig += `