for forge

pull/273/head
cou 2024-03-06 22:11:39 +09:00
parent 302ba65cc4
commit c66dfa2330
1 changed files with 84 additions and 49 deletions

View File

@ -11,17 +11,32 @@ function ch_img_node_str(path){
return `<img src='${ch_convert_file_path_to_url(path)}' style="width:24px"/>`; return `<img src='${ch_convert_file_path_to_url(path)}' style="width:24px"/>`;
} }
function ch_sd_version(){ export function ch_sd_version() {
let foot = gradioApp().getElementById("footer"); let foot = gradioApp().getElementById("footer");
if (!foot){return null;} if (!foot) {
return null;
}
let versions = foot.querySelector(".versions"); let versions = foot.querySelector(".versions");
if (!versions){return null;} if (!versions) {
return null;
}
let links = versions.getElementsByTagName("a"); let [webui_version] = versions.getElementsByTagName("a");
if (links == null || links.length == 0){return null;} if (!webui_version) {
return null;
}
return links[0].innerHTML.substring(1); return extract_version(webui_version.innerHTML);
}
function extract_version(text) {
const matches = text.match(/v[0-9]\.[0-9]\.[0-9]/);
if (matches === null || matches.length == 0) {
return null;
}
return matches[0].substring(1);
} }
@ -185,7 +200,7 @@ function convertModelTypeFromJsToPy(js_model_type) {
async function open_model_url(event, model_type, search_term){ async function open_model_url(event, model_type, search_term){
console.log("start open_model_url"); console.log("start open_model_url");
//get hidden components of extension //get hidden components of extension
let js_open_url_btn = gradioApp().getElementById("ch_js_open_url_btn"); let js_open_url_btn = gradioApp().getElementById("ch_js_open_url_btn");
if (!js_open_url_btn) { if (!js_open_url_btn) {
return return
@ -215,11 +230,11 @@ async function open_model_url(event, model_type, search_term){
let new_py_msg = ""; let new_py_msg = "";
try { try {
new_py_msg = await get_new_ch_py_msg(); new_py_msg = await get_new_ch_py_msg();
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
console.log("new_py_msg:"); console.log("new_py_msg:");
console.log(new_py_msg); console.log(new_py_msg);
@ -237,7 +252,7 @@ async function open_model_url(event, model_type, search_term){
} }
console.log("end open_model_url"); console.log("end open_model_url");
} }
@ -245,7 +260,7 @@ async function open_model_url(event, model_type, search_term){
function add_trigger_words(event, model_type, search_term){ function add_trigger_words(event, model_type, search_term){
console.log("start add_trigger_words"); console.log("start add_trigger_words");
//get hidden components of extension //get hidden components of extension
let js_add_trigger_words_btn = gradioApp().getElementById("ch_js_add_trigger_words_btn"); let js_add_trigger_words_btn = gradioApp().getElementById("ch_js_add_trigger_words_btn");
if (!js_add_trigger_words_btn) { if (!js_add_trigger_words_btn) {
return return
@ -277,13 +292,13 @@ function add_trigger_words(event, model_type, search_term){
event.stopPropagation() event.stopPropagation()
event.preventDefault() event.preventDefault()
} }
function use_preview_prompt(event, model_type, search_term){ function use_preview_prompt(event, model_type, search_term){
console.log("start use_preview_prompt"); console.log("start use_preview_prompt");
//get hidden components of extension //get hidden components of extension
let js_use_preview_prompt_btn = gradioApp().getElementById("ch_js_use_preview_prompt_btn"); let js_use_preview_prompt_btn = gradioApp().getElementById("ch_js_use_preview_prompt_btn");
if (!js_use_preview_prompt_btn) { if (!js_use_preview_prompt_btn) {
return return
@ -323,7 +338,7 @@ function use_preview_prompt(event, model_type, search_term){
async function remove_card(event, model_type, search_term){ async function remove_card(event, model_type, search_term){
console.log("start remove_card"); console.log("start remove_card");
//get hidden components of extension //get hidden components of extension
let js_remove_card_btn = gradioApp().getElementById("ch_js_remove_card_btn"); let js_remove_card_btn = gradioApp().getElementById("ch_js_remove_card_btn");
if (!js_remove_card_btn) { if (!js_remove_card_btn) {
return return
@ -363,7 +378,7 @@ async function remove_card(event, model_type, search_term){
console.log(error); console.log(error);
new_py_msg = error; new_py_msg = error;
} }
console.log("new_py_msg:"); console.log("new_py_msg:");
console.log(new_py_msg); console.log(new_py_msg);
@ -392,7 +407,7 @@ async function remove_card(event, model_type, search_term){
if (sd_version >= "1.8.0") { if (sd_version >= "1.8.0") {
let js_model_type = convertModelTypeFromPyToJS(model_type); let js_model_type = convertModelTypeFromPyToJS(model_type);
if (!js_model_type){return;} if (!js_model_type){return;}
refresh_btn_id = active_tab + "_" + js_model_type + "_extra_refresh"; refresh_btn_id = active_tab + "_" + js_model_type + "_extra_refresh";
refresh_btn = gradioApp().getElementById(refresh_btn_id); refresh_btn = gradioApp().getElementById(refresh_btn_id);
} else { } else {
@ -407,7 +422,7 @@ async function remove_card(event, model_type, search_term){
} }
} }
console.log("end remove_card"); console.log("end remove_card");
@ -418,7 +433,7 @@ async function remove_card(event, model_type, search_term){
async function open_model_url_with_path(event, model_type, model_path){ async function open_model_url_with_path(event, model_type, model_path){
console.log("start open_model_url"); console.log("start open_model_url");
//get hidden components of extension //get hidden components of extension
let js_open_url_btn = gradioApp().getElementById("ch_js_open_url_btn"); let js_open_url_btn = gradioApp().getElementById("ch_js_open_url_btn");
if (!js_open_url_btn) { if (!js_open_url_btn) {
return return
@ -448,11 +463,11 @@ async function open_model_url_with_path(event, model_type, model_path){
let new_py_msg = ""; let new_py_msg = "";
try { try {
new_py_msg = await get_new_ch_py_msg(); new_py_msg = await get_new_ch_py_msg();
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
console.log("new_py_msg:"); console.log("new_py_msg:");
console.log(new_py_msg); console.log(new_py_msg);
@ -470,7 +485,7 @@ async function open_model_url_with_path(event, model_type, model_path){
} }
console.log("end open_model_url"); console.log("end open_model_url");
} }
@ -478,7 +493,7 @@ async function open_model_url_with_path(event, model_type, model_path){
function add_trigger_words_with_path(event, model_type, model_path){ function add_trigger_words_with_path(event, model_type, model_path){
console.log("start add_trigger_words"); console.log("start add_trigger_words");
//get hidden components of extension //get hidden components of extension
let js_add_trigger_words_btn = gradioApp().getElementById("ch_js_add_trigger_words_btn"); let js_add_trigger_words_btn = gradioApp().getElementById("ch_js_add_trigger_words_btn");
if (!js_add_trigger_words_btn) { if (!js_add_trigger_words_btn) {
return return
@ -510,13 +525,13 @@ function add_trigger_words_with_path(event, model_type, model_path){
event.stopPropagation() event.stopPropagation()
event.preventDefault() event.preventDefault()
} }
function use_preview_prompt_with_path(event, model_type, model_path){ function use_preview_prompt_with_path(event, model_type, model_path){
console.log("start use_preview_prompt"); console.log("start use_preview_prompt");
//get hidden components of extension //get hidden components of extension
let js_use_preview_prompt_btn = gradioApp().getElementById("ch_js_use_preview_prompt_btn"); let js_use_preview_prompt_btn = gradioApp().getElementById("ch_js_use_preview_prompt_btn");
if (!js_use_preview_prompt_btn) { if (!js_use_preview_prompt_btn) {
return return
@ -556,7 +571,7 @@ function use_preview_prompt_with_path(event, model_type, model_path){
async function remove_card_with_path(event, model_type, model_path){ async function remove_card_with_path(event, model_type, model_path){
console.log("start remove_card"); console.log("start remove_card");
//get hidden components of extension //get hidden components of extension
let js_remove_card_btn = gradioApp().getElementById("ch_js_remove_card_btn"); let js_remove_card_btn = gradioApp().getElementById("ch_js_remove_card_btn");
if (!js_remove_card_btn) { if (!js_remove_card_btn) {
return return
@ -596,7 +611,7 @@ async function remove_card_with_path(event, model_type, model_path){
console.log(error); console.log(error);
new_py_msg = error; new_py_msg = error;
} }
console.log("new_py_msg:"); console.log("new_py_msg:");
console.log(new_py_msg); console.log(new_py_msg);
@ -628,7 +643,7 @@ async function remove_card_with_path(event, model_type, model_path){
} }
} }
} }
console.log("end remove_card"); console.log("end remove_card");
@ -645,7 +660,7 @@ function ch_dl_model_new_version(event, model_path, version_id, download_url){
return return
} }
//get hidden components of extension //get hidden components of extension
let js_dl_model_new_version_btn = gradioApp().getElementById("ch_js_dl_model_new_version_btn"); let js_dl_model_new_version_btn = gradioApp().getElementById("ch_js_dl_model_new_version_btn");
if (!js_dl_model_new_version_btn) { if (!js_dl_model_new_version_btn) {
return return
@ -673,6 +688,29 @@ function ch_dl_model_new_version(event, model_path, version_id, download_url){
} }
/**
* @param {string} version1 - version1 (x.y.z)
* @param {string} version2 - version2 (x.y.z)
* @returns {number} - 1: version1 is higher, -1: version2 is higher, 0: same version
*/
function compareVersions(version1, version2) {
const v1Parts = version1.split('.').map(Number);
const v2Parts = version2.split('.').map(Number);
for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
const v1Part = v1Parts[i] || 0;
const v2Part = v2Parts[i] || 0;
if (v1Part > v2Part) {
return 1;
} else if (v1Part < v2Part) {
return -1;
}
}
return 0; // same version
}
onUiLoaded(() => { onUiLoaded(() => {
@ -736,7 +774,7 @@ onUiLoaded(() => {
.find(el => el.closest('.tabitem').style.display === 'block') .find(el => el.closest('.tabitem').style.display === 'block')
?.id.match(/^(txt2img|img2img)_(.+)_cards$/)[2] ?.id.match(/^(txt2img|img2img)_(.+)_cards$/)[2]
console.log("found active tab: " + active_extra_tab); console.log("found active tab: " + active_extra_tab);
switch (active_extra_tab) { switch (active_extra_tab) {
@ -797,7 +835,7 @@ onUiLoaded(() => {
for (let card of cards) { for (let card of cards) {
//get button row //get button row
button_row = card.querySelector(".button-row"); button_row = card.querySelector(".button-row");
if (!button_row){ if (!button_row){
console.log("can not find button_row"); console.log("can not find button_row");
continue; continue;
@ -877,7 +915,7 @@ onUiLoaded(() => {
} }
} }
} }
@ -941,11 +979,11 @@ onUiLoaded(() => {
//find out current selected model type tab //find out current selected model type tab
extra_tabs = gradioApp().getElementById(tab_prefix+"_extra_tabs"); extra_tabs = gradioApp().getElementById(tab_prefix+"_extra_tabs");
if (!extra_tabs) {console.log("can not find extra_tabs: " + tab_prefix+"_extra_tabs");} if (!extra_tabs) {console.log("can not find extra_tabs: " + tab_prefix+"_extra_tabs");}
//get tab by id //get tab by id
for (const js_model_type of model_type_list) { for (const js_model_type of model_type_list) {
//get tab //get tab
let extra_tab = gradioApp().getElementById(tab_prefix+"_"+js_model_type); let extra_tab = gradioApp().getElementById(tab_prefix+"_"+js_model_type);
@ -1010,7 +1048,7 @@ onUiLoaded(() => {
//set button_row's flex-wrap to wrap //set button_row's flex-wrap to wrap
button_row.style.flexWrap = "wrap"; button_row.style.flexWrap = "wrap";
if (!button_row){ if (!button_row){
console.log("can not find button_row"); console.log("can not find button_row");
continue; continue;
@ -1095,7 +1133,7 @@ onUiLoaded(() => {
} }
} }
@ -1117,7 +1155,7 @@ onUiLoaded(() => {
//from sd version 1.8.0, extra network's toolbar is fully rewrited. This extension need to re-write this part too. //from sd version 1.8.0, extra network's toolbar is fully rewrited. This extension need to re-write this part too.
let sd_version = ch_sd_version(); let sd_version = ch_sd_version();
console.log(`sd version is: ${sd_version}`); console.log(`sd version is: ${sd_version}`);
if (sd_version >= "1.8.0"){ if (compareVersions(sd_version, "1.8.0") >= 0){
for (let prefix of tab_prefix_list) { for (let prefix of tab_prefix_list) {
toolbar_id = prefix + "_lora_controls"; toolbar_id = prefix + "_lora_controls";
@ -1140,7 +1178,7 @@ onUiLoaded(() => {
continue; continue;
} }
// from sd v1.8.0, we add refresh function to official's refresh button // from sd v1.8.0, we add refresh function to official's refresh button
refresh_btn.onclick = function(event){ refresh_btn.onclick = function(event){
console.log("run refresh button on click"); console.log("run refresh button on click");
@ -1164,17 +1202,17 @@ onUiLoaded(() => {
for (let prefix of tab_prefix_list) { for (let prefix of tab_prefix_list) {
tab_id = prefix + "_extra_tabs"; tab_id = prefix + "_extra_tabs";
extra_tab = gradioApp().getElementById(tab_id); extra_tab = gradioApp().getElementById(tab_id);
//get toolbar //get toolbar
//get Refresh button //get Refresh button
extra_network_refresh_btn = gradioApp().getElementById(prefix+"_extra_refresh"); extra_network_refresh_btn = gradioApp().getElementById(prefix+"_extra_refresh");
if (!extra_network_refresh_btn){ if (!extra_network_refresh_btn){
console.log("can not get extra network refresh button for " + tab_id); console.log("can not get extra network refresh button for " + tab_id);
continue; continue;
} }
// add refresh button to toolbar // add refresh button to toolbar
let ch_refresh = document.createElement("button"); let ch_refresh = document.createElement("button");
ch_refresh.innerHTML = "🔁"; ch_refresh.innerHTML = "🔁";
@ -1182,9 +1220,9 @@ onUiLoaded(() => {
ch_refresh.className = "lg secondary gradio-button"; ch_refresh.className = "lg secondary gradio-button";
ch_refresh.style.fontSize = "200%"; ch_refresh.style.fontSize = "200%";
ch_refresh.onclick = update_card_for_civitai; ch_refresh.onclick = update_card_for_civitai;
extra_network_refresh_btn.parentNode.appendChild(ch_refresh); extra_network_refresh_btn.parentNode.appendChild(ch_refresh);
} }
//run it once //run it once
@ -1194,11 +1232,8 @@ onUiLoaded(() => {
}); });