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
d6a9b22c
Commit
d6a9b22c
authored
May 09, 2023
by
AUTOMATIC1111
Committed by
GitHub
May 09, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #10232 from akx/eff
Fix up string formatting/concatenation to f-strings where feasible
parents
ccbb3618
3ba6c3c8
Changes
34
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
121 additions
and
101 deletions
+121
-101
modules/api/api.py
modules/api/api.py
+11
-11
modules/call_queue.py
modules/call_queue.py
+3
-2
modules/esrgan_model.py
modules/esrgan_model.py
+7
-4
modules/esrgan_model_arch.py
modules/esrgan_model_arch.py
+8
-8
modules/extra_networks_hypernet.py
modules/extra_networks_hypernet.py
+2
-1
modules/generation_parameters_copypaste.py
modules/generation_parameters_copypaste.py
+2
-2
modules/hashes.py
modules/hashes.py
+2
-2
modules/images.py
modules/images.py
+4
-4
modules/interrogate.py
modules/interrogate.py
+2
-2
modules/models/diffusion/ddpm_edit.py
modules/models/diffusion/ddpm_edit.py
+2
-2
modules/models/diffusion/uni_pc/uni_pc.py
modules/models/diffusion/uni_pc/uni_pc.py
+2
-2
modules/ngrok.py
modules/ngrok.py
+2
-2
modules/paths.py
modules/paths.py
+1
-1
modules/processing.py
modules/processing.py
+11
-2
modules/progress.py
modules/progress.py
+2
-1
modules/realesrgan_model.py
modules/realesrgan_model.py
+4
-4
modules/scripts.py
modules/scripts.py
+3
-2
modules/sd_hijack_clip_old.py
modules/sd_hijack_clip_old.py
+2
-1
modules/sd_hijack_unet.py
modules/sd_hijack_unet.py
+1
-1
modules/sd_models.py
modules/sd_models.py
+2
-2
modules/sd_models_config.py
modules/sd_models_config.py
+1
-1
modules/sd_samplers_kdiffusion.py
modules/sd_samplers_kdiffusion.py
+1
-1
modules/sd_vae.py
modules/sd_vae.py
+1
-1
modules/styles.py
modules/styles.py
+1
-1
modules/textual_inversion/autocrop.py
modules/textual_inversion/autocrop.py
+3
-3
modules/textual_inversion/dataset.py
modules/textual_inversion/dataset.py
+1
-1
modules/textual_inversion/preprocess.py
modules/textual_inversion/preprocess.py
+3
-3
modules/textual_inversion/textual_inversion.py
modules/textual_inversion/textual_inversion.py
+6
-6
modules/ui.py
modules/ui.py
+23
-23
modules/ui_extensions.py
modules/ui_extensions.py
+2
-1
modules/ui_extra_networks.py
modules/ui_extra_networks.py
+3
-1
scripts/custom_code.py
scripts/custom_code.py
+1
-1
scripts/loopback.py
scripts/loopback.py
+1
-1
scripts/xyz_grid.py
scripts/xyz_grid.py
+1
-1
No files found.
modules/api/api.py
View file @
d6a9b22c
...
@@ -570,20 +570,20 @@ class Api:
...
@@ -570,20 +570,20 @@ class Api:
filename
=
create_embedding
(
**
args
)
# create empty embedding
filename
=
create_embedding
(
**
args
)
# create empty embedding
sd_hijack
.
model_hijack
.
embedding_db
.
load_textual_inversion_embeddings
()
# reload embeddings so new one can be immediately used
sd_hijack
.
model_hijack
.
embedding_db
.
load_textual_inversion_embeddings
()
# reload embeddings so new one can be immediately used
shared
.
state
.
end
()
shared
.
state
.
end
()
return
CreateResponse
(
info
=
"create embedding filename: {filename}"
.
format
(
filename
=
filename
)
)
return
CreateResponse
(
info
=
f
"create embedding filename: {filename}"
)
except
AssertionError
as
e
:
except
AssertionError
as
e
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
TrainResponse
(
info
=
"create embedding error: {error}"
.
format
(
error
=
e
)
)
return
TrainResponse
(
info
=
f
"create embedding error: {e}"
)
def
create_hypernetwork
(
self
,
args
:
dict
):
def
create_hypernetwork
(
self
,
args
:
dict
):
try
:
try
:
shared
.
state
.
begin
()
shared
.
state
.
begin
()
filename
=
create_hypernetwork
(
**
args
)
# create empty embedding
filename
=
create_hypernetwork
(
**
args
)
# create empty embedding
shared
.
state
.
end
()
shared
.
state
.
end
()
return
CreateResponse
(
info
=
"create hypernetwork filename: {filename}"
.
format
(
filename
=
filename
)
)
return
CreateResponse
(
info
=
f
"create hypernetwork filename: {filename}"
)
except
AssertionError
as
e
:
except
AssertionError
as
e
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
TrainResponse
(
info
=
"create hypernetwork error: {error}"
.
format
(
error
=
e
)
)
return
TrainResponse
(
info
=
f
"create hypernetwork error: {e}"
)
def
preprocess
(
self
,
args
:
dict
):
def
preprocess
(
self
,
args
:
dict
):
try
:
try
:
...
@@ -593,13 +593,13 @@ class Api:
...
@@ -593,13 +593,13 @@ class Api:
return
PreprocessResponse
(
info
=
'preprocess complete'
)
return
PreprocessResponse
(
info
=
'preprocess complete'
)
except
KeyError
as
e
:
except
KeyError
as
e
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
PreprocessResponse
(
info
=
"preprocess error: invalid token: {error}"
.
format
(
error
=
e
)
)
return
PreprocessResponse
(
info
=
f
"preprocess error: invalid token: {e}"
)
except
AssertionError
as
e
:
except
AssertionError
as
e
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
PreprocessResponse
(
info
=
"preprocess error: {error}"
.
format
(
error
=
e
)
)
return
PreprocessResponse
(
info
=
f
"preprocess error: {e}"
)
except
FileNotFoundError
as
e
:
except
FileNotFoundError
as
e
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
PreprocessResponse
(
info
=
'preprocess error: {error}'
.
format
(
error
=
e
)
)
return
PreprocessResponse
(
info
=
f
'preprocess error: {e}'
)
def
train_embedding
(
self
,
args
:
dict
):
def
train_embedding
(
self
,
args
:
dict
):
try
:
try
:
...
@@ -617,10 +617,10 @@ class Api:
...
@@ -617,10 +617,10 @@ class Api:
if
not
apply_optimizations
:
if
not
apply_optimizations
:
sd_hijack
.
apply_optimizations
()
sd_hijack
.
apply_optimizations
()
shared
.
state
.
end
()
shared
.
state
.
end
()
return
TrainResponse
(
info
=
"train embedding complete: filename: {filename} error: {error}"
.
format
(
filename
=
filename
,
error
=
error
)
)
return
TrainResponse
(
info
=
f
"train embedding complete: filename: {filename} error: {error}"
)
except
AssertionError
as
msg
:
except
AssertionError
as
msg
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
TrainResponse
(
info
=
"train embedding error: {msg}"
.
format
(
msg
=
msg
)
)
return
TrainResponse
(
info
=
f
"train embedding error: {msg}"
)
def
train_hypernetwork
(
self
,
args
:
dict
):
def
train_hypernetwork
(
self
,
args
:
dict
):
try
:
try
:
...
@@ -641,10 +641,10 @@ class Api:
...
@@ -641,10 +641,10 @@ class Api:
if
not
apply_optimizations
:
if
not
apply_optimizations
:
sd_hijack
.
apply_optimizations
()
sd_hijack
.
apply_optimizations
()
shared
.
state
.
end
()
shared
.
state
.
end
()
return
TrainResponse
(
info
=
"train embedding complete: filename: {filename} error: {error}"
.
format
(
filename
=
filename
,
error
=
error
)
)
return
TrainResponse
(
info
=
f
"train embedding complete: filename: {filename} error: {error}"
)
except
AssertionError
as
msg
:
except
AssertionError
as
msg
:
shared
.
state
.
end
()
shared
.
state
.
end
()
return
TrainResponse
(
info
=
"train embedding error: {error}"
.
format
(
error
=
error
)
)
return
TrainResponse
(
info
=
f
"train embedding error: {error}"
)
def
get_memory
(
self
):
def
get_memory
(
self
):
try
:
try
:
...
...
modules/call_queue.py
View file @
d6a9b22c
...
@@ -60,7 +60,7 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False):
...
@@ -60,7 +60,7 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False):
max_debug_str_len
=
131072
# (1024*1024)/8
max_debug_str_len
=
131072
# (1024*1024)/8
print
(
"Error completing request"
,
file
=
sys
.
stderr
)
print
(
"Error completing request"
,
file
=
sys
.
stderr
)
argStr
=
f
"Arguments: {
str(args)} {str(kwargs)
}"
argStr
=
f
"Arguments: {
args} {kwargs
}"
print
(
argStr
[:
max_debug_str_len
],
file
=
sys
.
stderr
)
print
(
argStr
[:
max_debug_str_len
],
file
=
sys
.
stderr
)
if
len
(
argStr
)
>
max_debug_str_len
:
if
len
(
argStr
)
>
max_debug_str_len
:
print
(
f
"(Argument list truncated at {max_debug_str_len}/{len(argStr)} characters)"
,
file
=
sys
.
stderr
)
print
(
f
"(Argument list truncated at {max_debug_str_len}/{len(argStr)} characters)"
,
file
=
sys
.
stderr
)
...
@@ -73,7 +73,8 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False):
...
@@ -73,7 +73,8 @@ def wrap_gradio_call(func, extra_outputs=None, add_stats=False):
if
extra_outputs_array
is
None
:
if
extra_outputs_array
is
None
:
extra_outputs_array
=
[
None
,
''
]
extra_outputs_array
=
[
None
,
''
]
res
=
extra_outputs_array
+
[
f
"<div class='error'>{html.escape(type(e).__name__+': '+str(e))}</div>"
]
error_message
=
f
'{type(e).__name__}: {e}'
res
=
extra_outputs_array
+
[
f
"<div class='error'>{html.escape(error_message)}</div>"
]
shared
.
state
.
skipped
=
False
shared
.
state
.
skipped
=
False
shared
.
state
.
interrupted
=
False
shared
.
state
.
interrupted
=
False
...
...
modules/esrgan_model.py
View file @
d6a9b22c
...
@@ -156,13 +156,16 @@ class UpscalerESRGAN(Upscaler):
...
@@ -156,13 +156,16 @@ class UpscalerESRGAN(Upscaler):
def
load_model
(
self
,
path
:
str
):
def
load_model
(
self
,
path
:
str
):
if
"http"
in
path
:
if
"http"
in
path
:
filename
=
load_file_from_url
(
url
=
self
.
model_url
,
model_dir
=
self
.
model_path
,
filename
=
load_file_from_url
(
file_name
=
"
%
s.pth"
%
self
.
model_name
,
url
=
self
.
model_url
,
progress
=
True
)
model_dir
=
self
.
model_path
,
file_name
=
f
"{self.model_name}.pth"
,
progress
=
True
,
)
else
:
else
:
filename
=
path
filename
=
path
if
not
os
.
path
.
exists
(
filename
)
or
filename
is
None
:
if
not
os
.
path
.
exists
(
filename
)
or
filename
is
None
:
print
(
"Unable to load
%
s from
%
s"
%
(
self
.
model_path
,
filename
)
)
print
(
f
"Unable to load {self.model_path} from {filename}"
)
return
None
return
None
state_dict
=
torch
.
load
(
filename
,
map_location
=
'cpu'
if
devices
.
device_esrgan
.
type
==
'mps'
else
None
)
state_dict
=
torch
.
load
(
filename
,
map_location
=
'cpu'
if
devices
.
device_esrgan
.
type
==
'mps'
else
None
)
...
...
modules/esrgan_model_arch.py
View file @
d6a9b22c
...
@@ -38,7 +38,7 @@ class RRDBNet(nn.Module):
...
@@ -38,7 +38,7 @@ class RRDBNet(nn.Module):
elif
upsample_mode
==
'pixelshuffle'
:
elif
upsample_mode
==
'pixelshuffle'
:
upsample_block
=
pixelshuffle_block
upsample_block
=
pixelshuffle_block
else
:
else
:
raise
NotImplementedError
(
'upsample mode [{:s}] is not found'
.
format
(
upsample_mode
)
)
raise
NotImplementedError
(
f
'upsample mode [{upsample_mode}] is not found'
)
if
upscale
==
3
:
if
upscale
==
3
:
upsampler
=
upsample_block
(
nf
,
nf
,
3
,
act_type
=
act_type
,
convtype
=
convtype
)
upsampler
=
upsample_block
(
nf
,
nf
,
3
,
act_type
=
act_type
,
convtype
=
convtype
)
else
:
else
:
...
@@ -261,10 +261,10 @@ class Upsample(nn.Module):
...
@@ -261,10 +261,10 @@ class Upsample(nn.Module):
def
extra_repr
(
self
):
def
extra_repr
(
self
):
if
self
.
scale_factor
is
not
None
:
if
self
.
scale_factor
is
not
None
:
info
=
'scale_factor='
+
str
(
self
.
scale_factor
)
info
=
f
'scale_factor={self.scale_factor}'
else
:
else
:
info
=
'size='
+
str
(
self
.
size
)
info
=
f
'size={self.size}'
info
+=
', mode='
+
self
.
mode
info
+=
f
', mode={self.mode}'
return
info
return
info
...
@@ -350,7 +350,7 @@ def act(act_type, inplace=True, neg_slope=0.2, n_prelu=1, beta=1.0):
...
@@ -350,7 +350,7 @@ def act(act_type, inplace=True, neg_slope=0.2, n_prelu=1, beta=1.0):
elif
act_type
==
'sigmoid'
:
# [0, 1] range output
elif
act_type
==
'sigmoid'
:
# [0, 1] range output
layer
=
nn
.
Sigmoid
()
layer
=
nn
.
Sigmoid
()
else
:
else
:
raise
NotImplementedError
(
'activation layer [{:s}] is not found'
.
format
(
act_type
)
)
raise
NotImplementedError
(
f
'activation layer [{act_type}] is not found'
)
return
layer
return
layer
...
@@ -372,7 +372,7 @@ def norm(norm_type, nc):
...
@@ -372,7 +372,7 @@ def norm(norm_type, nc):
elif
norm_type
==
'none'
:
elif
norm_type
==
'none'
:
def
norm_layer
(
x
):
return
Identity
()
def
norm_layer
(
x
):
return
Identity
()
else
:
else
:
raise
NotImplementedError
(
'normalization layer [{:s}] is not found'
.
format
(
norm_type
)
)
raise
NotImplementedError
(
f
'normalization layer [{norm_type}] is not found'
)
return
layer
return
layer
...
@@ -388,7 +388,7 @@ def pad(pad_type, padding):
...
@@ -388,7 +388,7 @@ def pad(pad_type, padding):
elif
pad_type
==
'zero'
:
elif
pad_type
==
'zero'
:
layer
=
nn
.
ZeroPad2d
(
padding
)
layer
=
nn
.
ZeroPad2d
(
padding
)
else
:
else
:
raise
NotImplementedError
(
'padding layer [{:s}] is not implemented'
.
format
(
pad_type
)
)
raise
NotImplementedError
(
f
'padding layer [{pad_type}] is not implemented'
)
return
layer
return
layer
...
@@ -432,7 +432,7 @@ def conv_block(in_nc, out_nc, kernel_size, stride=1, dilation=1, groups=1, bias=
...
@@ -432,7 +432,7 @@ def conv_block(in_nc, out_nc, kernel_size, stride=1, dilation=1, groups=1, bias=
pad_type
=
'zero'
,
norm_type
=
None
,
act_type
=
'relu'
,
mode
=
'CNA'
,
convtype
=
'Conv2D'
,
pad_type
=
'zero'
,
norm_type
=
None
,
act_type
=
'relu'
,
mode
=
'CNA'
,
convtype
=
'Conv2D'
,
spectral_norm
=
False
):
spectral_norm
=
False
):
""" Conv layer with padding, normalization, activation """
""" Conv layer with padding, normalization, activation """
assert
mode
in
[
'CNA'
,
'NAC'
,
'CNAC'
],
'Wrong conv mode [{:s}]'
.
format
(
mode
)
assert
mode
in
[
'CNA'
,
'NAC'
,
'CNAC'
],
f
'Wrong conv mode [{mode}]'
padding
=
get_valid_padding
(
kernel_size
,
dilation
)
padding
=
get_valid_padding
(
kernel_size
,
dilation
)
p
=
pad
(
pad_type
,
padding
)
if
pad_type
and
pad_type
!=
'zero'
else
None
p
=
pad
(
pad_type
,
padding
)
if
pad_type
and
pad_type
!=
'zero'
else
None
padding
=
padding
if
pad_type
==
'zero'
else
0
padding
=
padding
if
pad_type
==
'zero'
else
0
...
...
modules/extra_networks_hypernet.py
View file @
d6a9b22c
...
@@ -10,7 +10,8 @@ class ExtraNetworkHypernet(extra_networks.ExtraNetwork):
...
@@ -10,7 +10,8 @@ class ExtraNetworkHypernet(extra_networks.ExtraNetwork):
additional
=
shared
.
opts
.
sd_hypernetwork
additional
=
shared
.
opts
.
sd_hypernetwork
if
additional
!=
"None"
and
additional
in
shared
.
hypernetworks
and
len
([
x
for
x
in
params_list
if
x
.
items
[
0
]
==
additional
])
==
0
:
if
additional
!=
"None"
and
additional
in
shared
.
hypernetworks
and
len
([
x
for
x
in
params_list
if
x
.
items
[
0
]
==
additional
])
==
0
:
p
.
all_prompts
=
[
x
+
f
"<hypernet:{additional}:{shared.opts.extra_networks_default_multiplier}>"
for
x
in
p
.
all_prompts
]
hypernet_prompt_text
=
f
"<hypernet:{additional}:{shared.opts.extra_networks_default_multiplier}>"
p
.
all_prompts
=
[
f
"{prompt}{hypernet_prompt_text}"
for
prompt
in
p
.
all_prompts
]
params_list
.
append
(
extra_networks
.
ExtraNetworkParams
(
items
=
[
additional
,
shared
.
opts
.
extra_networks_default_multiplier
]))
params_list
.
append
(
extra_networks
.
ExtraNetworkParams
(
items
=
[
additional
,
shared
.
opts
.
extra_networks_default_multiplier
]))
names
=
[]
names
=
[]
...
...
modules/generation_parameters_copypaste.py
View file @
d6a9b22c
...
@@ -269,8 +269,8 @@ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 965400086, Size: 512x512, Model
...
@@ -269,8 +269,8 @@ Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 965400086, Size: 512x512, Model
v
=
v
[
1
:
-
1
]
if
v
[
0
]
==
'"'
and
v
[
-
1
]
==
'"'
else
v
v
=
v
[
1
:
-
1
]
if
v
[
0
]
==
'"'
and
v
[
-
1
]
==
'"'
else
v
m
=
re_imagesize
.
match
(
v
)
m
=
re_imagesize
.
match
(
v
)
if
m
is
not
None
:
if
m
is
not
None
:
res
[
k
+
"
-1"
]
=
m
.
group
(
1
)
res
[
f
"{k}
-1"
]
=
m
.
group
(
1
)
res
[
k
+
"
-2"
]
=
m
.
group
(
2
)
res
[
f
"{k}
-2"
]
=
m
.
group
(
2
)
else
:
else
:
res
[
k
]
=
v
res
[
k
]
=
v
...
...
modules/hashes.py
View file @
d6a9b22c
...
@@ -13,7 +13,7 @@ cache_data = None
...
@@ -13,7 +13,7 @@ cache_data = None
def
dump_cache
():
def
dump_cache
():
with
filelock
.
FileLock
(
cache_filename
+
"
.lock"
):
with
filelock
.
FileLock
(
f
"{cache_filename}
.lock"
):
with
open
(
cache_filename
,
"w"
,
encoding
=
"utf8"
)
as
file
:
with
open
(
cache_filename
,
"w"
,
encoding
=
"utf8"
)
as
file
:
json
.
dump
(
cache_data
,
file
,
indent
=
4
)
json
.
dump
(
cache_data
,
file
,
indent
=
4
)
...
@@ -22,7 +22,7 @@ def cache(subsection):
...
@@ -22,7 +22,7 @@ def cache(subsection):
global
cache_data
global
cache_data
if
cache_data
is
None
:
if
cache_data
is
None
:
with
filelock
.
FileLock
(
cache_filename
+
"
.lock"
):
with
filelock
.
FileLock
(
f
"{cache_filename}
.lock"
):
if
not
os
.
path
.
isfile
(
cache_filename
):
if
not
os
.
path
.
isfile
(
cache_filename
):
cache_data
=
{}
cache_data
=
{}
else
:
else
:
...
...
modules/images.py
View file @
d6a9b22c
...
@@ -467,7 +467,7 @@ def get_next_sequence_number(path, basename):
...
@@ -467,7 +467,7 @@ def get_next_sequence_number(path, basename):
"""
"""
result
=
-
1
result
=
-
1
if
basename
!=
''
:
if
basename
!=
''
:
basename
=
basename
+
"
-"
basename
=
f
"{basename}
-"
prefix_length
=
len
(
basename
)
prefix_length
=
len
(
basename
)
for
p
in
os
.
listdir
(
path
):
for
p
in
os
.
listdir
(
path
):
...
@@ -536,7 +536,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
...
@@ -536,7 +536,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
add_number
=
opts
.
save_images_add_number
or
file_decoration
==
''
add_number
=
opts
.
save_images_add_number
or
file_decoration
==
''
if
file_decoration
!=
""
and
add_number
:
if
file_decoration
!=
""
and
add_number
:
file_decoration
=
"-"
+
file_decoration
file_decoration
=
f
"-{file_decoration}"
file_decoration
=
namegen
.
apply
(
file_decoration
)
+
suffix
file_decoration
=
namegen
.
apply
(
file_decoration
)
+
suffix
...
@@ -566,7 +566,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
...
@@ -566,7 +566,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
def
_atomically_save_image
(
image_to_save
,
filename_without_extension
,
extension
):
def
_atomically_save_image
(
image_to_save
,
filename_without_extension
,
extension
):
# save image with .tmp extension to avoid race condition when another process detects new image in the directory
# save image with .tmp extension to avoid race condition when another process detects new image in the directory
temp_file_path
=
f
ilename_without_extension
+
"
.tmp"
temp_file_path
=
f
"{filename_without_extension}
.tmp"
image_format
=
Image
.
registered_extensions
()[
extension
]
image_format
=
Image
.
registered_extensions
()[
extension
]
if
extension
.
lower
()
==
'.png'
:
if
extension
.
lower
()
==
'.png'
:
...
@@ -626,7 +626,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
...
@@ -626,7 +626,7 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
if
opts
.
save_txt
and
info
is
not
None
:
if
opts
.
save_txt
and
info
is
not
None
:
txt_fullfn
=
f
"{fullfn_without_extension}.txt"
txt_fullfn
=
f
"{fullfn_without_extension}.txt"
with
open
(
txt_fullfn
,
"w"
,
encoding
=
"utf8"
)
as
file
:
with
open
(
txt_fullfn
,
"w"
,
encoding
=
"utf8"
)
as
file
:
file
.
write
(
info
+
"
\n
"
)
file
.
write
(
f
"{info}
\n
"
)
else
:
else
:
txt_fullfn
=
None
txt_fullfn
=
None
...
...
modules/interrogate.py
View file @
d6a9b22c
...
@@ -28,7 +28,7 @@ def category_types():
...
@@ -28,7 +28,7 @@ def category_types():
def
download_default_clip_interrogate_categories
(
content_dir
):
def
download_default_clip_interrogate_categories
(
content_dir
):
print
(
"Downloading CLIP categories..."
)
print
(
"Downloading CLIP categories..."
)
tmpdir
=
content_dir
+
"
_tmp"
tmpdir
=
f
"{content_dir}
_tmp"
category_types
=
[
"artists"
,
"flavors"
,
"mediums"
,
"movements"
]
category_types
=
[
"artists"
,
"flavors"
,
"mediums"
,
"movements"
]
try
:
try
:
...
@@ -214,7 +214,7 @@ class InterrogateModels:
...
@@ -214,7 +214,7 @@ class InterrogateModels:
if
shared
.
opts
.
interrogate_return_ranks
:
if
shared
.
opts
.
interrogate_return_ranks
:
res
+=
f
", ({match}:{score/100:.3f})"
res
+=
f
", ({match}:{score/100:.3f})"
else
:
else
:
res
+=
", "
+
match
res
+=
f
", {match}"
except
Exception
:
except
Exception
:
print
(
"Error interrogating"
,
file
=
sys
.
stderr
)
print
(
"Error interrogating"
,
file
=
sys
.
stderr
)
...
...
modules/models/diffusion/ddpm_edit.py
View file @
d6a9b22c
...
@@ -223,7 +223,7 @@ class DDPM(pl.LightningModule):
...
@@ -223,7 +223,7 @@ class DDPM(pl.LightningModule):
for
k
in
keys
:
for
k
in
keys
:
for
ik
in
ignore_keys
:
for
ik
in
ignore_keys
:
if
k
.
startswith
(
ik
):
if
k
.
startswith
(
ik
):
print
(
"Deleting key {} from state_dict."
.
format
(
k
)
)
print
(
f
"Deleting key {k} from state_dict."
)
del
sd
[
k
]
del
sd
[
k
]
missing
,
unexpected
=
self
.
load_state_dict
(
sd
,
strict
=
False
)
if
not
only_model
else
self
.
model
.
load_state_dict
(
missing
,
unexpected
=
self
.
load_state_dict
(
sd
,
strict
=
False
)
if
not
only_model
else
self
.
model
.
load_state_dict
(
sd
,
strict
=
False
)
sd
,
strict
=
False
)
...
@@ -386,7 +386,7 @@ class DDPM(pl.LightningModule):
...
@@ -386,7 +386,7 @@ class DDPM(pl.LightningModule):
_
,
loss_dict_no_ema
=
self
.
shared_step
(
batch
)
_
,
loss_dict_no_ema
=
self
.
shared_step
(
batch
)
with
self
.
ema_scope
():
with
self
.
ema_scope
():
_
,
loss_dict_ema
=
self
.
shared_step
(
batch
)
_
,
loss_dict_ema
=
self
.
shared_step
(
batch
)
loss_dict_ema
=
{
key
+
'_ema'
:
loss_dict_ema
[
key
]
for
key
in
loss_dict_ema
}
loss_dict_ema
=
{
f
"{key}_ema"
:
loss_dict_ema
[
key
]
for
key
in
loss_dict_ema
}
self
.
log_dict
(
loss_dict_no_ema
,
prog_bar
=
False
,
logger
=
True
,
on_step
=
False
,
on_epoch
=
True
)
self
.
log_dict
(
loss_dict_no_ema
,
prog_bar
=
False
,
logger
=
True
,
on_step
=
False
,
on_epoch
=
True
)
self
.
log_dict
(
loss_dict_ema
,
prog_bar
=
False
,
logger
=
True
,
on_step
=
False
,
on_epoch
=
True
)
self
.
log_dict
(
loss_dict_ema
,
prog_bar
=
False
,
logger
=
True
,
on_step
=
False
,
on_epoch
=
True
)
...
...
modules/models/diffusion/uni_pc/uni_pc.py
View file @
d6a9b22c
...
@@ -94,7 +94,7 @@ class NoiseScheduleVP:
...
@@ -94,7 +94,7 @@ class NoiseScheduleVP:
"""
"""
if
schedule
not
in
[
'discrete'
,
'linear'
,
'cosine'
]:
if
schedule
not
in
[
'discrete'
,
'linear'
,
'cosine'
]:
raise
ValueError
(
"Unsupported noise schedule {}. The schedule needs to be 'discrete' or 'linear' or 'cosine'"
.
format
(
schedule
)
)
raise
ValueError
(
f
"Unsupported noise schedule {schedule}. The schedule needs to be 'discrete' or 'linear' or 'cosine'"
)
self
.
schedule
=
schedule
self
.
schedule
=
schedule
if
schedule
==
'discrete'
:
if
schedule
==
'discrete'
:
...
@@ -469,7 +469,7 @@ class UniPC:
...
@@ -469,7 +469,7 @@ class UniPC:
t
=
torch
.
linspace
(
t_T
**
(
1.
/
t_order
),
t_0
**
(
1.
/
t_order
),
N
+
1
)
.
pow
(
t_order
)
.
to
(
device
)
t
=
torch
.
linspace
(
t_T
**
(
1.
/
t_order
),
t_0
**
(
1.
/
t_order
),
N
+
1
)
.
pow
(
t_order
)
.
to
(
device
)
return
t
return
t
else
:
else
:
raise
ValueError
(
"Unsupported skip_type {}, need to be 'logSNR' or 'time_uniform' or 'time_quadratic'"
.
format
(
skip_type
)
)
raise
ValueError
(
f
"Unsupported skip_type {skip_type}, need to be 'logSNR' or 'time_uniform' or 'time_quadratic'"
)
def
get_orders_and_timesteps_for_singlestep_solver
(
self
,
steps
,
order
,
skip_type
,
t_T
,
t_0
,
device
):
def
get_orders_and_timesteps_for_singlestep_solver
(
self
,
steps
,
order
,
skip_type
,
t_T
,
t_0
,
device
):
"""
"""
...
...
modules/ngrok.py
View file @
d6a9b22c
...
@@ -7,8 +7,8 @@ def connect(token, port, region):
...
@@ -7,8 +7,8 @@ def connect(token, port, region):
else
:
else
:
if
':'
in
token
:
if
':'
in
token
:
# token = authtoken:username:password
# token = authtoken:username:password
account
=
token
.
split
(
':'
)[
1
]
+
':'
+
token
.
split
(
':'
)[
-
1
]
token
,
username
,
password
=
token
.
split
(
':'
,
2
)
token
=
token
.
split
(
':'
)[
0
]
account
=
f
"{username}:{password}"
config
=
conf
.
PyngrokConfig
(
config
=
conf
.
PyngrokConfig
(
auth_token
=
token
,
region
=
region
auth_token
=
token
,
region
=
region
...
...
modules/paths.py
View file @
d6a9b22c
...
@@ -16,7 +16,7 @@ for possible_sd_path in possible_sd_paths:
...
@@ -16,7 +16,7 @@ for possible_sd_path in possible_sd_paths:
sd_path
=
os
.
path
.
abspath
(
possible_sd_path
)
sd_path
=
os
.
path
.
abspath
(
possible_sd_path
)
break
break
assert
sd_path
is
not
None
,
"Couldn't find Stable Diffusion in any of: "
+
str
(
possible_sd_paths
)
assert
sd_path
is
not
None
,
f
"Couldn't find Stable Diffusion in any of: {possible_sd_paths}"
path_dirs
=
[
path_dirs
=
[
(
sd_path
,
'ldm'
,
'Stable Diffusion'
,
[]),
(
sd_path
,
'ldm'
,
'Stable Diffusion'
,
[]),
...
...
modules/processing.py
View file @
d6a9b22c
...
@@ -500,7 +500,7 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments=None, iter
...
@@ -500,7 +500,7 @@ def create_infotext(p, all_prompts, all_seeds, all_subseeds, comments=None, iter
generation_params_text
=
", "
.
join
([
k
if
k
==
v
else
f
'{k}: {generation_parameters_copypaste.quote(v)}'
for
k
,
v
in
generation_params
.
items
()
if
v
is
not
None
])
generation_params_text
=
", "
.
join
([
k
if
k
==
v
else
f
'{k}: {generation_parameters_copypaste.quote(v)}'
for
k
,
v
in
generation_params
.
items
()
if
v
is
not
None
])
negative_prompt_text
=
"
\n
Negative prompt: "
+
p
.
all_negative_prompts
[
index
]
if
p
.
all_negative_prompts
[
index
]
else
""
negative_prompt_text
=
f
"
\n
Negative prompt: {p.all_negative_prompts[index]}"
if
p
.
all_negative_prompts
[
index
]
else
""
return
f
"{all_prompts[index]}{negative_prompt_text}
\n
{generation_params_text}"
.
strip
()
return
f
"{all_prompts[index]}{negative_prompt_text}
\n
{generation_params_text}"
.
strip
()
...
@@ -780,7 +780,16 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
...
@@ -780,7 +780,16 @@ def process_images_inner(p: StableDiffusionProcessing) -> Processed:
devices
.
torch_gc
()
devices
.
torch_gc
()
res
=
Processed
(
p
,
output_images
,
p
.
all_seeds
[
0
],
infotext
(),
comments
=
""
.
join
([
"
\n\n
"
+
x
for
x
in
comments
]),
subseed
=
p
.
all_subseeds
[
0
],
index_of_first_image
=
index_of_first_image
,
infotexts
=
infotexts
)
res
=
Processed
(
p
,
images_list
=
output_images
,
seed
=
p
.
all_seeds
[
0
],
info
=
infotext
(),
comments
=
""
.
join
(
f
"
\n\n
{comment}"
for
comment
in
comments
),
subseed
=
p
.
all_subseeds
[
0
],
index_of_first_image
=
index_of_first_image
,
infotexts
=
infotexts
,
)
if
p
.
scripts
is
not
None
:
if
p
.
scripts
is
not
None
:
p
.
scripts
.
postprocess
(
p
,
res
)
p
.
scripts
.
postprocess
(
p
,
res
)
...
...
modules/progress.py
View file @
d6a9b22c
...
@@ -96,7 +96,8 @@ def progressapi(req: ProgressRequest):
...
@@ -96,7 +96,8 @@ def progressapi(req: ProgressRequest):
if
image
is
not
None
:
if
image
is
not
None
:
buffered
=
io
.
BytesIO
()
buffered
=
io
.
BytesIO
()
image
.
save
(
buffered
,
format
=
"png"
)
image
.
save
(
buffered
,
format
=
"png"
)
live_preview
=
'data:image/png;base64,'
+
base64
.
b64encode
(
buffered
.
getvalue
())
.
decode
(
"ascii"
)
base64_image
=
base64
.
b64encode
(
buffered
.
getvalue
())
.
decode
(
'ascii'
)
live_preview
=
f
"data:image/png;base64,{base64_image}"
id_live_preview
=
shared
.
state
.
id_live_preview
id_live_preview
=
shared
.
state
.
id_live_preview
else
:
else
:
live_preview
=
None
live_preview
=
None
...
...
modules/realesrgan_model.py
View file @
d6a9b22c
...
@@ -28,9 +28,9 @@ class UpscalerRealESRGAN(Upscaler):
...
@@ -28,9 +28,9 @@ class UpscalerRealESRGAN(Upscaler):
for
scaler
in
scalers
:
for
scaler
in
scalers
:
if
scaler
.
local_data_path
.
startswith
(
"http"
):
if
scaler
.
local_data_path
.
startswith
(
"http"
):
filename
=
modelloader
.
friendly_name
(
scaler
.
local_data_path
)
filename
=
modelloader
.
friendly_name
(
scaler
.
local_data_path
)
local
=
next
(
iter
([
local_model
for
local_model
in
local_model_paths
if
local_model
.
endswith
(
filename
+
'.pth'
)]),
None
)
local
_model_candidates
=
[
local_model
for
local_model
in
local_model_paths
if
local_model
.
endswith
(
f
"{filename}.pth"
)]
if
local
:
if
local
_model_candidates
:
scaler
.
local_data_path
=
local
scaler
.
local_data_path
=
local
_model_candidates
[
0
]
if
scaler
.
name
in
opts
.
realesrgan_enabled_models
:
if
scaler
.
name
in
opts
.
realesrgan_enabled_models
:
self
.
scalers
.
append
(
scaler
)
self
.
scalers
.
append
(
scaler
)
...
@@ -47,7 +47,7 @@ class UpscalerRealESRGAN(Upscaler):
...
@@ -47,7 +47,7 @@ class UpscalerRealESRGAN(Upscaler):
info
=
self
.
load_model
(
path
)
info
=
self
.
load_model
(
path
)
if
not
os
.
path
.
exists
(
info
.
local_data_path
):
if
not
os
.
path
.
exists
(
info
.
local_data_path
):
print
(
"Unable to load RealESRGAN model:
%
s"
%
info
.
name
)
print
(
f
"Unable to load RealESRGAN model: {info.name}"
)
return
img
return
img
upsampler
=
RealESRGANer
(
upsampler
=
RealESRGANer
(
...
...
modules/scripts.py
View file @
d6a9b22c
...
@@ -163,7 +163,8 @@ class Script:
...
@@ -163,7 +163,8 @@ class Script:
"""helper function to generate id for a HTML element, constructs final id out of script name, tab and user-supplied item_id"""
"""helper function to generate id for a HTML element, constructs final id out of script name, tab and user-supplied item_id"""
need_tabname
=
self
.
show
(
True
)
==
self
.
show
(
False
)
need_tabname
=
self
.
show
(
True
)
==
self
.
show
(
False
)
tabname
=
(
'img2img'
if
self
.
is_img2img
else
'txt2txt'
)
+
"_"
if
need_tabname
else
""
tabkind
=
'img2img'
if
self
.
is_img2img
else
'txt2txt'
tabname
=
f
"{tabkind}_"
if
need_tabname
else
""
title
=
re
.
sub
(
r'[^a-z_0-9]'
,
''
,
re
.
sub
(
r'\s'
,
'_'
,
self
.
title
()
.
lower
()))
title
=
re
.
sub
(
r'[^a-z_0-9]'
,
''
,
re
.
sub
(
r'\s'
,
'_'
,
self
.
title
()
.
lower
()))
return
f
'script_{tabname}{title}_{item_id}'
return
f
'script_{tabname}{title}_{item_id}'
...
@@ -526,7 +527,7 @@ def add_classes_to_gradio_component(comp):
...
@@ -526,7 +527,7 @@ def add_classes_to_gradio_component(comp):
this adds gradio-* to the component for css styling (ie gradio-button to gr.Button), as well as some others
this adds gradio-* to the component for css styling (ie gradio-button to gr.Button), as well as some others
"""
"""
comp
.
elem_classes
=
[
"gradio-"
+
comp
.
get_block_name
()
,
*
(
comp
.
elem_classes
or
[])]
comp
.
elem_classes
=
[
f
"gradio-{comp.get_block_name()}"
,
*
(
comp
.
elem_classes
or
[])]
if
getattr
(
comp
,
'multiselect'
,
False
):
if
getattr
(
comp
,
'multiselect'
,
False
):
comp
.
elem_classes
.
append
(
'multiselect'
)
comp
.
elem_classes
.
append
(
'multiselect'
)
...
...
modules/sd_hijack_clip_old.py
View file @
d6a9b22c
...
@@ -75,7 +75,8 @@ def forward_old(self: sd_hijack_clip.FrozenCLIPEmbedderWithCustomWordsBase, text
...
@@ -75,7 +75,8 @@ def forward_old(self: sd_hijack_clip.FrozenCLIPEmbedderWithCustomWordsBase, text
self
.
hijack
.
comments
+=
hijack_comments
self
.
hijack
.
comments
+=
hijack_comments
if
len
(
used_custom_terms
)
>
0
:
if
len
(
used_custom_terms
)
>
0
:
self
.
hijack
.
comments
.
append
(
"Used embeddings: "
+
", "
.
join
([
f
'{word} [{checksum}]'
for
word
,
checksum
in
used_custom_terms
]))
embedding_names
=
", "
.
join
(
f
"{word} [{checksum}]"
for
word
,
checksum
in
used_custom_terms
)
self
.
hijack
.
comments
.
append
(
f
"Used embeddings: {embedding_names}"
)
self
.
hijack
.
fixes
=
hijack_fixes
self
.
hijack
.
fixes
=
hijack_fixes
return
self
.
process_tokens
(
remade_batch_tokens
,
batch_multipliers
)
return
self
.
process_tokens
(
remade_batch_tokens
,
batch_multipliers
)
modules/sd_hijack_unet.py
View file @
d6a9b22c
...
@@ -18,7 +18,7 @@ class TorchHijackForUnet:
...
@@ -18,7 +18,7 @@ class TorchHijackForUnet:
if
hasattr
(
torch
,
item
):
if
hasattr
(
torch
,
item
):
return
getattr
(
torch
,
item
)
return
getattr
(
torch
,
item
)
raise
AttributeError
(
"'{}' object has no attribute '{}'"
.
format
(
type
(
self
)
.
__name__
,
item
)
)
raise
AttributeError
(
f
"'{type(self).__name__}' object has no attribute '{item}'"
)
def
cat
(
self
,
tensors
,
*
args
,
**
kwargs
):
def
cat
(
self
,
tensors
,
*
args
,
**
kwargs
):
if
len
(
tensors
)
==
2
:
if
len
(
tensors
)
==
2
:
...
...
modules/sd_models.py
View file @
d6a9b22c
...
@@ -47,7 +47,7 @@ class CheckpointInfo:
...
@@ -47,7 +47,7 @@ class CheckpointInfo:
self
.
model_name
=
os
.
path
.
splitext
(
name
.
replace
(
"/"
,
"_"
)
.
replace
(
"
\\
"
,
"_"
))[
0
]
self
.
model_name
=
os
.
path
.
splitext
(
name
.
replace
(
"/"
,
"_"
)
.
replace
(
"
\\
"
,
"_"
))[
0
]
self
.
hash
=
model_hash
(
filename
)
self
.
hash
=
model_hash
(
filename
)
self
.
sha256
=
hashes
.
sha256_from_cache
(
self
.
filename
,
"checkpoint/"
+
name
)
self
.
sha256
=
hashes
.
sha256_from_cache
(
self
.
filename
,
f
"checkpoint/{name}"
)
self
.
shorthash
=
self
.
sha256
[
0
:
10
]
if
self
.
sha256
else
None
self
.
shorthash
=
self
.
sha256
[
0
:
10
]
if
self
.
sha256
else
None
self
.
title
=
name
if
self
.
shorthash
is
None
else
f
'{name} [{self.shorthash}]'
self
.
title
=
name
if
self
.
shorthash
is
None
else
f
'{name} [{self.shorthash}]'
...
@@ -69,7 +69,7 @@ class CheckpointInfo:
...
@@ -69,7 +69,7 @@ class CheckpointInfo:
checkpoint_alisases
[
id
]
=
self
checkpoint_alisases
[
id
]
=
self
def
calculate_shorthash
(
self
):
def
calculate_shorthash
(
self
):
self
.
sha256
=
hashes
.
sha256
(
self
.
filename
,
"checkpoint/"
+
self
.
name
)
self
.
sha256
=
hashes
.
sha256
(
self
.
filename
,
f
"checkpoint/{self.name}"
)
if
self
.
sha256
is
None
:
if
self
.
sha256
is
None
:
return
return
...
...
modules/sd_models_config.py
View file @
d6a9b22c
...
@@ -111,7 +111,7 @@ def find_checkpoint_config_near_filename(info):
...
@@ -111,7 +111,7 @@ def find_checkpoint_config_near_filename(info):
if
info
is
None
:
if
info
is
None
:
return
None
return
None
config
=
os
.
path
.
splitext
(
info
.
filename
)[
0
]
+
"
.yaml"
config
=
f
"{os.path.splitext(info.filename)[0]}
.yaml"
if
os
.
path
.
exists
(
config
):
if
os
.
path
.
exists
(
config
):
return
config
return
config
...
...
modules/sd_samplers_kdiffusion.py
View file @
d6a9b22c
...
@@ -198,7 +198,7 @@ class TorchHijack:
...
@@ -198,7 +198,7 @@ class TorchHijack:
if
hasattr
(
torch
,
item
):
if
hasattr
(
torch
,
item
):
return
getattr
(
torch
,
item
)
return
getattr
(
torch
,
item
)
raise
AttributeError
(
"'{}' object has no attribute '{}'"
.
format
(
type
(
self
)
.
__name__
,
item
)
)
raise
AttributeError
(
f
"'{type(self).__name__}' object has no attribute '{item}'"
)
def
randn_like
(
self
,
x
):
def
randn_like
(
self
,
x
):
if
self
.
sampler_noises
:
if
self
.
sampler_noises
:
...
...
modules/sd_vae.py
View file @
d6a9b22c
...
@@ -89,7 +89,7 @@ def refresh_vae_list():
...
@@ -89,7 +89,7 @@ def refresh_vae_list():
def
find_vae_near_checkpoint
(
checkpoint_file
):
def
find_vae_near_checkpoint
(
checkpoint_file
):
checkpoint_path
=
os
.
path
.
splitext
(
checkpoint_file
)[
0
]
checkpoint_path
=
os
.
path
.
splitext
(
checkpoint_file
)[
0
]
for
vae_location
in
[
checkpoint_path
+
".vae.pt"
,
checkpoint_path
+
".vae.ckpt"
,
checkpoint_path
+
"
.vae.safetensors"
]:
for
vae_location
in
[
f
"{checkpoint_path}.vae.pt"
,
f
"{checkpoint_path}.vae.ckpt"
,
f
"{checkpoint_path}
.vae.safetensors"
]:
if
os
.
path
.
isfile
(
vae_location
):
if
os
.
path
.
isfile
(
vae_location
):
return
vae_location
return
vae_location
...
...
modules/styles.py
View file @
d6a9b22c
...
@@ -74,7 +74,7 @@ class StyleDatabase:
...
@@ -74,7 +74,7 @@ class StyleDatabase:
def
save_styles
(
self
,
path
:
str
)
->
None
:
def
save_styles
(
self
,
path
:
str
)
->
None
:
# Always keep a backup file around
# Always keep a backup file around
if
os
.
path
.
exists
(
path
):
if
os
.
path
.
exists
(
path
):
shutil
.
copy
(
path
,
path
+
"
.bak"
)
shutil
.
copy
(
path
,
f
"{path}
.bak"
)
fd
=
os
.
open
(
path
,
os
.
O_RDWR
|
os
.
O_CREAT
)
fd
=
os
.
open
(
path
,
os
.
O_RDWR
|
os
.
O_CREAT
)
with
os
.
fdopen
(
fd
,
"w"
,
encoding
=
"utf-8-sig"
,
newline
=
''
)
as
file
:
with
os
.
fdopen
(
fd
,
"w"
,
encoding
=
"utf-8-sig"
,
newline
=
''
)
as
file
:
...
...
modules/textual_inversion/autocrop.py
View file @
d6a9b22c
...
@@ -111,7 +111,7 @@ def focal_point(im, settings):
...
@@ -111,7 +111,7 @@ def focal_point(im, settings):
if
corner_centroid
is
not
None
:
if
corner_centroid
is
not
None
:
color
=
BLUE
color
=
BLUE
box
=
corner_centroid
.
bounding
(
max_size
*
corner_centroid
.
weight
)
box
=
corner_centroid
.
bounding
(
max_size
*
corner_centroid
.
weight
)
d
.
text
((
box
[
0
],
box
[
1
]
-
15
),
"Edge:
%.02
f"
%
corner_centroid
.
weight
,
fill
=
color
)
d
.
text
((
box
[
0
],
box
[
1
]
-
15
),
f
"Edge: {corner_centroid.weight:.02f}"
,
fill
=
color
)
d
.
ellipse
(
box
,
outline
=
color
)
d
.
ellipse
(
box
,
outline
=
color
)
if
len
(
corner_points
)
>
1
:
if
len
(
corner_points
)
>
1
:
for
f
in
corner_points
:
for
f
in
corner_points
:
...
@@ -119,7 +119,7 @@ def focal_point(im, settings):
...
@@ -119,7 +119,7 @@ def focal_point(im, settings):
if
entropy_centroid
is
not
None
:
if
entropy_centroid
is
not
None
:
color
=
"#ff0"
color
=
"#ff0"
box
=
entropy_centroid
.
bounding
(
max_size
*
entropy_centroid
.
weight
)
box
=
entropy_centroid
.
bounding
(
max_size
*
entropy_centroid
.
weight
)
d
.
text
((
box
[
0
],
box
[
1
]
-
15
),
"Entropy:
%.02
f"
%
entropy_centroid
.
weight
,
fill
=
color
)
d
.
text
((
box
[
0
],
box
[
1
]
-
15
),
f
"Entropy: {entropy_centroid.weight:.02f}"
,
fill
=
color
)
d
.
ellipse
(
box
,
outline
=
color
)
d
.
ellipse
(
box
,
outline
=
color
)
if
len
(
entropy_points
)
>
1
:
if
len
(
entropy_points
)
>
1
:
for
f
in
entropy_points
:
for
f
in
entropy_points
:
...
@@ -127,7 +127,7 @@ def focal_point(im, settings):
...
@@ -127,7 +127,7 @@ def focal_point(im, settings):
if
face_centroid
is
not
None
:
if
face_centroid
is
not
None
:
color
=
RED
color
=
RED
box
=
face_centroid
.
bounding
(
max_size
*
face_centroid
.
weight
)
box
=
face_centroid
.
bounding
(
max_size
*
face_centroid
.
weight
)
d
.
text
((
box
[
0
],
box
[
1
]
-
15
),
"Face:
%.02
f"
%
face_centroid
.
weight
,
fill
=
color
)
d
.
text
((
box
[
0
],
box
[
1
]
-
15
),
f
"Face: {face_centroid.weight:.02f}"
,
fill
=
color
)
d
.
ellipse
(
box
,
outline
=
color
)
d
.
ellipse
(
box
,
outline
=
color
)
if
len
(
face_points
)
>
1
:
if
len
(
face_points
)
>
1
:
for
f
in
face_points
:
for
f
in
face_points
:
...
...
modules/textual_inversion/dataset.py
View file @
d6a9b22c
...
@@ -72,7 +72,7 @@ class PersonalizedBase(Dataset):
...
@@ -72,7 +72,7 @@ class PersonalizedBase(Dataset):
except
Exception
:
except
Exception
:
continue
continue
text_filename
=
os
.
path
.
splitext
(
path
)[
0
]
+
"
.txt"
text_filename
=
f
"{os.path.splitext(path)[0]}
.txt"
filename
=
os
.
path
.
basename
(
path
)
filename
=
os
.
path
.
basename
(
path
)
if
os
.
path
.
exists
(
text_filename
):
if
os
.
path
.
exists
(
text_filename
):
...
...
modules/textual_inversion/preprocess.py
View file @
d6a9b22c
...
@@ -63,9 +63,9 @@ def save_pic_with_caption(image, index, params: PreprocessParams, existing_capti
...
@@ -63,9 +63,9 @@ def save_pic_with_caption(image, index, params: PreprocessParams, existing_capti
image
.
save
(
os
.
path
.
join
(
params
.
dstdir
,
f
"{basename}.png"
))
image
.
save
(
os
.
path
.
join
(
params
.
dstdir
,
f
"{basename}.png"
))
if
params
.
preprocess_txt_action
==
'prepend'
and
existing_caption
:
if
params
.
preprocess_txt_action
==
'prepend'
and
existing_caption
:
caption
=
existing_caption
+
' '
+
caption
caption
=
f
"{existing_caption} {caption}"
elif
params
.
preprocess_txt_action
==
'append'
and
existing_caption
:
elif
params
.
preprocess_txt_action
==
'append'
and
existing_caption
:
caption
=
caption
+
' '
+
existing_caption
caption
=
f
"{caption} {existing_caption}"
elif
params
.
preprocess_txt_action
==
'copy'
and
existing_caption
:
elif
params
.
preprocess_txt_action
==
'copy'
and
existing_caption
:
caption
=
existing_caption
caption
=
existing_caption
...
@@ -174,7 +174,7 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pre
...
@@ -174,7 +174,7 @@ def preprocess_work(process_src, process_dst, process_width, process_height, pre
params
.
src
=
filename
params
.
src
=
filename
existing_caption
=
None
existing_caption
=
None
existing_caption_filename
=
os
.
path
.
splitext
(
filename
)[
0
]
+
'.txt'
existing_caption_filename
=
f
"{os.path.splitext(filename)[0]}.txt"
if
os
.
path
.
exists
(
existing_caption_filename
):
if
os
.
path
.
exists
(
existing_caption_filename
):
with
open
(
existing_caption_filename
,
'r'
,
encoding
=
"utf8"
)
as
file
:
with
open
(
existing_caption_filename
,
'r'
,
encoding
=
"utf8"
)
as
file
:
existing_caption
=
file
.
read
()
existing_caption
=
file
.
read
()
...
...
modules/textual_inversion/textual_inversion.py
View file @
d6a9b22c
...
@@ -69,7 +69,7 @@ class Embedding:
...
@@ -69,7 +69,7 @@ class Embedding:
'hash'
:
self
.
checksum
(),
'hash'
:
self
.
checksum
(),
'optimizer_state_dict'
:
self
.
optimizer_state_dict
,
'optimizer_state_dict'
:
self
.
optimizer_state_dict
,
}
}
torch
.
save
(
optimizer_saved_dict
,
f
ilename
+
'.optim'
)
torch
.
save
(
optimizer_saved_dict
,
f
"{filename}.optim"
)
def
checksum
(
self
):
def
checksum
(
self
):
if
self
.
cached_checksum
is
not
None
:
if
self
.
cached_checksum
is
not
None
:
...
@@ -437,8 +437,8 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st
...
@@ -437,8 +437,8 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st
optimizer
=
torch
.
optim
.
AdamW
([
embedding
.
vec
],
lr
=
scheduler
.
learn_rate
,
weight_decay
=
0.0
)
optimizer
=
torch
.
optim
.
AdamW
([
embedding
.
vec
],
lr
=
scheduler
.
learn_rate
,
weight_decay
=
0.0
)
if
shared
.
opts
.
save_optimizer_state
:
if
shared
.
opts
.
save_optimizer_state
:
optimizer_state_dict
=
None
optimizer_state_dict
=
None
if
os
.
path
.
exists
(
f
ilename
+
'.optim'
):
if
os
.
path
.
exists
(
f
"{filename}.optim"
):
optimizer_saved_dict
=
torch
.
load
(
f
ilename
+
'.optim'
,
map_location
=
'cpu'
)
optimizer_saved_dict
=
torch
.
load
(
f
"{filename}.optim"
,
map_location
=
'cpu'
)
if
embedding
.
checksum
()
==
optimizer_saved_dict
.
get
(
'hash'
,
None
):
if
embedding
.
checksum
()
==
optimizer_saved_dict
.
get
(
'hash'
,
None
):
optimizer_state_dict
=
optimizer_saved_dict
.
get
(
'optimizer_state_dict'
,
None
)
optimizer_state_dict
=
optimizer_saved_dict
.
get
(
'optimizer_state_dict'
,
None
)
...
@@ -599,7 +599,7 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st
...
@@ -599,7 +599,7 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st
data
=
torch
.
load
(
last_saved_file
)
data
=
torch
.
load
(
last_saved_file
)
info
.
add_text
(
"sd-ti-embedding"
,
embedding_to_b64
(
data
))
info
.
add_text
(
"sd-ti-embedding"
,
embedding_to_b64
(
data
))
title
=
"<{}>"
.
format
(
data
.
get
(
'name'
,
'???'
))
title
=
f
"<{data.get('name', '???')}>"
try
:
try
:
vectorSize
=
list
(
data
[
'string_to_param'
]
.
values
())[
0
]
.
shape
[
0
]
vectorSize
=
list
(
data
[
'string_to_param'
]
.
values
())[
0
]
.
shape
[
0
]
...
@@ -608,8 +608,8 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st
...
@@ -608,8 +608,8 @@ def train_embedding(id_task, embedding_name, learn_rate, batch_size, gradient_st
checkpoint
=
sd_models
.
select_checkpoint
()
checkpoint
=
sd_models
.
select_checkpoint
()
footer_left
=
checkpoint
.
model_name
footer_left
=
checkpoint
.
model_name
footer_mid
=
'[{}]'
.
format
(
checkpoint
.
shorthash
)
footer_mid
=
f
'[{checkpoint.shorthash}]'
footer_right
=
'{}v {}s'
.
format
(
vectorSize
,
steps_done
)
footer_right
=
f
'{vectorSize}v {steps_done}s'
captioned_image
=
caption_image_overlay
(
image
,
title
,
footer_left
,
footer_mid
,
footer_right
)
captioned_image
=
caption_image_overlay
(
image
,
title
,
footer_left
,
footer_mid
,
footer_right
)
captioned_image
=
insert_image_data_embed
(
captioned_image
,
data
)
captioned_image
=
insert_image_data_embed
(
captioned_image
,
data
)
...
...
modules/ui.py
View file @
d6a9b22c
...
@@ -101,7 +101,7 @@ def visit(x, func, path=""):
...
@@ -101,7 +101,7 @@ def visit(x, func, path=""):
for
c
in
x
.
children
:
for
c
in
x
.
children
:
visit
(
c
,
func
,
path
)
visit
(
c
,
func
,
path
)
elif
x
.
label
is
not
None
:
elif
x
.
label
is
not
None
:
func
(
path
+
"/"
+
str
(
x
.
label
)
,
x
)
func
(
f
"{path}/{x.label}"
,
x
)
def
add_style
(
name
:
str
,
prompt
:
str
,
negative_prompt
:
str
):
def
add_style
(
name
:
str
,
prompt
:
str
,
negative_prompt
:
str
):
...
@@ -166,7 +166,7 @@ def process_interrogate(interrogation_function, mode, ii_input_dir, ii_output_di
...
@@ -166,7 +166,7 @@ def process_interrogate(interrogation_function, mode, ii_input_dir, ii_output_di
img
=
Image
.
open
(
image
)
img
=
Image
.
open
(
image
)
filename
=
os
.
path
.
basename
(
image
)
filename
=
os
.
path
.
basename
(
image
)
left
,
_
=
os
.
path
.
splitext
(
filename
)
left
,
_
=
os
.
path
.
splitext
(
filename
)
print
(
interrogation_function
(
img
),
file
=
open
(
os
.
path
.
join
(
ii_output_dir
,
left
+
"
.txt"
),
'a'
))
print
(
interrogation_function
(
img
),
file
=
open
(
os
.
path
.
join
(
ii_output_dir
,
f
"{left}
.txt"
),
'a'
))
return
[
gr
.
update
(),
None
]
return
[
gr
.
update
(),
None
]
...
@@ -182,29 +182,29 @@ def interrogate_deepbooru(image):
...
@@ -182,29 +182,29 @@ def interrogate_deepbooru(image):
def
create_seed_inputs
(
target_interface
):
def
create_seed_inputs
(
target_interface
):
with
FormRow
(
elem_id
=
target_interface
+
'_seed_row'
,
variant
=
"compact"
):
with
FormRow
(
elem_id
=
f
"{target_interface}_seed_row"
,
variant
=
"compact"
):
seed
=
(
gr
.
Textbox
if
cmd_opts
.
use_textbox_seed
else
gr
.
Number
)(
label
=
'Seed'
,
value
=-
1
,
elem_id
=
target_interface
+
'_seed'
)
seed
=
(
gr
.
Textbox
if
cmd_opts
.
use_textbox_seed
else
gr
.
Number
)(
label
=
'Seed'
,
value
=-
1
,
elem_id
=
f
"{target_interface}_seed"
)
seed
.
style
(
container
=
False
)
seed
.
style
(
container
=
False
)
random_seed
=
ToolButton
(
random_symbol
,
elem_id
=
target_interface
+
'_random_seed'
,
label
=
'Random seed'
)
random_seed
=
ToolButton
(
random_symbol
,
elem_id
=
f
"{target_interface}_random_seed"
,
label
=
'Random seed'
)
reuse_seed
=
ToolButton
(
reuse_symbol
,
elem_id
=
target_interface
+
'_reuse_seed'
,
label
=
'Reuse seed'
)
reuse_seed
=
ToolButton
(
reuse_symbol
,
elem_id
=
f
"{target_interface}_reuse_seed"
,
label
=
'Reuse seed'
)
seed_checkbox
=
gr
.
Checkbox
(
label
=
'Extra'
,
elem_id
=
target_interface
+
'_subseed_show'
,
value
=
False
)
seed_checkbox
=
gr
.
Checkbox
(
label
=
'Extra'
,
elem_id
=
f
"{target_interface}_subseed_show"
,
value
=
False
)
# Components to show/hide based on the 'Extra' checkbox
# Components to show/hide based on the 'Extra' checkbox
seed_extras
=
[]
seed_extras
=
[]
with
FormRow
(
visible
=
False
,
elem_id
=
target_interface
+
'_subseed_row'
)
as
seed_extra_row_1
:
with
FormRow
(
visible
=
False
,
elem_id
=
f
"{target_interface}_subseed_row"
)
as
seed_extra_row_1
:
seed_extras
.
append
(
seed_extra_row_1
)
seed_extras
.
append
(
seed_extra_row_1
)
subseed
=
gr
.
Number
(
label
=
'Variation seed'
,
value
=-
1
,
elem_id
=
target_interface
+
'_subseed'
)
subseed
=
gr
.
Number
(
label
=
'Variation seed'
,
value
=-
1
,
elem_id
=
f
"{target_interface}_subseed"
)
subseed
.
style
(
container
=
False
)
subseed
.
style
(
container
=
False
)
random_subseed
=
ToolButton
(
random_symbol
,
elem_id
=
target_interface
+
'_random_subseed'
)
random_subseed
=
ToolButton
(
random_symbol
,
elem_id
=
f
"{target_interface}_random_subseed"
)
reuse_subseed
=
ToolButton
(
reuse_symbol
,
elem_id
=
target_interface
+
'_reuse_subseed'
)
reuse_subseed
=
ToolButton
(
reuse_symbol
,
elem_id
=
f
"{target_interface}_reuse_subseed"
)
subseed_strength
=
gr
.
Slider
(
label
=
'Variation strength'
,
value
=
0.0
,
minimum
=
0
,
maximum
=
1
,
step
=
0.01
,
elem_id
=
target_interface
+
'_subseed_strength'
)
subseed_strength
=
gr
.
Slider
(
label
=
'Variation strength'
,
value
=
0.0
,
minimum
=
0
,
maximum
=
1
,
step
=
0.01
,
elem_id
=
f
"{target_interface}_subseed_strength"
)
with
FormRow
(
visible
=
False
)
as
seed_extra_row_2
:
with
FormRow
(
visible
=
False
)
as
seed_extra_row_2
:
seed_extras
.
append
(
seed_extra_row_2
)
seed_extras
.
append
(
seed_extra_row_2
)
seed_resize_from_w
=
gr
.
Slider
(
minimum
=
0
,
maximum
=
2048
,
step
=
8
,
label
=
"Resize seed from width"
,
value
=
0
,
elem_id
=
target_interface
+
'_seed_resize_from_w'
)
seed_resize_from_w
=
gr
.
Slider
(
minimum
=
0
,
maximum
=
2048
,
step
=
8
,
label
=
"Resize seed from width"
,
value
=
0
,
elem_id
=
f
"{target_interface}_seed_resize_from_w"
)
seed_resize_from_h
=
gr
.
Slider
(
minimum
=
0
,
maximum
=
2048
,
step
=
8
,
label
=
"Resize seed from height"
,
value
=
0
,
elem_id
=
target_interface
+
'_seed_resize_from_h'
)
seed_resize_from_h
=
gr
.
Slider
(
minimum
=
0
,
maximum
=
2048
,
step
=
8
,
label
=
"Resize seed from height"
,
value
=
0
,
elem_id
=
f
"{target_interface}_seed_resize_from_h"
)
random_seed
.
click
(
fn
=
lambda
:
-
1
,
show_progress
=
False
,
inputs
=
[],
outputs
=
[
seed
])
random_seed
.
click
(
fn
=
lambda
:
-
1
,
show_progress
=
False
,
inputs
=
[],
outputs
=
[
seed
])
random_subseed
.
click
(
fn
=
lambda
:
-
1
,
show_progress
=
False
,
inputs
=
[],
outputs
=
[
subseed
])
random_subseed
.
click
(
fn
=
lambda
:
-
1
,
show_progress
=
False
,
inputs
=
[],
outputs
=
[
subseed
])
...
@@ -765,7 +765,7 @@ def create_ui():
...
@@ -765,7 +765,7 @@ def create_ui():
)
)
button
.
click
(
button
.
click
(
fn
=
lambda
:
None
,
fn
=
lambda
:
None
,
_js
=
"switch_to_"
+
name
.
replace
(
" "
,
"_"
)
,
_js
=
f
"switch_to_{name.replace(' ', '_')}"
,
inputs
=
[],
inputs
=
[],
outputs
=
[],
outputs
=
[],
)
)
...
@@ -1462,18 +1462,18 @@ def create_ui():
...
@@ -1462,18 +1462,18 @@ def create_ui():
elif
t
==
bool
:
elif
t
==
bool
:
comp
=
gr
.
Checkbox
comp
=
gr
.
Checkbox
else
:
else
:
raise
Exception
(
f
'bad options item type: {
str(t)
} for key {key}'
)
raise
Exception
(
f
'bad options item type: {
t
} for key {key}'
)
elem_id
=
"setting_"
+
key
elem_id
=
f
"setting_{key}"
if
info
.
refresh
is
not
None
:
if
info
.
refresh
is
not
None
:
if
is_quicksettings
:
if
is_quicksettings
:
res
=
comp
(
label
=
info
.
label
,
value
=
fun
(),
elem_id
=
elem_id
,
**
(
args
or
{}))
res
=
comp
(
label
=
info
.
label
,
value
=
fun
(),
elem_id
=
elem_id
,
**
(
args
or
{}))
create_refresh_button
(
res
,
info
.
refresh
,
info
.
component_args
,
"refresh_"
+
key
)
create_refresh_button
(
res
,
info
.
refresh
,
info
.
component_args
,
f
"refresh_{key}"
)
else
:
else
:
with
FormRow
():
with
FormRow
():
res
=
comp
(
label
=
info
.
label
,
value
=
fun
(),
elem_id
=
elem_id
,
**
(
args
or
{}))
res
=
comp
(
label
=
info
.
label
,
value
=
fun
(),
elem_id
=
elem_id
,
**
(
args
or
{}))
create_refresh_button
(
res
,
info
.
refresh
,
info
.
component_args
,
"refresh_"
+
key
)
create_refresh_button
(
res
,
info
.
refresh
,
info
.
component_args
,
f
"refresh_{key}"
)
else
:
else
:
res
=
comp
(
label
=
info
.
label
,
value
=
fun
(),
elem_id
=
elem_id
,
**
(
args
or
{}))
res
=
comp
(
label
=
info
.
label
,
value
=
fun
(),
elem_id
=
elem_id
,
**
(
args
or
{}))
...
@@ -1545,7 +1545,7 @@ def create_ui():
...
@@ -1545,7 +1545,7 @@ def create_ui():
current_tab
.
__exit__
()
current_tab
.
__exit__
()
gr
.
Group
()
gr
.
Group
()
current_tab
=
gr
.
TabItem
(
elem_id
=
"settings_{}"
.
format
(
elem_id
)
,
label
=
text
)
current_tab
=
gr
.
TabItem
(
elem_id
=
f
"settings_{elem_id}"
,
label
=
text
)
current_tab
.
__enter__
()
current_tab
.
__enter__
()
current_row
=
gr
.
Column
(
variant
=
'compact'
)
current_row
=
gr
.
Column
(
variant
=
'compact'
)
current_row
.
__enter__
()
current_row
.
__enter__
()
...
@@ -1664,7 +1664,7 @@ def create_ui():
...
@@ -1664,7 +1664,7 @@ def create_ui():
for
interface
,
label
,
ifid
in
interfaces
:
for
interface
,
label
,
ifid
in
interfaces
:
if
label
in
shared
.
opts
.
hidden_tabs
:
if
label
in
shared
.
opts
.
hidden_tabs
:
continue
continue
with
gr
.
TabItem
(
label
,
id
=
ifid
,
elem_id
=
'tab_'
+
ifid
):
with
gr
.
TabItem
(
label
,
id
=
ifid
,
elem_id
=
f
"tab_{ifid}"
):
interface
.
render
()
interface
.
render
()
if
os
.
path
.
exists
(
os
.
path
.
join
(
script_path
,
"notification.mp3"
)):
if
os
.
path
.
exists
(
os
.
path
.
join
(
script_path
,
"notification.mp3"
)):
...
@@ -1771,10 +1771,10 @@ def create_ui():
...
@@ -1771,10 +1771,10 @@ def create_ui():
def
loadsave
(
path
,
x
):
def
loadsave
(
path
,
x
):
def
apply_field
(
obj
,
field
,
condition
=
None
,
init_field
=
None
):
def
apply_field
(
obj
,
field
,
condition
=
None
,
init_field
=
None
):
key
=
path
+
"/"
+
field
key
=
f
"{path}/{field}"
if
getattr
(
obj
,
'custom_script_source'
,
None
)
is
not
None
:
if
getattr
(
obj
,
'custom_script_source'
,
None
)
is
not
None
:
key
=
'customscript/'
+
obj
.
custom_script_source
+
'/'
+
key
key
=
f
"customscript/{obj.custom_script_source}/{key}"
if
getattr
(
obj
,
'do_not_save_to_config'
,
False
):
if
getattr
(
obj
,
'do_not_save_to_config'
,
False
):
return
return
...
...
modules/ui_extensions.py
View file @
d6a9b22c
...
@@ -61,7 +61,8 @@ def save_config_state(name):
...
@@ -61,7 +61,8 @@ def save_config_state(name):
if
not
name
:
if
not
name
:
name
=
"Config"
name
=
"Config"
current_config_state
[
"name"
]
=
name
current_config_state
[
"name"
]
=
name
filename
=
os
.
path
.
join
(
config_states_dir
,
datetime
.
now
()
.
strftime
(
"
%
Y_
%
m_
%
d-
%
H_
%
M_
%
S"
)
+
"_"
+
name
+
".json"
)
timestamp
=
datetime
.
now
()
.
strftime
(
'
%
Y_
%
m_
%
d-
%
H_
%
M_
%
S'
)
filename
=
os
.
path
.
join
(
config_states_dir
,
f
"{timestamp}_{name}.json"
)
print
(
f
"Saving backup of webui/extension state to {filename}."
)
print
(
f
"Saving backup of webui/extension state to {filename}."
)
with
open
(
filename
,
"w"
,
encoding
=
"utf-8"
)
as
f
:
with
open
(
filename
,
"w"
,
encoding
=
"utf-8"
)
as
f
:
json
.
dump
(
current_config_state
,
f
)
json
.
dump
(
current_config_state
,
f
)
...
...
modules/ui_extra_networks.py
View file @
d6a9b22c
...
@@ -69,7 +69,9 @@ class ExtraNetworksPage:
...
@@ -69,7 +69,9 @@ class ExtraNetworksPage:
pass
pass
def
link_preview
(
self
,
filename
):
def
link_preview
(
self
,
filename
):
return
"./sd_extra_networks/thumb?filename="
+
urllib
.
parse
.
quote
(
filename
.
replace
(
'
\\
'
,
'/'
))
+
"&mtime="
+
str
(
os
.
path
.
getmtime
(
filename
))
quoted_filename
=
urllib
.
parse
.
quote
(
filename
.
replace
(
'
\\
'
,
'/'
))
mtime
=
os
.
path
.
getmtime
(
filename
)
return
f
"./sd_extra_networks/thumb?filename={quoted_filename}&mtime={mtime}"
def
search_terms_from_path
(
self
,
filename
,
possible_directories
=
None
):
def
search_terms_from_path
(
self
,
filename
,
possible_directories
=
None
):
abspath
=
os
.
path
.
abspath
(
filename
)
abspath
=
os
.
path
.
abspath
(
filename
)
...
...
scripts/custom_code.py
View file @
d6a9b22c
...
@@ -77,7 +77,7 @@ return process_images(p)
...
@@ -77,7 +77,7 @@ return process_images(p)
module
.
display
=
display
module
.
display
=
display
indent
=
" "
*
indent_level
indent
=
" "
*
indent_level
indented
=
code
.
replace
(
'
\n
'
,
'
\n
'
+
indent
)
indented
=
code
.
replace
(
'
\n
'
,
f
"
\n
{indent}"
)
body
=
f
"""def __webuitemp__():
body
=
f
"""def __webuitemp__():
{indent}{indented}
{indent}{indented}
__webuitemp__()"""
__webuitemp__()"""
...
...
scripts/loopback.py
View file @
d6a9b22c
...
@@ -84,7 +84,7 @@ class Script(scripts.Script):
...
@@ -84,7 +84,7 @@ class Script(scripts.Script):
p
.
color_corrections
=
initial_color_corrections
p
.
color_corrections
=
initial_color_corrections
if
append_interrogation
!=
"None"
:
if
append_interrogation
!=
"None"
:
p
.
prompt
=
original_prompt
+
", "
if
original_prompt
!=
""
else
""
p
.
prompt
=
f
"{original_prompt}, "
if
original_prompt
else
""
if
append_interrogation
==
"CLIP"
:
if
append_interrogation
==
"CLIP"
:
p
.
prompt
+=
shared
.
interrogator
.
interrogate
(
p
.
init_images
[
0
])
p
.
prompt
+=
shared
.
interrogator
.
interrogate
(
p
.
init_images
[
0
])
elif
append_interrogation
==
"DeepBooru"
:
elif
append_interrogation
==
"DeepBooru"
:
...
...
scripts/xyz_grid.py
View file @
d6a9b22c
...
@@ -439,7 +439,7 @@ class Script(scripts.Script):
...
@@ -439,7 +439,7 @@ class Script(scripts.Script):
z_type
.
change
(
fn
=
select_axis
,
inputs
=
[
z_type
,
z_values_dropdown
],
outputs
=
[
fill_z_button
,
z_values
,
z_values_dropdown
])
z_type
.
change
(
fn
=
select_axis
,
inputs
=
[
z_type
,
z_values_dropdown
],
outputs
=
[
fill_z_button
,
z_values
,
z_values_dropdown
])
def
get_dropdown_update_from_params
(
axis
,
params
):
def
get_dropdown_update_from_params
(
axis
,
params
):
val_key
=
axis
+
"
Values"
val_key
=
f
"{axis}
Values"
vals
=
params
.
get
(
val_key
,
""
)
vals
=
params
.
get
(
val_key
,
""
)
valslist
=
[
x
.
strip
()
for
x
in
chain
.
from_iterable
(
csv
.
reader
(
StringIO
(
vals
)))
if
x
]
valslist
=
[
x
.
strip
()
for
x
in
chain
.
from_iterable
(
csv
.
reader
(
StringIO
(
vals
)))
if
x
]
return
gr
.
update
(
value
=
valslist
)
return
gr
.
update
(
value
=
valslist
)
...
...
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