diff --git a/ldm/dream/server.py b/ldm/dream/server.py index 22a60412f1..a759648cae 100644 --- a/ldm/dream/server.py +++ b/ldm/dream/server.py @@ -31,6 +31,23 @@ class DreamServer(BaseHTTPRequestHandler): 'gfpgan_model_exists': gfpgan_model_exists } 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": self.canceled.set() self.send_response(200) diff --git a/static/dream_web/index.css b/static/dream_web/index.css index 117db7b5fb..cbe753d423 100644 --- a/static/dream_web/index.css +++ b/static/dream_web/index.css @@ -86,8 +86,8 @@ header h1 { cursor: pointer; } #results img { - height: 30vh; border-radius: 5px; + object-fit: cover; } #fieldset-config { line-height:2em; @@ -138,3 +138,7 @@ label { background-color: #F5F5F5; } +#no-results-message:not(:only-child) { + display: none; +} + diff --git a/static/dream_web/index.js b/static/dream_web/index.js index 2d2dce1452..b630656d92 100644 --- a/static/dream_web/index.js +++ b/static/dream_web/index.js @@ -11,9 +11,15 @@ function appendOutput(src, seed, config) { let outputNode = document.createElement("figure"); let altText = seed.toString() + " | " + config.prompt; + // img needs width and height for lazy loading to work const figureContents = ` - ${altText} + ${altText}
${seed}
`; @@ -117,7 +123,6 @@ async function generateSubmit(form) { if (data.event === 'result') { noOutputs = false; - document.querySelector("#no-results-message")?.remove(); appendOutput(data.url, data.seed, data.config); progressEle.setAttribute('value', 0); progressEle.setAttribute('max', totalSteps); @@ -153,7 +158,19 @@ async function generateSubmit(form) { 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) => { if (e.key === "Enter" && !e.shiftKey) { const form = e.target.form; @@ -196,4 +213,5 @@ window.onload = () => { if (!config.gfpgan_model_exists) { document.querySelector("#gfpgan").style.display = 'none'; } + await fetchRunLog() };