mirror of
https://github.com/easydiffusion/easydiffusion.git
synced 2025-08-19 10:03:05 +02:00
Compare commits
25 Commits
v2.5.48
...
v2.5.48-fi
Author | SHA1 | Date | |
---|---|---|---|
|
3bbce82454 | ||
|
ab8f10ae4a | ||
|
796c12bc4c | ||
|
91fb82e9b6 | ||
|
2adf43274c | ||
|
851aa7aaaf | ||
|
376d238ad8 | ||
|
e0998e227f | ||
|
07b584b3b4 | ||
|
d35a89bb01 | ||
|
22a6fe7721 | ||
|
710208f376 | ||
|
788404f66a | ||
|
324226f87d | ||
|
3120b593c6 | ||
|
d98e4772ac | ||
|
cf87c34bef | ||
|
656acafed3 | ||
|
5bc0d1f762 | ||
|
07e30ae4ad | ||
|
8ced5b7199 | ||
|
a2856b2b77 | ||
|
3045f5211f | ||
|
41ecc822df | ||
|
ce2a42ca13 |
2
.github/FUNDING.yml
vendored
2
.github/FUNDING.yml
vendored
@@ -1,3 +1,3 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
ko_fi: cmdr2_stablediffusion_ui
|
ko_fi: easydiffusion
|
||||||
|
@@ -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)
|
||||||
|
23
README.md
23
README.md
@@ -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.
|
||||||
|
|
||||||
|
@@ -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:
|
||||||
|
113
ui/index.html
113
ui/index.html
@@ -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"> </div>
|
<div class="line-separator"> </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>
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user