226 lines
6.8 KiB
JavaScript
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,
|
|
}
|