Artistic Intelligence Re-imagining AI application in art The term Artificial Intelligence automatically invokes negative associations in my mind. Something artificial is not authentic, original or real, but a forgery or a fake imitation of reality. Art as an expression is a very subjective thing. To me, art has always been defined by an emotional response. Does the artwork invoke a strong feeling? Positive or negative, true art should not leave a person indifferent. AI models are "trained" on enormous amounts of data. A large part of that data consists of art created throughout human existence, hundreds of thousands of paintings and drawings, sculptures and other creative expressions are part of this database. A living gallery where artists submit their work to become part of an ever-evolving tapestry of AI generated art. Large models will be fine tuned on artists work, creating new strands of art. The spectators are part of the story, photographed upon entry, their portraits will be integrated into Loras in real time, mini trained models that are mixed into the main database and manifested in the art. Patrons of the gallery will see representations of themselves in the artwork showcased withing the gallery. These methods to locally train large generative AI models are just the tip of the iceberg when it comes to innovation and adaptation of Ai in the creative field. The goal is to utilize the powerful AI tools not as a means of art creation and interpretation but as a catalyst and a vehicle to bring new and exciting ideas to life. The computational speed and generative power of large generative models are constantly improving and with a wider variety of tools available to the public every day, the sky is no longer the limit. Creating an interactive art gallery is a way to integrate the viewer into the creative process, trully immersing them into the art itself. The gallery patrons will have the ability to manipulate multiple aspects of the generative art in real time. By accesing terminals located throughout the space, the viewers can input concepts and terms that will affect the main generation happening on the walls. By entering prompts like "Summer", "War", or even "Puppies", these terms will trigger the model to infuse the live generation with new visual elements that will transform the narrative and guide it into new dimensions. - Initial Deployment
8546765
verified
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Artistic Intelligence Gallery</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <style> | |
| @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Roboto:wght@300;400;500&display=swap'); | |
| body { | |
| font-family: 'Roboto', sans-serif; | |
| background-color: #0a0a0a; | |
| color: #f5f5f5; | |
| overflow-x: hidden; | |
| } | |
| h1, h2, h3 { | |
| font-family: 'Playfair Display', serif; | |
| } | |
| .gallery-wall { | |
| background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); | |
| box-shadow: 0 0 50px rgba(0,0,0,0.7); | |
| } | |
| .artwork { | |
| transition: all 0.5s ease; | |
| box-shadow: 0 0 20px rgba(255,255,255,0.1); | |
| overflow: hidden; | |
| } | |
| .artwork:hover { | |
| transform: scale(1.02); | |
| box-shadow: 0 0 30px rgba(255,255,255,0.2); | |
| } | |
| .artwork-frame { | |
| border: 15px solid #333; | |
| background: #222; | |
| box-shadow: inset 0 0 20px rgba(0,0,0,0.5); | |
| position: relative; | |
| } | |
| .pulse { | |
| animation: pulse 2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0% { | |
| box-shadow: 0 0 0 0 rgba(74, 144, 226, 0.7); | |
| } | |
| 70% { | |
| box-shadow: 0 0 0 10px rgba(74, 144, 226, 0); | |
| } | |
| 100% { | |
| box-shadow: 0 0 0 0 rgba(74, 144, 226, 0); | |
| } | |
| } | |
| .generative-canvas { | |
| width: 100%; | |
| height: 100%; | |
| background: #111; | |
| } | |
| .input-terminal { | |
| background: linear-gradient(145deg, #1e293b, #0f172a); | |
| box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); | |
| } | |
| .glass-effect { | |
| background: rgba(255, 255, 255, 0.05); | |
| backdrop-filter: blur(10px); | |
| -webkit-backdrop-filter: blur(10px); | |
| border: 1px solid rgba(255, 255, 255, 0.1); | |
| } | |
| </style> | |
| </head> | |
| <body class="min-h-screen flex flex-col"> | |
| <!-- Navigation --> | |
| <nav class="glass-effect py-4 px-6 fixed w-full z-50"> | |
| <div class="max-w-7xl mx-auto flex justify-between items-center"> | |
| <div class="flex items-center space-x-2"> | |
| <i class="fas fa-robot text-2xl text-purple-400"></i> | |
| <h1 class="text-2xl font-bold">Artistic<span class="text-purple-400">Intelligence</span></h1> | |
| </div> | |
| <div class="hidden md:flex space-x-6"> | |
| <a href="#about" class="hover:text-purple-400 transition">About</a> | |
| <a href="#gallery" class="hover:text-purple-400 transition">Gallery</a> | |
| <a href="#interact" class="hover:text-purple-400 transition">Interact</a> | |
| <a href="#philosophy" class="hover:text-purple-400 transition">Philosophy</a> | |
| </div> | |
| <button id="mobile-menu-button" class="md:hidden text-xl"> | |
| <i class="fas fa-bars"></i> | |
| </button> | |
| </div> | |
| <!-- Mobile Menu --> | |
| <div id="mobile-menu" class="hidden md:hidden absolute top-full left-0 w-full glass-effect py-4 px-6"> | |
| <div class="flex flex-col space-y-4"> | |
| <a href="#about" class="hover:text-purple-400 transition">About</a> | |
| <a href="#gallery" class="hover:text-purple-400 transition">Gallery</a> | |
| <a href="#interact" class="hover:text-purple-400 transition">Interact</a> | |
| <a href="#philosophy" class="hover:text-purple-400 transition">Philosophy</a> | |
| </div> | |
| </div> | |
| </nav> | |
| <!-- Hero Section --> | |
| <section class="pt-32 pb-20 px-6"> | |
| <div class="max-w-7xl mx-auto"> | |
| <div class="flex flex-col lg:flex-row items-center"> | |
| <div class="lg:w-1/2 mb-10 lg:mb-0 lg:pr-10"> | |
| <h2 class="text-4xl md:text-6xl font-bold mb-6 leading-tight"> | |
| Reimagining <span class="text-purple-400">AI</span> in Art | |
| </h2> | |
| <p class="text-lg md:text-xl mb-8 text-gray-300"> | |
| Where human creativity meets machine intelligence to create something truly unique. | |
| Step into a gallery where the art responds to your presence and evolves in real-time. | |
| </p> | |
| <div class="flex space-x-4"> | |
| <a href="#interact" class="bg-purple-600 hover:bg-purple-700 text-white px-6 py-3 rounded-full font-medium transition"> | |
| Experience Now | |
| </a> | |
| <a href="#about" class="border border-purple-400 text-purple-400 hover:bg-purple-900/50 px-6 py-3 rounded-full font-medium transition"> | |
| Learn More | |
| </a> | |
| </div> | |
| </div> | |
| <div class="lg:w-1/2"> | |
| <div class="artwork-frame rounded-lg overflow-hidden shadow-2xl h-96 relative"> | |
| <canvas id="heroCanvas" class="generative-canvas"></canvas> | |
| <div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4"> | |
| <h3 class="text-xl font-bold">Generative Composition #1</h3> | |
| <p class="text-sm text-gray-300">Influenced by: cubism, digital abstraction</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- About Section --> | |
| <section id="about" class="py-20 px-6 bg-black/50"> | |
| <div class="max-w-7xl mx-auto"> | |
| <div class="text-center mb-16"> | |
| <h2 class="text-3xl md:text-5xl font-bold mb-4">The <span class="text-purple-400">Concept</span></h2> | |
| <div class="w-24 h-1 bg-purple-500 mx-auto mb-6"></div> | |
| <p class="max-w-3xl mx-auto text-lg text-gray-300"> | |
| Our gallery transforms the relationship between artist, AI, and audience. | |
| Your presence becomes part of the creative process, influencing the evolving artworks in real-time. | |
| </p> | |
| </div> | |
| <div class="grid md:grid-cols-3 gap-8"> | |
| <div class="glass-effect p-8 rounded-xl"> | |
| <div class="text-purple-400 mb-4 text-4xl"> | |
| <i class="fas fa-user-astronaut"></i> | |
| </div> | |
| <h3 class="text-xl font-bold mb-3">Visitor Integration</h3> | |
| <p class="text-gray-300"> | |
| Your portrait is captured upon entry and becomes part of the AI's training data, blending your essence into the generative artworks. | |
| </p> | |
| </div> | |
| <div class="glass-effect p-8 rounded-xl"> | |
| <div class="text-purple-400 mb-4 text-4xl"> | |
| <i class="fas fa-project-diagram"></i> | |
| </div> | |
| <h3 class="text-xl font-bold mb-3">Real-time Generation</h3> | |
| <p class="text-gray-300"> | |
| Our high-speed AI models continuously create new art pieces that evolve based on visitor input and environmental factors. | |
| </p> | |
| </div> | |
| <div class="glass-effect p-8 rounded-xl"> | |
| <div class="text-purple-400 mb-4 text-4xl"> | |
| <i class="fas fa-hand-sparkles"></i> | |
| </div> | |
| <h3 class="text-xl font-bold mb-3">Interactive Terminals</h3> | |
| <p class="text-gray-300"> | |
| Influence the direction of art generation by entering concepts like "Summer", "War", or "Puppies" at our interactive stations. | |
| </p> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Gallery Section --> | |
| <section id="gallery" class="py-20 px-6"> | |
| <div class="max-w-7xl mx-auto"> | |
| <div class="text-center mb-16"> | |
| <h2 class="text-3xl md:text-5xl font-bold mb-4">The <span class="text-purple-400">Gallery</span></h2> | |
| <div class="w-24 h-1 bg-purple-500 mx-auto mb-6"></div> | |
| <p class="max-w-3xl mx-auto text-lg text-gray-300"> | |
| Experience the ever-evolving collection of AI-human collaborative artworks. | |
| Each piece is unique, shaped by both the system and visitor interactions. | |
| </p> | |
| </div> | |
| <div class="gallery-wall p-8 rounded-3xl mb-16"> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> | |
| <div class="artwork"> | |
| <div class="artwork-frame rounded-lg overflow-hidden h-80"> | |
| <canvas id="artwork1" class="generative-canvas"></canvas> | |
| <div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4"> | |
| <h3 class="text-lg font-bold">Emergent Patterns #47</h3> | |
| <p class="text-xs text-gray-300">Visitor influences: abstract, geometry, fluid</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="artwork"> | |
| <div class="artwork-frame rounded-lg overflow-hidden h-80"> | |
| <canvas id="artwork2" class="generative-canvas"></canvas> | |
| <div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4"> | |
| <h3 class="text-lg font-bold">Neural Landscapes #12</h3> | |
| <p class="text-xs text-gray-300">Visitor influences: nature, surreal, expansive</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="artwork"> | |
| <div class="artwork-frame rounded-lg overflow-hidden h-80"> | |
| <canvas id="artwork3" class="generative-canvas"></canvas> | |
| <div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4"> | |
| <h3 class="text-lg font-bold">Portrait Variants #9</h3> | |
| <p class="text-xs text-gray-300">Visitor influences: classical, distortion, emotion</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="text-center"> | |
| <button id="refresh-art" class="bg-purple-600 hover:bg-purple-700 text-white px-8 py-3 rounded-full font-medium transition flex items-center mx-auto"> | |
| <i class="fas fa-sync-alt mr-2"></i> Generate New Artworks | |
| </button> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Interactive Section --> | |
| <section id="interact" class="py-20 px-6 bg-black/50"> | |
| <div class="max-w-7xl mx-auto"> | |
| <div class="text-center mb-16"> | |
| <h2 class="text-3xl md:text-5xl font-bold mb-4">Shape the <span class="text-purple-400">Art</span></h2> | |
| <div class="w-24 h-1 bg-purple-500 mx-auto mb-6"></div> | |
| <p class="max-w-3xl mx-auto text-lg text-gray-300"> | |
| Use our interactive terminal to influence the direction of the art generation. | |
| Your input is processed in real-time and incorporated into the evolving artworks. | |
| </p> | |
| </div> | |
| <div class="flex flex-col lg:flex-row gap-8"> | |
| <div class="lg:w-1/2"> | |
| <div class="input-terminal rounded-2xl p-8 h-full"> | |
| <h3 class="text-2xl font-bold mb-6">Interactive Terminal</h3> | |
| <div class="mb-6"> | |
| <label class="block text-gray-300 mb-2">Enter influence words (separate by commas):</label> | |
| <input type="text" id="prompt-input" class="w-full bg-gray-800/50 border border-gray-700 rounded-lg px-4 py-3 focus:outline-none focus:ring-2 focus:ring-purple-500" placeholder="e.g. summer, abstract, emotion"> | |
| </div> | |
| <div class="mb-6"> | |
| <label class="block text-gray-300 mb-2">Select art style:</label> | |
| <select id="style-select" class="w-full bg-gray-800/50 border border-gray-700 rounded-lg px-4 py-3 focus:outline-none focus:ring-2 focus:ring-purple-500"> | |
| <option value="abstract">Abstract Expressionism</option> | |
| <option value="surreal">Surrealism</option> | |
| <option value="cubist">Cubism</option> | |
| <option value="impressionist">Impressionism</option> | |
| <option value="digital">Digital Art</option> | |
| </select> | |
| </div> | |
| <div class="mb-6"> | |
| <label class="block text-gray-300 mb-2">Color palette:</label> | |
| <div class="flex flex-wrap gap-2"> | |
| <button class="color-choice px-3 py-2 rounded" data-color="warm">Warm</button> | |
| <button class="color-choice px-3 py-2 rounded" data-color="cool">Cool</button> | |
| <button class="color-choice px-3 py-2 rounded" data-color="monochrome">Monochrome</button> | |
| <button class="color-choice px-3 py-2 rounded" data-color="vibrant">Vibrant</button> | |
| <button class="color-choice px-3 py-2 rounded" data-color="pastel">Pastel</button> | |
| </div> | |
| </div> | |
| <button id="submit-prompt" class="w-full bg-purple-600 hover:bg-purple-700 text-white px-6 py-3 rounded-lg font-medium transition flex items-center justify-center"> | |
| <i class="fas fa-magic mr-2"></i> Influence the Art | |
| </button> | |
| </div> | |
| </div> | |
| <div class="lg:w-1/2"> | |
| <div class="artwork-frame rounded-lg overflow-hidden h-96"> | |
| <canvas id="liveCanvas" class="generative-canvas"></canvas> | |
| <div class="absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4"> | |
| <h3 class="text-xl font-bold">Live Generation</h3> | |
| <p class="text-sm text-gray-300">Current influences: <span id="current-influences">abstract, emotion, movement</span></p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Philosophy Section --> | |
| <section id="philosophy" class="py-20 px-6"> | |
| <div class="max-w-7xl mx-auto"> | |
| <div class="text-center mb-16"> | |
| <h2 class="text-3xl md:text-5xl font-bold mb-4">Our <span class="text-purple-400">Philosophy</span></h2> | |
| <div class="w-24 h-1 bg-purple-500 mx-auto mb-6"></div> | |
| </div> | |
| <div class="max-w-4xl mx-auto"> | |
| <div class="glass-effect p-8 md:p-12 rounded-xl mb-8"> | |
| <p class="text-lg leading-relaxed mb-6"> | |
| The term Artificial Intelligence automatically invokes negative associations in many minds. | |
| Something artificial is often perceived as not authentic, original or real, but a forgery | |
| or a fake imitation of reality. But art as an expression is a very subjective thing. | |
| </p> | |
| <p class="text-lg leading-relaxed mb-6"> | |
| To us, art has always been defined by an emotional response. Does the artwork invoke | |
| a strong feeling? Positive or negative, true art should not leave a person indifferent. | |
| This is what we strive for with our AI-human collaborative gallery. | |
| </p> | |
| <p class="text-lg leading-relaxed"> | |
| AI models are "trained" on enormous amounts of data. A large part of that data consists | |
| of art created throughout human existence. Our gallery creates a symbiotic relationship | |
| where the AI doesn't replace human creativity but becomes a catalyst for new forms | |
| of artistic expression. | |
| </p> | |
| </div> | |
| <div class="grid md:grid-cols-2 gap-8"> | |
| <div class="glass-effect p-8 rounded-xl"> | |
| <h3 class="text-xl font-bold mb-4 text-purple-400">The Process</h3> | |
| <ul class="space-y-3"> | |
| <li class="flex items-start"> | |
| <i class="fas fa-circle text-xs mt-1.5 mr15 text-purple-400"></i> | |
| <span class="ml-2">Artists submit work to our database</span> | |
| </li> | |
| <li class="flex items-start"> | |
| <i class="fas fa-circle text-xs mt-1.5 mr15 text-purple-400"></i> | |
| <span class="ml-2">Large models are fine-tuned on this collective creativity</span> | |
| </li> | |
| <li class="flex items-start"> | |
| <i class="fas fa-circle text-xs mt-1.5 mr15 text-purple-400"></i> | |
| <span class="ml-2">Visitors are photographed upon entry</span> | |
| </li> | |
| <li class="flex items-start"> | |
| <i class="fas fa-circle text-xs mt-1.5 mr15 text-purple-400"></i> | |
| <span class="ml-2">Portraits are integrated into the models in real-time</span> | |
| </li> | |
| <li class="flex items-start"> | |
| <i class="fas fa-circle text-xs mt-1.5 mr15 text-purple-400"></i> | |
| <span class="ml-2">The gallery displays evolving, responsive art</span> | |
| </li> | |
| </ul> | |
| </div> | |
| <div class="glass-effect p-8 rounded-xl"> | |
| <h3 class="text-xl font-bold mb-4 text-purple-400">The Future</h3> | |
| <p class="mb-4"> | |
| These methods to locally train large generative AI models are just the tip of | |
| the iceberg when it comes to innovation and adaptation of AI in the creative field. | |
| </p> | |
| <p> | |
| The goal is to utilize these powerful AI tools not as a means of art creation | |
| and interpretation but as a catalyst and a vehicle to bring new and exciting | |
| ideas to life. The computational speed and generative power of large models are | |
| constantly improving, and with a wider variety of tools available to the public | |
| every day, the sky is no longer the limit. | |
| </p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Capture Modal --> | |
| <div id="capture-modal" class="fixed inset-0 bg-black/80 z-50 flex items-center justify-center hidden"> | |
| <div class="glass-effect rounded-xl p-8 max-w-md w-full mx-4"> | |
| <h3 class="text-2xl font-bold mb-4">Welcome to Artistic Intelligence</h3> | |
| <p class="mb-6">To personalize your experience, we'd like to capture your portrait. This will be used to influence the artworks during your visit.</p> | |
| <div class="mb-6 text-center"> | |
| <div class="inline-block relative"> | |
| <div class="w-48 h-48 bg-gray-800 rounded-full flex items-center justify-center mb-4"> | |
| <i class="fas fa-camera text-4xl text-gray-500"></i> | |
| </div> | |
| <button class="absolute bottom-0 right-0 bg-purple-600 text-white p-3 rounded-full hover:bg-purple-700 transition"> | |
| <i class="fas fa-camera-retro"></i> | |
| </button> | |
| </div> | |
| </div> | |
| <div class="flex space-x-4"> | |
| <button id="accept-capture" class="flex-1 bg-purple-600 hover:bg-purple-700 text-white px-6 py-3 rounded-lg font-medium transition"> | |
| Accept and Continue | |
| </button> | |
| <button id="decline-capture" class="flex-1 border border-gray-600 text-gray-300 hover:bg-gray-800/50 px-6 py-3 rounded-lg font-medium transition"> | |
| Skip | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Footer --> | |
| <footer class="glass-effect py-10 px-6"> | |
| <div class="max-w-7xl mx-auto"> | |
| <div class="flex flex-col md:flex-row justify-between items-center"> | |
| <div class="flex items-center space-x-2 mb-6 md:mb-0"> | |
| <i class="fas fa-robot text-2xl text-purple-400"></i> | |
| <h1 class="text-2xl font-bold">Artistic<span class="text-purple-400">Intelligence</span></h1> | |
| </div> | |
| <div class="flex space-x-6 mb-6 md:mb-0"> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-twitter"></i></a> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-instagram"></i></a> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-discord"></i></a> | |
| <a href="#" class="hover:text-purple-400 transition"><i class="fab fa-github"></i></a> | |
| </div> | |
| <div class="text-gray-400 text-sm"> | |
| © 2023 Artistic Intelligence. All rights reserved. | |
| </div> | |
| </div> | |
| </div> | |
| </footer> | |
| <script> | |
| // Mobile menu toggle | |
| document.getElementById('mobile-menu-button').addEventListener('click', function() { | |
| const menu = document.getElementById('mobile-menu'); | |
| menu.classList.toggle('hidden'); | |
| }); | |
| // Show capture modal on page load | |
| window.addEventListener('load', function() { | |
| setTimeout(() => { | |
| document.getElementById('capture-modal').classList.remove('hidden'); | |
| }, 2000); | |
| }); | |
| // Close capture modal | |
| document.getElementById('accept-capture').addEventListener('click', function() { | |
| document.getElementById('capture-modal').classList.add('hidden'); | |
| // Here you would normally capture the user's image | |
| alert('Thank you! Your portrait has been captured and will influence the artworks.'); | |
| }); | |
| document.getElementById('decline-capture').addEventListener('click', function() { | |
| document.getElementById('capture-modal').classList.add('hidden'); | |
| }); | |
| // Generate random artworks | |
| function generateArt(canvasId, influences = ['abstract', 'geometry', 'emotion']) { | |
| const canvas = document.getElementById(canvasId); | |
| const ctx = canvas.getContext('2d'); | |
| // Set canvas dimensions | |
| canvas.width = canvas.offsetWidth; | |
| canvas.height = canvas.offsetHeight; | |
| // Clear canvas | |
| ctx.clearRect(0, 0, canvas.width, canvas.height); | |
| // Generate random artwork based on influences | |
| if (influences.includes('abstract') || influences.includes('geometry')) { | |
| generateAbstractArt(ctx, canvas.width, canvas.height, influences); | |
| } else if (influences.includes('portrait') || influences.includes('face')) { | |
| generatePortraitArt(ctx, canvas.width, canvas.height, influences); | |
| } else if (influences.includes('nature') || influences.includes('landscape')) { | |
| generateNatureArt(ctx, canvas.width, canvas.height, influences); | |
| } else { | |
| generateAbstractArt(ctx, canvas.width, canvas.height, influences); | |
| } | |
| } | |
| // Different art generation functions | |
| function generateAbstractArt(ctx, width, height, influences) { | |
| // Determine color palette based on influences | |
| let colors = []; | |
| if (influences.includes('warm')) { | |
| colors = ['#ff7800', '#ff5100', '#ff0055', '#ff00aa', '#ff00ff']; | |
| } else if (influences.includes('cool')) { | |
| colors = ['#00aaff', '#0066ff', '#0033ff', '#0000ff', '#6600cc']; | |
| } else if (influences.includes('monochrome')) { | |
| colors = ['#fff', '#ccc', '#999', '#666', '#333', '#000']; | |
| } else { | |
| colors = ['#ff0055', '#ff5100', '#00aaff', '#00ff99', '#ffee00', '#cc00ff']; | |
| } | |
| // Drawing parameters | |
| const shapeCount = 20 + Math.floor(Math.random() * 30); | |
| const useLines = influences.includes('geometry'); | |
| const useCircles = influences.includes('fluid') || !useLines; | |
| // Draw background | |
| ctx.fillStyle = '#111'; | |
| ctx.fillRect(0, 0, width, height); | |
| // Draw shapes | |
| for (let i = 0; i < shapeCount; i++) { | |
| const x = Math.random() * width; | |
| const y = Math.random() * height; | |
| const size = 20 + Math.random() * 100; | |
| const rotation = Math.random() * Math.PI * 2; | |
| const color = colors[Math.floor(Math.random() * colors.length)]; | |
| const alpha = 0.2 + Math.random() * 0.8; | |
| ctx.save(); | |
| ctx.translate(x, y); | |
| ctx.rotate(rotation); | |
| ctx.globalAlpha = alpha; | |
| if (useLines && Math.random() > 0.5) { | |
| // Draw lines or rectangles | |
| ctx.fillStyle = color; | |
| ctx.fillRect(-size/2, -size/10, size, size/5); | |
| } else if (useCircles) { | |
| // Draw circles | |
| ctx.beginPath(); | |
| ctx.arc(0, 0, size/2, 0, Math.PI * 2); | |
| ctx.fillStyle = color; | |
| ctx.fill(); | |
| } else { | |
| // Draw triangles | |
| ctx.beginPath(); | |
| ctx.moveTo(0, -size/2); | |
| ctx.lineTo(size/2, size/2); | |
| ctx.lineTo(-size/2, size/2); | |
| ctx.closePath(); | |
| ctx.fillStyle = color; | |
| ctx.fill(); | |
| } | |
| ctx.restore(); | |
| } | |
| // Add some connecting lines if geometry is strong | |
| if (influences.includes('geometry') && Math.random() > 0.3) { | |
| ctx.strokeStyle = 'rgba(255,255,255,0.2)'; | |
| ctx.lineWidth = 1; | |
| const points = []; | |
| for (let i = 0; i < 5 + Math.floor(Math.random() * 10); i++) { | |
| points.push({ | |
| x: Math.random() * width, | |
| y: Math.random() * height | |
| }); | |
| } | |
| for (let i = 0; i < points.length; i++) { | |
| for (let j = i + 1; j < points.length; j++) { | |
| if (Math.random() > 0.7) { | |
| ctx.beginPath(); | |
| ctx.moveTo(points[i].x, points[i].y); | |
| ctx.lineTo(points[j].x, points[j].y); | |
| ctx.stroke(); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| function generatePortraitArt(ctx, width, height, influences) { | |
| // Simplified portrait-like abstract generation | |
| ctx.fillStyle = '#111'; | |
| ctx.fillRect(0, 0, width, height); | |
| // Head shape | |
| ctx.beginPath(); | |
| ctx.ellipse(width/2, height/2, width/3, height/2.5, 0, 0, Math.PI * 2); | |
| ctx.fillStyle = 'rgba(200, 150, 100, 0.3)'; | |
| ctx.fill(); | |
| ctx.strokeStyle = 'rgba(255, 200, 150, 0.5)'; | |
| ctx.lineWidth = 2; | |
| ctx.stroke(); | |
| // Features | |
| // Eyes | |
| const eyeX1 = width/2 - width/6; | |
| const eyeX2 = width/2 + width/6; | |
| const eyeY = height/2 - height/8; | |
| ctx.beginPath(); | |
| ctx.arc(eyeX1, eyeY, width/15, 0, Math.PI * 2); | |
| ctx.fillStyle = 'rgba(255,255,255,0.7)'; | |
| ctx.fill(); | |
| ctx.beginPath(); | |
| ctx.arc(eyeX2, eyeY, width/15, 0, Math.PI * 2); | |
| ctx.fill(); | |
| // Pupils | |
| ctx.beginPath(); | |
| ctx.arc(eyeX1, eyeY, width/30, 0, Math.PI * 2); | |
| ctx.fillStyle = '#000'; | |
| ctx.fill(); | |
| ctx.beginPath(); | |
| ctx.arc(eyeX2, eyeY, width/30, 0, Math.PI * 2); | |
| ctx.fill(); | |
| // Mouth | |
| ctx.beginPath(); | |
| ctx.ellipse(width/2, height/2 + height/6, width/8, height/20, 0, 0, Math.PI); | |
| ctx.strokeStyle = 'rgba(200, 50, 50, 0.7)'; | |
| ctx.lineWidth = 3; | |
| ctx.stroke(); | |
| // Add distortion effects based on influences | |
| if (influences.includes('distortion')) { | |
| ctx.save(); | |
| ctx.globalCompositeOperation = 'lighter'; | |
| for (let i = 0; i < 5; i++) { | |
| const offsetX = (Math.random() - 0.5) * 40; | |
| const offsetY = (Math.random() - 0.5) * 40; | |
| ctx.beginPath(); | |
| ctx.ellipse( | |
| width/2 + offsetX, | |
| height/2 + offsetY, | |
| width/3, | |
| height/2.5, | |
| 0, 0, Math.PI * 2 | |
| ); | |
| ctx.strokeStyle = `hsla(${Math.random() * 360}, 80%, 60%, 0.3)`; | |
| ctx.lineWidth = 1 + Math.random() * 3; | |
| ctx.stroke(); | |
| } | |
| ctx.restore(); | |
| } | |
| // Add color splashes | |
| if (influences.includes('colorful') || !influences.includes('monochrome')) { | |
| ctx.save(); | |
| ctx.globalCompositeOperation = 'overlay'; | |
| for (let i = 0; i < 10; i++) { | |
| const x = Math.random() * width; | |
| const y = Math.random() * height; | |
| const radius = 20 + Math.random() * 80; | |
| const gradient = ctx.createRadialGradient( | |
| x, y, 0, | |
| x, y, radius | |
| ); | |
| const hue = Math.random() * 360; | |
| gradient.addColorStop(0, `hsla(${hue}, 100%, 50%, 0.5)`); | |
| gradient.addColorStop(1, `hsla(${hue}, 100%, 50%, 0)`); | |
| ctx.fillStyle = gradient; | |
| ctx.beginPath(); | |
| ctx.arc(x, y, radius, 0, Math.PI * 2); | |
| ctx.fill(); | |
| } | |
| ctx.restore(); | |
| } | |
| } | |
| function generateNatureArt(ctx, width, height, influences) { | |
| // Simplified nature-inspired abstract | |
| ctx.fillStyle = '#111'; | |
| ctx.fillRect(0, 0, width, height); | |
| // Gradient sky | |
| const skyGradient = ctx.createLinearGradient(0, 0, 0, height/2); | |
| if (influences.includes('sunset')) { | |
| skyGradient.addColorStop(0, '#ff512f'); | |
| skyGradient.addColorStop(0.5, '#dd2476'); | |
| } else if (influences.includes('night')) { | |
| skyGradient.addColorStop(0, '#0f2027'); | |
| skyGradient.addColorStop(0.5, '#203a43'); | |
| } else { | |
| skyGradient.addColorStop(0, '#1e3c72'); | |
| skyGradient.addColorStop(0.5, '#2a5298'); | |
| } | |
| ctx.fillStyle = skyGradient; | |
| ctx.fillRect(0, 0, width, height/2); | |
| // Ground | |
| const groundGradient = ctx.createLinearGradient(0, height/2, 0, height); | |
| if (influences.includes('grass')) { | |
| groundGradient.addColorStop(0, '#1e9600'); | |
| groundGradient.addColorStop(1, '#004400'); | |
| } else if (influences.includes('desert')) { | |
| groundGradient.addColorStop(0, '#f7971e'); | |
| groundGradient.addColorStop(1, '#ffd200'); | |
| } else { | |
| groundGradient.addColorStop(0, '#333'); | |
| groundGradient.addColorStop(1, '#111'); | |
| } | |
| ctx.fillStyle = groundGradient; | |
| ctx.fillRect(0, height/2, width, height/2); | |
| // Sun/moon | |
| ctx.beginPath(); | |
| ctx.arc(width/4, height/3, width/8, 0, Math.PI * 2); | |
| ctx.fillStyle = influences.includes('night') ? '#fff' : '#ffff00'; | |
| ctx.fill(); | |
| // Trees or mountains | |
| if (influences.includes('trees')) { | |
| for (let i = 0; i < 5; i++) { | |
| const x = width/5 + i * width/5; | |
| const heightVariation = height/4 * Math.random(); | |
| // Tree trunk | |
| ctx.fillStyle = '#654321'; | |
| ctx.fillRect(x - width/40, height/2, width/20, height/3 + heightVariation); | |
| // Tree leaves | |
| for (let j = 0; j < 3; j++) { | |
| const leafY = height/2 - j * height/10; | |
| const leafSize = width/8 - j * width/30; | |
| ctx.beginPath(); | |
| ctx.arc(x, leafY, leafSize, 0, Math.PI * 2); | |
| ctx.fillStyle = `rgba(0, ${150 - j * 30}, 0, 0.8)`; | |
| ctx.fill(); | |
| } | |
| } | |
| } else { | |
| // Mountains | |
| for (let i = 0; i < 3; i++) { | |
| const startX = i * width/3 - width/6; | |
| const peakX = i * width/3; | |
| const endX = (i+1) * width/3 + width/6; | |
| ctx.beginPath(); | |
| ctx.moveTo(startX, height/2); | |
| ctx.lineTo(peakX, height/4 + Math.random() * height/8); | |
| ctx.lineTo(endX, height/2); | |
| ctx.fillStyle = `rgba(100, ${50 + i * 30}, ${30 + i * 10}, 0.8)`; | |
| ctx.fill(); | |
| } | |
| } | |
| } | |
| // Initialize all artworks on page load | |
| window.addEventListener('load', function() { | |
| // Generate initial artworks | |
| generateArt('heroCanvas'); | |
| generateArt('artwork1'); | |
| generateArt('artwork2'); | |
| generateArt('artwork3'); | |
| generateArt('liveCanvas'); | |
| // Update influences display | |
| updateCurrentInfluences(['abstract', 'emotion', 'movement']); | |
| // Color choice buttons | |
| document.querySelectorAll('.color-choice').forEach(button => { | |
| button.addEventListener('click', function() { | |
| // Remove active class from all buttons | |
| document.querySelectorAll('.color-choice').forEach(btn => { | |
| btn.classList.remove('bg-purple-600', 'text-white'); | |
| btn.classList.add('bg-gray-800/50', 'text-gray-300'); | |
| }); | |
| // Add active class to clicked button | |
| this.classList.remove('bg-gray-800/50', 'text-gray-300'); | |
| this.classList.add('bg-purple-600', 'text-white'); | |
| }); | |
| }); | |
| // Make warm colors active by default | |
| document.querySelector('.color-choice[data-color="warm"]').click(); | |
| // Submit prompt | |
| document.getElementById('submit-prompt').addEventListener('click', function() { | |
| const prompt = document.getElementById('prompt-input').value; | |
| const style = document.getElementById('style-select').value; | |
| let color = 'warm'; | |
| // Get active color choice | |
| document.querySelectorAll('.color-choice').forEach(btn => { | |
| if (btn.classList.contains('bg-purple-600')) { | |
| color = btn.dataset.color; | |
| } | |
| }); | |
| // Process prompts | |
| let prompts = []; | |
| if (prompt) { | |
| prompts = prompt.split(',').map(p => p.trim().toLowerCase()); | |
| } else { | |
| prompts = ['abstract', 'random', 'experimental']; | |
| } | |
| // Add style and color to influences | |
| prompts.push(style, color); | |
| // Update live canvas | |
| generateArt('liveCanvas', prompts); | |
| // Update influences display | |
| updateCurrentInfluences(prompts); | |
| // Show confirmation | |
| alert('Your input has been incorporated into the generative process!'); | |
| }); | |
| // Refresh gallery button | |
| document.getElementById('refresh-art').addEventListener('click', function() { | |
| generateArt('artwork1', ['abstract', 'geometry', 'fluid']); | |
| generateArt('artwork2', ['nature', 'surreal', 'expansive']); | |
| generateArt('artwork3', ['classical', 'distortion', 'emotion']); | |
| alert('Gallery artworks have been regenerated with new variations!'); | |
| }); | |
| }); | |
| // Helper function to update current influences display | |
| function updateCurrentInfluences(influences) { | |
| const uniqueInfluences = [...new Set(influences)]; | |
| document.getElementById('current-influences').textContent = uniqueInfluences.join(', '); | |
| } | |
| // Responsive canvas resizing | |
| window.addEventListener('resize', function() { | |
| generateArt('heroCanvas'); | |
| generateArt('artwork1'); | |
| generateArt('artwork2'); | |
| generateArt('artwork3'); | |
| generateArt('liveCanvas'); | |
| }); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=GooGooPanda/artisticintelligence" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |