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
e644b5a8
Commit
e644b5a8
authored
Oct 14, 2022
by
AUTOMATIC
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove scale latent and no-crop options from hires fix
support copy-pasting new parameters for hires fix
parent
b382de2d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
57 deletions
+35
-57
modules/processing.py
modules/processing.py
+27
-37
modules/txt2img.py
modules/txt2img.py
+3
-6
modules/ui.py
modules/ui.py
+5
-14
No files found.
modules/processing.py
View file @
e644b5a8
...
...
@@ -506,14 +506,12 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
firstphase_width_truncated
=
0
firstphase_height_truncated
=
0
def
__init__
(
self
,
enable_hr
=
False
,
scale_latent
=
True
,
denoising_strength
=
0.75
,
firstphase_width
=
512
,
firstphase_height
=
512
,
crop_scale
=
False
,
**
kwargs
):
def
__init__
(
self
,
enable_hr
=
False
,
denoising_strength
=
0.75
,
firstphase_width
=
512
,
firstphase_height
=
512
,
**
kwargs
):
super
()
.
__init__
(
**
kwargs
)
self
.
enable_hr
=
enable_hr
self
.
scale_latent
=
scale_latent
self
.
denoising_strength
=
denoising_strength
self
.
firstphase_width
=
firstphase_width
self
.
firstphase_height
=
firstphase_height
self
.
crop_scale
=
crop_scale
def
init
(
self
,
all_prompts
,
all_seeds
,
all_subseeds
):
if
self
.
enable_hr
:
...
...
@@ -530,6 +528,8 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
samples
=
self
.
sampler
.
sample
(
self
,
x
,
conditioning
,
unconditional_conditioning
)
return
samples
self
.
extra_generation_params
[
"First pass size"
]
=
f
"{self.firstphase_width}x{self.firstphase_height}"
x
=
create_random_tensors
([
opt_C
,
self
.
firstphase_height
//
opt_f
,
self
.
firstphase_width
//
opt_f
],
seeds
=
seeds
,
subseeds
=
subseeds
,
subseed_strength
=
self
.
subseed_strength
,
seed_resize_from_h
=
self
.
seed_resize_from_h
,
seed_resize_from_w
=
self
.
seed_resize_from_w
,
p
=
self
)
samples
=
self
.
sampler
.
sample
(
self
,
x
,
conditioning
,
unconditional_conditioning
)
...
...
@@ -538,46 +538,36 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing):
width_ratio
=
self
.
width
/
self
.
firstphase_width
height_ratio
=
self
.
height
/
self
.
firstphase_height
if
self
.
crop_scale
:
if
width_ratio
>
height_ratio
:
#Crop to landscape
truncate_y
=
int
((
self
.
width
-
self
.
firstphase_width
)
/
width_ratio
/
height_ratio
/
opt_f
)
if
width_ratio
>
height_ratio
:
truncate_y
=
int
((
self
.
width
-
self
.
firstphase_width
)
/
width_ratio
/
height_ratio
/
opt_f
)
elif
width_ratio
<
height_ratio
:
#Crop to portrait
truncate_x
=
int
((
self
.
height
-
self
.
firstphase_height
)
/
width_ratio
/
height_ratio
/
opt_f
)
elif
width_ratio
<
height_ratio
:
truncate_x
=
int
((
self
.
height
-
self
.
firstphase_height
)
/
width_ratio
/
height_ratio
/
opt_f
)
samples
=
samples
[:,
:,
truncate_y
//
2
:
samples
.
shape
[
2
]
-
truncate_y
//
2
,
truncate_x
//
2
:
samples
.
shape
[
3
]
-
truncate_x
//
2
]
samples
=
samples
[:,
:,
truncate_y
//
2
:
samples
.
shape
[
2
]
-
truncate_y
//
2
,
truncate_x
//
2
:
samples
.
shape
[
3
]
-
truncate_x
//
2
]
decoded_samples
=
decode_first_stage
(
self
.
sd_model
,
samples
)
if
self
.
scale_latent
:
samples
=
torch
.
nn
.
functional
.
interpolate
(
samples
,
size
=
(
self
.
height
//
opt_f
,
self
.
width
//
opt_f
),
mode
=
"bilinear"
)
if
opts
.
upscaler_for_img2img
is
None
or
opts
.
upscaler_for_img2img
==
"None"
:
decoded_samples
=
torch
.
nn
.
functional
.
interpolate
(
decoded_samples
,
size
=
(
self
.
height
,
self
.
width
),
mode
=
"bilinear"
)
else
:
decoded_samples
=
decode_first_stage
(
self
.
sd_model
,
samples
)
lowres_samples
=
torch
.
clamp
((
decoded_samples
+
1.0
)
/
2.0
,
min
=
0.0
,
max
=
1.0
)
if
opts
.
upscaler_for_img2img
is
None
or
opts
.
upscaler_for_img2img
==
"None"
:
decoded_samples
=
torch
.
nn
.
functional
.
interpolate
(
decoded_samples
,
size
=
(
self
.
height
,
self
.
width
),
mode
=
"bilinear"
)
else
:
lowres_samples
=
torch
.
clamp
((
decoded_samples
+
1.0
)
/
2.0
,
min
=
0.0
,
max
=
1.0
)
batch_images
=
[]
for
i
,
x_sample
in
enumerate
(
lowres_samples
):
x_sample
=
255.
*
np
.
moveaxis
(
x_sample
.
cpu
()
.
numpy
(),
0
,
2
)
x_sample
=
x_sample
.
astype
(
np
.
uint8
)
image
=
Image
.
fromarray
(
x_sample
)
image
=
images
.
resize_image
(
0
,
image
,
self
.
width
,
self
.
height
)
image
=
np
.
array
(
image
)
.
astype
(
np
.
float32
)
/
255.0
image
=
np
.
moveaxis
(
image
,
2
,
0
)
batch_images
.
append
(
image
)
decoded_samples
=
torch
.
from_numpy
(
np
.
array
(
batch_images
))
decoded_samples
=
decoded_samples
.
to
(
shared
.
device
)
decoded_samples
=
2.
*
decoded_samples
-
1.
samples
=
self
.
sd_model
.
get_first_stage_encoding
(
self
.
sd_model
.
encode_first_stage
(
decoded_samples
))
batch_images
=
[]
for
i
,
x_sample
in
enumerate
(
lowres_samples
):
x_sample
=
255.
*
np
.
moveaxis
(
x_sample
.
cpu
()
.
numpy
(),
0
,
2
)
x_sample
=
x_sample
.
astype
(
np
.
uint8
)
image
=
Image
.
fromarray
(
x_sample
)
image
=
images
.
resize_image
(
0
,
image
,
self
.
width
,
self
.
height
)
image
=
np
.
array
(
image
)
.
astype
(
np
.
float32
)
/
255.0
image
=
np
.
moveaxis
(
image
,
2
,
0
)
batch_images
.
append
(
image
)
decoded_samples
=
torch
.
from_numpy
(
np
.
array
(
batch_images
))
decoded_samples
=
decoded_samples
.
to
(
shared
.
device
)
decoded_samples
=
2.
*
decoded_samples
-
1.
samples
=
self
.
sd_model
.
get_first_stage_encoding
(
self
.
sd_model
.
encode_first_stage
(
decoded_samples
))
shared
.
state
.
nextjob
()
...
...
modules/txt2img.py
View file @
e644b5a8
...
...
@@ -6,7 +6,7 @@ import modules.processing as processing
from
modules.ui
import
plaintext_to_html
def
txt2img
(
prompt
:
str
,
negative_prompt
:
str
,
prompt_style
:
str
,
prompt_style2
:
str
,
steps
:
int
,
sampler_index
:
int
,
restore_faces
:
bool
,
tiling
:
bool
,
n_iter
:
int
,
batch_size
:
int
,
cfg_scale
:
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
,
enable_hr
:
bool
,
scale_latent
:
bool
,
denoising_strength
:
float
,
firstphase_width
:
int
,
firstphase_height
:
int
,
crop_scale
:
bool
,
*
args
):
def
txt2img
(
prompt
:
str
,
negative_prompt
:
str
,
prompt_style
:
str
,
prompt_style2
:
str
,
steps
:
int
,
sampler_index
:
int
,
restore_faces
:
bool
,
tiling
:
bool
,
n_iter
:
int
,
batch_size
:
int
,
cfg_scale
:
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
,
enable_hr
:
bool
,
denoising_strength
:
float
,
firstphase_width
:
int
,
firstphase_height
:
int
,
*
args
):
p
=
StableDiffusionProcessingTxt2Img
(
sd_model
=
shared
.
sd_model
,
outpath_samples
=
opts
.
outdir_samples
or
opts
.
outdir_txt2img_samples
,
...
...
@@ -30,12 +30,9 @@ def txt2img(prompt: str, negative_prompt: str, prompt_style: str, prompt_style2:
restore_faces
=
restore_faces
,
tiling
=
tiling
,
enable_hr
=
enable_hr
,
scale_latent
=
scale_latent
if
enable_hr
else
None
,
denoising_strength
=
denoising_strength
if
enable_hr
else
None
,
firstphase_width
=
firstphase_width
if
enable_hr
else
None
,
firstphase_height
=
firstphase_height
if
enable_hr
else
None
,
crop_scale
=
crop_scale
if
enable_hr
else
None
,
firstphase_width
=
firstphase_width
if
enable_hr
else
None
,
firstphase_height
=
firstphase_height
if
enable_hr
else
None
,
)
if
cmd_opts
.
enable_console_prompts
:
...
...
modules/ui.py
View file @
e644b5a8
...
...
@@ -540,16 +540,9 @@ def create_ui(wrap_gradio_gpu_call):
enable_hr
=
gr
.
Checkbox
(
label
=
'Highres. fix'
,
value
=
False
)
with
gr
.
Row
(
visible
=
False
)
as
hr_options
:
with
gr
.
Column
(
scale
=
1.0
):
firstphase_width
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
1024
,
step
=
64
,
label
=
"First pass width"
,
value
=
512
)
firstphase_height
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
1024
,
step
=
64
,
label
=
"First pass height"
,
value
=
512
)
with
gr
.
Column
(
scale
=
1.0
):
with
gr
.
Row
():
crop_scale
=
gr
.
Checkbox
(
label
=
'Crop when scaling'
,
value
=
False
)
scale_latent
=
gr
.
Checkbox
(
label
=
'Scale latent'
,
value
=
False
)
with
gr
.
Row
():
denoising_strength
=
gr
.
Slider
(
minimum
=
0.0
,
maximum
=
1.0
,
step
=
0.01
,
label
=
'Denoising strength'
,
value
=
0.7
)
firstphase_width
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
1024
,
step
=
64
,
label
=
"First pass width"
,
value
=
512
)
firstphase_height
=
gr
.
Slider
(
minimum
=
64
,
maximum
=
1024
,
step
=
64
,
label
=
"First pass height"
,
value
=
512
)
denoising_strength
=
gr
.
Slider
(
minimum
=
0.0
,
maximum
=
1.0
,
step
=
0.01
,
label
=
'Denoising strength'
,
value
=
0.7
)
with
gr
.
Row
(
equal_height
=
True
):
batch_count
=
gr
.
Slider
(
minimum
=
1
,
step
=
1
,
label
=
'Batch count'
,
value
=
1
)
...
...
@@ -610,11 +603,9 @@ def create_ui(wrap_gradio_gpu_call):
height
,
width
,
enable_hr
,
scale_latent
,
denoising_strength
,
firstphase_width
,
firstphase_height
,
crop_scale
,
]
+
custom_inputs
,
outputs
=
[
txt2img_gallery
,
...
...
@@ -679,8 +670,8 @@ def create_ui(wrap_gradio_gpu_call):
(
denoising_strength
,
"Denoising strength"
),
(
enable_hr
,
lambda
d
:
"Denoising strength"
in
d
),
(
hr_options
,
lambda
d
:
gr
.
Row
.
update
(
visible
=
"Denoising strength"
in
d
)),
(
firstphase_width
,
"First pass
width
"
),
(
firstphase_height
,
"First pass
height
"
),
(
firstphase_width
,
"First pass
size-1
"
),
(
firstphase_height
,
"First pass
size-2
"
),
]
modules
.
generation_parameters_copypaste
.
connect_paste
(
paste
,
txt2img_paste_fields
,
txt2img_prompt
)
token_button
.
click
(
fn
=
update_token_counter
,
inputs
=
[
txt2img_prompt
,
steps
],
outputs
=
[
token_counter
])
...
...
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