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
6b77af7a
Commit
6b77af7a
authored
Oct 14, 2022
by
AUTOMATIC1111
Committed by
GitHub
Oct 14, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2396 from yfszzx/master
Add a "History" tab
parents
67f447dd
f7712e28
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
375 additions
and
0 deletions
+375
-0
.gitignore
.gitignore
+2
-0
javascript/images_history.js
javascript/images_history.js
+198
-0
modules/images_history.py
modules/images_history.py
+165
-0
modules/ui.py
modules/ui.py
+10
-0
No files found.
.gitignore
View file @
6b77af7a
...
@@ -27,3 +27,5 @@ __pycache__
...
@@ -27,3 +27,5 @@ __pycache__
notification.mp3
notification.mp3
/SwinIR
/SwinIR
/textual_inversion
/textual_inversion
/images_history_testui.py
/repositorieslatent-diffusion
javascript/images_history.js
0 → 100644
View file @
6b77af7a
var
images_history_click_image
=
function
(){
if
(
!
this
.
classList
.
contains
(
"
transform
"
)){
var
gallery
=
images_history_get_parent_by_class
(
this
,
"
images_history_cantainor
"
);
var
buttons
=
gallery
.
querySelectorAll
(
"
.gallery-item
"
);
var
i
=
0
;
var
hidden_list
=
[];
buttons
.
forEach
(
function
(
e
){
if
(
e
.
style
.
display
==
"
none
"
){
hidden_list
.
push
(
i
);
}
i
+=
1
;
})
if
(
hidden_list
.
length
>
0
){
setTimeout
(
images_history_hide_buttons
,
10
,
hidden_list
,
gallery
);
}
}
images_history_set_image_info
(
this
);
}
var
images_history_click_tab
=
function
(){
var
tabs_box
=
gradioApp
().
getElementById
(
"
images_history_tab
"
);
if
(
!
tabs_box
.
classList
.
contains
(
this
.
getAttribute
(
"
tabname
"
)))
{
gradioApp
().
getElementById
(
this
.
getAttribute
(
"
tabname
"
)
+
"
_images_history_renew_page
"
).
click
();
tabs_box
.
classList
.
add
(
this
.
getAttribute
(
"
tabname
"
))
}
}
function
images_history_disabled_del
(){
gradioApp
().
querySelectorAll
(
"
.images_history_del_button
"
).
forEach
(
function
(
btn
){
btn
.
setAttribute
(
'
disabled
'
,
'
disabled
'
);
});
}
function
images_history_get_parent_by_class
(
item
,
class_name
){
var
parent
=
item
.
parentElement
;
while
(
!
parent
.
classList
.
contains
(
class_name
)){
parent
=
parent
.
parentElement
;
}
return
parent
;
}
function
images_history_get_parent_by_tagname
(
item
,
tagname
){
var
parent
=
item
.
parentElement
;
tagname
=
tagname
.
toUpperCase
()
while
(
parent
.
tagName
!=
tagname
){
console
.
log
(
parent
.
tagName
,
tagname
)
parent
=
parent
.
parentElement
;
}
return
parent
;
}
function
images_history_hide_buttons
(
hidden_list
,
gallery
){
var
buttons
=
gallery
.
querySelectorAll
(
"
.gallery-item
"
);
var
num
=
0
;
buttons
.
forEach
(
function
(
e
){
if
(
e
.
style
.
display
==
"
none
"
){
num
+=
1
;
}
});
if
(
num
==
hidden_list
.
length
){
setTimeout
(
images_history_hide_buttons
,
10
,
hidden_list
,
gallery
);
}
for
(
i
in
hidden_list
){
buttons
[
hidden_list
[
i
]].
style
.
display
=
"
none
"
;
}
}
function
images_history_set_image_info
(
button
){
var
buttons
=
images_history_get_parent_by_tagname
(
button
,
"
DIV
"
).
querySelectorAll
(
"
.gallery-item
"
);
var
index
=
-
1
;
var
i
=
0
;
buttons
.
forEach
(
function
(
e
){
if
(
e
==
button
){
index
=
i
;
}
if
(
e
.
style
.
display
!=
"
none
"
){
i
+=
1
;
}
});
var
gallery
=
images_history_get_parent_by_class
(
button
,
"
images_history_cantainor
"
);
var
set_btn
=
gallery
.
querySelector
(
"
.images_history_set_index
"
);
var
curr_idx
=
set_btn
.
getAttribute
(
"
img_index
"
,
index
);
if
(
curr_idx
!=
index
)
{
set_btn
.
setAttribute
(
"
img_index
"
,
index
);
images_history_disabled_del
();
}
set_btn
.
click
();
}
function
images_history_get_current_img
(
tabname
,
image_path
,
files
){
return
[
gradioApp
().
getElementById
(
tabname
+
'
_images_history_set_index
'
).
getAttribute
(
"
img_index
"
),
image_path
,
files
];
}
function
images_history_delete
(
del_num
,
tabname
,
img_path
,
img_file_name
,
page_index
,
filenames
,
image_index
){
image_index
=
parseInt
(
image_index
);
var
tab
=
gradioApp
().
getElementById
(
tabname
+
'
_images_history
'
);
var
set_btn
=
tab
.
querySelector
(
"
.images_history_set_index
"
);
var
buttons
=
[];
tab
.
querySelectorAll
(
"
.gallery-item
"
).
forEach
(
function
(
e
){
if
(
e
.
style
.
display
!=
'
none
'
){
buttons
.
push
(
e
);
}
});
var
img_num
=
buttons
.
length
/
2
;
if
(
img_num
<=
del_num
){
setTimeout
(
function
(
tabname
){
gradioApp
().
getElementById
(
tabname
+
'
_images_history_renew_page
'
).
click
();
},
30
,
tabname
);
}
else
{
var
next_img
for
(
var
i
=
0
;
i
<
del_num
;
i
++
){
if
(
image_index
+
i
<
image_index
+
img_num
){
buttons
[
image_index
+
i
].
style
.
display
=
'
none
'
;
buttons
[
image_index
+
img_num
+
1
].
style
.
display
=
'
none
'
;
next_img
=
image_index
+
i
+
1
}
}
var
bnt
;
if
(
next_img
>=
img_num
){
btn
=
buttons
[
image_index
-
del_num
];
}
else
{
btn
=
buttons
[
next_img
];
}
setTimeout
(
function
(
btn
){
btn
.
click
()},
30
,
btn
);
}
images_history_disabled_del
();
return
[
del_num
,
tabname
,
img_path
,
img_file_name
,
page_index
,
filenames
,
image_index
];
}
function
images_history_turnpage
(
img_path
,
page_index
,
image_index
,
tabname
){
var
buttons
=
gradioApp
().
getElementById
(
tabname
+
'
_images_history
'
).
querySelectorAll
(
"
.gallery-item
"
);
buttons
.
forEach
(
function
(
elem
)
{
elem
.
style
.
display
=
'
block
'
;
})
return
[
img_path
,
page_index
,
image_index
,
tabname
];
}
function
images_history_enable_del_buttons
(){
gradioApp
().
querySelectorAll
(
"
.images_history_del_button
"
).
forEach
(
function
(
btn
){
btn
.
removeAttribute
(
'
disabled
'
);
})
}
function
images_history_init
(){
var
load_txt2img_button
=
gradioApp
().
getElementById
(
'
txt2img_images_history_renew_page
'
)
if
(
load_txt2img_button
){
for
(
var
i
in
images_history_tab_list
){
tab
=
images_history_tab_list
[
i
];
gradioApp
().
getElementById
(
tab
+
'
_images_history
'
).
classList
.
add
(
"
images_history_cantainor
"
);
gradioApp
().
getElementById
(
tab
+
'
_images_history_set_index
'
).
classList
.
add
(
"
images_history_set_index
"
);
gradioApp
().
getElementById
(
tab
+
'
_images_history_del_button
'
).
classList
.
add
(
"
images_history_del_button
"
);
gradioApp
().
getElementById
(
tab
+
'
_images_history_gallery
'
).
classList
.
add
(
"
images_history_gallery
"
);
}
var
tabs_box
=
gradioApp
().
getElementById
(
"
tab_images_history
"
).
querySelector
(
"
div
"
).
querySelector
(
"
div
"
).
querySelector
(
"
div
"
);
tabs_box
.
setAttribute
(
"
id
"
,
"
images_history_tab
"
);
var
tab_btns
=
tabs_box
.
querySelectorAll
(
"
button
"
);
for
(
var
i
in
images_history_tab_list
){
var
tabname
=
images_history_tab_list
[
i
]
tab_btns
[
i
].
setAttribute
(
"
tabname
"
,
tabname
);
tab_btns
[
i
].
addEventListener
(
'
click
'
,
images_history_click_tab
);
}
tabs_box
.
classList
.
add
(
images_history_tab_list
[
0
]);
load_txt2img_button
.
click
();
}
else
{
setTimeout
(
images_history_init
,
500
);
}
}
var
images_history_tab_list
=
[
"
txt2img
"
,
"
img2img
"
,
"
extras
"
];
setTimeout
(
images_history_init
,
500
);
document
.
addEventListener
(
"
DOMContentLoaded
"
,
function
()
{
var
mutationObserver
=
new
MutationObserver
(
function
(
m
){
for
(
var
i
in
images_history_tab_list
){
let
tabname
=
images_history_tab_list
[
i
]
var
buttons
=
gradioApp
().
querySelectorAll
(
'
#
'
+
tabname
+
'
_images_history .gallery-item
'
);
buttons
.
forEach
(
function
(
bnt
){
bnt
.
addEventListener
(
'
click
'
,
images_history_click_image
,
true
);
});
var
cls_btn
=
gradioApp
().
getElementById
(
tabname
+
'
_images_history_gallery
'
).
querySelector
(
"
svg
"
);
if
(
cls_btn
){
cls_btn
.
addEventListener
(
'
click
'
,
function
(){
gradioApp
().
getElementById
(
tabname
+
'
_images_history_renew_page
'
).
click
();
},
false
);
}
}
});
mutationObserver
.
observe
(
gradioApp
(),
{
childList
:
true
,
subtree
:
true
});
});
modules/images_history.py
0 → 100644
View file @
6b77af7a
import
os
import
shutil
def
traverse_all_files
(
output_dir
,
image_list
,
curr_dir
=
None
):
curr_path
=
output_dir
if
curr_dir
is
None
else
os
.
path
.
join
(
output_dir
,
curr_dir
)
try
:
f_list
=
os
.
listdir
(
curr_path
)
except
:
if
curr_dir
[
-
10
:]
.
rfind
(
"."
)
>
0
and
curr_dir
[
-
4
:]
!=
".txt"
:
image_list
.
append
(
curr_dir
)
return
image_list
for
file
in
f_list
:
file
=
file
if
curr_dir
is
None
else
os
.
path
.
join
(
curr_dir
,
file
)
file_path
=
os
.
path
.
join
(
curr_path
,
file
)
if
file
[
-
4
:]
==
".txt"
:
pass
elif
os
.
path
.
isfile
(
file_path
)
and
file
[
-
10
:]
.
rfind
(
"."
)
>
0
:
image_list
.
append
(
file
)
else
:
image_list
=
traverse_all_files
(
output_dir
,
image_list
,
file
)
return
image_list
def
get_recent_images
(
dir_name
,
page_index
,
step
,
image_index
,
tabname
):
page_index
=
int
(
page_index
)
f_list
=
os
.
listdir
(
dir_name
)
image_list
=
[]
image_list
=
traverse_all_files
(
dir_name
,
image_list
)
image_list
=
sorted
(
image_list
,
key
=
lambda
file
:
-
os
.
path
.
getctime
(
os
.
path
.
join
(
dir_name
,
file
)))
num
=
48
if
tabname
!=
"extras"
else
12
max_page_index
=
len
(
image_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
page_index
=
max_page_index
if
page_index
>
max_page_index
else
page_index
idx_frm
=
(
page_index
-
1
)
*
num
image_list
=
image_list
[
idx_frm
:
idx_frm
+
num
]
image_index
=
int
(
image_index
)
if
image_index
<
0
or
image_index
>
len
(
image_list
)
-
1
:
current_file
=
None
hidden
=
None
else
:
current_file
=
image_list
[
int
(
image_index
)]
hidden
=
os
.
path
.
join
(
dir_name
,
current_file
)
return
[
os
.
path
.
join
(
dir_name
,
file
)
for
file
in
image_list
],
page_index
,
image_list
,
current_file
,
hidden
,
""
def
first_page_click
(
dir_name
,
page_index
,
image_index
,
tabname
):
return
get_recent_images
(
dir_name
,
1
,
0
,
image_index
,
tabname
)
def
end_page_click
(
dir_name
,
page_index
,
image_index
,
tabname
):
return
get_recent_images
(
dir_name
,
-
1
,
0
,
image_index
,
tabname
)
def
prev_page_click
(
dir_name
,
page_index
,
image_index
,
tabname
):
return
get_recent_images
(
dir_name
,
page_index
,
-
1
,
image_index
,
tabname
)
def
next_page_click
(
dir_name
,
page_index
,
image_index
,
tabname
):
return
get_recent_images
(
dir_name
,
page_index
,
1
,
image_index
,
tabname
)
def
page_index_change
(
dir_name
,
page_index
,
image_index
,
tabname
):
return
get_recent_images
(
dir_name
,
page_index
,
0
,
image_index
,
tabname
)
def
show_image_info
(
num
,
image_path
,
filenames
):
#print(f"select image {num}")
file
=
filenames
[
int
(
num
)]
return
file
,
num
,
os
.
path
.
join
(
image_path
,
file
)
def
delete_image
(
delete_num
,
tabname
,
dir_name
,
name
,
page_index
,
filenames
,
image_index
):
if
name
==
""
:
return
filenames
,
delete_num
else
:
delete_num
=
int
(
delete_num
)
index
=
list
(
filenames
)
.
index
(
name
)
i
=
0
new_file_list
=
[]
for
name
in
filenames
:
if
i
>=
index
and
i
<
index
+
delete_num
:
path
=
os
.
path
.
join
(
dir_name
,
name
)
if
os
.
path
.
exists
(
path
):
print
(
f
"Delete file {path}"
)
os
.
remove
(
path
)
txt_file
=
os
.
path
.
splitext
(
path
)[
0
]
+
".txt"
if
os
.
path
.
exists
(
txt_file
):
os
.
remove
(
txt_file
)
else
:
print
(
f
"Not exists file {path}"
)
else
:
new_file_list
.
append
(
name
)
i
+=
1
return
new_file_list
,
1
def
show_images_history
(
gr
,
opts
,
tabname
,
run_pnginfo
,
switch_dict
):
if
tabname
==
"txt2img"
:
dir_name
=
opts
.
outdir_txt2img_samples
elif
tabname
==
"img2img"
:
dir_name
=
opts
.
outdir_img2img_samples
elif
tabname
==
"extras"
:
dir_name
=
opts
.
outdir_extras_samples
d
=
dir_name
.
split
(
"/"
)
dir_name
=
d
[
0
]
for
p
in
d
[
1
:]:
dir_name
=
os
.
path
.
join
(
dir_name
,
p
)
with
gr
.
Row
():
renew_page
=
gr
.
Button
(
'Renew Page'
,
elem_id
=
tabname
+
"_images_history_renew_page"
)
first_page
=
gr
.
Button
(
'First Page'
)
prev_page
=
gr
.
Button
(
'Prev Page'
)
page_index
=
gr
.
Number
(
value
=
1
,
label
=
"Page Index"
)
next_page
=
gr
.
Button
(
'Next Page'
)
end_page
=
gr
.
Button
(
'End Page'
)
with
gr
.
Row
(
elem_id
=
tabname
+
"_images_history"
):
with
gr
.
Row
():
with
gr
.
Column
(
scale
=
2
):
history_gallery
=
gr
.
Gallery
(
show_label
=
False
,
elem_id
=
tabname
+
"_images_history_gallery"
)
.
style
(
grid
=
6
)
with
gr
.
Row
():
delete_num
=
gr
.
Number
(
value
=
1
,
interactive
=
True
,
label
=
"number of images to delete consecutively next"
)
delete
=
gr
.
Button
(
'Delete'
,
elem_id
=
tabname
+
"_images_history_del_button"
)
with
gr
.
Column
():
with
gr
.
Row
():
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
(
label
=
"Generate Info"
,
interactive
=
False
)
img_file_name
=
gr
.
Textbox
(
label
=
"File Name"
,
interactive
=
False
)
with
gr
.
Row
():
# hiden items
img_path
=
gr
.
Textbox
(
dir_name
.
rstrip
(
"/"
)
,
visible
=
False
)
tabname_box
=
gr
.
Textbox
(
tabname
,
visible
=
False
)
image_index
=
gr
.
Textbox
(
value
=-
1
,
visible
=
False
)
set_index
=
gr
.
Button
(
'set_index'
,
elem_id
=
tabname
+
"_images_history_set_index"
,
visible
=
False
)
filenames
=
gr
.
State
()
hidden
=
gr
.
Image
(
type
=
"pil"
,
visible
=
False
)
info1
=
gr
.
Textbox
(
visible
=
False
)
info2
=
gr
.
Textbox
(
visible
=
False
)
# turn pages
gallery_inputs
=
[
img_path
,
page_index
,
image_index
,
tabname_box
]
gallery_outputs
=
[
history_gallery
,
page_index
,
filenames
,
img_file_name
,
hidden
,
img_file_name
]
first_page
.
click
(
first_page_click
,
_js
=
"images_history_turnpage"
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
next_page
.
click
(
next_page_click
,
_js
=
"images_history_turnpage"
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
prev_page
.
click
(
prev_page_click
,
_js
=
"images_history_turnpage"
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
end_page
.
click
(
end_page_click
,
_js
=
"images_history_turnpage"
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
page_index
.
submit
(
page_index_change
,
_js
=
"images_history_turnpage"
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
renew_page
.
click
(
page_index_change
,
_js
=
"images_history_turnpage"
,
inputs
=
gallery_inputs
,
outputs
=
gallery_outputs
)
#page_index.change(page_index_change, inputs=[tabname_box, img_path, page_index], outputs=[history_gallery, page_index])
#other funcitons
set_index
.
click
(
show_image_info
,
_js
=
"images_history_get_current_img"
,
inputs
=
[
tabname_box
,
img_path
,
filenames
],
outputs
=
[
img_file_name
,
image_index
,
hidden
])
img_file_name
.
change
(
fn
=
None
,
_js
=
"images_history_enable_del_buttons"
,
inputs
=
None
,
outputs
=
None
)
delete
.
click
(
delete_image
,
_js
=
"images_history_delete"
,
inputs
=
[
delete_num
,
tabname_box
,
img_path
,
img_file_name
,
page_index
,
filenames
,
image_index
],
outputs
=
[
filenames
,
delete_num
])
hidden
.
change
(
fn
=
run_pnginfo
,
inputs
=
[
hidden
],
outputs
=
[
info1
,
img_file_info
,
info2
])
#pnginfo.click(fn=run_pnginfo, inputs=[hidden], 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
.
Tabs
()
as
tabs
:
with
gr
.
Tab
(
"txt2img history"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history_txt2img
:
show_images_history
(
gr
,
opts
,
"txt2img"
,
run_pnginfo
,
switch_dict
)
with
gr
.
Tab
(
"img2img history"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history_img2img
:
show_images_history
(
gr
,
opts
,
"img2img"
,
run_pnginfo
,
switch_dict
)
with
gr
.
Tab
(
"extras history"
):
with
gr
.
Blocks
(
analytics_enabled
=
False
)
as
images_history_img2img
:
show_images_history
(
gr
,
opts
,
"extras"
,
run_pnginfo
,
switch_dict
)
return
images_history
modules/ui.py
View file @
6b77af7a
...
@@ -40,6 +40,7 @@ from modules import prompt_parser
...
@@ -40,6 +40,7 @@ from modules import prompt_parser
from
modules.images
import
save_image
from
modules.images
import
save_image
import
modules.textual_inversion.ui
import
modules.textual_inversion.ui
import
modules.hypernetworks.ui
import
modules.hypernetworks.ui
import
modules.images_history
as
img_his
# this is a fix for Windows users. Without it, javascript files will be served with text/html content-type and the browser will not show any UI
# this is a fix for Windows users. Without it, javascript files will be served with text/html content-type and the browser will not show any UI
mimetypes
.
init
()
mimetypes
.
init
()
...
@@ -1070,6 +1071,13 @@ def create_ui(wrap_gradio_gpu_call):
...
@@ -1070,6 +1071,13 @@ def create_ui(wrap_gradio_gpu_call):
inputs
=
[
image
],
inputs
=
[
image
],
outputs
=
[
html
,
generation_info
,
html2
],
outputs
=
[
html
,
generation_info
,
html2
],
)
)
#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
)
with
gr
.
Blocks
()
as
modelmerger_interface
:
with
gr
.
Blocks
()
as
modelmerger_interface
:
with
gr
.
Row
()
.
style
(
equal_height
=
False
):
with
gr
.
Row
()
.
style
(
equal_height
=
False
):
...
@@ -1464,6 +1472,7 @@ Requested path was: {f}
...
@@ -1464,6 +1472,7 @@ Requested path was: {f}
(
img2img_interface
,
"img2img"
,
"img2img"
),
(
img2img_interface
,
"img2img"
,
"img2img"
),
(
extras_interface
,
"Extras"
,
"extras"
),
(
extras_interface
,
"Extras"
,
"extras"
),
(
pnginfo_interface
,
"PNG Info"
,
"pnginfo"
),
(
pnginfo_interface
,
"PNG Info"
,
"pnginfo"
),
(
images_history
,
"History"
,
"images_history"
),
(
modelmerger_interface
,
"Checkpoint Merger"
,
"modelmerger"
),
(
modelmerger_interface
,
"Checkpoint Merger"
,
"modelmerger"
),
(
train_interface
,
"Train"
,
"ti"
),
(
train_interface
,
"Train"
,
"ti"
),
(
settings_interface
,
"Settings"
,
"settings"
),
(
settings_interface
,
"Settings"
,
"settings"
),
...
@@ -1701,3 +1710,4 @@ if 'gradio_routes_templates_response' not in globals():
...
@@ -1701,3 +1710,4 @@ if 'gradio_routes_templates_response' not in globals():
gradio_routes_templates_response
=
gradio
.
routes
.
templates
.
TemplateResponse
gradio_routes_templates_response
=
gradio
.
routes
.
templates
.
TemplateResponse
gradio
.
routes
.
templates
.
TemplateResponse
=
template_response
gradio
.
routes
.
templates
.
TemplateResponse
=
template_response
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