Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
Stable Diffusion Webui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
novelai-storage
Stable Diffusion Webui
Commits
68999d0b
Commit
68999d0b
authored
Mar 25, 2023
by
space-nuko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add upscale slider to img2img
parent
91ae48fd
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
623 additions
and
265 deletions
+623
-265
javascript/ui.js
javascript/ui.js
+23
-2
modules/generation_parameters_copypaste.py
modules/generation_parameters_copypaste.py
+3
-0
modules/img2img.py
modules/img2img.py
+2
-1
modules/processing.py
modules/processing.py
+17
-1
modules/ui.py
modules/ui.py
+65
-2
style.css
style.css
+513
-259
No files found.
javascript/ui.js
View file @
68999d0b
...
...
@@ -8,8 +8,8 @@ function set_theme(theme){
}
function
selected_gallery_index
(){
var
buttons
=
gradioApp
().
querySelectorAll
(
'
[style="display: block;"].tabitem div[id$=_gallery] .
gallery
-item
'
)
var
button
=
gradioApp
().
querySelector
(
'
[style="display: block;"].tabitem div[id$=_gallery] .
gallery-item.
\\
!ring-2
'
)
var
buttons
=
gradioApp
().
querySelectorAll
(
'
[style="display: block;"].tabitem div[id$=_gallery] .
thumbnails > .thumbnail
-item
'
)
var
button
=
gradioApp
().
querySelector
(
'
[style="display: block;"].tabitem div[id$=_gallery] .
thumbnails > .thumbnail-item.selected
'
)
var
result
=
-
1
buttons
.
forEach
(
function
(
v
,
i
){
if
(
v
==
button
)
{
result
=
i
}
})
...
...
@@ -111,6 +111,14 @@ function get_img2img_tab_index() {
return
res
}
function
get_img2img_tab_index_for_res_preview
()
{
let
res
=
args_to_array
(
arguments
)
res
.
splice
(
-
1
)
// gradio also sends outputs to the arguments, pop them off
res
[
0
]
=
get_tab_index
(
'
mode_img2img
'
)
debugger
;
return
res
}
function
create_submit_args
(
args
){
res
=
[]
for
(
var
i
=
0
;
i
<
args
.
length
;
i
++
){
...
...
@@ -335,3 +343,16 @@ function selectCheckpoint(name){
desiredCheckpointName
=
name
;
gradioApp
().
getElementById
(
'
change_checkpoint
'
).
click
()
}
function
onCalcResolutionImg2Img
(
init_img
,
scale
,
width
,
height
,
resize_mode
){
i2iScale
=
gradioApp
().
getElementById
(
'
img2img_scale
'
)
i2iWidth
=
gradioApp
().
getElementById
(
'
img2img_width
'
)
i2iHeight
=
gradioApp
().
getElementById
(
'
img2img_height
'
)
setInactive
(
i2iScale
,
scale
==
1
)
setInactive
(
i2iWidth
,
scale
>
1
)
setInactive
(
i2iHeight
,
scale
>
1
)
return
[
init_img
,
width
,
height
,
scale
,
resize_mode
]
}
modules/generation_parameters_copypaste.py
View file @
68999d0b
...
...
@@ -282,6 +282,9 @@ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 965400086, Size: 512x512, Model
res
[
"Hires resize-1"
]
=
0
res
[
"Hires resize-2"
]
=
0
if
"Img2Img Upscale"
not
in
res
:
res
[
"Img2Img Upscale"
]
=
1
restore_old_hires_fix_params
(
res
)
return
res
...
...
modules/img2img.py
View file @
68999d0b
...
...
@@ -78,7 +78,7 @@ def process_batch(p, input_dir, output_dir, inpaint_mask_dir, args):
processed_image
.
save
(
os
.
path
.
join
(
output_dir
,
filename
))
def
img2img
(
id_task
:
str
,
mode
:
int
,
prompt
:
str
,
negative_prompt
:
str
,
prompt_styles
,
init_img
,
sketch
,
init_img_with_mask
,
inpaint_color_sketch
,
inpaint_color_sketch_orig
,
init_img_inpaint
,
init_mask_inpaint
,
steps
:
int
,
sampler_index
:
int
,
mask_blur
:
int
,
mask_alpha
:
float
,
inpainting_fill
:
int
,
restore_faces
:
bool
,
tiling
:
bool
,
n_iter
:
int
,
batch_size
:
int
,
cfg_scale
:
float
,
image_cfg_scale
:
float
,
denoising_strength
:
float
,
seed
:
int
,
subseed
:
int
,
subseed_strength
:
float
,
seed_resize_from_h
:
int
,
seed_resize_from_w
:
int
,
seed_enable_extras
:
bool
,
height
:
int
,
width
:
int
,
resize_mode
:
int
,
inpaint_full_res
:
bool
,
inpaint_full_res_padding
:
int
,
inpainting_mask_invert
:
int
,
img2img_batch_input_dir
:
str
,
img2img_batch_output_dir
:
str
,
img2img_batch_inpaint_mask_dir
:
str
,
override_settings_texts
,
*
args
):
def
img2img
(
id_task
:
str
,
mode
:
int
,
prompt
:
str
,
negative_prompt
:
str
,
prompt_styles
,
init_img
,
sketch
,
init_img_with_mask
,
inpaint_color_sketch
,
inpaint_color_sketch_orig
,
init_img_inpaint
,
init_mask_inpaint
,
steps
:
int
,
sampler_index
:
int
,
mask_blur
:
int
,
mask_alpha
:
float
,
inpainting_fill
:
int
,
restore_faces
:
bool
,
tiling
:
bool
,
n_iter
:
int
,
batch_size
:
int
,
cfg_scale
:
float
,
image_cfg_scale
:
float
,
denoising_strength
:
float
,
seed
:
int
,
subseed
:
int
,
subseed_strength
:
float
,
seed_resize_from_h
:
int
,
seed_resize_from_w
:
int
,
seed_enable_extras
:
bool
,
height
:
int
,
width
:
int
,
scale
:
float
,
resize_mode
:
int
,
inpaint_full_res
:
bool
,
inpaint_full_res_padding
:
int
,
inpainting_mask_invert
:
int
,
img2img_batch_input_dir
:
str
,
img2img_batch_output_dir
:
str
,
img2img_batch_inpaint_mask_dir
:
str
,
override_settings_texts
,
*
args
):
override_settings
=
create_override_settings_dict
(
override_settings_texts
)
is_batch
=
mode
==
5
...
...
@@ -149,6 +149,7 @@ def img2img(id_task: str, mode: int, prompt: str, negative_prompt: str, prompt_s
inpaint_full_res_padding
=
inpaint_full_res_padding
,
inpainting_mask_invert
=
inpainting_mask_invert
,
override_settings
=
override_settings
,
scale
=
scale
,
)
p
.
scripts
=
modules
.
scripts
.
scripts_txt2img
...
...
modules/processing.py
View file @
68999d0b
...
...
@@ -929,7 +929,7 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
class
StableDiffusionProcessingImg2Img
(
StableDiffusionProcessing
):
sampler
=
None
def
__init__
(
self
,
init_images
:
list
=
None
,
resize_mode
:
int
=
0
,
denoising_strength
:
float
=
0.75
,
image_cfg_scale
:
float
=
None
,
mask
:
Any
=
None
,
mask_blur
:
int
=
4
,
inpainting_fill
:
int
=
0
,
inpaint_full_res
:
bool
=
True
,
inpaint_full_res_padding
:
int
=
0
,
inpainting_mask_invert
:
int
=
0
,
initial_noise_multiplier
:
float
=
None
,
**
kwargs
):
def
__init__
(
self
,
init_images
:
Optional
[
list
]
=
None
,
resize_mode
:
int
=
0
,
denoising_strength
:
float
=
0.75
,
image_cfg_scale
:
Optional
[
float
]
=
None
,
mask
:
Any
=
None
,
mask_blur
:
int
=
4
,
inpainting_fill
:
int
=
0
,
inpaint_full_res
:
bool
=
True
,
inpaint_full_res_padding
:
int
=
0
,
inpainting_mask_invert
:
int
=
0
,
initial_noise_multiplier
:
Optional
[
float
]
=
None
,
scale
:
float
=
0
,
**
kwargs
):
super
()
.
__init__
(
**
kwargs
)
self
.
init_images
=
init_images
...
...
@@ -949,11 +949,27 @@ class StableDiffusionProcessingImg2Img(StableDiffusionProcessing):
self
.
mask
=
None
self
.
nmask
=
None
self
.
image_conditioning
=
None
self
.
scale
=
scale
def
get_final_size
(
self
):
if
self
.
scale
>
1
:
img
=
self
.
init_images
[
0
]
width
=
int
(
img
.
width
*
self
.
scale
)
height
=
int
(
img
.
height
*
self
.
scale
)
return
width
,
height
else
:
return
self
.
width
,
self
.
height
def
init
(
self
,
all_prompts
,
all_seeds
,
all_subseeds
):
self
.
sampler
=
sd_samplers
.
create_sampler
(
self
.
sampler_name
,
self
.
sd_model
)
crop_region
=
None
if
self
.
scale
>
1
:
self
.
extra_generation_params
[
"Img2Img Upscale"
]
=
self
.
scale
self
.
width
,
self
.
height
=
self
.
get_final_size
()
image_mask
=
self
.
image_mask
if
image_mask
is
not
None
:
...
...
modules/ui.py
View file @
68999d0b
...
...
@@ -15,6 +15,7 @@ import warnings
import
gradio
as
gr
import
gradio.routes
import
gradio.utils
from
gradio.events
import
Releaseable
import
numpy
as
np
from
PIL
import
Image
,
PngImagePlugin
from
modules.call_queue
import
wrap_gradio_gpu_call
,
wrap_queued_call
,
wrap_gradio_call
...
...
@@ -138,6 +139,26 @@ def calc_resolution_hires(enable, width, height, hr_scale, hr_resize_x, hr_resiz
return
f
"resize: from <span class='resolution'>{p.width}x{p.height}</span> to <span class='resolution'>{p.hr_resize_x or p.hr_upscale_to_x}x{p.hr_resize_y or p.hr_upscale_to_y}</span>"
def
calc_resolution_img2img
(
mode
,
scale
,
resize_x
,
resize_y
,
resize_mode
,
*
i2i_images
):
init_img
=
None
if
mode
in
{
0
,
1
,
3
,
4
}:
init_img
=
i2i_images
[
mode
]
elif
mode
==
2
:
init_img
=
i2i_images
[
mode
][
"image"
]
if
not
init_img
:
return
""
if
scale
>
1
:
width
=
int
(
init_img
.
width
*
scale
)
height
=
int
(
init_img
.
height
*
scale
)
else
:
width
=
resize_x
height
=
resize_y
return
f
"resize: from <span class='resolution'>{init_img.width}x{init_img.height}</span> to <span class='resolution'>{width}x{height}</span>"
def
apply_styles
(
prompt
,
prompt_neg
,
styles
):
prompt
=
shared
.
prompt_styles
.
apply_styles_to_prompt
(
prompt
,
styles
)
prompt_neg
=
shared
.
prompt_styles
.
apply_negative_styles_to_prompt
(
prompt_neg
,
styles
)
...
...
@@ -755,8 +776,13 @@ def create_ui():
elif
category
==
"dimensions"
:
with
FormRow
():
with
gr
.
Column
(
elem_id
=
"img2img_column_size"
,
scale
=
4
):
width
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
2048
,
step
=
8
,
label
=
"Width"
,
value
=
512
,
elem_id
=
"img2img_width"
)
height
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
2048
,
step
=
8
,
label
=
"Height"
,
value
=
512
,
elem_id
=
"img2img_height"
)
with
FormRow
(
variant
=
"compact"
):
final_resolution
=
FormHTML
(
value
=
""
,
elem_id
=
"img2img_finalres"
,
label
=
"Upscaled resolution"
,
interactive
=
False
)
with
FormRow
(
variant
=
"compact"
):
scale
=
gr
.
Slider
(
minimum
=
1.0
,
maximum
=
4.0
,
step
=
0.05
,
label
=
"Upscale by"
,
value
=
1.0
,
elem_id
=
"img2img_scale"
)
with
FormRow
(
variant
=
"compact"
):
width
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
2048
,
step
=
8
,
label
=
"Width"
,
value
=
512
,
elem_id
=
"img2img_width"
)
height
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
2048
,
step
=
8
,
label
=
"Height"
,
value
=
512
,
elem_id
=
"img2img_height"
)
with
gr
.
Column
(
elem_id
=
"img2img_dimensions_row"
,
scale
=
1
,
elem_classes
=
"dimensions-tools"
):
res_switch_btn
=
ToolButton
(
value
=
switch_values_symbol
,
elem_id
=
"img2img_res_switch_btn"
)
...
...
@@ -824,6 +850,41 @@ def create_ui():
outputs
=
[
inpaint_controls
,
mask_alpha
],
)
img2img_resolution_preview_inputs
=
[
dummy_component
,
# filled in by selected img2img tab index in _js
scale
,
width
,
height
,
resize_mode
,
init_img
,
sketch
,
init_img_with_mask
,
inpaint_color_sketch
,
init_img_inpaint
]
for
input
in
img2img_resolution_preview_inputs
:
if
isinstance
(
input
,
Releaseable
):
input
.
release
(
fn
=
calc_resolution_img2img
,
_js
=
"get_img2img_tab_index_for_res_preview"
,
inputs
=
img2img_resolution_preview_inputs
,
outputs
=
[
final_resolution
],
show_progress
=
False
,
)
input
.
release
(
None
,
_js
=
"onCalcResolutionImg2Img"
,
inputs
=
img2img_resolution_preview_inputs
,
outputs
=
[],
show_progress
=
False
,
)
else
:
input
.
change
(
fn
=
calc_resolution_img2img
,
_js
=
"get_img2img_tab_index_for_res_preview"
,
inputs
=
img2img_resolution_preview_inputs
,
outputs
=
[
final_resolution
],
show_progress
=
False
,
)
input
.
change
(
None
,
_js
=
"onCalcResolutionImg2Img"
,
inputs
=
img2img_resolution_preview_inputs
,
outputs
=
[],
show_progress
=
False
,
)
img2img_gallery
,
generation_info
,
html_info
,
html_log
=
create_output_panel
(
"img2img"
,
opts
.
outdir_img2img_samples
)
connect_reuse_seed
(
seed
,
reuse_seed
,
generation_info
,
dummy_component
,
is_subseed
=
False
)
...
...
@@ -872,6 +933,7 @@ def create_ui():
subseed
,
subseed_strength
,
seed_resize_from_h
,
seed_resize_from_w
,
seed_checkbox
,
height
,
width
,
scale
,
resize_mode
,
inpaint_full_res
,
inpaint_full_res_padding
,
...
...
@@ -957,6 +1019,7 @@ def create_ui():
(
seed
,
"Seed"
),
(
width
,
"Size-1"
),
(
height
,
"Size-2"
),
(
scale
,
"Img2Img Upscale"
),
(
batch_size
,
"Batch size"
),
(
subseed
,
"Variation seed"
),
(
subseed_strength
,
"Variation seed strength"
),
...
...
style.css
View file @
68999d0b
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment