Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>FrameToFlow | Image to Video Conversion</title> | |
| <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://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.waves.min.js"></script> | |
| <style> | |
| #vanta-bg { | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| z-index: -1; | |
| } | |
| .dropzone { | |
| border: 2px dashed rgba(255, 255, 255, 0.3); | |
| transition: all 0.3s ease; | |
| } | |
| .dropzone-active { | |
| border-color: #4F46E5; | |
| background-color: rgba(79, 70, 229, 0.1); | |
| } | |
| .progress-ring__circle { | |
| transition: stroke-dashoffset 0.35s; | |
| transform: rotate(-90deg); | |
| transform-origin: 50% 50%; | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-900 text-white min-h-screen flex flex-col"> | |
| <div id="vanta-bg"></div> | |
| <header class="py-6 px-4 sm:px-6 lg:px-8"> | |
| <div class="max-w-7xl mx-auto flex justify-between items-center"> | |
| <div class="flex items-center space-x-2"> | |
| <i data-feather="film" class="w-8 h-8 text-indigo-500"></i> | |
| <h1 class="text-2xl font-bold bg-gradient-to-r from-indigo-400 to-purple-500 bg-clip-text text-transparent">FrameToFlow</h1> | |
| </div> | |
| <nav class="hidden md:flex space-x-8"> | |
| <a href="index.html" class="text-indigo-400 transition">Home</a> | |
| <a href="texttoimage.html" class="hover:text-indigo-400 transition">Text to Image</a> | |
| <a href="#" class="hover:text-indigo-400 transition">Pricing</a> | |
| <a href="#" class="hover:text-indigo-400 transition">Docs</a> | |
| </nav> | |
| <button class="bg-indigo-600 hover:bg-indigo-700 px-4 py-2 rounded-lg transition flex items-center space-x-2"> | |
| <span>Get Started</span> | |
| <i data-feather="arrow-right" class="w-4 h-4"></i> | |
| </button> | |
| </div> | |
| </header> | |
| <main class="flex-grow flex items-center justify-center px-4 sm:px-6 lg:px-8"> | |
| <div class="max-w-4xl w-full mx-auto"> | |
| <div class="bg-gray-800 bg-opacity-60 backdrop-blur-lg rounded-2xl p-8 shadow-2xl border border-gray-700"> | |
| <div class="text-center mb-10"> | |
| <h2 class="text-3xl font-bold mb-2">Transform Images into Stunning Videos</h2> | |
| <p class="text-gray-300 max-w-2xl mx-auto">Upload your frames and let our AI create smooth, professional videos automatically</p> | |
| </div> | |
| <div id="dropzone" class="dropzone rounded-xl p-10 text-center cursor-pointer mb-8"> | |
| <div class="flex flex-col items-center justify-center space-y-4"> | |
| <i data-feather="upload-cloud" class="w-12 h-12 text-indigo-400"></i> | |
| <h3 class="text-xl font-medium">Drag & Drop your images here</h3> | |
| <p class="text-gray-400">or click to browse files</p> | |
| <input type="file" id="fileInput" class="hidden" accept="image/*" multiple> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8"> | |
| <div class="bg-gray-700 bg-opacity-50 p-4 rounded-lg border border-gray-600"> | |
| <div class="flex items-center space-x-3 mb-3"> | |
| <div class="p-2 bg-indigo-900 bg-opacity-40 rounded-lg"> | |
| <i data-feather="settings" class="w-5 h-5 text-indigo-400"></i> | |
| </div> | |
| <h4 class="font-medium">Frame Rate</h4> | |
| </div> | |
| <select class="w-full bg-gray-800 border border-gray-600 rounded-md px-3 py-2 text-sm"> | |
| <option>24 FPS (Cinematic)</option> | |
| <option selected>30 FPS (Standard)</option> | |
| <option>60 FPS (Smooth)</option> | |
| </select> | |
| </div> | |
| <div class="bg-gray-700 bg-opacity-50 p-4 rounded-lg border border-gray-600"> | |
| <div class="flex items-center space-x-3 mb-3"> | |
| <div class="p-2 bg-indigo-900 bg-opacity-40 rounded-lg"> | |
| <i data-feather="clock" class="w-5 h-5 text-indigo-400"></i> | |
| </div> | |
| <h4 class="font-medium">Transition Style</h4> | |
| </div> | |
| <select class="w-full bg-gray-800 border border-gray-600 rounded-md px-3 py-2 text-sm"> | |
| <option selected>Smooth Fade</option> | |
| <option>Slide Left</option> | |
| <option>Slide Right</option> | |
| <option>Zoom In</option> | |
| </select> | |
| </div> | |
| <div class="bg-gray-700 bg-opacity-50 p-4 rounded-lg border border-gray-600"> | |
| <div class="flex items-center space-x-3 mb-3"> | |
| <div class="p-2 bg-indigo-900 bg-opacity-40 rounded-lg"> | |
| <i data-feather="music" class="w-5 h-5 text-indigo-400"></i> | |
| </div> | |
| <h4 class="font-medium">Background Music</h4> | |
| </div> | |
| <select class="w-full bg-gray-800 border border-gray-600 rounded-md px-3 py-2 text-sm"> | |
| <option selected>None</option> | |
| <option>Cinematic</option> | |
| <option>Upbeat</option> | |
| <option>Calm</option> | |
| </select> | |
| </div> | |
| </div> | |
| <div class="flex justify-center"> | |
| <button id="processBtn" class="bg-gradient-to-r from-indigo-500 to-purple-600 px-6 py-3 rounded-lg font-medium flex items-center space-x-2 hover:opacity-90 transition"> | |
| <span>Generate Video</span> | |
| <i data-feather="play" class="w-4 h-4"></i> | |
| </button> | |
| </div> | |
| <div id="progressContainer" class="hidden mt-8"> | |
| <div class="flex items-center justify-center mb-4 space-x-4"> | |
| <svg class="w-12 h-12" viewBox="0 0 36 36"> | |
| <path | |
| d="M18 2.0845 | |
| a 15.9155 15.9155 0 0 1 0 31.831 | |
| a 15.9155 15.9155 0 0 1 0 -31.831" | |
| fill="none" | |
| stroke="#333" | |
| stroke-width="2" | |
| stroke-dasharray="100, 100" | |
| /> | |
| <path | |
| class="progress-ring__circle" | |
| d="M18 2.0845 | |
| a 15.9155 15.9155 0 0 1 0 31.831 | |
| a 15.9155 15.9155 0 0 1 0 -31.831" | |
| fill="none" | |
| stroke="#4F46E5" | |
| stroke-width="2" | |
| stroke-dasharray="0, 100" | |
| /> | |
| </svg> | |
| <span id="progressText" class="font-medium">Processing...</span> | |
| </div> | |
| <p class="text-center text-gray-400 text-sm">Please wait while we create your video masterpiece</p> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <footer class="py-6 px-4 sm:px-6 lg:px-8 text-gray-400 text-sm"> | |
| <div class="max-w-7xl mx-auto flex flex-col md:flex-row justify-between items-center"> | |
| <div class="mb-4 md:mb-0"> | |
| © 2023 FrameToFlow. All rights reserved. | |
| </div> | |
| <div class="flex space-x-6"> | |
| <a href="#" class="hover:text-indigo-400 transition">Terms</a> | |
| <a href="#" class="hover:text-indigo-400 transition">Privacy</a> | |
| <a href="#" class="hover:text-indigo-400 transition">Contact</a> | |
| </div> | |
| </div> | |
| </footer> | |
| <script> | |
| // Initialize Vanta.js background | |
| VANTA.WAVES({ | |
| el: "#vanta-bg", | |
| mouseControls: true, | |
| touchControls: true, | |
| gyroControls: false, | |
| minHeight: 200.00, | |
| minWidth: 200.00, | |
| scale: 1.00, | |
| scaleMobile: 1.00, | |
| color: 0x3b275f, | |
| shininess: 35.00, | |
| waveHeight: 15.00, | |
| waveSpeed: 0.85, | |
| zoom: 0.85 | |
| }); | |
| // Initialize Feather Icons | |
| feather.replace(); | |
| // Dropzone functionality | |
| const dropzone = document.getElementById('dropzone'); | |
| const fileInput = document.getElementById('fileInput'); | |
| const processBtn = document.getElementById('processBtn'); | |
| const progressContainer = document.getElementById('progressContainer'); | |
| const progressText = document.getElementById('progressText'); | |
| const progressCircle = document.querySelector('.progress-ring__circle'); | |
| const radius = progressCircle.r.baseVal.value; | |
| const circumference = 2 * Math.PI * radius; | |
| progressCircle.style.strokeDasharray = `${circumference} ${circumference}`; | |
| progressCircle.style.strokeDashoffset = circumference; | |
| dropzone.addEventListener('click', () => fileInput.click()); | |
| fileInput.addEventListener('change', () => { | |
| if (fileInput.files.length > 0) { | |
| dropzone.classList.add('dropzone-active'); | |
| dropzone.innerHTML = ` | |
| <div class="flex flex-col items-center space-y-3"> | |
| <i data-feather="check-circle" class="w-10 h-10 text-green-400"></i> | |
| <h3 class="text-lg font-medium">${fileInput.files.length} files selected</h3> | |
| <p class="text-sm text-gray-400">Ready to process</p> | |
| </div> | |
| `; | |
| feather.replace(); | |
| } | |
| }); | |
| dropzone.addEventListener('dragover', (e) => { | |
| e.preventDefault(); | |
| dropzone.classList.add('dropzone-active'); | |
| }); | |
| dropzone.addEventListener('dragleave', () => { | |
| dropzone.classList.remove('dropzone-active'); | |
| }); | |
| dropzone.addEventListener('drop', (e) => { | |
| e.preventDefault(); | |
| dropzone.classList.remove('dropzone-active'); | |
| fileInput.files = e.dataTransfer.files; | |
| if (fileInput.files.length > 0) { | |
| dropzone.innerHTML = ` | |
| <div class="flex flex-col items-center space-y-3"> | |
| <i data-feather="check-circle" class="w-10 h-10 text-green-400"></i> | |
| <h3 class="text-lg font-medium">${fileInput.files.length} files selected</h3> | |
| <p class="text-sm text-gray-400">Ready to process</p> | |
| </div> | |
| `; | |
| feather.replace(); | |
| } | |
| }); | |
| // Process button simulation | |
| processBtn.addEventListener('click', () => { | |
| if (!fileInput.files || fileInput.files.length === 0) { | |
| alert('Please select some images first!'); | |
| return; | |
| } | |
| processBtn.disabled = true; | |
| progressContainer.classList.remove('hidden'); | |
| let progress = 0; | |
| const interval = setInterval(() => { | |
| progress += Math.random() * 5; | |
| if (progress > 100) progress = 100; | |
| const offset = circumference - (progress / 100) * circumference; | |
| progressCircle.style.strokeDashoffset = offset; | |
| progressText.textContent = `Processing ${Math.floor(progress)}%`; | |
| if (progress === 100) { | |
| clearInterval(interval); | |
| setTimeout(() => { | |
| progressText.textContent = 'Done! Your video is ready'; | |
| processBtn.disabled = false; | |
| // Show download button | |
| progressContainer.innerHTML += ` | |
| <div class="mt-6 flex justify-center"> | |
| <button class="bg-green-600 hover:bg-green-700 px-6 py-3 rounded-lg font-medium flex items-center space-x-2 transition"> | |
| <span>Download Video</span> | |
| <i data-feather="download" class="w-4 h-4"></i> | |
| </button> | |
| </div> | |
| `; | |
| feather.replace(); | |
| }, 500); | |
| } | |
| }, 300); | |
| }); | |
| </script> | |
| </body> | |
| </html> | |