Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
stable-diffusion-webui
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
stable-diffusion-webui
Commits
23f29897
Commit
23f29897
authored
Oct 10, 2022
by
yfszzx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
images history over
parent
8a7c07a2
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
94 additions
and
184 deletions
+94
-184
images_history.js
javascript/images_history.js
+2
-2
images_history.py
modules/images_history.py
+84
-57
ui.py
modules/ui.py
+8
-1
testui.py
testui.py
+0
-124
No files found.
javascript/images_history.js
View file @
23f29897
...
...
@@ -58,9 +58,9 @@ function set_history_index_from_img(e){
}
}
}
function
images_history_get_current_img
(
is_image2image
){
function
images_history_get_current_img
(
is_image2image
,
image_path
,
files
){
head
=
is_image2image
?
"img2img"
:
"txt2img"
s
=
$
(
gradioApp
().
getElementById
(
head
+
'_images_history_set_index'
)).
attr
(
"img_index"
)
return
s
return
[
s
,
image_path
,
files
]
}
modules/images_history.py
View file @
23f29897
import
os
def
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
step
):
def
get_recent_images
(
dir_name
,
page_index
,
step
,
image_index
):
print
(
image_index
)
page_index
=
int
(
page_index
)
f_list
=
os
.
listdir
(
dir_name
)
file_list
=
[]
...
...
@@ -8,7 +9,7 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
continue
file_list
.
append
(
file
)
file_list
=
sorted
(
file_list
,
key
=
lambda
file
:
-
os
.
path
.
getctime
(
os
.
path
.
join
(
dir_name
,
file
)))
num
=
24
num
=
48
max_page_index
=
len
(
file_list
)
//
num
+
1
page_index
=
max_page_index
if
page_index
==
-
1
else
page_index
+
step
page_index
=
1
if
page_index
<
1
else
page_index
...
...
@@ -16,75 +17,101 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
idx_frm
=
(
page_index
-
1
)
*
num
file_list
=
file_list
[
idx_frm
:
idx_frm
+
num
]
print
(
f
"Loading history page {page_index}"
)
return
[
os
.
path
.
join
(
dir_name
,
file
)
for
file
in
file_list
],
page_index
,
file_list
def
first_page_click
(
is_img2img
,
dir_name
):
return
get_recent_images
(
is_img2img
,
dir_name
,
1
,
0
)
def
end_page_click
(
is_img2img
,
dir_name
):
return
get_recent_images
(
is_img2img
,
dir_name
,
-
1
,
0
)
def
prev_page_click
(
is_img2img
,
dir_name
,
page_index
):
return
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
-
1
)
def
next_page_click
(
is_img2img
,
dir_name
,
page_index
):
return
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
1
)
def
page_index_change
(
is_img2img
,
dir_name
,
page_index
):
return
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
0
)
def
show_image_info
(
num
,
filenames
):
return
filenames
[
int
(
num
)]
def
delete_image
(
is_img2img
,
dir_name
,
name
,
page_index
,
filenames
):
image_index
=
int
(
image_index
)
if
image_index
<
0
or
image_index
>
len
(
file_list
)
-
1
:
current_file
=
None
hide_image
=
None
else
:
current_file
=
file_list
[
int
(
image_index
)]
hide_image
=
os
.
path
.
join
(
dir_name
,
current_file
)
return
[
os
.
path
.
join
(
dir_name
,
file
)
for
file
in
file_list
],
page_index
,
file_list
,
current_file
,
hide_image
def
first_page_click
(
dir_name
,
page_index
,
image_index
):
return
get_recent_images
(
dir_name
,
1
,
0
,
image_index
)
def
end_page_click
(
dir_name
,
page_index
,
image_index
):
return
get_recent_images
(
dir_name
,
-
1
,
0
,
image_index
)
def
prev_page_click
(
dir_name
,
page_index
,
image_index
):
return
get_recent_images
(
dir_name
,
page_index
,
-
1
,
image_index
)
def
next_page_click
(
dir_name
,
page_index
,
image_index
):
return
get_recent_images
(
dir_name
,
page_index
,
1
,
image_index
)
def
page_index_change
(
dir_name
,
page_index
,
image_index
):
return
get_recent_images
(
dir_name
,
page_index
,
0
,
image_index
)
def
show_image_info
(
num
,
image_path
,
filenames
):
file
=
filenames
[
int
(
num
)]
return
file
,
num
,
os
.
path
.
join
(
image_path
,
file
)
def
delete_image
(
is_img2img
,
dir_name
,
name
,
page_index
,
filenames
,
image_index
):
print
(
"filename"
,
name
)
path
=
os
.
path
.
join
(
dir_name
,
name
)
if
os
.
path
.
exists
(
path
):
print
(
f
"Delete file {path}"
)
os
.
remove
(
path
)
i
=
0
for
f
in
filenames
:
if
f
==
name
:
break
i
+=
1
images
,
page_index
,
file_list
=
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
0
)
current_file
=
file_list
[
i
]
if
i
<
len
(
file_list
)
else
None
return
images
,
page_index
,
file_list
,
current_file
images
,
page_index
,
file_list
,
current_file
,
hide_image
=
get_recent_images
(
dir_name
,
page_index
,
0
,
image_index
)
return
images
,
page_index
,
file_list
,
current_file
,
hide_image
def
show_images_history
(
gr
,
opts
,
is_img2img
):
def
show_images_history
(
gr
,
opts
,
is_img2img
,
run_pnginfo
,
switch_dict
):
def
id_name
(
is_img2img
,
name
):
return
(
"img2img"
if
is_img2img
else
"txt2img"
)
+
"_"
+
name
with
gr
.
Row
():
if
is_img2img
:
dir_name
=
opts
.
outdir_img2img_samples
else
:
dir_name
=
opts
.
outdir_txt2img_samples
first_page
=
gr
.
Button
(
'First Page'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_first_page"
))
prev_page
=
gr
.
Button
(
'Prev Page'
)
page_index
=
gr
.
Number
(
value
=
1
)
next_page
=
gr
.
Button
(
'Next Page'
)
end_page
=
gr
.
Button
(
'End Page'
)
with
gr
.
Row
():
delete
=
gr
.
Button
(
'Delete'
)
Send
=
gr
.
Button
(
'Send'
)
with
gr
.
Row
():
with
gr
.
Column
(
elem_id
=
id_name
(
is_img2img
,
"images_history"
)):
history_gallery
=
gr
.
Gallery
(
label
=
"Images history"
)
.
style
(
grid
=
6
)
img_file_name
=
gr
.
Textbox
()
img_file_info
=
gr
.
Textbox
(
dir_name
)
img_path
=
gr
.
Textbox
(
dir_name
,
visible
=
False
)
set_index
=
gr
.
Button
(
'set_index'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_set_index"
))
is_img2img_flag
=
gr
.
Checkbox
(
is_img2img
,
visible
=
False
)
filenames
=
gr
.
State
()
first_page
.
click
(
first_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
next_page
.
click
(
next_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
prev_page
.
click
(
prev_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
end_page
.
click
(
end_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
page_index
.
submit
(
page_index_change
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
set_index
.
click
(
show_image_info
,
_js
=
"images_history_get_current_img"
,
inputs
=
[
is_img2img_flag
,
filenames
],
outputs
=
img_file_name
)
delete
.
click
(
delete_image
,
inputs
=
[
is_img2img_flag
,
img_path
,
img_file_name
,
page_index
,
filenames
],
outputs
=
[
history_gallery
,
page_index
,
filenames
,
img_file_name
])
if
is_img2img
:
dir_name
=
opts
.
outdir_img2img_samples
else
:
dir_name
=
opts
.
outdir_txt2img_samples
with
gr
.
Row
():
first_page
=
gr
.
Button
(
'First'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_first_page"
))
prev_page
=
gr
.
Button
(
'Prev'
)
page_index
=
gr
.
Number
(
value
=
1
,
label
=
"Page Index"
)
next_page
=
gr
.
Button
(
'Next'
)
end_page
=
gr
.
Button
(
'End'
)
with
gr
.
Row
(
elem_id
=
id_name
(
is_img2img
,
"images_history"
)):
with
gr
.
Row
():
with
gr
.
Column
():
history_gallery
=
gr
.
Gallery
(
show_label
=
False
)
.
style
(
grid
=
6
)
with
gr
.
Column
():
with
gr
.
Row
():
delete
=
gr
.
Button
(
'Delete'
)
pnginfo_send_to_txt2img
=
gr
.
Button
(
'Send to txt2img'
)
pnginfo_send_to_img2img
=
gr
.
Button
(
'Send to img2img'
)
with
gr
.
Row
():
with
gr
.
Column
():
img_file_info
=
gr
.
Textbox
(
dir_name
,
label
=
"Generate Info"
)
img_file_name
=
gr
.
Textbox
(
label
=
"File Name"
)
with
gr
.
Row
():
# hiden items
img_path
=
gr
.
Textbox
(
dir_name
,
visible
=
False
)
is_img2img_flag
=
gr
.
Checkbox
(
is_img2img
,
visible
=
False
)
image_index
=
gr
.
Textbox
(
value
=-
1
,
visible
=
False
)
set_index
=
gr
.
Button
(
'set_index'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_set_index"
))
filenames
=
gr
.
State
()
hide_image
=
gr
.
Image
(
visible
=
False
,
type
=
"pil"
)
info1
=
gr
.
Textbox
(
visible
=
False
)
info2
=
gr
.
Textbox
(
visible
=
False
)
# turn pages
gallery_inputs
=
[
img_path
,
page_index
,
image_index
]
gallery_outputs
=
[
history_gallery
,
page_index
,
filenames
,
img_file_name
,
hide_image
]
first_page
.
click
(
first_page_click
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
next_page
.
click
(
next_page_click
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
prev_page
.
click
(
prev_page_click
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
end_page
.
click
(
end_page_click
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
page_index
.
submit
(
page_index_change
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
#page_index.change(page_index_change, inputs=[is_img2img_flag, img_path, page_index], outputs=[history_gallery, page_index])
#other funcitons
set_index
.
click
(
show_image_info
,
_js
=
"images_history_get_current_img"
,
inputs
=
[
is_img2img_flag
,
img_path
,
filenames
],
outputs
=
[
img_file_name
,
image_index
,
hide_image
])
delete
.
click
(
delete_image
,
inputs
=
[
is_img2img_flag
,
img_path
,
img_file_name
,
page_index
,
filenames
,
image_index
],
outputs
=
gallery_outputs
)
hide_image
.
change
(
fn
=
run_pnginfo
,
inputs
=
[
hide_image
],
outputs
=
[
info1
,
img_file_info
,
info2
])
switch_dict
[
"fn"
](
pnginfo_send_to_txt2img
,
switch_dict
[
"t2i"
],
img_file_info
,
'switch_to_txt2img'
)
switch_dict
[
"fn"
](
pnginfo_send_to_img2img
,
switch_dict
[
"i2i"
],
img_file_info
,
'switch_to_img2img_img2img'
)
def
create_history_tabs
(
gr
,
opts
):
def
create_history_tabs
(
gr
,
opts
,
run_pnginfo
,
switch_dict
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history
:
with
gr
.
Tabs
()
as
tabs
:
with
gr
.
Tab
(
"txt2img history"
,
id
=
"images_history_txt2img"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history_txt2img
:
show_images_history
(
gr
,
opts
,
is_img2img
=
False
)
show_images_history
(
gr
,
opts
,
False
,
run_pnginfo
,
switch_dict
)
with
gr
.
Tab
(
"img2img history"
,
id
=
"images_history_img2img"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history_img2img
:
show_images_history
(
gr
,
opts
,
is_img2img
=
True
)
show_images_history
(
gr
,
opts
,
True
,
run_pnginfo
,
switch_dict
)
return
images_history
modules/ui.py
View file @
23f29897
...
...
@@ -1131,8 +1131,15 @@ def create_ui(wrap_gradio_gpu_call):
return
f
'{changed} settings changed.'
,
opts
.
dumpjson
()
#images history
images_history_switch_dict
=
{
"fn"
:
modules
.
generation_parameters_copypaste
.
connect_paste
,
"t2i"
:
txt2img_paste_fields
,
"i2i"
:
img2img_paste_fields
}
images_history
=
img_his
.
create_history_tabs
(
gr
,
opts
,
wrap_gradio_call
(
modules
.
extras
.
run_pnginfo
),
images_history_switch_dict
)
images_history
=
img_his
.
create_history_tabs
(
gr
,
opts
)
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
settings_interface
:
settings_submit
=
gr
.
Button
(
value
=
"Apply settings"
,
variant
=
'primary'
)
result
=
gr
.
HTML
()
...
...
testui.py
deleted
100644 → 0
View file @
8a7c07a2
import
os
import
threading
import
time
import
importlib
import
signal
import
threading
from
modules.paths
import
script_path
from
modules
import
devices
,
sd_samplers
import
modules.codeformer_model
as
codeformer
import
modules.extras
import
modules.face_restoration
import
modules.gfpgan_model
as
gfpgan
import
modules.img2img
import
modules.lowvram
import
modules.paths
import
modules.scripts
import
modules.sd_hijack
import
modules.sd_models
import
modules.shared
as
shared
import
modules.txt2img
import
modules.ui
from
modules
import
devices
from
modules
import
modelloader
from
modules.paths
import
script_path
from
modules.shared
import
cmd_opts
modelloader
.
cleanup_models
()
modules
.
sd_models
.
setup_model
()
codeformer
.
setup_model
(
cmd_opts
.
codeformer_models_path
)
gfpgan
.
setup_model
(
cmd_opts
.
gfpgan_models_path
)
shared
.
face_restorers
.
append
(
modules
.
face_restoration
.
FaceRestoration
())
modelloader
.
load_upscalers
()
queue_lock
=
threading
.
Lock
()
def
wrap_queued_call
(
func
):
def
f
(
*
args
,
**
kwargs
):
with
queue_lock
:
res
=
func
(
*
args
,
**
kwargs
)
return
res
return
f
def
wrap_gradio_gpu_call
(
func
,
extra_outputs
=
None
):
def
f
(
*
args
,
**
kwargs
):
devices
.
torch_gc
()
shared
.
state
.
sampling_step
=
0
shared
.
state
.
job_count
=
-
1
shared
.
state
.
job_no
=
0
shared
.
state
.
job_timestamp
=
shared
.
state
.
get_job_timestamp
()
shared
.
state
.
current_latent
=
None
shared
.
state
.
current_image
=
None
shared
.
state
.
current_image_sampling_step
=
0
shared
.
state
.
interrupted
=
False
shared
.
state
.
textinfo
=
None
with
queue_lock
:
res
=
func
(
*
args
,
**
kwargs
)
shared
.
state
.
job
=
""
shared
.
state
.
job_count
=
0
devices
.
torch_gc
()
return
res
return
modules
.
ui
.
wrap_gradio_call
(
f
,
extra_outputs
=
extra_outputs
)
modules
.
scripts
.
load_scripts
(
os
.
path
.
join
(
script_path
,
"scripts"
))
shared
.
sd_model
=
None
#modules.sd_models.load_model()
#shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights(shared.sd_model)))
def
webui
():
# make the program just exit at ctrl+c without waiting for anything
def
sigint_handler
(
sig
,
frame
):
print
(
f
'Interrupted with signal {sig} in {frame}'
)
os
.
_exit
(
0
)
signal
.
signal
(
signal
.
SIGINT
,
sigint_handler
)
while
1
:
demo
=
modules
.
ui
.
create_ui
(
wrap_gradio_gpu_call
=
wrap_gradio_gpu_call
)
demo
.
launch
(
share
=
cmd_opts
.
share
,
server_name
=
"0.0.0.0"
if
cmd_opts
.
listen
else
None
,
server_port
=
cmd_opts
.
port
,
debug
=
cmd_opts
.
gradio_debug
,
auth
=
[
tuple
(
cred
.
split
(
':'
))
for
cred
in
cmd_opts
.
gradio_auth
.
strip
(
'"'
)
.
split
(
','
)]
if
cmd_opts
.
gradio_auth
else
None
,
inbrowser
=
cmd_opts
.
autolaunch
,
prevent_thread_lock
=
True
)
while
1
:
time
.
sleep
(
0.5
)
if
getattr
(
demo
,
'do_restart'
,
False
):
time
.
sleep
(
0.5
)
demo
.
close
()
time
.
sleep
(
0.5
)
break
sd_samplers
.
set_samplers
()
print
(
'Reloading Custom Scripts'
)
modules
.
scripts
.
reload_scripts
(
os
.
path
.
join
(
script_path
,
"scripts"
))
print
(
'Reloading modules: modules.ui'
)
importlib
.
reload
(
modules
.
ui
)
print
(
'Restarting Gradio'
)
if
__name__
==
"__main__"
:
webui
()
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