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
Show 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){
...
@@ -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"
head
=
is_image2image
?
"img2img"
:
"txt2img"
s
=
$
(
gradioApp
().
getElementById
(
head
+
'_images_history_set_index'
)).
attr
(
"img_index"
)
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
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
)
page_index
=
int
(
page_index
)
f_list
=
os
.
listdir
(
dir_name
)
f_list
=
os
.
listdir
(
dir_name
)
file_list
=
[]
file_list
=
[]
...
@@ -8,7 +9,7 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
...
@@ -8,7 +9,7 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
continue
continue
file_list
.
append
(
file
)
file_list
.
append
(
file
)
file_list
=
sorted
(
file_list
,
key
=
lambda
file
:
-
os
.
path
.
getctime
(
os
.
path
.
join
(
dir_name
,
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
max_page_index
=
len
(
file_list
)
//
num
+
1
page_index
=
max_page_index
if
page_index
==
-
1
else
page_index
+
step
page_index
=
max_page_index
if
page_index
==
-
1
else
page_index
+
step
page_index
=
1
if
page_index
<
1
else
page_index
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):
...
@@ -16,75 +17,101 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
idx_frm
=
(
page_index
-
1
)
*
num
idx_frm
=
(
page_index
-
1
)
*
num
file_list
=
file_list
[
idx_frm
:
idx_frm
+
num
]
file_list
=
file_list
[
idx_frm
:
idx_frm
+
num
]
print
(
f
"Loading history page {page_index}"
)
print
(
f
"Loading history page {page_index}"
)
return
[
os
.
path
.
join
(
dir_name
,
file
)
for
file
in
file_list
],
page_index
,
file_list
image_index
=
int
(
image_index
)
def
first_page_click
(
is_img2img
,
dir_name
):
if
image_index
<
0
or
image_index
>
len
(
file_list
)
-
1
:
return
get_recent_images
(
is_img2img
,
dir_name
,
1
,
0
)
current_file
=
None
def
end_page_click
(
is_img2img
,
dir_name
):
hide_image
=
None
return
get_recent_images
(
is_img2img
,
dir_name
,
-
1
,
0
)
else
:
def
prev_page_click
(
is_img2img
,
dir_name
,
page_index
):
current_file
=
file_list
[
int
(
image_index
)]
return
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
-
1
)
hide_image
=
os
.
path
.
join
(
dir_name
,
current_file
)
def
next_page_click
(
is_img2img
,
dir_name
,
page_index
):
return
[
os
.
path
.
join
(
dir_name
,
file
)
for
file
in
file_list
],
page_index
,
file_list
,
current_file
,
hide_image
return
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
1
)
def
first_page_click
(
dir_name
,
page_index
,
image_index
):
def
page_index_change
(
is_img2img
,
dir_name
,
page_index
):
return
get_recent_images
(
dir_name
,
1
,
0
,
image_index
)
return
get_recent_images
(
is_img2img
,
dir_name
,
page_index
,
0
)
def
end_page_click
(
dir_name
,
page_index
,
image_index
):
def
show_image_info
(
num
,
filenames
):
return
get_recent_images
(
dir_name
,
-
1
,
0
,
image_index
)
return
filenames
[
int
(
num
)]
def
prev_page_click
(
dir_name
,
page_index
,
image_index
):
def
delete_image
(
is_img2img
,
dir_name
,
name
,
page_index
,
filenames
):
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
)
path
=
os
.
path
.
join
(
dir_name
,
name
)
if
os
.
path
.
exists
(
path
):
if
os
.
path
.
exists
(
path
):
print
(
f
"Delete file {path}"
)
print
(
f
"Delete file {path}"
)
os
.
remove
(
path
)
os
.
remove
(
path
)
i
=
0
images
,
page_index
,
file_list
,
current_file
,
hide_image
=
get_recent_images
(
dir_name
,
page_index
,
0
,
image_index
)
for
f
in
filenames
:
return
images
,
page_index
,
file_list
,
current_file
,
hide_image
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
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
):
def
id_name
(
is_img2img
,
name
):
return
(
"img2img"
if
is_img2img
else
"txt2img"
)
+
"_"
+
name
return
(
"img2img"
if
is_img2img
else
"txt2img"
)
+
"_"
+
name
with
gr
.
Row
():
if
is_img2img
:
if
is_img2img
:
dir_name
=
opts
.
outdir_img2img_samples
dir_name
=
opts
.
outdir_img2img_samples
else
:
else
:
dir_name
=
opts
.
outdir_txt2img_samples
dir_name
=
opts
.
outdir_txt2img_samples
first_page
=
gr
.
Button
(
'First Page'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_first_page"
))
with
gr
.
Row
():
prev_page
=
gr
.
Button
(
'Prev Page'
)
first_page
=
gr
.
Button
(
'First'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_first_page"
))
page_index
=
gr
.
Number
(
value
=
1
)
prev_page
=
gr
.
Button
(
'Prev'
)
next_page
=
gr
.
Button
(
'Next Page'
)
page_index
=
gr
.
Number
(
value
=
1
,
label
=
"Page Index"
)
end_page
=
gr
.
Button
(
'End Page'
)
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
():
with
gr
.
Row
():
delete
=
gr
.
Button
(
'Delete'
)
delete
=
gr
.
Button
(
'Delete'
)
Send
=
gr
.
Button
(
'Send'
)
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
():
with
gr
.
Row
():
with
gr
.
Column
(
elem_id
=
id_name
(
is_img2img
,
"images_history"
)):
# hiden items
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
)
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
)
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
()
filenames
=
gr
.
State
()
first_page
.
click
(
first_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
hide_image
=
gr
.
Image
(
visible
=
False
,
type
=
"pil"
)
next_page
.
click
(
next_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
info1
=
gr
.
Textbox
(
visible
=
False
)
prev_page
.
click
(
prev_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
info2
=
gr
.
Textbox
(
visible
=
False
)
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
)
# turn pages
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
])
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])
#page_index.change(page_index_change, inputs=[is_img2img_flag, img_path, page_index], outputs=[history_gallery, page_index])
def
create_history_tabs
(
gr
,
opts
):
#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
,
run_pnginfo
,
switch_dict
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history
:
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history
:
with
gr
.
Tabs
()
as
tabs
:
with
gr
.
Tabs
()
as
tabs
:
with
gr
.
Tab
(
"txt2img history"
,
id
=
"images_history_txt2img"
):
with
gr
.
Tab
(
"txt2img history"
,
id
=
"images_history_txt2img"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
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
.
Tab
(
"img2img history"
,
id
=
"images_history_img2img"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
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
return
images_history
modules/ui.py
View file @
23f29897
...
@@ -1131,8 +1131,15 @@ def create_ui(wrap_gradio_gpu_call):
...
@@ -1131,8 +1131,15 @@ def create_ui(wrap_gradio_gpu_call):
return
f
'{changed} settings changed.'
,
opts
.
dumpjson
()
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
:
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
settings_interface
:
settings_submit
=
gr
.
Button
(
value
=
"Apply settings"
,
variant
=
'primary'
)
settings_submit
=
gr
.
Button
(
value
=
"Apply settings"
,
variant
=
'primary'
)
result
=
gr
.
HTML
()
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