]> git.cworth.org Git - zombocom-ai/blobdiff - index.html
Add a new 'reset' event from server to client before replay
[zombocom-ai] / index.html
index 13fc62af92a00c9e5dc6f0f3e7da2848c0ae0b72..ad53d866130fc1b683f5d1274c203c4aff2b4a79 100644 (file)
     </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">
       </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>
@@ -114,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) {
@@ -128,6 +131,10 @@ mute.addEventListener("click", () => {
         comments.appendChild(item);
     });
 
+    socket.on('reset', () => {
+        images.replaceChildren();
+    });
+
     socket.on('image', (image) => {
         const figure = document.createElement('figure');
         const img = document.createElement('img');
@@ -140,22 +147,86 @@ mute.addEventListener("click", () => {
         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 while generation is happening. */
+        /* 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 now that image-generation is over. */
-        zombo_form.style.display = "grid";
+        /* Re-display the form and hide spinner now that generation is over. */
+        clearTimeout(spinner_timeout);
+        hide_spinner();
     });
 
-    // TODO: Dynamically generate many different prompts here
+    function random_from(items) {
+        return items[Math.floor(Math.random()*items.length)];
+    }
+
     safety.addEventListener("click", () => {
-        prompt.value = "Matte painting of a Samurai warrior";
+        const art_type = [
+            "A portrait of",
+            "A hyperrealistic photograph of",
+            "A matte painting of",
+            "Epic fantasy card art of",
+            "Professional oil painting of",
+            "An image of",
+            "A pencil sketch of",
+            "A watercolor of",
+        ];
+        const subject = [
+            " a modern home",
+            " crashing waves",
+            " a Porsche 911 Carrera",
+            " a Halo spartan",
+            " a cute cat",
+            " a mad scientist",
+            " an elfin princess",
+            " sci-fi buildings",
+            " pastel purple clouds",
+            " a Teenage Mutant Ninja Turtle",
+        ];
+        const scenery = [
+            " in tropical surroundings",
+            " in space",
+            " in an ocean storm",
+            " in a snowy forest",
+            " in a cardboard box",
+            " holding an axe",
+            " in an epic landscape",
+            " in a haunted forest",
+            " riding a motorbike",
+            " in a futuristic city at night",
+            " in a dystopian landscape, foggy",
+            " in the land of snow",
+            " that looks like a watermelon",
+            " on the streets of London at night with neon lights flashing",
+            " that is part octopus",
+            " melting into a puddle",
+        ];
+        const artist = [
+            ", unreal engine 5",
+            ", concept art",
+            ", graphic novel",
+            " by Vincent Van Gogh",
+            " by Claude Monet",
+            " by Johannes Vermeer",
+            ", fantasy art, neon fog",
+            ", epic lighting from above",
+            ", trending on artstation",
+        ];
+
+        prompt.value = random_from(art_type) + random_from(subject) +
+            random_from(scenery) + random_from(artist);
         return false;
     });