]> git.cworth.org Git - zombocom-ai/blobdiff - index.html
Timeout on image generation after 60 seconds
[zombocom-ai] / index.html
index f438b60f3ac1f53abc9350715812caea641308f0..d055878d9cf0339d9bcf62bf55489a59314e4e9a 100644 (file)
@@ -5,7 +5,7 @@
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>ZOMBO</title>
   <link href="/zombo.css" rel="stylesheet" type="text/css">
-  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
+  <meta name="viewport" content="width=device-width,initial-scale=1">
   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
   <meta name="HandheldFriendly" content="true">
 </head>
     </p>
 
     <p>
+      <div id="spinner" align="center">
+        <div class="animate-flicker">
+          <p>
+            <img src="/pngwheel.png" class="rotate thefade">
+          </p>
+        </div>
+      </div>
+
       <form action="" id="zombo-form">
         <div class="form-row large">
           <label for="prompt">
-            What do you imagine?
+            What can you imagine?
           </label>
+          <button id="safety" type="button">Safety prompt</button>
           <textarea id="prompt" rows="4" width="100%" autocomplete="off" required></textarea>
         </div>
 
           </div>
         </div>
 
-        <div class="form-row small right">
-          <button id="safety" class="right" type="button">Safety prompt</button>
-        </div>
-
         <div class="form-row large">
           <button id="generate" type="submit">Make the infinite possible</button>
         </div>
       </form>
     </p>
 
+    <div id="images">
+    </div>
+
     <ul id="comments">
     </ul>
 
       </form>
     </p>
 
-    <div align="center">
-      <div class="animate-flicker">
-        <p>
-          <img src="/pngwheel.png" class="rotate thefade">
-        </p>
-      </div>
-    </div>
-
     <audio loop="" src="/zombo_words.mp3" type="audio/mpeg"></audio>
     <button id="mute" class="fade volume">
       <div>🔊</div>
@@ -102,6 +102,8 @@ mute.addEventListener("click", () => {
   <script>
     var socket = io();
 
+    const images = document.querySelector("#images");
+
     const comments = document.querySelector("#comments");
     const comment_form = document.querySelector("#comment-form");
     const comment = document.querySelector("#comment");
@@ -112,6 +114,9 @@ mute.addEventListener("click", () => {
 
     const safety= document.querySelector("#safety");
 
+    const spinner = document.querySelector("#spinner");
+    var spinner_timeout;
+
     comment_form.addEventListener('submit', function(e) {
         e.preventDefault();
         if (comment.value) {
@@ -126,12 +131,39 @@ mute.addEventListener("click", () => {
         comments.appendChild(item);
     });
 
+    socket.on('image', (image) => {
+        const figure = document.createElement('figure');
+        const img = document.createElement('img');
+        img.src = image.filename;
+        const figcaption = document.createElement('figcaption');
+        const caption_text = document.createTextNode(`${image.prompt} (${image.code})`);
+        figcaption.appendChild(caption_text);
+        figure.appendChild(img);
+        figure.appendChild(figcaption);
+        images.prepend(figure);
+    });
+
+    function hide_spinner() {
+        zombo_form.style.display = "grid";
+        spinner.style.display = "none";
+    }
+
     zombo_form.addEventListener('submit', function(e) {
         e.preventDefault();
+        /* Hide the form and show spinner while generation is happening. */
+        zombo_form.style.display = "none";
+        spinner.style.display = "block";
+        spinner_timeout = setTimeout(hide_spinner, 60000);
         socket.emit('generate', {"prompt": prompt.value, "code": code.value});
         prompt.value = '';
     });
 
+    socket.on('generation-done', () => {
+        /* Re-display the form and hide spinner now that generation is over. */
+        cancelTimeout(spinner_timeout);
+        hide_spinner();
+    });
+
     // TODO: Dynamically generate many different prompts here
     safety.addEventListener("click", () => {
         prompt.value = "Matte painting of a Samurai warrior";