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
23f29897
Commit
23f29897
authored
Oct 10, 2022
by
yfszzx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
images history over
parent
8a7c07a2
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
94 additions
and
184 deletions
+94
-184
javascript/images_history.js
javascript/images_history.js
+2
-2
modules/images_history.py
modules/images_history.py
+84
-57
modules/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
with
gr
.
Row
():
first_page
=
gr
.
Button
(
'First Page'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_first_page"
))
first_page
=
gr
.
Button
(
'First'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_first_page"
))
prev_page
=
gr
.
Button
(
'Prev Page'
)
prev_page
=
gr
.
Button
(
'Prev'
)
page_index
=
gr
.
Number
(
value
=
1
)
page_index
=
gr
.
Number
(
value
=
1
,
label
=
"Page Index"
)
next_page
=
gr
.
Button
(
'Next Page'
)
next_page
=
gr
.
Button
(
'Next'
)
end_page
=
gr
.
Button
(
'End Page'
)
end_page
=
gr
.
Button
(
'End'
)
with
gr
.
Row
():
with
gr
.
Row
(
elem_id
=
id_name
(
is_img2img
,
"images_history"
)):
delete
=
gr
.
Button
(
'Delete'
)
with
gr
.
Row
():
Send
=
gr
.
Button
(
'Send'
)
with
gr
.
Column
():
with
gr
.
Row
():
history_gallery
=
gr
.
Gallery
(
show_label
=
False
)
.
style
(
grid
=
6
)
with
gr
.
Column
(
elem_id
=
id_name
(
is_img2img
,
"images_history"
)):
with
gr
.
Column
():
history_gallery
=
gr
.
Gallery
(
label
=
"Images history"
)
.
style
(
grid
=
6
)
with
gr
.
Row
():
img_file_name
=
gr
.
Textbox
()
delete
=
gr
.
Button
(
'Delete'
)
img_file_info
=
gr
.
Textbox
(
dir_name
)
pnginfo_send_to_txt2img
=
gr
.
Button
(
'Send to txt2img'
)
img_path
=
gr
.
Textbox
(
dir_name
,
visible
=
False
)
pnginfo_send_to_img2img
=
gr
.
Button
(
'Send to img2img'
)
set_index
=
gr
.
Button
(
'set_index'
,
elem_id
=
id_name
(
is_img2img
,
"images_history_set_index"
))
with
gr
.
Row
():
is_img2img_flag
=
gr
.
Checkbox
(
is_img2img
,
visible
=
False
)
with
gr
.
Column
():
filenames
=
gr
.
State
()
img_file_info
=
gr
.
Textbox
(
dir_name
,
label
=
"Generate Info"
)
first_page
.
click
(
first_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
img_file_name
=
gr
.
Textbox
(
label
=
"File Name"
)
next_page
.
click
(
next_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
with
gr
.
Row
():
prev_page
.
click
(
prev_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
# hiden items
end_page
.
click
(
end_page_click
,
inputs
=
[
is_img2img_flag
,
img_path
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
img_path
=
gr
.
Textbox
(
dir_name
,
visible
=
False
)
page_index
.
submit
(
page_index_change
,
inputs
=
[
is_img2img_flag
,
img_path
,
page_index
],
outputs
=
[
history_gallery
,
page_index
,
filenames
])
is_img2img_flag
=
gr
.
Checkbox
(
is_img2img
,
visible
=
False
)
set_index
.
click
(
show_image_info
,
_js
=
"images_history_get_current_img"
,
inputs
=
[
is_img2img_flag
,
filenames
],
outputs
=
img_file_name
)
image_index
=
gr
.
Textbox
(
value
=-
1
,
visible
=
False
)
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
])
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])
#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
.
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