Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Upload AI Art - NeuroMorph Gallery</title> | |
| <meta name="description" content="Upload your AI-generated artworks to NeuroMorph Gallery"> | |
| <link rel="manifest" href="manifest.json"> | |
| <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> | |
| <link rel="stylesheet" href="style.css"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <script> | |
| tailwind.config = { | |
| theme: { | |
| extend: { | |
| colors: { | |
| primary: '#f97316', | |
| secondary: '#0ea5e9' | |
| } | |
| } | |
| } | |
| } | |
| </script> | |
| </head> | |
| <body class="bg-gray-100 min-h-screen flex flex-col"> | |
| <custom-navbar></custom-navbar> | |
| <main class="flex-grow py-12 px-4"> | |
| <div class="max-w-4xl mx-auto"> | |
| <div class="text-center mb-12"> | |
| <h1 class="text-4xl font-bold text-gray-800 mb-4">Upload Your AI Art</h1> | |
| <p class="text-xl text-gray-600">Share your machine-generated masterpieces with the world</p> | |
| </div> | |
| <div class="neomorphic-card p-8"> | |
| <form id="upload-form" class="space-y-6"> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-6"> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Artwork Title</label> | |
| <input | |
| type="text" | |
| required | |
| class="neomorphic-input w-full" | |
| placeholder="Enter a captivating title" | |
| > | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Description</label> | |
| <textarea | |
| required | |
| class="neomorphic-input w-full h-32 resize-none" | |
| placeholder="Describe your artwork, the AI model used, inspiration, etc." | |
| ></textarea> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">AI Model Used</label> | |
| <select class="neomorphic-input w-full"> | |
| <option value="">Select AI Model</option> | |
| <option value="dalle">DALL-E</option> | |
| <option value="midjourney">Midjourney</option> | |
| <option value="stable-diffusion">Stable Diffusion</option> | |
| <option value="gpt-art">GPT Art</option> | |
| <option value="custom">Custom Model</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Artwork Image</label> | |
| <div class="border-2 border-dashed border-gray-300 rounded-2xl p-8 text-center transition-all duration-300 hover:border-primary" id="drop-zone"> | |
| <i data-feather="upload-cloud" class="w-12 h-12 text-gray-400 mx-auto mb-4"></i> | |
| <p class="text-gray-500 mb-2">Drag & drop your image here</p> | |
| <p class="text-sm text-gray-400 mb-4">PNG, JPG, WEBP up to 10MB</p> | |
| <button type="button" class="bg-secondary hover:bg-sky-600 text-white px-6 py-2 rounded-xl font-semibold transition-colors duration-300"> | |
| Choose File | |
| </button> | |
| <input type="file" accept="image/*" class="hidden" id="file-input"> | |
| </div> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Tags</label> | |
| <input | |
| type="text" | |
| class="neomorphic-input w-full" | |
| placeholder="AI, digital art, abstract, etc." | |
| > | |
| <p class="text-xs text-gray-500 mt-1">Separate tags with commas</p> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">License Type</label> | |
| <select class="neomorphic-input w-full"> | |
| <option value="cc-by">Creative Commons Attribution</option> | |
| <option value="cc-by-nc">Creative Commons Non-Commercial</option> | |
| <option value="all-rights">All Rights Reserved</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="flex items-center"> | |
| <input type="checkbox" class="rounded text-primary"> | |
| <span class="ml-2 text-gray-700">Make this artwork premium</span> | |
| </label> | |
| <p class="text-xs text-gray-500 mt-1">Premium artworks get featured placement and higher visibility</p> | |
| </div> | |
| </div> | |
| <div class="flex flex-col sm:flex-row gap-4 justify-end"> | |
| <button type="button" class="bg-gray-500 hover:bg-gray-600 text-white px-6 py-3 rounded-xl font-semibold transition-colors duration-300"> | |
| Cancel | |
| </button> | |
| <button type="submit" class="bg-primary hover:bg-orange-600 text-white px-8 py-3 rounded-xl font-semibold transition-colors duration-300"> | |
| <i data-feather="upload" class="inline mr-2"></i> | |
| Upload Artwork | |
| </button> | |
| </div> | |
| </form> | |
| </div> | |
| <!-- Upload Guidelines --> | |
| <div class="neomorphic-card p-8 mt-8"> | |
| <h2 class="text-2xl font-bold text-gray-800 mb-4">Upload Guidelines</h2> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-6"> | |
| <div> | |
| <h3 class="font-semibold text-gray-700 mb-2">Quality Standards</h3> | |
| <ul class="text-gray-600 space-y-1"> | |
| <li>• High-resolution images preferred</li> | |
| <li>• Must be AI-generated artwork</li> | |
| <li>• No offensive or harmful content</li> | |
| <li>• Proper attribution to AI models</li> | |
| </ul> | |
| </div> | |
| <div> | |
| <h3 class="font-semibold text-gray-700 mb-2">Best Practices</h3> | |
| <ul class="text-gray-600 space-y-1"> | |
| <li>• Include detailed descriptions</li> | |
| <li>• Use relevant tags for discoverability</li> | |
| <li>• Consider watermarking for protection</li> | |
| <li>• Choose appropriate licensing</li> | |
| </ul> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <custom-footer></custom-footer> | |
| <script src="components/navbar.js"></script> | |
| <script src="components/footer.js"></script> | |
| <script src="script.js"></script> | |
| <script> | |
| feather.replace(); | |
| // File upload handling | |
| const dropZone = document.getElementById('drop-zone'); | |
| const fileInput = document.getElementById('file-input'); | |
| const chooseFileBtn = dropZone.querySelector('button'); | |
| chooseFileBtn.addEventListener('click', () => fileInput.click()); | |
| fileInput.addEventListener('change', handleFileSelect); | |
| dropZone.addEventListener('dragover', handleDragOver); | |
| dropZone.addEventListener('drop', handleFileDrop); | |
| function handleDragOver(e) { | |
| e.preventDefault(); | |
| dropZone.classList.add('border-primary', 'bg-orange-50'); | |
| } | |
| function handleFileDrop(e) { | |
| e.preventDefault(); | |
| dropZone.classList.remove('border-primary', 'bg-orange-50'); | |
| const files = e.dataTransfer.files; | |
| if (files.length > 0) { | |
| handleFiles(files); | |
| } | |
| } | |
| function handleFileSelect(e) { | |
| const files = e.target.files; | |
| handleFiles(files); | |
| } | |
| function handleFiles(files) { | |
| const file = files[0]; | |
| if (file && file.type.startsWith('image/')) { | |
| // Preview the image | |
| const reader = new FileReader(); | |
| reader.onload = (e) => { | |
| dropZone.innerHTML = ` | |
| <img src="${e.target.result}" alt="Preview" class="max-h-64 mx-auto mb-4 rounded-xl"> | |
| <p class="text-primary font-semibold">${file.name}</p> | |
| <p class="text-sm text-gray-500">Click to change</p> | |
| `; | |
| }; | |
| reader.readAsDataURL(file); | |
| } | |
| } | |
| </script> | |
| </body> | |
| </html> |