added support for parsing run log and displaying images in the frontend init state (#410)

Co-authored-by: Johan Roxendal <johan.roxendal@litteraturbanken.se>
Co-authored-by: Lincoln Stein <lincoln.stein@gmail.com>
This commit is contained in:
Johan Roxendal 2022-09-08 04:50:06 +02:00 committed by GitHub
parent 41687746be
commit 56f155c590
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 4 deletions

View File

@ -31,6 +31,23 @@ class DreamServer(BaseHTTPRequestHandler):
'gfpgan_model_exists': gfpgan_model_exists 'gfpgan_model_exists': gfpgan_model_exists
} }
self.wfile.write(bytes("let config = " + json.dumps(config) + ";\n", "utf-8")) self.wfile.write(bytes("let config = " + json.dumps(config) + ";\n", "utf-8"))
elif self.path == "/run_log.json":
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
output = []
log_file = os.path.join(self.outdir, "dream_web_log.txt")
if os.path.exists(log_file):
with open(log_file, "r") as log:
for line in log:
url, config = line.split(": {", maxsplit=1)
config = json.loads("{" + config)
config["url"] = url.lstrip(".")
if os.path.exists(url):
output.append(config)
self.wfile.write(bytes(json.dumps({"run_log": output}), "utf-8"))
elif self.path == "/cancel": elif self.path == "/cancel":
self.canceled.set() self.canceled.set()
self.send_response(200) self.send_response(200)

View File

@ -86,8 +86,8 @@ header h1 {
cursor: pointer; cursor: pointer;
} }
#results img { #results img {
height: 30vh;
border-radius: 5px; border-radius: 5px;
object-fit: cover;
} }
#fieldset-config { #fieldset-config {
line-height:2em; line-height:2em;
@ -138,3 +138,7 @@ label {
background-color: #F5F5F5; background-color: #F5F5F5;
} }
#no-results-message:not(:only-child) {
display: none;
}

View File

@ -11,9 +11,15 @@ function appendOutput(src, seed, config) {
let outputNode = document.createElement("figure"); let outputNode = document.createElement("figure");
let altText = seed.toString() + " | " + config.prompt; let altText = seed.toString() + " | " + config.prompt;
// img needs width and height for lazy loading to work
const figureContents = ` const figureContents = `
<a href="${src}" target="_blank"> <a href="${src}" target="_blank">
<img src="${src}" alt="${altText}" title="${altText}"> <img src="${src}"
alt="${altText}"
title="${altText}"
loading="lazy"
width="256"
height="256">
</a> </a>
<figcaption>${seed}</figcaption> <figcaption>${seed}</figcaption>
`; `;
@ -117,7 +123,6 @@ async function generateSubmit(form) {
if (data.event === 'result') { if (data.event === 'result') {
noOutputs = false; noOutputs = false;
document.querySelector("#no-results-message")?.remove();
appendOutput(data.url, data.seed, data.config); appendOutput(data.url, data.seed, data.config);
progressEle.setAttribute('value', 0); progressEle.setAttribute('value', 0);
progressEle.setAttribute('max', totalSteps); progressEle.setAttribute('max', totalSteps);
@ -153,7 +158,19 @@ async function generateSubmit(form) {
document.querySelector("#prompt").value = `Generating: "${prompt}"`; document.querySelector("#prompt").value = `Generating: "${prompt}"`;
} }
window.onload = () => { async function fetchRunLog() {
try {
let response = await fetch('/run_log.json')
const data = await response.json();
for(let item of data.run_log) {
appendOutput(item.url, item.seed, item);
}
} catch (e) {
console.error(e);
}
}
window.onload = async () => {
document.querySelector("#prompt").addEventListener("keydown", (e) => { document.querySelector("#prompt").addEventListener("keydown", (e) => {
if (e.key === "Enter" && !e.shiftKey) { if (e.key === "Enter" && !e.shiftKey) {
const form = e.target.form; const form = e.target.form;
@ -196,4 +213,5 @@ window.onload = () => {
if (!config.gfpgan_model_exists) { if (!config.gfpgan_model_exists) {
document.querySelector("#gfpgan").style.display = 'none'; document.querySelector("#gfpgan").style.display = 'none';
} }
await fetchRunLog()
}; };