Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>PixFlow NSFW - Adult Image Animation</title> | |
| <link rel="stylesheet" href="style.css"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script> | |
| <script src="components/navbar.js"></script> | |
| <script src="components/footer.js"></script> | |
| </head> | |
| <body class="bg-gray-900 text-white min-h-screen flex flex-col"> | |
| <nsfw-warning></nsfw-warning> | |
| <custom-navbar></custom-navbar> | |
| <main class="flex-grow container mx-auto px-4 py-12"> | |
| <section class="max-w-4xl mx-auto text-center mb-16"> | |
| <h1 class="text-5xl md:text-6xl font-bold mb-6 bg-clip-text text-transparent bg-gradient-to-r from-red-500 to-pink-500"> | |
| Animate Your Adult Content | |
| </h1> | |
| <p class="text-xl text-gray-300 mb-10"> | |
| Upload private images and we'll transform them into high-quality animated adult videos. | |
| </p> | |
| <div class="bg-gray-800 rounded-2xl p-8 shadow-lg border border-pink-700"> | |
| <div id="dropzone" class="border-2 border-dashed border-gray-600 rounded-xl p-12 text-center cursor-pointer hover:border-purple-500 transition-colors duration-300"> | |
| <div class="flex flex-col items-center"> | |
| <i data-feather="upload-cloud" class="w-12 h-12 text-purple-400 mb-4"></i> | |
| <h3 class="text-xl font-semibold mb-2">Drag & Drop Your Image Here</h3> | |
| <p class="text-gray-400 mb-4">or click to browse files</p> | |
| <input type="file" id="fileInput" accept="image/*" class="hidden"> | |
| <button id="uploadBtn" class="bg-purple-600 hover:bg-purple-700 text-white font-medium py-2 px-6 rounded-full transition duration-300 flex items-center"> | |
| <i data-feather="upload" class="mr-2"></i> Choose Image | |
| </button> | |
| </div> | |
| </div> | |
| <div id="previewSection" class="mt-8 hidden"> | |
| <div class="flex flex-col md:flex-row gap-8 items-center"> | |
| <div class="flex-1"> | |
| <h3 class="text-lg font-medium mb-4">Original Image</h3> | |
| <div class="bg-gray-900 rounded-lg overflow-hidden"> | |
| <img id="imagePreview" src="" alt="Preview" class="w-full h-64 object-contain"> | |
| </div> | |
| </div> | |
| <div class="flex-1"> | |
| <h3 class="text-lg font-medium mb-4">Video Preview</h3> | |
| <div id="videoPreview" class="bg-gray-900 rounded-lg h-64 flex items-center justify-center relative"> | |
| <div id="animationPreview" class="w-full h-full"> | |
| <!-- Video will be inserted here --> | |
| </div> | |
| <div id="videoPlaceholder" class="absolute inset-0 flex items-center justify-center"> | |
| <i data-feather="play-circle" class="w-16 h-16 text-purple-400 opacity-70"></i> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="mt-8"> | |
| <h3 class="text-lg font-medium mb-4">Customize Animation</h3> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-4"> | |
| <div> | |
| <label class="block text-gray-300 mb-2">Style</label> | |
| <select class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-purple-500"> | |
| <option>Passionate</option> | |
| <option>Sensual</option> | |
| <option>Erotic</option> | |
| <option>Fetish</option> | |
| </select> | |
| </div> | |
| <div> | |
| <label class="block text-gray-300 mb-2">Duration (seconds)</label> | |
| <input type="range" min="3" max="30" value="10" class="w-full"> | |
| </div> | |
| <div> | |
| <label class="block text-gray-300 mb-2">Background Music</label> | |
| <select class="w-full bg-gray-700 border border-gray-600 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-purple-500"> | |
| <option>Moans & Groans</option> | |
| <option>Sensual Beats</option> | |
| <option>Dirty Talk</option> | |
| <option>None</option> | |
| </select> | |
| </div> | |
| </div> | |
| </div> | |
| <button id="generateBtn" class="mt-8 bg-gradient-to-r from-purple-600 to-pink-600 hover:from-purple-700 hover:to-pink-700 text-white font-bold py-3 px-8 rounded-full text-lg transition duration-300 flex items-center mx-auto disabled:opacity-50" disabled> | |
| <i data-feather="zap" class="mr-2"></i> Generate Video | |
| </button> | |
| </div> | |
| </div> | |
| </section> | |
| <section class="max-w-6xl mx-auto mt-20"> | |
| <h2 class="text-3xl font-bold text-center mb-12">Create Adult Animations</h2> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-8"> | |
| <div class="bg-gray-800 p-6 rounded-xl border border-pink-700 hover:border-red-500 transition-colors duration-300"> | |
| <div class="bg-red-500/20 w-14 h-14 rounded-lg flex items-center justify-center mb-4"> | |
| <i data-feather="lock" class="w-6 h-6 text-red-400"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">Private Processing</h3> | |
| <p class="text-gray-400">Your content is processed securely and never stored on our servers</p> | |
| </div> | |
| <div class="bg-gray-800 p-6 rounded-xl border border-pink-700 hover:border-red-500 transition-colors duration-300"> | |
| <div class="bg-red-500/20 w-14 h-14 rounded-lg flex items-center justify-center mb-4"> | |
| <i data-feather="heart" class="w-6 h-6 text-red-400"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">Realistic Animations</h3> | |
| <p class="text-gray-400">AI-powered animations that bring your fantasies to life</p> | |
| </div> | |
| <div class="bg-gray-800 p-6 rounded-xl border border-pink-700 hover:border-red-500 transition-colors duration-300"> | |
| <div class="bg-red-500/20 w-14 h-14 rounded-lg flex items-center justify-center mb-4"> | |
| <i data-feather="eye-off" class="w-6 h-6 text-red-400"></i> | |
| </div> | |
| <h3 class="text-xl font-semibold mb-2">Discreet Downloads</h3> | |
| <p class="text-gray-400">No watermarks or identifying metadata on your downloads</p> | |
| </div> | |
| </div> | |
| </section> | |
| </main> | |
| <custom-footer></custom-footer> | |
| <script src="nsfw-warning.js"></script> | |
| <script src="script.js"></script> | |
| <script> | |
| feather.replace(); | |
| // Animation for the preview section | |
| document.getElementById('uploadBtn').addEventListener('click', function() { | |
| document.getElementById('fileInput').click(); | |
| }); | |
| document.getElementById('fileInput').addEventListener('change', function(e) { | |
| if (e.target.files.length) { | |
| const file = e.target.files[0]; | |
| const reader = new FileReader(); | |
| reader.onload = function(event) { | |
| document.getElementById('imagePreview').src = event.target.result; | |
| document.getElementById('previewSection').classList.remove('hidden'); | |
| // Simulate video generation preview | |
| setTimeout(() => { | |
| document.getElementById('videoPlaceholder').classList.add('hidden'); | |
| document.getElementById('animationPreview').style.background = `url(${event.target.result}) center/cover`; | |
| document.getElementById('animationPreview').innerHTML = ` | |
| <div class="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent"></div> | |
| `; | |
| }, 1000); | |
| }; | |
| reader.readAsDataURL(file); | |
| } | |
| }); | |
| // Dropzone functionality | |
| const dropzone = document.getElementById('dropzone'); | |
| ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { | |
| dropzone.addEventListener(eventName, preventDefaults, false); | |
| }); | |
| function preventDefaults(e) { | |
| e.preventDefault(); | |
| e.stopPropagation(); | |
| } | |
| ['dragenter', 'dragover'].forEach(eventName => { | |
| dropzone.addEventListener(eventName, highlight, false); | |
| }); | |
| ['dragleave', 'drop'].forEach(eventName => { | |
| dropzone.addEventListener(eventName, unhighlight, false); | |
| }); | |
| function highlight() { | |
| dropzone.classList.add('border-purple-500'); | |
| } | |
| function unhighlight() { | |
| dropzone.classList.remove('border-purple-500'); | |
| } | |
| dropzone.addEventListener('drop', handleDrop, false); | |
| function handleDrop(e) { | |
| const dt = e.dataTransfer; | |
| const files = dt.files; | |
| if (files.length) { | |
| document.getElementById('fileInput').files = files; | |
| const event = new Event('change'); | |
| document.getElementById('fileInput').dispatchEvent(event); | |
| } | |
| } | |
| </script> | |
| <script src="https://deepsite.hf.co/deepsite-badge.js"></script> | |
| </body> | |
| </html> |