diff --git a/html/extra-networks-card.html b/html/extra-networks-card.html
index 258bdf0a1..cb4720f14 100644
--- a/html/extra-networks-card.html
+++ b/html/extra-networks-card.html
@@ -4,7 +4,9 @@
diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js
index 2f0a7de9d..fc8319e91 100644
--- a/javascript/extraNetworks.js
+++ b/javascript/extraNetworks.js
@@ -5,11 +5,14 @@ function setupExtraNetworksForTab(tabname){
var tabs = gradioApp().querySelector('#'+tabname+'_extra_tabs > div')
var search = gradioApp().querySelector('#'+tabname+'_extra_search textarea')
var refresh = gradioApp().getElementById(tabname+'_extra_refresh')
+ var descriptInput = gradioApp().getElementById(tabname+ '_description_input')
var close = gradioApp().getElementById(tabname+'_extra_close')
search.classList.add('search')
tabs.appendChild(search)
tabs.appendChild(refresh)
+ tabs.appendChild(descriptInput)
+
tabs.appendChild(close)
search.addEventListener("input", function(evt){
@@ -97,6 +100,37 @@ function saveCardPreview(event, tabname, filename){
event.preventDefault()
}
+function saveCardDescription(event, tabname, filename, descript){
+ var textarea = gradioApp().querySelector("#" + tabname + '_description_filename > label > textarea')
+ var button = gradioApp().getElementById(tabname + '_save_description')
+ var description = gradioApp().getElementById(tabname+ '_description_input')
+
+ textarea.value = filename
+ description.value=descript
+ updateInput(textarea)
+
+ button.click()
+
+ event.stopPropagation()
+ event.preventDefault()
+}
+
+function readCardDescription(event, tabname, filename, descript){
+ var textarea = gradioApp().querySelector("#" + tabname + '_description_filename > label > textarea')
+ var description_textarea = gradioApp().querySelector("#" + tabname+ '_description_input > label > textarea')
+ var button = gradioApp().getElementById(tabname + '_read_description')
+
+ textarea.value = filename
+ description_textarea.value = descript
+
+ updateInput(textarea)
+ updateInput(description_textarea)
+ button.click()
+
+ event.stopPropagation()
+ event.preventDefault()
+}
+
function extraNetworksSearchButton(tabs_id, event){
searchTextarea = gradioApp().querySelector("#" + tabs_id + ' > div > textarea')
button = event.target
diff --git a/modules/ui_extra_networks.py b/modules/ui_extra_networks.py
index d5c5bb34f..a719bde33 100644
--- a/modules/ui_extra_networks.py
+++ b/modules/ui_extra_networks.py
@@ -167,7 +167,9 @@ class ExtraNetworksPage:
"name": item["name"],
"description": (item.get("description") or ""),
"card_clicked": onclick,
+ "save_card_description": '"' + html.escape(f"""return saveCardDescription(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])})""") + '"',
"save_card_preview": '"' + html.escape(f"""return saveCardPreview(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])})""") + '"',
+ "read_card_description": '"' + html.escape(f"""return readCardDescription(event, {json.dumps(tabname)}, {json.dumps(item["local_preview"])}, {json.dumps(item["description"])})""") + '"',
"search_term": item.get("search_term", ""),
"metadata_button": metadata_button,
}
@@ -216,6 +218,11 @@ class ExtraNetworksUi:
self.button_save_preview = None
self.preview_target_filename = None
+ self.button_save_description = None
+ self.button_read_description = None
+ self.description_target_filename = None
+ self.description_input = None
+
self.tabname = None
@@ -249,12 +256,19 @@ def create_ui(container, button, tabname):
ui.pages.append(page_elem)
filter = gr.Textbox('', show_label=False, elem_id=tabname+"_extra_search", placeholder="Search...", visible=False)
+
+ ui.description_input = gr.TextArea('', show_label=False, elem_id=tabname+"_description_input", placeholder="Save/Replace Extra Network Description...", lines=2)
button_refresh = ToolButton(refresh_symbol, elem_id=tabname+"_extra_refresh")
button_close = ToolButton(close_symbol, elem_id=tabname+"_extra_close")
ui.button_save_preview = gr.Button('Save preview', elem_id=tabname+"_save_preview", visible=False)
ui.preview_target_filename = gr.Textbox('Preview save filename', elem_id=tabname+"_preview_filename", visible=False)
+ ui.button_save_description = gr.Button('Save description', elem_id=tabname+"_save_description", visible=False)
+ ui.button_read_description = gr.Button('Read description', elem_id=tabname+"_read_description", visible=False)
+ ui.description_target_filename = gr.Textbox('Description save filename', elem_id=tabname+"_description_filename", visible=False)
+
+
def toggle_visibility(is_visible):
is_visible = not is_visible
return is_visible, gr.update(visible=is_visible), gr.update(variant=("secondary-down" if is_visible else "secondary"))
@@ -321,3 +335,27 @@ def setup_ui(ui, gallery):
inputs=[ui.preview_target_filename, gallery, ui.preview_target_filename],
outputs=[*ui.pages]
)
+
+ # write description to a file
+ def save_description(filename,descrip):
+ lastDotIndex = filename.rindex('.')
+ filename = filename[0:lastDotIndex]+".description.txt"
+ if descrip != "":
+ try:
+ f = open(filename,'w')
+ except OSError:
+ print ("Could not open file to write: " + filename)
+ with f:
+ f.write(descrip)
+ f.close()
+ return [page.create_html(ui.tabname) for page in ui.stored_extra_pages]
+
+ ui.button_save_description.click(
+ fn=save_description,
+ _js="function(x,y){return [x,y]}",
+ inputs=[ui.description_target_filename, ui.description_input],
+ outputs=[*ui.pages]
+ )
+
+
+