Fadi66's picture
https://app.pixverse.ai/create/image-text
f9cfb97 verified
<!DOCTYPE html>
<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>