From bdd7d2599f1377b3e2efb2de099f287a7da73d0e Mon Sep 17 00:00:00 2001 From: JeLuF Date: Sat, 19 Aug 2023 06:17:59 +0200 Subject: [PATCH 1/3] API to get SHA256 of a model file (#1510) To be used from javascript to collect metadata from civitai https://civitai.com/api/v1/model-versions/by-hash/0A35347528 --- ui/easydiffusion/server.py | 27 +++++++++++++++++++++++++++ ui/easydiffusion/utils/__init__.py | 12 ++++++++++++ 2 files changed, 39 insertions(+) diff --git a/ui/easydiffusion/server.py b/ui/easydiffusion/server.py index 1ecbbbd3..e3f80f42 100644 --- a/ui/easydiffusion/server.py +++ b/ui/easydiffusion/server.py @@ -139,6 +139,10 @@ def init(): def modify_package(package_name: str, req: dict): return modify_package_internal(package_name, req) + @server_api.get("/sha256/{obj_path:path}") + def get_sha256(obj_path: str): + return get_sha256_internal(obj_path) + @server_api.get("/") def read_root(): return FileResponse(os.path.join(app.SD_UI_DIR, "index.html"), headers=NOCACHE_HEADERS) @@ -451,3 +455,26 @@ def modify_package_internal(package_name: str, req: dict): log.error(str(e)) log.error(traceback.format_exc()) return HTTPException(status_code=500, detail=str(e)) + +def get_sha256_internal(obj_path): + import hashlib + from easydiffusion.utils import sha256sum + + path = obj_path.split("/") + type = path.pop(0) + + try: + model_path = model_manager.resolve_model_to_use("/".join(path), type) + except Exception as e: + log.error(str(e)) + log.error(traceback.format_exc()) + + return HTTPException(status_code=404) + try: + digest = sha256sum(model_path) + return {"digest": digest} + except Exception as e: + log.error(str(e)) + log.error(traceback.format_exc()) + return HTTPException(status_code=500, detail=str(e)) + diff --git a/ui/easydiffusion/utils/__init__.py b/ui/easydiffusion/utils/__init__.py index b9c5e21a..f6758809 100644 --- a/ui/easydiffusion/utils/__init__.py +++ b/ui/easydiffusion/utils/__init__.py @@ -6,3 +6,15 @@ from .save_utils import ( save_images_to_disk, get_printable_request, ) + +def sha256sum(filename): + sha256 = hashlib.sha256() + with open(filename, "rb") as f: + while True: + data = f.read(8192) # Read in chunks of 8192 bytes + if not data: + break + sha256.update(data) + + return sha256.hexdigest() + From 77aa7a0148ca58d861297ad829fe208319afe133 Mon Sep 17 00:00:00 2001 From: JeLuF Date: Sat, 19 Aug 2023 06:20:40 +0200 Subject: [PATCH 2/3] Improvements/Fixes for embeddings UI (#1509) - Don't show "Use as thumbnail" if no embeddings were used in the prompt - Fix layout issue on small screens - use req.use_embeddings_model instead of parsing the prompt - Add button to upload a thumb" ../../index.html ../css/main.css main.js --- ui/index.html | 2 ++ ui/media/css/main.css | 6 ++++++ ui/media/js/main.js | 36 ++++++++++++++++++++++++++++++++---- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/ui/index.html b/ui/index.html index 4f62b5b4..1d49a4c4 100644 --- a/ui/index.html +++ b/ui/index.html @@ -680,6 +680,8 @@
+ +
diff --git a/ui/media/css/main.css b/ui/media/css/main.css index ea338653..25602e8c 100644 --- a/ui/media/css/main.css +++ b/ui/media/css/main.css @@ -1706,6 +1706,12 @@ body.wait-pause { overflow-y: scroll; } +@media screen and (max-width: 1400px) { + #embeddings-list { + width: 80vW; + } +} + #embeddings-list button { margin: 2px; color: var(--button-color); diff --git a/ui/media/js/main.js b/ui/media/js/main.js index 3195969c..a06f2016 100644 --- a/ui/media/js/main.js +++ b/ui/media/js/main.js @@ -144,6 +144,8 @@ let embeddingsSearchBox = document.querySelector("#embeddings-search-box") let embeddingsList = document.querySelector("#embeddings-list") let embeddingsModeField = document.querySelector("#embeddings-mode") let embeddingsCardSizeSelector = document.querySelector("#embedding-card-size-selector") +let addEmbeddingsThumb = document.querySelector("#add-embeddings-thumb") +let addEmbeddingsThumbInput = document.querySelector("#add-embeddings-thumb-input") let positiveEmbeddingText = document.querySelector("#positive-embedding-text") let negativeEmbeddingText = document.querySelector("#negative-embedding-text") @@ -547,7 +549,7 @@ function showImages(reqBody, res, outputContainer, livePreview) { { text: "Upscale", on_click: onUpscaleClick }, { text: "Fix Faces", on_click: onFixFacesClick }, ], - { text: "Use as Thumbnail", on_click: onUseAsThumbnailClick }, + { text: "Use as Thumbnail", on_click: onUseAsThumbnailClick, filter: (req, img) => "use_embeddings_model" in req }, ] // include the plugins @@ -758,9 +760,7 @@ function onUseAsThumbnailClick(req, img) { onUseAsThumbnailClick.croppr.setImage(img.src) } - let embeddings = getAllModelNames("embeddings").filter( - (e) => req.prompt.includes(e) || req.negative_prompt.includes(e) - ) + let embeddings = req.use_embeddings_model.map(e => e.split("/").pop()) let LORA = [] if ("use_lora_model" in req) { @@ -2741,6 +2741,34 @@ document.getElementById("toggle-tensorrt-install").addEventListener("click", fun /* Embeddings */ +addEmbeddingsThumb.addEventListener("click", e => addEmbeddingsThumbInput.click()) +addEmbeddingsThumbInput.addEventListener("change", loadThumbnailImageFromFile) + +function loadThumbnailImageFromFile() { + if (addEmbeddingsThumbInput.files.length === 0) { + return + } + + let reader = new FileReader() + let file = addEmbeddingsThumbInput.files[0] + + reader.addEventListener("load", function(event) { + let img = document.createElement("img") + img.src = reader.result + onUseAsThumbnailClick( + { + use_embeddings_model: getAllModelNames("embeddings").sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' })) + }, + img + ) + }) + + if (file) { + reader.readAsDataURL(file) + } +} + + function updateEmbeddingsList(filter = "") { function html(model, iconlist = [], prefix = "", filter = "") { filter = filter.toLowerCase() From 7b8e1bc9196088c1eeb388660846ba11aea2d03a Mon Sep 17 00:00:00 2001 From: JeLuF Date: Sat, 19 Aug 2023 06:21:34 +0200 Subject: [PATCH 3/3] type=number for number of images fields (#1507) --- ui/index.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ui/index.html b/ui/index.html index 1d49a4c4..c31472f7 100644 --- a/ui/index.html +++ b/ui/index.html @@ -143,7 +143,12 @@
Image Settings - + + +
+ + +