Auto-Photoshop-StableDiffus.../utility/tab/control_net.js

274 lines
8.6 KiB
JavaScript

const api = require('../api')
const html_manip = require('../html_manip')
const selection = require('../../selection')
const note = require('../notification')
const g_controlnet_max_supported_models = 3
async function checkIfControlNetInstalled() {}
async function requestControlNetModelList() {
const control_net_json = await api.requestGet(
`${g_sd_url}/controlnet/model_list`
)
const model_list = control_net_json?.model_list
// const model_list = [
// 'none',
// 'control_sd15_depth [fef5e48e]',
// 'control_sd15_openpose [fef5e48e]',
// 'control_sd15_scribble [fef5e48e]',
// ]
return model_list
}
async function requestControlNetModuleList() {
// const control_net_json = await api.requestGet(
// `${g_sd_url}/controlnet/model_list`
// )
// const module_list = [
// // 'none',
// 'canny',
// 'depth',
// 'depth_leres',
// 'hed',
// 'mlsd',
// 'normal_map',
// 'openpose',
// // "openpose_hand",
// 'pidinet',
// 'scribble',
// 'fake_scribble',
// 'segmentation',
// ]
const module_list = g_sd_config_obj.getControlNetPreprocessors()
// const module_list = g_controlnet_preprocessors
return module_list
}
async function populateModelMenu() {
try {
const models = await requestControlNetModelList()
for (
let index = 0;
index < g_controlnet_max_supported_models;
index++
) {
html_manip.populateMenu(
'mModelsMenuControlNet_' + index,
'mModelsMenuItemControlNet_' + index,
models,
(item, item_html_element) => {
item_html_element.innerHTML = item
}
)
}
} catch (e) {
console.warn(e)
}
}
async function populatePreprocessorMenu() {
try {
const modules = await requestControlNetModuleList()
for (
let index = 0;
index < g_controlnet_max_supported_models;
index++
) {
html_manip.populateMenu(
'mModuleMenuControlNet_' + index,
'mModuleMenuItemControlNet_' + index,
modules,
(item, item_html_element) => {
item_html_element.innerHTML = item
}
)
}
} catch (e) {
console.warn(e)
}
}
async function initializeControlNetTab(controlnet_max_models) {
try {
if (controlnet_max_models > g_controlnet_max_supported_models)
controlnet_max_models = g_controlnet_max_supported_models
for (let index = 0; index < controlnet_max_models; index++) {
await populateModelMenu(index)
await populatePreprocessorMenu(index)
document.getElementById(
'controlnet_settings_' + index
).style.display = 'block'
}
} catch (e) {
console.warn(e)
}
}
// controlnet settings getters
function getControlNetWeightGuidanceStrength(controlnet_index = 0) {
const slider_value = document.getElementById(
'slControlNetGuidanceStrength_' + controlnet_index
).value
const sd_value = general.mapRange(slider_value, 0, 100, 0, 1) // convert slider value to SD ready value
return sd_value
}
function getControlNetWeight(controlnet_index = 0) {
const slider_value = document.getElementById(
'slControlNetWeight_' + controlnet_index
).value
const sd_value = general.mapRange(slider_value, 0, 100, 0, 2) // convert slider value to SD ready value
return sd_value
}
function getUseLowVram(controlnet_index = 0) {
const b_result = document.getElementById(
'chlowVram_' + controlnet_index
).checked
return b_result
}
function getEnableControlNet(controlnet_index = 0) {
const is_enable = document.getElementById(
'chEnableControlNet_' + controlnet_index
).checked
return is_enable
}
function getSelectedModule(controlnet_index = 0) {
const module_name = html_manip.getSelectedMenuItemTextContent(
'mModuleMenuControlNet_' + controlnet_index
)
return module_name
}
function getSelectedModel(controlnet_index = 0) {
const model_name = html_manip.getSelectedMenuItemTextContent(
'mModelsMenuControlNet_' + controlnet_index
)
return model_name
}
function getUseGuessMode(controlnet_index = 0) {
const is_guess_mode = document.getElementById(
'chGuessMode_' + controlnet_index
).checked
return is_guess_mode
}
function getControlNetMaxModelsNumber() {
return g_controlnet_max_supported_models
}
function mapPluginSettingsToControlNet(plugin_settings) {
const ps = plugin_settings // for shortness
let controlnet_units = []
for (let index = 0; index < g_controlnet_max_supported_models; index++) {
if (!getEnableControlNet(index)) break
controlnet_units[index] = {
input_image: g_generation_session.controlNetImage[index],
mask: '',
module: getSelectedModule(index),
model: getSelectedModel(index),
weight: getControlNetWeight(index),
resize_mode: 'Scale to Fit (Inner Fit)',
lowvram: getUseLowVram(index),
processor_res: 512,
threshold_a: 64,
threshold_b: 64,
guidance: getControlNetWeightGuidanceStrength(index),
guidance_start: 0,
guidance_end: 1,
guessmode: false,
}
}
if (
plugin_settings['mode'] === Enum.generationModeEnum['Img2Img'] ||
plugin_settings['mode'] === Enum.generationModeEnum['Inpaint'] ||
plugin_settings['mode'] === Enum.generationModeEnum['Outpaint']
) {
const b_use_guess_mode = getUseGuessMode()
controlnet_units[0]['guessmode'] = b_use_guess_mode
}
const controlnet_payload = {
...ps,
controlnet_units,
subseed: -1,
override_settings: {},
override_settings_restore_afterwards: true,
}
return controlnet_payload
}
function refreshControlNetTab() {}
for (let index = 0; index < g_controlnet_max_supported_models; index++) {
//event listeners
document
.getElementById('slControlNetGuidanceStrength_' + index)
.addEventListener('input', (evt) => {
// debugger
const sd_value = general.mapRange(evt.target.value, 0, 100, 0, 1) // convert slider value to SD ready value
document.getElementById(
'lControlNetGuidanceStrength_' + index
).textContent = Number(sd_value).toFixed(2)
})
document
.getElementById('slControlNetWeight_' + index)
.addEventListener('input', (evt) => {
// debugger
const sd_value = general.mapRange(evt.target.value, 0, 100, 0, 2) // convert slider value to SD ready value
document.getElementById('lControlNetWeight_' + index).textContent =
Number(sd_value).toFixed(2)
})
document
.getElementById('bSetControlImage_' + index)
.addEventListener('click', async () => {
const selectionInfo =
await selection.Selection.getSelectionInfoExe()
if (selectionInfo) {
await g_generation_session.setControlNetImage(index)
} else {
await note.Notification.inactiveSelectionArea()
}
})
document
.getElementById('bControlMask_' + index)
.addEventListener('click', async () => {
// const selectionInfo = await selection.Selection.getSelectionInfoExe()
if (
g_generation_session.control_net_selection_info &&
g_generation_session.controlNetMask[index]
) {
const selection_info =
g_generation_session.control_net_selection_info
const layer = await io.IO.base64ToLayer(
g_generation_session.controlNetMask[index],
'ControlNet Mask.png',
selection_info.left,
selection_info.top,
selection_info.width,
selection_info.height
)
} else {
// await note.Notification.inactiveSelectionArea()
app.showAlert('Mask Image is not available')
}
})
}
module.exports = {
requestControlNetModelList,
populateModelMenu,
initializeControlNetTab,
getControlNetWeight,
mapPluginSettingsToControlNet,
getEnableControlNet,
getSelectedModule,
getSelectedModel,
getControlNetMaxModelsNumber,
}