Compare commits

...

25 Commits

Author SHA1 Message Date
cmdr2
3bbce82454 Force safetensors 0.3.2 for sdkit, the newer version has issues during installation 2023-08-23 22:09:49 +05:30
cmdr2
ab8f10ae4a Update FUNDING.yml 2023-08-23 16:01:54 +05:30
cmdr2
796c12bc4c Update index.html 2023-08-23 13:21:10 +05:30
JeLuF
91fb82e9b6 Mention minimum CUDA HW level (#1472) 2023-08-14 18:27:14 +05:30
cmdr2
2adf43274c Fix regression with new installations not being able to start ED 2023-08-03 21:02:02 +05:30
cmdr2
851aa7aaaf Merge pull request #1465 from easydiffusion/beta
Keep IMAGE_STEP_SIZE synchronized across all the clamps
2023-08-03 17:41:52 +05:30
cmdr2
376d238ad8 Keep IMAGE_STEP_SIZE synchronized across all the clamps 2023-08-03 17:40:26 +05:30
cmdr2
e0998e227f Merge pull request #1463 from easydiffusion/beta
Beta
2023-08-03 17:20:18 +05:30
cmdr2
07b584b3b4 Merge branch 'beta' of github.com:cmdr2/stable-diffusion-ui into beta 2023-08-03 17:08:38 +05:30
cmdr2
d35a89bb01 Show the controlnet buttons only for diffusers 2023-08-03 17:08:21 +05:30
cmdr2
22a6fe7721 Merge branch 'main' into beta 2023-08-03 16:56:38 +05:30
cmdr2
710208f376 Update README.md 2023-07-19 23:33:57 +05:30
cmdr2
788404f66a Update README.md 2023-07-12 10:29:19 +05:30
cmdr2
324226f87d Merge pull request #1379 from easydiffusion/yaml-legacy-path
Handle the legacy yaml config path
2023-06-30 16:31:16 +05:30
cmdr2
3120b593c6 Handle the legacy yaml config path 2023-06-30 16:30:29 +05:30
cmdr2
d98e4772ac Merge pull request #1378 from easydiffusion/yaml-to-json
Allow main to switch back from yaml to json config files
2023-06-30 15:55:02 +05:30
cmdr2
cf87c34bef Allow main to switch back from yaml to json config files 2023-06-30 15:53:54 +05:30
cmdr2
656acafed3 Don't read config.yaml just yet in the main branch 2023-06-30 09:52:10 +05:30
cmdr2
5bc0d1f762 Merge pull request #1366 from easydiffusion/beta
Fix broken save settings
2023-06-26 15:35:34 +05:30
cmdr2
07e30ae4ad Merge pull request #1365 from easydiffusion/beta
Beta
2023-06-26 15:05:40 +05:30
cmdr2
8ced5b7199 Merge pull request #1344 from easydiffusion/beta
Beta
2023-06-13 17:08:46 +05:30
cmdr2
a2856b2b77 Update README.md 2023-06-08 16:47:50 +05:30
cmdr2
3045f5211f Merge pull request #1321 from cmdr2/beta
Tiling and other bug fixes
2023-06-01 16:53:51 +05:30
cmdr2
41ecc822df Merge pull request #1305 from JeLuF/patch-27
Update "How to install and run.txt"
2023-05-26 15:25:31 +05:30
JeLuF
ce2a42ca13 Update "How to install and run.txt" 2023-05-25 20:18:19 +02:00
9 changed files with 106 additions and 75 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,3 +1,3 @@
# These are supported funding model platforms # These are supported funding model platforms
ko_fi: cmdr2_stablediffusion_ui ko_fi: easydiffusion

View File

@@ -5,10 +5,10 @@ If you haven't downloaded Stable Diffusion UI yet, please download from https://
After downloading, to install please follow these instructions: After downloading, to install please follow these instructions:
For Windows: For Windows:
- Please double-click the "Start Stable Diffusion UI.cmd" file inside the "stable-diffusion-ui" folder. - Please double-click the "Easy-Diffusion-Windows.exe" file and follow the instructions.
For Linux: For Linux:
- Please open a terminal, and go to the "stable-diffusion-ui" directory. Then run ./start.sh - Please open a terminal, unzip the Easy-Diffusion-Linux.zip file and go to the "easy-diffusion" directory. Then run ./start.sh
That file will automatically install everything. After that it will start the Stable Diffusion interface in a web browser. That file will automatically install everything. After that it will start the Stable Diffusion interface in a web browser.
@@ -21,4 +21,4 @@ If you have any problems, please:
3. Or, file an issue at https://github.com/easydiffusion/easydiffusion/issues 3. Or, file an issue at https://github.com/easydiffusion/easydiffusion/issues
Thanks Thanks
cmdr2 (and contributors to the project) cmdr2 (and contributors to the project)

View File

@@ -11,18 +11,22 @@ Does not require technical knowledge, does not require pre-installed software. 1
Click the download button for your operating system: Click the download button for your operating system:
<p float="left"> <p float="left">
<a href="https://github.com/easydiffusion/easydiffusion/releases/download/v2.5.24/Easy-Diffusion-Windows.exe"><img src="https://github.com/easydiffusion/easydiffusion/raw/main/media/download-win.png" width="200" /></a> <a href="https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.5.41a/Easy-Diffusion-Windows.exe"><img src="https://github.com/cmdr2/stable-diffusion-ui/raw/main/media/download-win.png" width="200" /></a>
<a href="https://github.com/easydiffusion/easydiffusion/releases/download/v2.5.24/Easy-Diffusion-Linux.zip"><img src="https://github.com/easydiffusion/easydiffusion/raw/main/media/download-linux.png" width="200" /></a> <a href="https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.5.41a/Easy-Diffusion-Linux.zip"><img src="https://github.com/cmdr2/stable-diffusion-ui/raw/main/media/download-linux.png" width="200" /></a>
<a href="https://github.com/easydiffusion/easydiffusion/releases/download/v2.5.24/Easy-Diffusion-Mac.zip"><img src="https://github.com/easydiffusion/easydiffusion/raw/main/media/download-mac.png" width="200" /></a> <a href="https://github.com/cmdr2/stable-diffusion-ui/releases/download/v2.5.41a/Easy-Diffusion-Mac.zip"><img src="https://github.com/cmdr2/stable-diffusion-ui/raw/main/media/download-mac.png" width="200" /></a>
</p> </p>
**Hardware requirements:** **Hardware requirements:**
- **Windows:** NVIDIA graphics card (minimum 2 GB RAM), or run on your CPU. - **Windows:** NVIDIA graphics card¹ (minimum 2 GB RAM), or run on your CPU.
- **Linux:** NVIDIA or AMD graphics card (minimum 2 GB RAM), or run on your CPU. - **Linux:** NVIDIA¹ or AMD² graphics card (minimum 2 GB RAM), or run on your CPU.
- **Mac:** M1 or M2, or run on your CPU. - **Mac:** M1 or M2, or run on your CPU.
- Minimum 8 GB of system RAM. - Minimum 8 GB of system RAM.
- Atleast 25 GB of space on the hard disk. - Atleast 25 GB of space on the hard disk.
¹) [CUDA Compute capability](https://en.wikipedia.org/wiki/CUDA#GPUs_supported) level of 3.7 or higher required.
²) ROCm 5.2 support required.
The installer will take care of whatever is needed. If you face any problems, you can join the friendly [Discord community](https://discord.com/invite/u9yhsFmEkB) and ask for assistance. The installer will take care of whatever is needed. If you face any problems, you can join the friendly [Discord community](https://discord.com/invite/u9yhsFmEkB) and ask for assistance.
## On Windows: ## On Windows:
@@ -132,6 +136,15 @@ We could really use help on these aspects (click to view tasks that need your he
If you have any code contributions in mind, please feel free to say Hi to us on the [discord server](https://discord.com/invite/u9yhsFmEkB). We use the Discord server for development-related discussions, and for helping users. If you have any code contributions in mind, please feel free to say Hi to us on the [discord server](https://discord.com/invite/u9yhsFmEkB). We use the Discord server for development-related discussions, and for helping users.
# Credits
* Stable Diffusion: https://github.com/Stability-AI/stablediffusion
* CodeFormer: https://github.com/sczhou/CodeFormer (license: https://github.com/sczhou/CodeFormer/blob/master/LICENSE)
* GFPGAN: https://github.com/TencentARC/GFPGAN
* RealESRGAN: https://github.com/xinntao/Real-ESRGAN
* k-diffusion: https://github.com/crowsonkb/k-diffusion
* Code contributors and artists on the cmdr2 UI: https://github.com/cmdr2/stable-diffusion-ui and Discord (https://discord.com/invite/u9yhsFmEkB)
* Lots of contributors on the internet
# Disclaimer # Disclaimer
The authors of this project are not responsible for any content generated using this interface. The authors of this project are not responsible for any content generated using this interface.

View File

@@ -57,6 +57,12 @@ def install(module_name: str, module_version: str):
module_version = "0.14.1" module_version = "0.14.1"
install_cmd = f"python -m pip install --upgrade {module_name}=={module_version}" install_cmd = f"python -m pip install --upgrade {module_name}=={module_version}"
# hack for safetensors, until v3 gets released to the main branch
if module_name == "sdkit":
install_cmd += " safetensors==0.3.2"
# /hack
if index_url: if index_url:
install_cmd += f" --index-url {index_url}" install_cmd += f" --index-url {index_url}"
if module_name == "sdkit" and version("sdkit") is not None: if module_name == "sdkit" and version("sdkit") is not None:

View File

@@ -161,60 +161,63 @@
<a href="https://github.com/easydiffusion/easydiffusion/wiki/Clip-Skip" target="_blank"><i class="fa-solid fa-circle-question help-btn"><span class="simple-tooltip top-left">Click to learn more about Clip Skip</span></i></a> <a href="https://github.com/easydiffusion/easydiffusion/wiki/Clip-Skip" target="_blank"><i class="fa-solid fa-circle-question help-btn"><span class="simple-tooltip top-left">Click to learn more about Clip Skip</span></i></a>
</td> </td>
</tr> </tr>
<tr id="controlnet_model_container" class="pl-5"><td><label for="controlnet_model">ControlNet Image:</label></td><td> <tr id="controlnet_model_container" class="pl-5">
<div id="control_image_wrapper" class="preview_image_wrapper"> <td><label for="controlnet_model">ControlNet Image:</label></td>
<img id="control_image_preview" class="image_preview" src="" crossorigin="anonymous" /> <td class="diffusers-restart-needed">
<span id="control_image_size_box" class="img_bottom_label"></span> <div id="control_image_wrapper" class="preview_image_wrapper">
<button class="control_image_clear image_clear_btn"><i class="fa-solid fa-xmark"></i></button> <img id="control_image_preview" class="image_preview" src="" crossorigin="anonymous" />
</div> <span id="control_image_size_box" class="img_bottom_label"></span>
<input id="control_image" name="control_image" type="file" /> <button class="control_image_clear image_clear_btn"><i class="fa-solid fa-xmark"></i></button>
<a href="https://github.com/easydiffusion/easydiffusion/wiki/ControlNet" target="_blank"><i class="fa-solid fa-circle-question help-btn"><span class="simple-tooltip top-left">Click to learn more about ControlNets</span></i></a> </div>
<div id="controlnet_config" class="displayNone"> <input id="control_image" name="control_image" type="file" />
<label><small>Filter to apply:</small></label> <a href="https://github.com/easydiffusion/easydiffusion/wiki/ControlNet" target="_blank"><i class="fa-solid fa-circle-question help-btn"><span class="simple-tooltip top-left">Click to learn more about ControlNets</span></i></a>
<select id="control_image_filter"> <div id="controlnet_config" class="displayNone">
<option value="">None</option> <label><small>Filter to apply:</small></label>
<optgroup label="Pose"> <select id="control_image_filter">
<option value="openpose">OpenPose (*)</option> <option value="">None</option>
<option value="openpose_face">OpenPose face</option> <optgroup label="Pose">
<option value="openpose_faceonly">OpenPose face-only</option> <option value="openpose">OpenPose (*)</option>
<option value="openpose_hand">OpenPose hand</option> <option value="openpose_face">OpenPose face</option>
<option value="openpose_full">OpenPose full</option> <option value="openpose_faceonly">OpenPose face-only</option>
</optgroup> <option value="openpose_hand">OpenPose hand</option>
<optgroup label="Outline"> <option value="openpose_full">OpenPose full</option>
<option value="canny">Canny (*)</option> </optgroup>
<option value="mlsd">Straight lines</option> <optgroup label="Outline">
<option value="scribble_hed">Scribble hed (*)</option> <option value="canny">Canny (*)</option>
<option value="scribble_hedsafe">Scribble hedsafe</option> <option value="mlsd">Straight lines</option>
<option value="scribble_pidinet">Scribble pidinet</option> <option value="scribble_hed">Scribble hed (*)</option>
<option value="scribble_pidsafe">Scribble pidsafe</option> <option value="scribble_hedsafe">Scribble hedsafe</option>
<option value="softedge_hed">Softedge hed</option> <option value="scribble_pidinet">Scribble pidinet</option>
<option value="softedge_hedsafe">Softedge hedsafe</option> <option value="scribble_pidsafe">Scribble pidsafe</option>
<option value="softedge_pidinet">Softedge pidinet</option> <option value="softedge_hed">Softedge hed</option>
<option value="softedge_pidsafe">Softedge pidsafe</option> <option value="softedge_hedsafe">Softedge hedsafe</option>
</optgroup> <option value="softedge_pidinet">Softedge pidinet</option>
<optgroup label="Depth"> <option value="softedge_pidsafe">Softedge pidsafe</option>
<option value="normal_bae">Normal bae (*)</option> </optgroup>
<option value="depth_midas">Depth midas</option> <optgroup label="Depth">
<option value="depth_zoe">Depth zoe</option> <option value="normal_bae">Normal bae (*)</option>
<option value="depth_leres">Depth leres</option> <option value="depth_midas">Depth midas</option>
<option value="depth_leres++">Depth leres++</option> <option value="depth_zoe">Depth zoe</option>
</optgroup> <option value="depth_leres">Depth leres</option>
<optgroup label="Line art"> <option value="depth_leres++">Depth leres++</option>
<option value="lineart_coarse">Lineart coarse</option> </optgroup>
<option value="lineart_realistic">Lineart realistic</option> <optgroup label="Line art">
<option value="lineart_anime">Lineart anime</option> <option value="lineart_coarse">Lineart coarse</option>
</optgroup> <option value="lineart_realistic">Lineart realistic</option>
<optgroup label="Misc"> <option value="lineart_anime">Lineart anime</option>
<option value="shuffle">Shuffle</option> </optgroup>
<option value="segment">Segment</option> <optgroup label="Misc">
</optgroup> <option value="shuffle">Shuffle</option>
</select> <option value="segment">Segment</option>
<br/> </optgroup>
<label for="controlnet_model"><small>Model:</small></label> <input id="controlnet_model" type="text" spellcheck="false" autocomplete="off" class="model-filter" data-path="" /> </select>
<br/> <br/>
<label><small>Will download the necessary models, the first time.</small></label> <label for="controlnet_model"><small>Model:</small></label> <input id="controlnet_model" type="text" spellcheck="false" autocomplete="off" class="model-filter" data-path="" />
</div> <br/>
</td></tr> <label><small>Will download the necessary models, the first time.</small></label>
</div>
</td>
</tr>
<tr class="pl-5"><td><label for="vae_model">Custom VAE:</label></td><td> <tr class="pl-5"><td><label for="vae_model">Custom VAE:</label></td><td>
<input id="vae_model" type="text" spellcheck="false" autocomplete="off" class="model-filter" data-path="" /> <input id="vae_model" type="text" spellcheck="false" autocomplete="off" class="model-filter" data-path="" />
<a href="https://github.com/easydiffusion/easydiffusion/wiki/VAE-Variational-Auto-Encoder" target="_blank"><i class="fa-solid fa-circle-question help-btn"><span class="simple-tooltip top-left">Click to learn more about VAEs</span></i></a> <a href="https://github.com/easydiffusion/easydiffusion/wiki/VAE-Variational-Auto-Encoder" target="_blank"><i class="fa-solid fa-circle-question help-btn"><span class="simple-tooltip top-left">Click to learn more about VAEs</span></i></a>
@@ -718,7 +721,7 @@
<div id="footer-spacer"></div> <div id="footer-spacer"></div>
<div id="footer"> <div id="footer">
<div class="line-separator">&nbsp;</div> <div class="line-separator">&nbsp;</div>
<p>If you found this project useful and want to help keep it alive, please <a href="https://ko-fi.com/cmdr2_stablediffusion_ui" target="_blank"><img src="/media/images/kofi.png" id="coffeeButton"></a> to help cover the cost of development and maintenance! Thank you for your support!</p> <p>If you found this project useful and want to help keep it alive, please <a href="https://ko-fi.com/easydiffusion" target="_blank"><img src="/media/images/kofi.png" id="coffeeButton"></a> to help cover the cost of development and maintenance! Thank you for your support!</p>
<p>Please feel free to join the <a href="https://discord.com/invite/u9yhsFmEkB" target="_blank">discord community</a> or <a href="https://github.com/easydiffusion/easydiffusion/issues" target="_blank">file an issue</a> if you have any problems or suggestions in using this interface.</p> <p>Please feel free to join the <a href="https://discord.com/invite/u9yhsFmEkB" target="_blank">discord community</a> or <a href="https://github.com/easydiffusion/easydiffusion/issues" target="_blank">file an issue</a> if you have any problems or suggestions in using this interface.</p>
<div id="footer-legal"> <div id="footer-legal">
<p><b>Disclaimer:</b> The authors of this project are not responsible for any content generated using this interface.</p> <p><b>Disclaimer:</b> The authors of this project are not responsible for any content generated using this interface.</p>

View File

@@ -1,11 +1,12 @@
from easydiffusion import model_manager, app, server from easydiffusion import model_manager, app, server
from easydiffusion.server import server_api # required for uvicorn from easydiffusion.server import server_api # required for uvicorn
app.init()
server.init() server.init()
# Init the app # Init the app
model_manager.init() model_manager.init()
app.init()
app.init_render_threads() app.init_render_threads()
# start the browser ui # start the browser ui

View File

@@ -183,6 +183,8 @@ let undoBuffer = []
const UNDO_LIMIT = 20 const UNDO_LIMIT = 20
const MAX_IMG_UNDO_ENTRIES = 5 const MAX_IMG_UNDO_ENTRIES = 5
let IMAGE_STEP_SIZE = 64
let loraModels = [] let loraModels = []
imagePreview.addEventListener("drop", function(ev) { imagePreview.addEventListener("drop", function(ev) {
@@ -1368,8 +1370,8 @@ function getCurrentUserRequest() {
// clamp to multiple of 8 // clamp to multiple of 8
let width = parseInt(widthField.value) let width = parseInt(widthField.value)
let height = parseInt(heightField.value) let height = parseInt(heightField.value)
width = width - (width % 8) width = width - (width % IMAGE_STEP_SIZE)
height = height - (height % 8) height = height - (height % IMAGE_STEP_SIZE)
const newTask = { const newTask = {
batchesDone: 0, batchesDone: 0,
@@ -2245,8 +2247,8 @@ controlImageSelector.addEventListener("change", loadControlnetImageFromFile)
function controlImageLoad() { function controlImageLoad() {
let w = controlImagePreview.naturalWidth let w = controlImagePreview.naturalWidth
let h = controlImagePreview.naturalHeight let h = controlImagePreview.naturalHeight
w = w - (w % 8) w = w - (w % IMAGE_STEP_SIZE)
h = h - (h % 8) h = h - (h % IMAGE_STEP_SIZE)
addImageSizeOption(w) addImageSizeOption(w)
addImageSizeOption(h) addImageSizeOption(h)

View File

@@ -461,15 +461,20 @@ async function getAppConfig() {
if (!testDiffusersEnabled) { if (!testDiffusersEnabled) {
document.querySelector("#lora_model_container").style.display = "none" document.querySelector("#lora_model_container").style.display = "none"
document.querySelector("#tiling_container").style.display = "none" document.querySelector("#tiling_container").style.display = "none"
document.querySelector("#controlnet_model_container").style.display = "none"
document.querySelector("#hypernetwork_strength_container").style.display = ""
document.querySelectorAll("#sampler_name option.diffusers-only").forEach((option) => { document.querySelectorAll("#sampler_name option.diffusers-only").forEach((option) => {
option.style.display = "none" option.style.display = "none"
}) })
customWidthField.step = 64 IMAGE_STEP_SIZE = 64
customHeightField.step = 64 customWidthField.step = IMAGE_STEP_SIZE
customHeightField.step = IMAGE_STEP_SIZE
} else { } else {
document.querySelector("#lora_model_container").style.display = "" document.querySelector("#lora_model_container").style.display = ""
document.querySelector("#tiling_container").style.display = "" document.querySelector("#tiling_container").style.display = ""
document.querySelector("#controlnet_model_container").style.display = ""
document.querySelector("#hypernetwork_strength_container").style.display = "none"
document.querySelectorAll("#sampler_name option.k_diffusion-only").forEach((option) => { document.querySelectorAll("#sampler_name option.k_diffusion-only").forEach((option) => {
option.style.display = "none" option.style.display = "none"
@@ -477,8 +482,9 @@ async function getAppConfig() {
document.querySelector("#clip_skip_config").classList.remove("displayNone") document.querySelector("#clip_skip_config").classList.remove("displayNone")
document.querySelector("#embeddings-button").classList.remove("displayNone") document.querySelector("#embeddings-button").classList.remove("displayNone")
document.querySelector("#negative-embeddings-button").classList.remove("displayNone") document.querySelector("#negative-embeddings-button").classList.remove("displayNone")
customWidthField.step = 8 IMAGE_STEP_SIZE = 8
customHeightField.step = 8 customWidthField.step = IMAGE_STEP_SIZE
customHeightField.step = IMAGE_STEP_SIZE
} }
console.log("get config status response", config) console.log("get config status response", config)

View File

@@ -124,8 +124,8 @@
// Draw the image with centered coordinates // Draw the image with centered coordinates
context.drawImage(imageObj, x, y, this.width, this.height); context.drawImage(imageObj, x, y, this.width, this.height);
let bestWidth = maxCroppedWidth - maxCroppedWidth % 8 let bestWidth = maxCroppedWidth - maxCroppedWidth % IMAGE_STEP_SIZE
let bestHeight = maxCroppedHeight - maxCroppedHeight % 8 let bestHeight = maxCroppedHeight - maxCroppedHeight % IMAGE_STEP_SIZE
addImageSizeOption(bestWidth) addImageSizeOption(bestWidth)
addImageSizeOption(bestHeight) addImageSizeOption(bestHeight)