277 lines
8.1 KiB
JavaScript
277 lines
8.1 KiB
JavaScript
const webui_to_horde_samplers = {
|
|
'Euler a': 'k_euler_a',
|
|
Euler: 'k_euler',
|
|
LMS: 'k_lms',
|
|
Heun: 'k_heun',
|
|
DPM2: 'k_dpm_2',
|
|
'DPM2 a': 'k_dpm_2_a',
|
|
'DPM++ 2S a': 'k_dpmpp_2s_a',
|
|
'DPM++ 2M': 'k_dpmpp_2m',
|
|
'DPM++ SDE': 'k_dpmpp_sde',
|
|
'DPM fast': 'k_dpm_fast',
|
|
'DPM adaptive': 'k_dpm_adaptive',
|
|
'LMS Karras': 'k_lms',
|
|
'DPM2 Karras': 'k_dpm_2',
|
|
'DPM2 a Karras': 'k_dpm_2_a',
|
|
'DPM++ 2S a Karras': 'k_dpmpp_2s_a',
|
|
'DPM++ 2M Karras': 'k_dpmpp_2m',
|
|
'DPM++ SDE Karras': 'k_dpmpp_sde',
|
|
DDIM: 'ddim',
|
|
PLMS: 'plms',
|
|
}
|
|
|
|
//get workers
|
|
//select a worker
|
|
//send a request => requestHorde(horde_settings)
|
|
//check for progress => requestHordeCheck(request_id)
|
|
//when progress is full, request the result => requestHordeStatus(request_id)
|
|
|
|
function mapPluginSettingsToHorde(plugin_settings) {
|
|
const { getModelHorde } = require('../sd_scripts/horde')
|
|
const ps = plugin_settings // for shortness
|
|
const sampler = webui_to_horde_samplers[ps['sampler_index']]
|
|
const model = getModelHorde()
|
|
let horde_payload = {
|
|
prompt: ps['prompt'],
|
|
params: {
|
|
sampler_name: sampler,
|
|
toggles: [1, 4],
|
|
cfg_scale: ps['cfg_scale'],
|
|
denoising_strength: ps['denoising_strength'],
|
|
// seed: 'string',
|
|
height: ps['height'],
|
|
width: ps['width'],
|
|
seed_variation: 1,
|
|
post_processing: ['GFPGAN'],
|
|
karras: false,
|
|
tiling: false,
|
|
steps: parseInt(ps['steps']),
|
|
n: 1,
|
|
},
|
|
nsfw: false,
|
|
trusted_workers: true,
|
|
censor_nsfw: false,
|
|
// workers: ['4c79ab19-8e6c-4054-83b3-773b7ce71ece'],
|
|
// workers: workers_ids,
|
|
// models: ['stable_diffusion'],
|
|
models: [model],
|
|
// source_image: 'string',
|
|
// source_processing: 'img2img',
|
|
// source_mask: 'string',
|
|
r2: true,
|
|
shared: false,
|
|
}
|
|
return horde_payload
|
|
}
|
|
|
|
function getWorkerID(workers_json) {
|
|
let workers_ids = []
|
|
for (worker of workers_json) {
|
|
workers_ids.push(worker?.id)
|
|
}
|
|
console.log('workers_ids:', workers_ids)
|
|
|
|
return workers_ids
|
|
}
|
|
async function getWorkers() {
|
|
const full_url = 'https://stablehorde.net/api/v2/workers'
|
|
// const full_url = 'https://stablehorde.net/api/v2/generate/sync'
|
|
console.log(full_url)
|
|
|
|
let request = await fetch(full_url, {
|
|
method: 'GET',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
},
|
|
})
|
|
|
|
let workers = await request.json()
|
|
// const workers_ids = getWorkerID(workers)
|
|
console.log('requestHorde workers:', workers)
|
|
return workers
|
|
}
|
|
async function requestHorde(payload) {
|
|
const workers = await getWorkers()
|
|
|
|
const workers_ids = getWorkerID(workers)
|
|
const settings = await getSettings()
|
|
payload = mapPluginSettingsToHorde(settings)
|
|
payload['workers'] = workers_ids
|
|
// payload = {
|
|
// prompt: 'string',
|
|
// params: {
|
|
// sampler_name: 'k_lms',
|
|
// toggles: [1, 4],
|
|
// cfg_scale: 5,
|
|
// denoising_strength: 0.75,
|
|
// // seed: 'string',
|
|
// height: 512,
|
|
// width: 512,
|
|
// seed_variation: 1,
|
|
// post_processing: ['GFPGAN'],
|
|
// karras: false,
|
|
// tiling: false,
|
|
// steps: 5,
|
|
// n: 1,
|
|
// },
|
|
// nsfw: false,
|
|
// trusted_workers: true,
|
|
// censor_nsfw: false,
|
|
// // workers: ['4c79ab19-8e6c-4054-83b3-773b7ce71ece'],
|
|
// workers: workers_ids,
|
|
// models: ['stable_diffusion'],
|
|
// // source_image: 'string',
|
|
// // source_processing: 'img2img',
|
|
// // source_mask: 'string',
|
|
// r2: true,
|
|
// shared: false,
|
|
// }
|
|
try {
|
|
console.log('requestHorde():')
|
|
|
|
const full_url = 'https://stablehorde.net/api/v2/generate/async'
|
|
// const full_url = 'https://stablehorde.net/api/v2/generate/sync'
|
|
console.log(full_url)
|
|
|
|
let request = await fetch(full_url, {
|
|
method: 'POST',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
apikey: '0000000000',
|
|
// 'Client-Agent': '4c79ab19-8e6c-4054-83b3-773b7ce71ece',
|
|
'Client-Agent': 'unknown:0:unknown',
|
|
},
|
|
body: JSON.stringify(payload),
|
|
})
|
|
|
|
let json = await request.json()
|
|
console.log('requestHorde json:', json)
|
|
|
|
return json
|
|
} catch (e) {
|
|
console.warn(e)
|
|
return {}
|
|
}
|
|
}
|
|
async function requestHordeCheck(id) {
|
|
try {
|
|
console.log('requestHordeCheck():')
|
|
const base_url = 'https://stablehorde.net/api/v2/generate/check'
|
|
|
|
const full_url = `${base_url}/${id}`
|
|
// const full_url = 'https://stablehorde.net/api/v2/generate/sync'
|
|
console.log(full_url)
|
|
const payload = {}
|
|
let request = await fetch(full_url, {
|
|
method: 'GET',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
// 'Client-Agent': '4c79ab19-8e6c-4054-83b3-773b7ce71ece',
|
|
'Client-Agent': 'unknown:0:unknown',
|
|
},
|
|
})
|
|
|
|
let json = await request.json()
|
|
console.log('requestHordeCheck json:', json)
|
|
|
|
return json
|
|
} catch (e) {
|
|
console.warn(e)
|
|
return {}
|
|
}
|
|
}
|
|
|
|
async function requestHordeStatus(id) {
|
|
try {
|
|
console.log('requestHordeStatus():')
|
|
const base_url = 'https://stablehorde.net/api/v2/generate/status'
|
|
|
|
const full_url = `${base_url}/${id}`
|
|
// const full_url = 'https://stablehorde.net/api/v2/generate/sync'
|
|
console.log(full_url)
|
|
const payload = {}
|
|
let request = await fetch(full_url, {
|
|
method: 'GET',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
// 'Client-Agent': '4c79ab19-8e6c-4054-83b3-773b7ce71ece',
|
|
'Client-Agent': 'unknown:0:unknown',
|
|
},
|
|
})
|
|
|
|
let json = await request.json()
|
|
console.log('requestHordeStatus json:', json)
|
|
|
|
return json
|
|
} catch (e) {
|
|
console.warn(e)
|
|
}
|
|
}
|
|
|
|
let g_interval_id
|
|
let g_id
|
|
let g_horde_generation_result
|
|
let g_b_request_result = false
|
|
function cancelRequestClientSide() {
|
|
clearTimeout(g_interval_id)
|
|
g_id = null
|
|
g_b_request_result = false
|
|
}
|
|
|
|
async function startCheckingProgress() {
|
|
if (!g_interval_id && g_id) {
|
|
g_interval_id = setInterval(async () => {
|
|
try {
|
|
const check_json = await requestHordeCheck(g_id)
|
|
if (
|
|
check_json['done'] &&
|
|
g_interval_id
|
|
// !g_b_request_result
|
|
) {
|
|
clearTimeout(g_interval_id)
|
|
console.log('horde request is done')
|
|
// g_b_request_result = true
|
|
const temp_id = g_id //g_id will reset
|
|
// cancelRequestClientSide()
|
|
g_horde_generation_result = await requestHordeStatus(
|
|
temp_id
|
|
)
|
|
|
|
const generations = g_horde_generation_result.generations
|
|
for (image_horde_container of generations) {
|
|
try {
|
|
const url = image_horde_container.img
|
|
await downloadItExe(url, 'webp') //
|
|
} catch (e) {
|
|
console.warn(e)
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
console.warn(e)
|
|
}
|
|
}, 3000)
|
|
}
|
|
}
|
|
|
|
async function requestHordeMain() {
|
|
try {
|
|
let json = await requestHorde()
|
|
g_id = json.id
|
|
startCheckingProgress()
|
|
console.log('requestHordeMain json: ', json)
|
|
} catch (e) {
|
|
console.warn(e)
|
|
}
|
|
}
|
|
module.exports = {
|
|
requestHorde,
|
|
requestHordeCheck,
|
|
requestHordeStatus,
|
|
requestHordeMain,
|
|
getWorkers,
|
|
}
|