|
|
|
|
|
|
|
|
|
|
|
|
|
const div = document.getElementById('imshow'); |
|
let width = 1024 |
|
let height = 1024 |
|
let btn = document.getElementById('btn') |
|
let prompt = document.getElementById('prompt') |
|
let negativePrompt = document.getElementById('negative-prompt') |
|
let model = 'RealVisXL4' |
|
let style = 'Cinematic' |
|
function generateRandomString(length) { |
|
var result = ''; |
|
var characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; |
|
var charactersLength = characters.length; |
|
for (var i = 0; i < length; i++) { |
|
result += characters.charAt(Math.floor(Math.random() * charactersLength)); |
|
} |
|
return result; |
|
} |
|
|
|
|
|
const modelElement = document.getElementById('model'); |
|
modelElement.addEventListener('change', function() { |
|
model = this.value |
|
if (model == "mobius") { |
|
document.getElementById('guidenceRange').value = 2.7 |
|
document.getElementById('guidenceValue').innerText = 2.7; |
|
document.getElementById('stepValue').innerText = 30 |
|
style = 'Creative' |
|
} |
|
if(model=="rvx4"){ |
|
document.getElementById('guidenceRange').value = 3 |
|
document.getElementById('guidenceValue').innerText = 3; |
|
document.getElementById('stepValue').innerText = 30 |
|
} |
|
if(model=="sd3"){ |
|
document.getElementById('guidenceRange').value = 2.8 |
|
document.getElementById('guidenceValue').innerText = 2.8; |
|
document.getElementById('stepValue').innerText = 30 |
|
} |
|
if(model=="animagine"){ |
|
document.getElementById('guidenceRange').value = 7 |
|
document.getElementById('guidenceValue').innerText = 7; |
|
} |
|
if(model=="sdflash"){ |
|
document.getElementById('guidenceRange').value = 2.7 |
|
document.getElementById('guidenceValue').innerText = 2.7; |
|
document.getElementById('stepValue').innerText = 8 |
|
|
|
} |
|
if(model=="kivotos"){ |
|
document.getElementById('guidenceRange').value = 7 |
|
document.getElementById('guidenceValue').innerText = 7; |
|
document.getElementById('stepValue').innerText = 28 |
|
|
|
} |
|
if(model=="OpenDalle"){ |
|
document.getElementById('guidenceRange').value = 3.8 |
|
document.getElementById('guidenceValue').innerText = 3.8; |
|
document.getElementById('stepValue').innerText = 30 |
|
|
|
} |
|
}); |
|
|
|
const ratioElement =document.getElementById('ratio') |
|
ratioElement.addEventListener('change',function(){ |
|
ratio = this.value |
|
if(ratio == '1:1'){ |
|
width = 1024; |
|
height = 1024; |
|
} |
|
else if(ratio == '16:9'){ |
|
width = 1024; |
|
height = 576; |
|
} |
|
else if(ratio == "9:16"){ |
|
width = 576 |
|
height = 1024 |
|
} |
|
else if(ratio=="1:2"){ |
|
width = 544; |
|
height = 1088; |
|
} |
|
else if(ratio=='4:3'){ |
|
width = 896; |
|
height = 672; |
|
} |
|
}) |
|
|
|
const styleElement = document.getElementById('style') |
|
styleElement.addEventListener('change',function(){ |
|
style = this.value |
|
}) |
|
|
|
document.getElementById('stepsRange').addEventListener('input', function() { |
|
|
|
if(model=='sdflash' && Number(document.getElementById('stepValue').innerText)>16){ |
|
document.getElementById('stepValue').innerText = 16 |
|
} |
|
else { |
|
document.getElementById('stepValue').innerText = this.value; |
|
} |
|
|
|
} |
|
); |
|
|
|
document.getElementById('guidenceRange').addEventListener('input', function() { |
|
document.getElementById('guidenceValue').innerText = this.value; |
|
}); |
|
|
|
|
|
|
|
|
|
|
|
function log(msg){ |
|
console.log(msg) |
|
} |
|
|
|
let task = 0 |
|
btn.onclick = async () => { |
|
|
|
|
|
|
|
|
|
|
|
async function generateImage() { |
|
var params = { |
|
'prompt': prompt.value, |
|
'negative': negativePrompt.value, |
|
"steps": Number(document.getElementById('stepValue').innerText), |
|
'scale': Number(document.getElementById('guidenceValue').innerText), |
|
"width": Number(width), |
|
"height": Number(height), |
|
"model": model, |
|
'style': style, |
|
"hash": generateRandomString(11) |
|
}; |
|
task+=1 |
|
let loader = document.createElement('div') |
|
loader.id = 'loader' |
|
if (div.firstChild!== loader) { |
|
div.insertBefore(loader, div.firstChild); |
|
} |
|
|
|
let text = document.createElement('p') |
|
text.style.color = 'white' |
|
let loaderImg = document.createElement('img') |
|
loaderImg.src = 'https://fumesai.web.app/load.gif' |
|
loader.append(loaderImg) |
|
text.innerText = '' |
|
|
|
try { |
|
const response = await fetch('https://xyplon-okln.onrender.com/hf/img/gen', { |
|
method: 'POST', |
|
headers: { |
|
'Content-Type': 'application/json', |
|
'Connection': 'keep-alive', |
|
}, |
|
body: JSON.stringify(params) |
|
}); |
|
|
|
if (!response.ok) { |
|
|
|
if(response.status==429){ |
|
alert('too many requests! 4 concurrent jobs per minute is allowed') |
|
loader.parentNode.removeChild(loader); |
|
return |
|
} |
|
if(response.status==500){ |
|
alert('Internal Server Error please try again!') |
|
loader.parentNode.removeChild(loader); |
|
return |
|
} |
|
if(response.status==502){ |
|
alert('Restarting Server! please try again!') |
|
loader.parentNode.removeChild(loader); |
|
retur |
|
} |
|
} |
|
|
|
const reader = response.body.getReader(); |
|
const decoder = new TextDecoder(); |
|
while (true) { |
|
const { done, value } = await reader.read(); |
|
if (done) break; |
|
|
|
const chunk = decoder.decode(value, { stream: true }); |
|
const lines = chunk.split('\n'); |
|
|
|
for (const line of lines) { |
|
if (line.startsWith('data: ')) { |
|
const jsonChunk = JSON.parse(line.substring(6)); |
|
|
|
if (jsonChunk.progress === 'done') { |
|
|
|
loader.parentNode.removeChild(loader); |
|
const img = document.createElement('img'); |
|
if(jsonChunk.width==1024 && jsonChunk.height==576){ |
|
img.id = 'lds' |
|
} |
|
img.src = jsonChunk.img; |
|
if (div.firstChild!== img) { |
|
div.insertBefore(img, div.firstChild); |
|
task-=1 |
|
} |
|
|
|
} else { |
|
text.innerText = `${jsonChunk.progress}%`; |
|
loader.appendChild(text); |
|
} |
|
} |
|
} |
|
} |
|
|
|
} catch (error) { |
|
console.error(error); |
|
} |
|
} |
|
generateImage() |
|
generateImage() |
|
|
|
} |