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
0726a6e1
Commit
0726a6e1
authored
Jan 11, 2024
by
Sj-Si
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finish base layout. Fix bugs. Need to test for stability and clean up.
parent
3db6938c
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
89 additions
and
124 deletions
+89
-124
extensions-builtin/Lora/ui_extra_networks_lora.py
extensions-builtin/Lora/ui_extra_networks_lora.py
+4
-1
html/extra-networks-card.html
html/extra-networks-card.html
+1
-3
html/extra-networks-pane.html
html/extra-networks-pane.html
+0
-3
javascript/extraNetworks.js
javascript/extraNetworks.js
+23
-25
modules/ui_extra_networks.py
modules/ui_extra_networks.py
+39
-74
modules/ui_extra_networks_checkpoints.py
modules/ui_extra_networks_checkpoints.py
+4
-1
modules/ui_extra_networks_hypernets.py
modules/ui_extra_networks_hypernets.py
+4
-2
modules/ui_extra_networks_textual_inversion.py
modules/ui_extra_networks_textual_inversion.py
+4
-1
style.css
style.css
+10
-14
No files found.
extensions-builtin/Lora/ui_extra_networks_lora.py
View file @
0726a6e1
...
@@ -24,13 +24,16 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage):
...
@@ -24,13 +24,16 @@ class ExtraNetworksPageLora(ui_extra_networks.ExtraNetworksPage):
alias
=
lora_on_disk
.
get_alias
()
alias
=
lora_on_disk
.
get_alias
()
search_terms
=
[
self
.
search_terms_from_path
(
lora_on_disk
.
filename
)]
if
lora_on_disk
.
hash
:
search_terms
.
append
(
lora_on_disk
.
hash
)
item
=
{
item
=
{
"name"
:
name
,
"name"
:
name
,
"filename"
:
lora_on_disk
.
filename
,
"filename"
:
lora_on_disk
.
filename
,
"shorthash"
:
lora_on_disk
.
shorthash
,
"shorthash"
:
lora_on_disk
.
shorthash
,
"preview"
:
self
.
find_preview
(
path
),
"preview"
:
self
.
find_preview
(
path
),
"description"
:
self
.
find_description
(
path
),
"description"
:
self
.
find_description
(
path
),
"search_term
"
:
self
.
search_terms_from_path
(
lora_on_disk
.
filename
)
+
" "
+
(
lora_on_disk
.
hash
or
""
)
,
"search_term
s"
:
search_terms
,
"local_preview"
:
f
"{path}.{shared.opts.samples_format}"
,
"local_preview"
:
f
"{path}.{shared.opts.samples_format}"
,
"metadata"
:
lora_on_disk
.
metadata
,
"metadata"
:
lora_on_disk
.
metadata
,
"sort_keys"
:
{
'default'
:
index
,
**
self
.
get_sort_keys
(
lora_on_disk
.
filename
)},
"sort_keys"
:
{
'default'
:
index
,
**
self
.
get_sort_keys
(
lora_on_disk
.
filename
)},
...
...
html/extra-networks-card.html
View file @
0726a6e1
...
@@ -6,9 +6,7 @@
...
@@ -6,9 +6,7 @@
{edit_button}
{edit_button}
</div>
</div>
<div
class=
'actions'
>
<div
class=
'actions'
>
<div
class=
'additional'
>
<div
class=
'additional'
>
{search_terms}
</div>
<span
style=
"display:none"
class=
'search_term{search_only}'
>
{search_term}
</span>
</div>
<span
class=
'name'
>
{name}
</span>
<span
class=
'name'
>
{name}
</span>
<span
class=
'description'
>
{description}
</span>
<span
class=
'description'
>
{description}
</span>
</div>
</div>
...
...
html/extra-networks-pane.html
View file @
0726a6e1
<div
id=
'{tabname}_{network_type_id}_subdirs'
class=
'extra-network-subdirs extra-network-subdirs-cards'
>
{subdirs_html}
</div>
<div
id=
'{tabname}_{network_type_id}_pane'
class=
'extra-network-pane'
>
<div
id=
'{tabname}_{network_type_id}_pane'
class=
'extra-network-pane'
>
<div
id=
'{tabname}_{network_type_id}_tree'
class=
'extra-network-tree'
>
<div
id=
'{tabname}_{network_type_id}_tree'
class=
'extra-network-tree'
>
{tree_html}
{tree_html}
...
...
javascript/extraNetworks.js
View file @
0726a6e1
...
@@ -24,8 +24,6 @@ function setupExtraNetworksForTab(tabname) {
...
@@ -24,8 +24,6 @@ function setupExtraNetworksForTab(tabname) {
var
sort
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sort
'
);
var
sort
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sort
'
);
var
sortOrder
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sortorder
'
);
var
sortOrder
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_sortorder
'
);
var
refresh
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_refresh
'
);
var
refresh
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_refresh
'
);
var
showDirsDiv
=
gradioApp
().
getElementById
(
tabname
+
'
_extra_show_dirs
'
);
var
showDirs
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_extra_show_dirs input
'
);
var
promptContainer
=
gradioApp
().
querySelector
(
'
.prompt-container-compact#
'
+
tabname
+
'
_prompt_container
'
);
var
promptContainer
=
gradioApp
().
querySelector
(
'
.prompt-container-compact#
'
+
tabname
+
'
_prompt_container
'
);
var
negativePrompt
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_neg_prompt
'
);
var
negativePrompt
=
gradioApp
().
querySelector
(
'
#
'
+
tabname
+
'
_neg_prompt
'
);
...
@@ -33,14 +31,14 @@ function setupExtraNetworksForTab(tabname) {
...
@@ -33,14 +31,14 @@ function setupExtraNetworksForTab(tabname) {
tabs
.
appendChild
(
sort
);
tabs
.
appendChild
(
sort
);
tabs
.
appendChild
(
sortOrder
);
tabs
.
appendChild
(
sortOrder
);
tabs
.
appendChild
(
refresh
);
tabs
.
appendChild
(
refresh
);
tabs
.
appendChild
(
showDirsDiv
);
var
applyFilter
=
function
()
{
var
applyFilter
=
function
()
{
var
searchTerm
=
search
.
value
.
toLowerCase
();
var
searchTerm
=
search
.
value
.
toLowerCase
();
gradioApp
().
querySelectorAll
(
'
#
'
+
tabname
+
'
_extra_tabs div.card
'
).
forEach
(
function
(
elem
)
{
gradioApp
().
querySelectorAll
(
'
#
'
+
tabname
+
'
_extra_tabs div.card
'
).
forEach
(
function
(
elem
)
{
var
searchOnly
=
elem
.
querySelector
(
'
.search_only
'
);
var
searchOnly
=
elem
.
querySelector
(
'
.search_only
'
);
var
text
=
elem
.
querySelector
(
'
.name
'
).
textContent
.
toLowerCase
()
+
"
"
+
elem
.
querySelector
(
'
.search_term
'
).
textContent
.
toLowerCase
();
var
text
=
Array
.
prototype
.
map
.
call
(
elem
.
querySelectorAll
(
'
.search_terms
'
),
function
(
t
)
{
return
t
.
textContent
.
toLowerCase
()
}).
join
(
"
"
);
var
visible
=
text
.
indexOf
(
searchTerm
)
!=
-
1
;
var
visible
=
text
.
indexOf
(
searchTerm
)
!=
-
1
;
...
@@ -100,15 +98,6 @@ function setupExtraNetworksForTab(tabname) {
...
@@ -100,15 +98,6 @@ function setupExtraNetworksForTab(tabname) {
extraNetworksApplySort
[
tabname
]
=
applySort
;
extraNetworksApplySort
[
tabname
]
=
applySort
;
extraNetworksApplyFilter
[
tabname
]
=
applyFilter
;
extraNetworksApplyFilter
[
tabname
]
=
applyFilter
;
var
showDirsUpdate
=
function
()
{
var
css
=
'
#
'
+
tabname
+
'
_extra_tabs .extra-network-subdirs { display: none; }
'
;
toggleCss
(
tabname
+
'
_extra_show_dirs_style
'
,
css
,
!
showDirs
.
checked
);
localSet
(
'
extra-networks-show-dirs
'
,
showDirs
.
checked
?
1
:
0
);
};
showDirs
.
checked
=
localGet
(
'
extra-networks-show-dirs
'
,
1
)
==
1
;
showDirs
.
addEventListener
(
"
change
"
,
showDirsUpdate
);
showDirsUpdate
();
}
}
function
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
function
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
...
@@ -136,14 +125,23 @@ function extraNetworksMovePromptToTab(tabname, id, showPrompt, showNegativePromp
...
@@ -136,14 +125,23 @@ function extraNetworksMovePromptToTab(tabname, id, showPrompt, showNegativePromp
}
}
}
}
function
clearSearch
(
tabname
)
{
// Clear search box.
var
tab_id
=
tabname
+
"
_extra_search
"
;
var
searchTextarea
=
gradioApp
().
querySelector
(
"
#
"
+
tab_id
+
'
> label > textarea
'
);
searchTextarea
.
value
=
""
;
updateInput
(
searchTextarea
);
}
function
extraNetworksUrelatedTabSelected
(
tabname
)
{
// called from python when user selects an unrelated tab (generate)
function
extraNetworksU
n
relatedTabSelected
(
tabname
)
{
// called from python when user selects an unrelated tab (generate)
extraNetworksMovePromptToTab
(
tabname
,
''
,
false
,
false
);
extraNetworksMovePromptToTab
(
tabname
,
''
,
false
,
false
);
clearSearch
(
tabname
);
}
}
function
extraNetworksTabSelected
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
// called from python when user selects an extra networks tab
function
extraNetworksTabSelected
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
)
{
// called from python when user selects an extra networks tab
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
);
extraNetworksMovePromptToTab
(
tabname
,
id
,
showPrompt
,
showNegativePrompt
);
clearSearch
(
tabname
);
}
}
function
applyExtraNetworkFilter
(
tabname
)
{
function
applyExtraNetworkFilter
(
tabname
)
{
...
@@ -254,6 +252,15 @@ function saveCardPreview(event, tabname, filename) {
...
@@ -254,6 +252,15 @@ function saveCardPreview(event, tabname, filename) {
}
}
function
extraNetworksFolderClick
(
event
,
tabs_id
)
{
function
extraNetworksFolderClick
(
event
,
tabs_id
)
{
// If folder is open but not selected, we don't want to collapse it. Instead
// we override the removal of the "open" attribute so that the folder is
// only selected but remains open. Since this is a toggle event, removing
// the "open" attribute instead forces the event to add it back which keeps it open.
if
(
event
.
target
.
parentElement
.
open
&&
!
event
.
target
.
classList
.
contains
(
"
selected
"
))
{
// before event handler removes "open"
event
.
target
.
parentElement
.
removeAttribute
(
"
open
"
);
}
var
els
=
document
.
querySelectorAll
(
"
.folder-item-summary.selected
"
);
var
els
=
document
.
querySelectorAll
(
"
.folder-item-summary.selected
"
);
[...
els
].
forEach
(
el
=>
{
[...
els
].
forEach
(
el
=>
{
el
.
classList
.
remove
(
"
selected
"
);
el
.
classList
.
remove
(
"
selected
"
);
...
@@ -261,18 +268,9 @@ function extraNetworksFolderClick(event, tabs_id) {
...
@@ -261,18 +268,9 @@ function extraNetworksFolderClick(event, tabs_id) {
event
.
target
.
classList
.
add
(
"
selected
"
);
event
.
target
.
classList
.
add
(
"
selected
"
);
var
searchTextArea
=
gradioApp
().
querySelector
(
"
#
"
+
tabs_id
+
'
> label > textarea
'
);
var
searchTextArea
=
gradioApp
().
querySelector
(
"
#
"
+
tabs_id
+
'
> label > textarea
'
);
var
text
=
event
.
target
.
classList
.
contains
(
"
search-all
"
)
?
""
:
event
.
target
.
firstChild
.
textContent
.
trim
(
);
var
text
=
event
.
target
.
classList
.
contains
(
"
search-all
"
)
?
""
:
event
.
target
.
getAttribute
(
"
data-path
"
);
searchTextArea
.
value
=
text
;
searchTextArea
.
value
=
text
;
updateInput
(
searchTextArea
);
updateInput
(
searchTextArea
);
if
(
event
.
target
.
parentElement
.
open
)
{
// before close
console
.
log
(
"
closed
"
);
}
else
{
// before open
console
.
log
(
"
opened
"
);
//console.log("Opened:", event.target.parentElement);
}
}
}
function
extraNetworksSearchButton
(
tabs_id
,
event
)
{
function
extraNetworksSearchButton
(
tabs_id
,
event
)
{
...
...
modules/ui_extra_networks.py
View file @
0726a6e1
This diff is collapsed.
Click to expand it.
modules/ui_extra_networks_checkpoints.py
View file @
0726a6e1
...
@@ -21,13 +21,16 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage):
...
@@ -21,13 +21,16 @@ class ExtraNetworksPageCheckpoints(ui_extra_networks.ExtraNetworksPage):
return
return
path
,
ext
=
os
.
path
.
splitext
(
checkpoint
.
filename
)
path
,
ext
=
os
.
path
.
splitext
(
checkpoint
.
filename
)
search_terms
=
[
self
.
search_terms_from_path
(
checkpoint
.
filename
)]
if
checkpoint
.
sha256
:
search_terms
.
append
(
checkpoint
.
sha256
)
return
{
return
{
"name"
:
checkpoint
.
name_for_extra
,
"name"
:
checkpoint
.
name_for_extra
,
"filename"
:
checkpoint
.
filename
,
"filename"
:
checkpoint
.
filename
,
"shorthash"
:
checkpoint
.
shorthash
,
"shorthash"
:
checkpoint
.
shorthash
,
"preview"
:
self
.
find_preview
(
path
),
"preview"
:
self
.
find_preview
(
path
),
"description"
:
self
.
find_description
(
path
),
"description"
:
self
.
find_description
(
path
),
"search_term
"
:
self
.
search_terms_from_path
(
checkpoint
.
filename
)
+
" "
+
(
checkpoint
.
sha256
or
""
)
,
"search_term
s"
:
search_terms
,
"onclick"
:
'"'
+
html
.
escape
(
f
"""return selectCheckpoint({quote_js(name)})"""
)
+
'"'
,
"onclick"
:
'"'
+
html
.
escape
(
f
"""return selectCheckpoint({quote_js(name)})"""
)
+
'"'
,
"local_preview"
:
f
"{path}.{shared.opts.samples_format}"
,
"local_preview"
:
f
"{path}.{shared.opts.samples_format}"
,
"metadata"
:
checkpoint
.
metadata
,
"metadata"
:
checkpoint
.
metadata
,
...
...
modules/ui_extra_networks_hypernets.py
View file @
0726a6e1
...
@@ -20,14 +20,16 @@ class ExtraNetworksPageHypernetworks(ui_extra_networks.ExtraNetworksPage):
...
@@ -20,14 +20,16 @@ class ExtraNetworksPageHypernetworks(ui_extra_networks.ExtraNetworksPage):
path
,
ext
=
os
.
path
.
splitext
(
full_path
)
path
,
ext
=
os
.
path
.
splitext
(
full_path
)
sha256
=
sha256_from_cache
(
full_path
,
f
'hypernet/{name}'
)
sha256
=
sha256_from_cache
(
full_path
,
f
'hypernet/{name}'
)
shorthash
=
sha256
[
0
:
10
]
if
sha256
else
None
shorthash
=
sha256
[
0
:
10
]
if
sha256
else
None
search_terms
=
[
self
.
search_terms_from_path
(
path
)]
if
sha256
:
search_terms
.
append
(
sha256
)
return
{
return
{
"name"
:
name
,
"name"
:
name
,
"filename"
:
full_path
,
"filename"
:
full_path
,
"shorthash"
:
shorthash
,
"shorthash"
:
shorthash
,
"preview"
:
self
.
find_preview
(
path
),
"preview"
:
self
.
find_preview
(
path
),
"description"
:
self
.
find_description
(
path
),
"description"
:
self
.
find_description
(
path
),
"search_term
"
:
self
.
search_terms_from_path
(
path
)
+
" "
+
(
sha256
or
""
)
,
"search_term
s"
:
search_terms
,
"prompt"
:
quote_js
(
f
"<hypernet:{name}:"
)
+
" + opts.extra_networks_default_multiplier + "
+
quote_js
(
">"
),
"prompt"
:
quote_js
(
f
"<hypernet:{name}:"
)
+
" + opts.extra_networks_default_multiplier + "
+
quote_js
(
">"
),
"local_preview"
:
f
"{path}.preview.{shared.opts.samples_format}"
,
"local_preview"
:
f
"{path}.preview.{shared.opts.samples_format}"
,
"sort_keys"
:
{
'default'
:
index
,
**
self
.
get_sort_keys
(
path
+
ext
)},
"sort_keys"
:
{
'default'
:
index
,
**
self
.
get_sort_keys
(
path
+
ext
)},
...
...
modules/ui_extra_networks_textual_inversion.py
View file @
0726a6e1
...
@@ -18,13 +18,16 @@ class ExtraNetworksPageTextualInversion(ui_extra_networks.ExtraNetworksPage):
...
@@ -18,13 +18,16 @@ class ExtraNetworksPageTextualInversion(ui_extra_networks.ExtraNetworksPage):
return
return
path
,
ext
=
os
.
path
.
splitext
(
embedding
.
filename
)
path
,
ext
=
os
.
path
.
splitext
(
embedding
.
filename
)
search_terms
=
[
self
.
search_terms_from_path
(
embedding
.
filename
)]
if
embedding
.
hash
:
search_terms
.
append
(
embedding
.
hash
)
return
{
return
{
"name"
:
name
,
"name"
:
name
,
"filename"
:
embedding
.
filename
,
"filename"
:
embedding
.
filename
,
"shorthash"
:
embedding
.
shorthash
,
"shorthash"
:
embedding
.
shorthash
,
"preview"
:
self
.
find_preview
(
path
),
"preview"
:
self
.
find_preview
(
path
),
"description"
:
self
.
find_description
(
path
),
"description"
:
self
.
find_description
(
path
),
"search_term
"
:
self
.
search_terms_from_path
(
embedding
.
filename
)
+
" "
+
(
embedding
.
hash
or
""
)
,
"search_term
s"
:
search_terms
,
"prompt"
:
quote_js
(
embedding
.
name
),
"prompt"
:
quote_js
(
embedding
.
name
),
"local_preview"
:
f
"{path}.preview.{shared.opts.samples_format}"
,
"local_preview"
:
f
"{path}.preview.{shared.opts.samples_format}"
,
"sort_keys"
:
{
'default'
:
index
,
**
self
.
get_sort_keys
(
embedding
.
filename
)},
"sort_keys"
:
{
'default'
:
index
,
**
self
.
get_sort_keys
(
embedding
.
filename
)},
...
...
style.css
View file @
0726a6e1
...
@@ -878,16 +878,8 @@ footer {
...
@@ -878,16 +878,8 @@ footer {
margin
:
0.3em
;
margin
:
0.3em
;
}
}
.extra-network-subdirs
{
padding
:
0.2em
0.35em
;
}
.extra-network-subdirs
button
{
margin
:
0
0.15em
;
}
.extra-networks
.tab-nav
.search
,
.extra-networks
.tab-nav
.search
,
.extra-networks
.tab-nav
.sort
,
.extra-networks
.tab-nav
.sort
.extra-networks
.tab-nav
.show-dirs
{
{
margin
:
0.3em
;
margin
:
0.3em
;
align-self
:
center
;
align-self
:
center
;
...
@@ -1196,6 +1188,10 @@ body.resizing .resize-handle {
...
@@ -1196,6 +1188,10 @@ body.resizing .resize-handle {
flex-grow
:
1
;
flex-grow
:
1
;
}
}
.folder-container
{
margin-left
:
1.5em
!important
;
}
.file-item
,
.file-item
,
.folder-item
,
.folder-item
,
.folder-item-summary
{
.folder-item-summary
{
...
@@ -1235,7 +1231,7 @@ body.resizing .resize-handle {
...
@@ -1235,7 +1231,7 @@ body.resizing .resize-handle {
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
}
}
.extra-network-pane
.extra-network
tree
ul
.folder-container
{
.extra-network-pane
.extra-network
-
tree
ul
.folder-container
{
list-style
:
none
;
list-style
:
none
;
font-size
:
1rem
;
font-size
:
1rem
;
text-overflow
:
ellipsis
;
text-overflow
:
ellipsis
;
...
@@ -1257,15 +1253,15 @@ body.resizing .resize-handle {
...
@@ -1257,15 +1253,15 @@ body.resizing .resize-handle {
display
:
flex
;
display
:
flex
;
}
}
.extra-network-pane
.extra-network-subdirs
{
display
:
block
;
}
.extra-network-pane
.extra-network-tree
{
.extra-network-pane
.extra-network-tree
{
font-size
:
1rem
;
font-size
:
1rem
;
width
:
25%
;
min-width
:
25%
;
max-width
:
25%
;
border
:
1px
solid
var
(
--block-border-color
);
}
}
.extra-network-pane
.extra-network-cards
{
.extra-network-pane
.extra-network-cards
{
flex-grow
:
1
;
flex-grow
:
1
;
border
:
1px
solid
var
(
--block-border-color
);
}
}
.dark
.extra-network-tree
.folder-item-summary.selected
{
.dark
.extra-network-tree
.folder-item-summary.selected
{
...
...
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