</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>
const safety= document.querySelector("#safety");
+ const spinner = document.querySelector("#spinner");
+ var spinner_timeout;
+
comment_form.addEventListener('submit', function(e) {
e.preventDefault();
if (comment.value) {
comments.appendChild(item);
});
+ socket.on('reset', () => {
+ images.replaceChildren();
+ });
+
socket.on('image', (image) => {
const figure = document.createElement('figure');
const img = document.createElement('img');
figcaption.appendChild(caption_text);
figure.appendChild(img);
figure.appendChild(figcaption);
- images.appendChild(figure);
+ 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 = '';
});
- // TODO: Dynamically generate many different prompts here
+ socket.on('generation-done', () => {
+ /* Re-display the form and hide spinner now that generation is over. */
+ clearTimeout(spinner_timeout);
+ hide_spinner();
+ });
+
+ 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;
});