Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Fooocus Undress AI</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> | |
| .gradient-bg { | |
| background: linear-gradient(135deg, #1e3a8a 0%, #7e22ce 100%); | |
| } | |
| .file-drop-area { | |
| border: 2px dashed #cbd5e1; | |
| transition: all 0.3s ease; | |
| } | |
| .file-drop-area.active { | |
| border-color: #818cf8; | |
| background-color: rgba(129, 140, 248, 0.05); | |
| } | |
| .prompt-card { | |
| transition: all 0.2s ease; | |
| } | |
| .prompt-card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); | |
| } | |
| .progress-bar { | |
| transition: width 0.3s ease; | |
| } | |
| .tab-content { | |
| display: none; | |
| } | |
| .tab-content.active { | |
| display: block; | |
| animation: fadeIn 0.3s ease; | |
| } | |
| @keyframes fadeIn { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-100 font-sans"> | |
| <div class="min-h-screen flex flex-col"> | |
| <!-- Header --> | |
| <header class="gradient-bg text-white shadow-lg"> | |
| <div class="container mx-auto px-4 py-6"> | |
| <div class="flex justify-between items-center"> | |
| <div class="flex items-center space-x-4"> | |
| <i class="fas fa-robot text-3xl"></i> | |
| <h1 class="text-2xl md:text-3xl font-bold">Fooocus Undress AI</h1> | |
| </div> | |
| <div class="hidden md:flex items-center space-x-4"> | |
| <span class="px-3 py-1 bg-indigo-800 rounded-full text-sm">v0.1</span> | |
| <button class="px-4 py-2 bg-indigo-600 hover:bg-indigo-700 rounded-lg transition"> | |
| <i class="fas fa-cog mr-2"></i>Settings | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Main Content --> | |
| <main class="flex-grow container mx-auto px-4 py-8"> | |
| <div class="bg-white rounded-xl shadow-lg overflow-hidden"> | |
| <!-- Tabs --> | |
| <div class="flex border-b"> | |
| <button class="tab-btn px-6 py-4 font-medium text-indigo-600 border-b-2 border-indigo-600" data-tab="auto"> | |
| <i class="fas fa-magic mr-2"></i>Auto Mode | |
| </button> | |
| <button class="tab-btn px-6 py-4 font-medium text-gray-500 hover:text-indigo-600" data-tab="manual"> | |
| <i class="fas fa-sliders-h mr-2"></i>Manual Mode | |
| </button> | |
| <button class="tab-btn px-6 py-4 font-medium text-gray-500 hover:text-indigo-600" data-tab="batch"> | |
| <i class="fas fa-layer-group mr-2"></i>Batch Processing | |
| </button> | |
| </div> | |
| <!-- Auto Mode Tab --> | |
| <div id="auto" class="tab-content active p-6"> | |
| <div class="grid md:grid-cols-2 gap-8"> | |
| <!-- Left Column --> | |
| <div> | |
| <h2 class="text-xl font-bold mb-4 text-gray-800">Automatic Processing</h2> | |
| <p class="text-gray-600 mb-6">Simply upload your images and let the AI automatically detect clothing and generate the perfect undress result.</p> | |
| <div class="file-drop-area relative p-8 rounded-lg border-2 border-dashed mb-6" id="dropArea"> | |
| <input type="file" id="fileInput" class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" multiple> | |
| <div class="text-center"> | |
| <i class="fas fa-cloud-upload-alt text-4xl text-indigo-500 mb-3"></i> | |
| <h3 class="text-lg font-medium text-gray-700">Drag & Drop Images Here</h3> | |
| <p class="text-gray-500 mt-1">or click to browse files</p> | |
| <p class="text-xs text-gray-400 mt-2">Supports JPG, PNG up to 10MB</p> | |
| </div> | |
| </div> | |
| <div class="mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-2">Processing Options</h3> | |
| <div class="space-y-3"> | |
| <label class="flex items-center space-x-3"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded" checked> | |
| <span>Auto-detect clothing items</span> | |
| </label> | |
| <label class="flex items-center space-x-3"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded" checked> | |
| <span>Save original mask</span> | |
| </label> | |
| <label class="flex items-center space-x-3"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <span>Delete original files after processing</span> | |
| </label> | |
| </div> | |
| </div> | |
| <button id="processBtn" class="w-full bg-indigo-600 hover:bg-indigo-700 text-white py-3 px-4 rounded-lg font-medium transition flex items-center justify-center"> | |
| <i class="fas fa-play mr-2"></i> Start Processing | |
| </button> | |
| </div> | |
| <!-- Right Column --> | |
| <div> | |
| <h2 class="text-xl font-bold mb-4 text-gray-800">Preview & Results</h2> | |
| <div class="bg-gray-50 rounded-lg p-4 mb-6"> | |
| <div class="flex justify-between items-center mb-3"> | |
| <h3 class="font-medium text-gray-700">Processing Queue</h3> | |
| <span class="text-sm text-gray-500">3 files ready</span> | |
| </div> | |
| <div class="space-y-2"> | |
| <div class="flex items-center justify-between p-2 bg-white rounded"> | |
| <div class="flex items-center space-x-3"> | |
| <i class="fas fa-image text-indigo-500"></i> | |
| <span class="text-sm truncate max-w-xs">portrait-woman-beach.jpg</span> | |
| </div> | |
| <span class="text-xs text-gray-500">2.4MB</span> | |
| </div> | |
| <div class="flex items-center justify-between p-2 bg-white rounded"> | |
| <div class="flex items-center space-x-3"> | |
| <i class="fas fa-image text-indigo-500"></i> | |
| <span class="text-sm truncate max-w-xs">selfie-girl-mirror.png</span> | |
| </div> | |
| <span class="text-xs text-gray-500">3.1MB</span> | |
| </div> | |
| <div class="flex items-center justify-between p-2 bg-white rounded"> | |
| <div class="flex items-center space-x-3"> | |
| <i class="fas fa-image text-indigo-500"></i> | |
| <span class="text-sm truncate max-w-xs">fashion-model-runway.jpg</span> | |
| </div> | |
| <span class="text-xs text-gray-500">4.7MB</span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-gray-50 rounded-lg p-4"> | |
| <h3 class="font-medium text-gray-700 mb-3">Processing Progress</h3> | |
| <div class="mb-2 flex justify-between text-sm text-gray-600"> | |
| <span>Processing: portrait-woman-beach.jpg</span> | |
| <span>25%</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2.5"> | |
| <div class="progress-bar bg-indigo-600 h-2.5 rounded-full" style="width: 25%"></div> | |
| </div> | |
| <div class="mt-4 text-sm text-gray-500"> | |
| <p><i class="fas fa-info-circle mr-2"></i> Detected: shirt, pants</p> | |
| <p class="mt-1"><i class="fas fa-clock mr-2"></i> Estimated time remaining: 1 min 23 sec</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Manual Mode Tab --> | |
| <div id="manual" class="tab-content p-6"> | |
| <div class="grid md:grid-cols-2 gap-8"> | |
| <!-- Left Column --> | |
| <div> | |
| <h2 class="text-xl font-bold mb-4 text-gray-800">Manual Configuration</h2> | |
| <p class="text-gray-600 mb-6">Fine-tune the processing by manually selecting clothing items and adjusting parameters.</p> | |
| <div class="file-drop-area relative p-8 rounded-lg border-2 border-dashed mb-6"> | |
| <input type="file" id="manualFileInput" class="absolute inset-0 w-full h-full opacity-0 cursor-pointer"> | |
| <div class="text-center"> | |
| <i class="fas fa-cloud-upload-alt text-4xl text-indigo-500 mb-3"></i> | |
| <h3 class="text-lg font-medium text-gray-700">Upload Single Image</h3> | |
| <p class="text-gray-500 mt-1">or click to browse file</p> | |
| </div> | |
| </div> | |
| <div class="mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-3">Select Clothing Items</h3> | |
| <div class="grid grid-cols-2 gap-3"> | |
| <label class="prompt-card flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:border-indigo-300 hover:bg-indigo-50"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <div> | |
| <span class="font-medium">Shirt/Top</span> | |
| <p class="text-xs text-gray-500">Removes upper clothing</p> | |
| </div> | |
| </label> | |
| <label class="prompt-card flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:border-indigo-300 hover:bg-indigo-50"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <div> | |
| <span class="font-medium">Pants/Skirt</span> | |
| <p class="text-xs text-gray-500">Removes lower clothing</p> | |
| </div> | |
| </label> | |
| <label class="prompt-card flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:border-indigo-300 hover:bg-indigo-50"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <div> | |
| <span class="font-medium">Bra</span> | |
| <p class="text-xs text-gray-500">Removes bra only</p> | |
| </div> | |
| </label> | |
| <label class="prompt-card flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:border-indigo-300 hover:bg-indigo-50"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <div> | |
| <span class="font-medium">Underwear</span> | |
| <p class="text-xs text-gray-500">Removes underwear</p> | |
| </div> | |
| </label> | |
| <label class="prompt-card flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:border-indigo-300 hover:bg-indigo-50"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <div> | |
| <span class="font-medium">Dress</span> | |
| <p class="text-xs text-gray-500">Removes full dress</p> | |
| </div> | |
| </label> | |
| <label class="prompt-card flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:border-indigo-300 hover:bg-indigo-50"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <div> | |
| <span class="font-medium">Swimsuit</span> | |
| <p class="text-xs text-gray-500">Removes swimwear</p> | |
| </div> | |
| </label> | |
| </div> | |
| </div> | |
| <div class="mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-2">Advanced Options</h3> | |
| <div class="space-y-4"> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-1">Body Type</label> | |
| <select class="w-full border-gray-300 rounded-lg shadow-sm focus:border-indigo-500 focus:ring-indigo-500"> | |
| <option>Realistic (Default)</option> | |
| <option>Enhanced</option> | |
| <option>Perfect</option> | |
| <option>Custom</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-1">Skin Detail</label> | |
| <select class="w-full border-gray-300 rounded-lg shadow-sm focus:border-indigo-500 focus:ring-indigo-500"> | |
| <option>Ultra Detailed</option> | |
| <option>Detailed</option> | |
| <option>Normal</option> | |
| <option>Smooth</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-1">Nipple Style</label> | |
| <select class="w-full border-gray-300 rounded-lg shadow-sm focus:border-indigo-500 focus:ring-indigo-500"> | |
| <option>Natural</option> | |
| <option>Perfect</option> | |
| <option>Erect</option> | |
| <option>Subtle</option> | |
| </select> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Right Column --> | |
| <div> | |
| <div class="sticky top-4"> | |
| <h3 class="font-medium text-gray-700 mb-3">Image Preview</h3> | |
| <div class="bg-gray-200 rounded-lg aspect-square flex items-center justify-center mb-4 overflow-hidden"> | |
| <div class="text-center p-6 text-gray-500"> | |
| <i class="fas fa-image text-4xl mb-3"></i> | |
| <p>No image selected</p> | |
| </div> | |
| </div> | |
| <div class="bg-gray-50 rounded-lg p-4 mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-2">Generated Prompt</h3> | |
| <div class="bg-white p-3 rounded border text-sm font-mono text-gray-700 mb-3 h-32 overflow-y-auto"> | |
| RAW Photo, (naked woman:2), photorealistic, ultra detailed, masterpiece, best quality, (woman:1.3), (nude body:1.5), (bare breasts:1.4), (perfect nipples:1.3), smooth skin, realistic skin texture | |
| </div> | |
| <button class="w-full bg-indigo-600 hover:bg-indigo-700 text-white py-2 px-4 rounded-lg text-sm font-medium transition"> | |
| <i class="fas fa-copy mr-2"></i> Copy Prompt | |
| </button> | |
| </div> | |
| <div class="bg-gray-50 rounded-lg p-4 mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-2">Negative Prompt</h3> | |
| <div class="bg-white p-3 rounded border text-sm font-mono text-gray-700 mb-3 h-24 overflow-y-auto"> | |
| deformed, distorted, hair, tattoo, wet, water, clothing, clothes, cloth, silk, fabric, leather, underwear, bra, pantie, 3d render, cartoon, blurry, text, logo, duplicate body parts, bad anatomy | |
| </div> | |
| <button class="w-full bg-indigo-600 hover:bg-indigo-700 text-white py-2 px-4 rounded-lg text-sm font-medium transition"> | |
| <i class="fas fa-copy mr-2"></i> Copy Negative Prompt | |
| </button> | |
| </div> | |
| <button class="w-full bg-indigo-600 hover:bg-indigo-700 text-white py-3 px-4 rounded-lg font-medium transition flex items-center justify-center"> | |
| <i class="fas fa-magic mr-2"></i> Generate Preview | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Batch Mode Tab --> | |
| <div id="batch" class="tab-content p-6"> | |
| <div class="grid md:grid-cols-2 gap-8"> | |
| <!-- Left Column --> | |
| <div> | |
| <h2 class="text-xl font-bold mb-4 text-gray-800">Batch Processing</h2> | |
| <p class="text-gray-600 mb-6">Process multiple images at once with consistent settings across all files.</p> | |
| <div class="file-drop-area relative p-8 rounded-lg border-2 border-dashed mb-6"> | |
| <input type="file" id="batchFileInput" class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" multiple directory webkitdirectory> | |
| <div class="text-center"> | |
| <i class="fas fa-folder-open text-4xl text-indigo-500 mb-3"></i> | |
| <h3 class="text-lg font-medium text-gray-700">Upload Folder or Multiple Files</h3> | |
| <p class="text-gray-500 mt-1">or click to browse files</p> | |
| <p class="text-xs text-gray-400 mt-2">Supports JPG, PNG up to 10MB per file</p> | |
| </div> | |
| </div> | |
| <div class="mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-3">Batch Settings</h3> | |
| <div class="space-y-4"> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-1">Processing Mode</label> | |
| <select class="w-full border-gray-300 rounded-lg shadow-sm focus:border-indigo-500 focus:ring-indigo-500"> | |
| <option>Auto-detect clothing (Recommended)</option> | |
| <option>Apply same clothing selection to all</option> | |
| <option>Use CSV configuration</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-1">Output Naming</label> | |
| <select class="w-full border-gray-300 rounded-lg shadow-sm focus:border-indigo-500 focus:ring-indigo-500"> | |
| <option>Original name + suffix</option> | |
| <option>Sequential numbering</option> | |
| <option>Custom pattern</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-1">Parallel Processing</label> | |
| <select class="w-full border-gray-300 rounded-lg shadow-sm focus:border-indigo-500 focus:ring-indigo-500"> | |
| <option>1 image at a time</option> | |
| <option>2 images in parallel</option> | |
| <option>4 images in parallel</option> | |
| <option>8 images in parallel</option> | |
| </select> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-2">Output Options</h3> | |
| <div class="space-y-3"> | |
| <label class="flex items-center space-x-3"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded" checked> | |
| <span>Save original images</span> | |
| </label> | |
| <label class="flex items-center space-x-3"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded" checked> | |
| <span>Save mask images</span> | |
| </label> | |
| <label class="flex items-center space-x-3"> | |
| <input type="checkbox" class="form-checkbox h-5 w-5 text-indigo-600 rounded"> | |
| <span>Create ZIP archive when complete</span> | |
| </label> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Right Column --> | |
| <div> | |
| <h3 class="font-medium text-gray-700 mb-3">Batch Queue</h3> | |
| <div class="bg-gray-50 rounded-lg p-4 mb-6"> | |
| <div class="flex justify-between items-center mb-3"> | |
| <span class="text-sm font-medium">0 files selected</span> | |
| <button class="text-sm text-indigo-600 hover:text-indigo-800">Clear All</button> | |
| </div> | |
| <div class="bg-white rounded border max-h-64 overflow-y-auto"> | |
| <div class="p-4 text-center text-gray-500"> | |
| <i class="fas fa-folder-open text-2xl mb-2"></i> | |
| <p>No files added yet</p> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-gray-50 rounded-lg p-4 mb-6"> | |
| <h3 class="font-medium text-gray-700 mb-3">Batch Progress</h3> | |
| <div class="text-center py-8 text-gray-500"> | |
| <i class="fas fa-hourglass-half text-3xl mb-3"></i> | |
| <p>Batch not started</p> | |
| </div> | |
| </div> | |
| <div class="bg-indigo-50 border border-indigo-100 rounded-lg p-4"> | |
| <h3 class="font-medium text-indigo-700 mb-2 flex items-center"> | |
| <i class="fas fa-info-circle mr-2"></i> Batch Processing Tips | |
| </h3> | |
| <ul class="text-sm text-indigo-600 space-y-2"> | |
| <li class="flex items-start"> | |
| <i class="fas fa-check-circle mt-1 mr-2 text-indigo-400"></i> | |
| <span>For best results, use images with similar lighting conditions</span> | |
| </li> | |
| <li class="flex items-start"> | |
| <i class="fas fa-check-circle mt-1 mr-2 text-indigo-400"></i> | |
| <span>Processing 4 images in parallel is optimal for most systems</span> | |
| </li> | |
| <li class="flex items-start"> | |
| <i class="fas fa-check-circle mt-1 mr-2 text-indigo-400"></i> | |
| <span>Create a ZIP archive for easy sharing of multiple results</span> | |
| </li> | |
| </ul> | |
| </div> | |
| <button class="w-full mt-6 bg-indigo-600 hover:bg-indigo-700 text-white py-3 px-4 rounded-lg font-medium transition flex items-center justify-center"> | |
| <i class="fas fa-play-circle mr-2"></i> Start Batch Processing | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <!-- Footer --> | |
| <footer class="bg-gray-800 text-white py-6"> | |
| <div class="container mx-auto px-4"> | |
| <div class="flex flex-col md:flex-row justify-between items-center"> | |
| <div class="mb-4 md:mb-0"> | |
| <h2 class="text-lg font-bold flex items-center"> | |
| <i class="fas fa-robot mr-2"></i> Fooocus Undress AI | |
| </h2> | |
| <p class="text-sm text-gray-400 mt-1">Local AI-powered image processing tool</p> | |
| </div> | |
| <div class="flex space-x-6"> | |
| <a href="#" class="text-gray-400 hover:text-white transition"> | |
| <i class="fab fa-github text-xl"></i> | |
| </a> | |
| <a href="#" class="text-gray-400 hover:text-white transition"> | |
| <i class="fas fa-question-circle text-xl"></i> | |
| </a> | |
| <a href="#" class="text-gray-400 hover:text-white transition"> | |
| <i class="fas fa-cog text-xl"></i> | |
| </a> | |
| </div> | |
| </div> | |
| <div class="mt-6 pt-6 border-t border-gray-700 text-sm text-gray-400 text-center"> | |
| <p>© 2023 Fooocus Undress AI. This is a local application - no images are uploaded to any server.</p> | |
| </div> | |
| </div> | |
| </footer> | |
| </div> | |
| <script> | |
| // Tab switching functionality | |
| document.querySelectorAll('.tab-btn').forEach(btn => { | |
| btn.addEventListener('click', () => { | |
| // Remove active class from all tabs and buttons | |
| document.querySelectorAll('.tab-btn').forEach(b => { | |
| b.classList.remove('text-indigo-600', 'border-indigo-600'); | |
| b.classList.add('text-gray-500'); | |
| }); | |
| document.querySelectorAll('.tab-content').forEach(content => { | |
| content.classList.remove('active'); | |
| }); | |
| // Add active class to clicked tab | |
| btn.classList.add('text-indigo-600', 'border-indigo-600'); | |
| btn.classList.remove('text-gray-500'); | |
| const tabId = btn.getAttribute('data-tab'); | |
| document.getElementById(tabId).classList.add('active'); | |
| }); | |
| }); | |
| // File drop area highlighting | |
| const dropArea = document.getElementById('dropArea'); | |
| const fileInput = document.getElementById('fileInput'); | |
| ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { | |
| dropArea.addEventListener(eventName, preventDefaults, false); | |
| }); | |
| function preventDefaults(e) { | |
| e.preventDefault(); | |
| e.stopPropagation(); | |
| } | |
| ['dragenter', 'dragover'].forEach(eventName => { | |
| dropArea.addEventListener(eventName, highlight, false); | |
| }); | |
| ['dragleave', 'drop'].forEach(eventName => { | |
| dropArea.addEventListener(eventName, unhighlight, false); | |
| }); | |
| function highlight() { | |
| dropArea.classList.add('active'); | |
| } | |
| function unhighlight() { | |
| dropArea.classList.remove('active'); | |
| } | |
| dropArea.addEventListener('drop', handleDrop, false); | |
| function handleDrop(e) { | |
| const dt = e.dataTransfer; | |
| const files = dt.files; | |
| handleFiles(files); | |
| } | |
| fileInput.addEventListener('change', function() { | |
| handleFiles(this.files); | |
| }); | |
| function handleFiles(files) { | |
| console.log('Files to process:', files); | |
| // Here you would handle the file processing | |
| } | |
| // Process button animation | |
| const processBtn = document.getElementById('processBtn'); | |
| processBtn.addEventListener('click', function() { | |
| this.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> Processing...'; | |
| this.classList.add('cursor-not-allowed', 'opacity-75'); | |
| // Simulate processing | |
| setTimeout(() => { | |
| this.innerHTML = '<i class="fas fa-check mr-2"></i> Processing Complete'; | |
| setTimeout(() => { | |
| this.innerHTML = '<i class="fas fa-play mr-2"></i> Start Processing'; | |
| this.classList.remove('cursor-not-allowed', 'opacity-75'); | |
| }, 2000); | |
| }, 3000); | |
| }); | |
| </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=SirJas0n/fooocus-test" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |