Skip to content

Commit 81a6dd6

Browse files
Merge pull request #158 from AbdullahAlfaraj/refactor-controlnet-js
Refactor-controlnet-js v1.2.2
2 parents 5b7aa94 + 9fc9a08 commit 81a6dd6

File tree

14 files changed

+1430
-318
lines changed

14 files changed

+1430
-318
lines changed

enum.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ const BackgroundHistoryEnum = {
4141
NoBackground: 'no_background',
4242
}
4343

44+
const PresetTypeEnum = {
45+
SDPreset: 'sd_preset',
46+
ControlNetPreset: 'controlnet_preset',
47+
}
4448
module.exports = {
4549
clickTypeEnum,
4650
generationModeEnum,
@@ -49,4 +53,5 @@ module.exports = {
4953
RequestStateEnum,
5054
DocumentTypeEnum,
5155
BackgroundHistoryEnum,
56+
PresetTypeEnum,
5257
}

index.html

Lines changed: 215 additions & 42 deletions
Large diffs are not rendered by default.

index.js

Lines changed: 71 additions & 191 deletions
Large diffs are not rendered by default.

sdapi_py_re.js

Lines changed: 54 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -576,34 +576,52 @@ async function requestGetUpscalers() {
576576
return json
577577
}
578578

579+
//REFACTOR: reuse the same code for (requestControlNetTxt2Img,requestControlNetImg2Img)
579580
async function requestControlNetTxt2Img(plugin_settings) {
580581
console.log('requestControlNetTxt2Img: ')
581582

582583
const full_url = `${g_sd_url}/controlnet/txt2img`
583584
const control_net_settings =
584585
control_net.mapPluginSettingsToControlNet(plugin_settings)
585-
let control_networks = [];
586-
let active_control_networks = 0;
587-
for (let index = 0; index < control_net.getControlNetMaxModelsNumber(); index++) {
588-
if(!control_net.getEnableControlNet(index)) {
589-
control_networks[index] = false;
590-
continue;
586+
let control_networks = []
587+
let active_control_networks = 0
588+
for (
589+
let index = 0;
590+
index < control_net.getControlNetMaxModelsNumber();
591+
index++
592+
) {
593+
if (!control_net.getEnableControlNet(index)) {
594+
control_networks[index] = false
595+
continue
591596
}
592-
control_networks[index] = true;
593-
if (!control_net_settings['controlnet_units'][active_control_networks]['input_image'][0]) {
597+
control_networks[index] = true
598+
// debugger
599+
if (
600+
!control_net_settings['controlnet_units'][active_control_networks][
601+
'input_image'
602+
]
603+
) {
594604
app.showAlert('you need to add a valid ControlNet input image')
595605
throw 'you need to add a valid ControlNet input image'
596606
}
597607

598-
if (!control_net_settings['controlnet_units'][active_control_networks]['module']) {
608+
if (
609+
!control_net_settings['controlnet_units'][active_control_networks][
610+
'module'
611+
]
612+
) {
599613
app.showAlert('you need to select a valid ControlNet Module')
600614
throw 'you need to select a valid ControlNet Module'
601615
}
602-
if (!control_net_settings['controlnet_units'][active_control_networks]['model']) {
616+
if (
617+
!control_net_settings['controlnet_units'][active_control_networks][
618+
'model'
619+
]
620+
) {
603621
app.showAlert('you need to select a valid ControlNet Model')
604622
throw 'you need to select a valid ControlNet Model'
605623
}
606-
active_control_networks++;
624+
active_control_networks++
607625
}
608626

609627
let request = await fetch(full_url, {
@@ -620,15 +638,20 @@ async function requestControlNetTxt2Img(plugin_settings) {
620638

621639
//update the mask in controlNet tab
622640
const numOfImages = json['images'].length
623-
const base64_mask = json['images'].slice(numOfImages - active_control_networks)
641+
const base64_mask = json['images'].slice(
642+
numOfImages - active_control_networks
643+
)
624644

625-
let mask_index = 0;
645+
let mask_index = 0
626646
for (let index = 0; index < control_networks.length; index++) {
627-
if(control_networks[index] == false) continue;
628-
html_manip.setControlMaskSrc(base64ToBase64Url(base64_mask[mask_index]), index)
629-
mask_index++;
647+
if (control_networks[index] == false) continue
648+
html_manip.setControlMaskSrc(
649+
base64ToBase64Url(base64_mask[mask_index]),
650+
index
651+
)
652+
mask_index++
630653
}
631-
654+
632655
g_generation_session.controlNetMask = base64_mask
633656
const standard_response = await py_re.convertToStandardResponse(
634657
control_net_settings,
@@ -640,6 +663,7 @@ async function requestControlNetTxt2Img(plugin_settings) {
640663
return standard_response
641664
}
642665

666+
//REFACTOR: reuse the same code for (requestControlNetTxt2Img,requestControlNetImg2Img)
643667
async function requestControlNetImg2Img(plugin_settings) {
644668
console.log('requestControlNetImg2Img: ')
645669
// const full_url = 'http://127.0.0.1:8000/swapModel'
@@ -648,12 +672,15 @@ async function requestControlNetImg2Img(plugin_settings) {
648672
const control_net_settings =
649673
control_net.mapPluginSettingsToControlNet(plugin_settings)
650674

651-
let control_networks = 0;
652-
for (let index = 0; index < control_net.getControlNetMaxModelsNumber(); index++) {
653-
if(!control_net.getEnableControlNet(index))
654-
break
675+
let control_networks = 0
676+
for (
677+
let index = 0;
678+
index < control_net.getControlNetMaxModelsNumber();
679+
index++
680+
) {
681+
if (!control_net.getEnableControlNet(index)) break
655682
control_networks++
656-
if (!control_net_settings['controlnet_units'][index]['input_image'][0]) {
683+
if (!control_net_settings['controlnet_units'][index]['input_image']) {
657684
app.showAlert('you need to add a valid ControlNet input image')
658685
throw 'you need to add a valid ControlNet input image'
659686
}
@@ -665,7 +692,7 @@ async function requestControlNetImg2Img(plugin_settings) {
665692
if (!control_net_settings['controlnet_units'][index]['model']) {
666693
app.showAlert('you need to select a valid ControlNet Model')
667694
throw 'you need to select a valid ControlNet Model'
668-
}
695+
}
669696
}
670697

671698
let request = await fetch(full_url, {
@@ -686,7 +713,10 @@ async function requestControlNetImg2Img(plugin_settings) {
686713
const base64_mask = json['images'].slice(numOfImages - control_networks)
687714

688715
for (let index = 0; index < control_networks; index++) {
689-
html_manip.setControlMaskSrc(base64ToBase64Url(base64_mask[index]), index)
716+
html_manip.setControlMaskSrc(
717+
base64ToBase64Url(base64_mask[index]),
718+
index
719+
)
690720
}
691721

692722
g_generation_session.controlNetMask = base64_mask

utility/event.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const updatePresetMenuEvent = new CustomEvent('updatePresetMenuEvent', {
2+
detail: {},
3+
bubbles: true,
4+
cancelable: true,
5+
composed: false,
6+
})
7+
function triggerEvent(query_selector, event) {
8+
document.querySelector(query_selector).dispatchEvent(event)
9+
}
10+
module.exports = {
11+
updatePresetMenuEvent,
12+
triggerEvent,
13+
}

utility/general.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,21 @@ function sudoTimer() {
129129
// doSomething()
130130
// html_manip.updateProgressBarsHtml(0)
131131
} else {
132-
html_manip.updateProgressBarsHtml(current_time)
132+
html_manip.updateProgressBarsHtml(
133+
current_time,
134+
'Loading ControlNet...'
135+
)
133136
console.log(current_time + ' seconds remaining')
134137
current_time++
135138
}
136139
}
137140
return timerId
138141
}
142+
function countNewLines(string) {
143+
const count = (string.match(/\n/g) || []).length
144+
// console.log(count)
145+
return count
146+
}
139147
module.exports = {
140148
newOutputImageName,
141149
makeImagePath,
@@ -151,4 +159,5 @@ module.exports = {
151159
requestOnlineData,
152160
nearestMultiple,
153161
sudoTimer,
162+
countNewLines,
154163
}

utility/html_manip.js

Lines changed: 116 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -259,18 +259,65 @@ function sliderAddEventListener(
259259
}
260260

261261
//get the stable diffusion ready value from the slider with "slider_id"
262-
function getSliderSdValue(slider_id, multiplier) {
262+
//REFACTOR: delete, getSliderSdValue_Old is deprecated, instead use getSliderSdValue
263+
function getSliderSdValue_Old(slider_id, multiplier) {
264+
// console.warn(
265+
// 'getSliderSdValue_Old is deprecated, instead use getSliderSdValue'
266+
// )
263267
const slider_value = document.getElementById(slider_id).value
264268
const sd_value = slider_value * multiplier
265269
return sd_value
266270
}
271+
//REFACTOR: delete, autoFillInSliderUi is deprecated, instead use setSliderSdValue
267272
function autoFillInSliderUi(sd_value, slider_id, label_id, multiplier) {
273+
// console.warn(
274+
// 'autoFillInSliderUi is deprecated, instead use setSliderSdValue'
275+
// )
268276
//update the slider
269277
document.getElementById(slider_id).value = `${sd_value * multiplier}`
270278
//update the label
271279
document.getElementById(label_id).innerHTML = `${sd_value}`
272280
}
273281

282+
function getSliderSdValue(
283+
slider_id,
284+
slider_start,
285+
slider_end,
286+
sd_start,
287+
sd_end
288+
) {
289+
const slider_value = document.getElementById(slider_id).value
290+
// const sd_value = general.mapRange(slider_value, 0, 100, 0, 1) // convert slider value to SD ready value
291+
const sd_value = general.mapRange(
292+
slider_value,
293+
slider_start,
294+
slider_end,
295+
sd_start,
296+
sd_end
297+
) // convert slider value to SD ready value
298+
299+
return sd_value
300+
}
301+
function setSliderSdValue(
302+
slider_id,
303+
label_id,
304+
sd_value,
305+
slider_start,
306+
slider_end,
307+
sd_start,
308+
sd_end
309+
) {
310+
const slider_value = general.mapRange(
311+
sd_value,
312+
sd_start,
313+
sd_end,
314+
slider_start,
315+
slider_end
316+
) // convert slider value to SD ready value
317+
document.getElementById(slider_id).value = slider_value.toString()
318+
document.getElementById(label_id).innerHTML = sd_value.toString()
319+
}
320+
274321
//hrWidth is from [1 to 32] * 64 => [64 to 2048]
275322
sliderAddEventListener('hrWidth', 'hWidth', 64)
276323
sliderAddEventListener('hrHeight', 'hHeight', 64)
@@ -306,6 +353,16 @@ function unCheckAllSamplers() {
306353
.forEach((e) => e.removeAttribute('checked'))
307354
}
308355

356+
function getSelectedRadioButtonElement(rbClass) {
357+
try {
358+
const rb_element = [...document.getElementsByClassName(rbClass)].filter(
359+
(e) => e.checked == true
360+
)[0]
361+
return rb_element
362+
} catch (e) {
363+
console.warn(e)
364+
}
365+
}
309366
function getSamplerElementByName(sampler_name) {
310367
try {
311368
//assume the sampler_name is valid
@@ -441,8 +498,17 @@ function setControlMaskSrc(image_src, element_index = 0) {
441498
}
442499

443500
function setProgressImageSrc(image_src) {
444-
const progress_image_element = document.getElementById('progressImage')
445-
progress_image_element.src = image_src
501+
// const progress_image_element = document.getElementById('progressImage')
502+
503+
const progress_image_element = document.getElementById(
504+
'divProgressImageViewerContainer'
505+
)
506+
// progress_image_element.src = image_src
507+
508+
progress_image_element.style.backgroundSize = 'contain'
509+
progress_image_element.style.height = '10000px'
510+
511+
progress_image_element.style.backgroundImage = `url('${image_src}')`
446512
}
447513

448514
function getInitImageMaskElement() {
@@ -750,12 +816,18 @@ function setMaskExpansion(mask_expansion) {
750816
document.getElementById('slMaskExpansion').value = mask_expansion
751817
}
752818

753-
function updateProgressBarsHtml(new_value) {
754-
document.querySelectorAll('.pProgressBars').forEach((el) => {
819+
function updateProgressBarsHtml(new_value, progress_text = 'Progress...') {
820+
document.querySelectorAll('.pProgressBars').forEach((bar_elm) => {
755821
// id = el.getAttribute("id")
756822
// console.log("progressbar id:", id)
757823
try {
758-
el.setAttribute('value', new_value)
824+
bar_elm.setAttribute('value', new_value)
825+
document
826+
.querySelectorAll('.lProgressLabel')
827+
.forEach((lable_elm) => {
828+
lable_elm.innerHTML = progress_text
829+
// else el.innerHTML = 'No work in progress'
830+
})
759831
} catch (e) {
760832
console.warn(e) //value is not valid
761833
}
@@ -812,6 +884,18 @@ function getSelectedMenuItem(menu_id) {
812884
console.warn(e)
813885
}
814886
}
887+
function selectMenuItem(menu_id, item) {
888+
try {
889+
const menu_element = document.getElementById(menu_id)
890+
const option = Array.from(menu_element.options).filter(
891+
(element) => element.value === item
892+
)[0]
893+
option.selected = true
894+
} catch (e) {
895+
unselectMenuItem(menu_id)
896+
console.warn(e)
897+
}
898+
}
815899
function getSelectedMenuItemTextContent(menu_id) {
816900
try {
817901
const text_content = getSelectedMenuItem(menu_id).textContent
@@ -820,15 +904,35 @@ function getSelectedMenuItemTextContent(menu_id) {
820904
console.warn(e)
821905
}
822906
}
907+
function unselectMenuItem(menu_id) {
908+
try {
909+
document.getElementById(menu_id).selectedIndex = null
910+
} catch (e) {
911+
console.warn(e)
912+
}
913+
}
914+
823915
function getUseNsfw() {
824916
//this method is shared between horde native and horde script
825917
const b_nsfw = document.getElementById('chUseNSFW').checked
826918
return b_nsfw
827919
}
828-
function getUseSilentMode() {
920+
function getUseSilentMode_Old() {
829921
const b_use_silent_mode = document.getElementById('chUseSilentMode').checked
830922
return b_use_silent_mode
831923
}
924+
function getUseSilentMode() {
925+
let b_use_silent_mode = true //fast machine
926+
const pc_speed = getSelectedRadioButtonElement('rbPCSpeed').value
927+
if (pc_speed === 'slow') {
928+
b_use_silent_mode = false // use noisy mode
929+
} else if (pc_speed === 'fast') {
930+
b_use_silent_mode = true // use silent mode
931+
}
932+
// const b_use_silent_mode = document.getElementById('chUseSilentMode').checked
933+
return b_use_silent_mode
934+
}
935+
832936
module.exports = {
833937
getPrompt,
834938
autoFillInPrompt,
@@ -841,6 +945,7 @@ module.exports = {
841945
getHeight,
842946
autoFillInHeight,
843947
getSliderSdValue,
948+
setSliderSdValue,
844949
autoFillInHiResFixs,
845950
getHiResFixs,
846951
setHiResFixs,
@@ -904,4 +1009,8 @@ module.exports = {
9041009
getSelectedMenuItemTextContent,
9051010
getUseNsfw,
9061011
getUseSilentMode,
1012+
unselectMenuItem,
1013+
selectMenuItem,
1014+
getSliderSdValue_Old,
1015+
getSelectedRadioButtonElement,
9071016
}

0 commit comments

Comments
 (0)