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

226 lines
6.8 KiB
JavaScript

const api = require('../api')
const html_manip = require('../html_manip')
const selection = require('../../selection')
const note = require('../notification')
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',
]
return module_list
}
async function populateModelMenu() {
try {
const models = await requestControlNetModelList()
html_manip.populateMenu(
'mModelsMenuControlNet',
'mModelsMenuItemControlNet',
models,
(item, item_html_element) => {
item_html_element.innerHTML = item
}
)
} catch (e) {
console.warn(e)
}
}
async function populatePreprocessorMenu() {
try {
const modules = await requestControlNetModuleList()
html_manip.populateMenu(
'mModuleMenuControlNet',
'mModuleMenuItemControlNet',
modules,
(item, item_html_element) => {
item_html_element.innerHTML = item
}
)
} catch (e) {
console.warn(e)
}
}
async function initializeControlNetTab() {
await populateModelMenu()
await populatePreprocessorMenu()
}
function getControlNetWeightGuidanceStrength() {
const slider_value = document.getElementById(
'slControlNetGuidanceStrength'
).value
const sd_value = general.mapRange(slider_value, 0, 100, 0, 1) // convert slider value to SD ready value
return sd_value
}
function getControlNetWeight() {
const slider_value = document.getElementById('slControlNetWeight').value
// debugger
const sd_value = general.mapRange(slider_value, 0, 100, 0, 2) // convert slider value to SD ready value
return sd_value
}
function getUseLowVram() {
const b_result = document.getElementById('chlowVram').checked
return b_result
}
function getEnableControlNet() {
const is_enable = document.getElementById('chEnableControlNet').checked
return is_enable
}
function getSelectedModule() {
const module_name = html_manip.getSelectedMenuItemTextContent(
'mModuleMenuControlNet'
)
return module_name
}
function getSelectedModel() {
const model_name = html_manip.getSelectedMenuItemTextContent(
'mModelsMenuControlNet'
)
return model_name
}
function getUseGuessMode() {
const is_guess_mode = document.getElementById('chGuessMode').checked
return is_guess_mode
}
function mapPluginSettingsToControlNet(plugin_settings) {
const ps = plugin_settings // for shortness
let control_net_payload = {}
control_net_payload['control_net_weight'] = getControlNetWeight()
control_net_payload['controlnet_guidance'] =
getControlNetWeightGuidanceStrength()
control_net_payload['controlnet_lowvram'] = getUseLowVram()
control_net_payload['controlnet_input_image'] = [
g_generation_session.controlNetImage,
]
control_net_payload['controlnet_module'] = getSelectedModule()
control_net_payload['controlnet_model'] = getSelectedModel()
getUseGuessMode()
control_net_payload = {
...ps, //all plugin settings
...control_net_payload, //all control net ui settings
// prompt: ps['prompt'],
// negative_prompt: ps['negative_prompt'],
// controlnet_input_image: [ps['control_net_image']],
// controlnet_mask: [],
// controlnet_module: 'depth',
// controlnet_model: 'control_sd15_depth [fef5e48e]',
// controlnet_weight: parseInt(ps['control_net_weight']),
controlnet_resize_mode: 'Scale to Fit (Inner Fit)',
// controlnet_lowvram: true,
controlnet_processor_res: 512,
controlnet_threshold_a: 64,
controlnet_threshold_b: 64,
// seed: ps['seed'],
subseed: -1,
// subseed_strength: -1,
// subseed_strength: 0,
// controlnet_guidance: 1,
// sampler_index: ps['sampler_index'],
// batch_size: parseInt(ps['batch_size']),
// n_iter: 1,
// steps: parseInt(ps['steps']),
// cfg_scale: ps['cfg_scale'],
// width: ps['width'],
// height: ps['height'],
// restore_faces: ps['restore_faces'],
override_settings: {},
override_settings_restore_afterwards: true,
}
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()
control_net_payload = {
...control_net_payload,
guess_mode: b_use_guess_mode,
include_init_images: true,
}
}
return control_net_payload
}
//event listeners
document
.getElementById('slControlNetGuidanceStrength')
.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').textContent =
Number(sd_value).toFixed(2)
})
document
.getElementById('slControlNetWeight')
.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').textContent =
Number(sd_value).toFixed(2)
})
document
.getElementById('bSetControlImage')
.addEventListener('click', async () => {
const selectionInfo = await selection.Selection.getSelectionInfoExe()
if (selectionInfo) {
await g_generation_session.setControlNetImage()
} else {
await note.Notification.inactiveSelectionArea()
}
})
module.exports = {
requestControlNetModelList,
populateModelMenu,
initializeControlNetTab,
getControlNetWeight,
mapPluginSettingsToControlNet,
getEnableControlNet,
getSelectedModule,
getSelectedModel,
}