| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Explainer Video Generator</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> |
| .fade-in { |
| animation: fadeIn 0.5s ease-in-out; |
| } |
| @keyframes fadeIn { |
| from { opacity: 0; transform: translateY(10px); } |
| to { opacity: 1; transform: translateY(0); } |
| } |
| .progress-bar { |
| transition: width 0.5s ease-in-out; |
| } |
| .avatar-option:hover { |
| transform: scale(1.05); |
| box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); |
| } |
| .voice-option:hover { |
| background-color: #f0f9ff; |
| } |
| .storyboard-panel { |
| min-height: 200px; |
| background-size: cover; |
| background-position: center; |
| } |
| </style> |
| </head> |
| <body class="bg-gray-50 min-h-screen"> |
| <div class="container mx-auto px-4 py-8 max-w-6xl"> |
| |
| <header class="text-center mb-12"> |
| <h1 class="text-4xl font-bold text-indigo-700 mb-2">Explainer Video Generator</h1> |
| <p class="text-gray-600 text-lg">Create professional explainer videos in just 4 simple steps</p> |
| </header> |
|
|
| |
| <div class="mb-12"> |
| <div class="flex justify-between mb-2"> |
| <div class="w-1/4 text-center"> |
| <div class="w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-indigo-600 text-white font-bold">1</div> |
| <p class="mt-2 text-sm font-medium text-indigo-600">Upload & Script</p> |
| </div> |
| <div class="w-1/4 text-center"> |
| <div class="w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-gray-200 text-gray-600 font-bold">2</div> |
| <p class="mt-2 text-sm font-medium text-gray-500">Avatar & Voice</p> |
| </div> |
| <div class="w-1/4 text-center"> |
| <div class="w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-gray-200 text-gray-600 font-bold">3</div> |
| <p class="mt-2 text-sm font-medium text-gray-500">Storyboard</p> |
| </div> |
| <div class="w-1/4 text-center"> |
| <div class="w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-gray-200 text-gray-600 font-bold">4</div> |
| <p class="mt-2 text-sm font-medium text-gray-500">Final Video</p> |
| </div> |
| </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> |
|
|
| |
| <div class="bg-white rounded-xl shadow-lg p-8 mb-8 fade-in"> |
| |
| <div id="step1" class="step-content"> |
| <h2 class="text-2xl font-bold text-gray-800 mb-6">Upload Your Document</h2> |
| <div class="mb-8"> |
| <div class="border-2 border-dashed border-gray-300 rounded-lg p-12 text-center cursor-pointer hover:border-indigo-400 transition-colors duration-300" id="dropZone"> |
| <i class="fas fa-cloud-upload-alt text-4xl text-indigo-500 mb-4"></i> |
| <p class="text-gray-600 mb-2">Drag & drop your document here</p> |
| <p class="text-sm text-gray-500 mb-4">Supported formats: PDF, DOCX, PPTX, TXT</p> |
| <button class="bg-indigo-600 text-white px-6 py-2 rounded-lg hover:bg-indigo-700 transition-colors duration-300"> |
| Or browse files |
| </button> |
| <input type="file" id="fileInput" class="hidden" accept=".pdf,.docx,.pptx,.txt"> |
| </div> |
| </div> |
|
|
| <div class="mb-8" id="uploadedFile" style="display: none;"> |
| <div class="flex items-center bg-gray-50 p-4 rounded-lg"> |
| <i class="fas fa-file-alt text-2xl text-indigo-500 mr-4"></i> |
| <div class="flex-grow"> |
| <p class="font-medium" id="fileName">Document.pdf</p> |
| <p class="text-sm text-gray-500" id="fileSize">2.4 MB</p> |
| </div> |
| <button class="text-red-500 hover:text-red-700" id="removeFile"> |
| <i class="fas fa-times"></i> |
| </button> |
| </div> |
| </div> |
|
|
| <div class="mb-8"> |
| <h3 class="text-lg font-semibold text-gray-800 mb-4">Or paste your content directly</h3> |
| <textarea class="w-full h-40 p-4 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" placeholder="Paste your content here..."></textarea> |
| </div> |
|
|
| <div class="mb-8"> |
| <h3 class="text-lg font-semibold text-gray-800 mb-4">Video Script (Auto-generated)</h3> |
| <div class="bg-gray-50 p-6 rounded-lg"> |
| <div class="flex items-start mb-4"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-3 flex-shrink-0"> |
| <i class="fas fa-robot"></i> |
| </div> |
| <div> |
| <p class="font-medium text-gray-800 mb-1">AI Script Assistant</p> |
| <p class="text-gray-600" id="generatedScript">Your script will be automatically generated here after document processing. Our AI will analyze your content and create an engaging narrative for your explainer video.</p> |
| </div> |
| </div> |
| <div class="flex justify-end"> |
| <button class="bg-indigo-600 text-white px-4 py-2 rounded-lg hover:bg-indigo-700 transition-colors duration-300 mr-2"> |
| <i class="fas fa-magic mr-2"></i>Enhance Script |
| </button> |
| <button class="bg-white border border-gray-300 text-gray-700 px-4 py-2 rounded-lg hover:bg-gray-50 transition-colors duration-300"> |
| <i class="fas fa-edit mr-2"></i>Edit Manually |
| </button> |
| </div> |
| </div> |
| </div> |
|
|
| <div class="flex justify-end"> |
| <button class="next-step bg-indigo-600 text-white px-6 py-3 rounded-lg hover:bg-indigo-700 transition-colors duration-300 font-medium"> |
| Continue to Avatar & Voice <i class="fas fa-arrow-right ml-2"></i> |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div id="step2" class="step-content hidden"> |
| <h2 class="text-2xl font-bold text-gray-800 mb-6">Choose Your Avatar</h2> |
| |
| <div class="mb-8"> |
| <div class="grid grid-cols-2 md:grid-cols-4 gap-6"> |
| <div class="avatar-option cursor-pointer p-4 rounded-xl border-2 border-transparent hover:border-indigo-300 transition-all duration-300" data-avatar="1"> |
| <div class="bg-indigo-100 rounded-lg p-4 mb-3 flex justify-center"> |
| <img src="https://placehold.co/150x150/e0e7ff/6366f1?text=Avatar+1" alt="Avatar 1" class="w-24 h-24 rounded-full object-cover"> |
| </div> |
| <p class="text-center font-medium">Business Alex</p> |
| <p class="text-center text-sm text-gray-500">Professional</p> |
| </div> |
| <div class="avatar-option cursor-pointer p-4 rounded-xl border-2 border-transparent hover:border-indigo-300 transition-all duration-300" data-avatar="2"> |
| <div class="bg-indigo-100 rounded-lg p-4 mb-3 flex justify-center"> |
| <img src="https://placehold.co/150x150/e0e7ff/6366f1?text=Avatar+2" alt="Avatar 2" class="w-24 h-24 rounded-full object-cover"> |
| </div> |
| <p class="text-center font-medium">Tech Sarah</p> |
| <p class="text-center text-sm text-gray-500">Modern</p> |
| </div> |
| <div class="avatar-option cursor-pointer p-4 rounded-xl border-2 border-transparent hover:border-indigo-300 transition-all duration-300" data-avatar="3"> |
| <div class="bg-indigo-100 rounded-lg p-4 mb-3 flex justify-center"> |
| <img src="https://placehold.co/150x150/e0e7ff/6366f1?text=Avatar+3" alt="Avatar 3" class="w-24 h-24 rounded-full object-cover"> |
| </div> |
| <p class="text-center font-medium">Creative Jamie</p> |
| <p class="text-center text-sm text-gray-500">Artistic</p> |
| </div> |
| <div class="avatar-option cursor-pointer p-4 rounded-xl border-2 border-transparent hover:border-indigo-300 transition-all duration-300" data-avatar="4"> |
| <div class="bg-indigo-100 rounded-lg p-4 mb-3 flex justify-center"> |
| <img src="https://placehold.co/150x150/e0e7ff/6366f1?text=Avatar+4" alt="Avatar 4" class="w-24 h-24 rounded-full object-cover"> |
| </div> |
| <p class="text-center font-medium">Friendly Max</p> |
| <p class="text-center text-sm text-gray-500">Casual</p> |
| </div> |
| </div> |
| </div> |
|
|
| <h2 class="text-2xl font-bold text-gray-800 mb-6">Select Voice Style</h2> |
| |
| <div class="mb-8"> |
| <div class="space-y-4"> |
| <div class="voice-option p-4 rounded-lg border border-gray-200 cursor-pointer transition-colors duration-300" data-voice="1"> |
| <div class="flex items-center"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-10 h-10 flex items-center justify-center mr-4"> |
| <i class="fas fa-volume-up"></i> |
| </div> |
| <div class="flex-grow"> |
| <p class="font-medium">Sophisticated (Male)</p> |
| <p class="text-sm text-gray-500">Clear, professional tone</p> |
| </div> |
| <button class="text-indigo-600 hover:text-indigo-800"> |
| <i class="fas fa-play"></i> Preview |
| </button> |
| </div> |
| </div> |
| <div class="voice-option p-4 rounded-lg border border-gray-200 cursor-pointer transition-colors duration-300" data-voice="2"> |
| <div class="flex items-center"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-10 h-10 flex items-center justify-center mr-4"> |
| <i class="fas fa-volume-up"></i> |
| </div> |
| <div class="flex-grow"> |
| <p class="font-medium">Engaging (Female)</p> |
| <p class="text-sm text-gray-500">Friendly, conversational</p> |
| </div> |
| <button class="text-indigo-600 hover:text-indigo-800"> |
| <i class="fas fa-play"></i> Preview |
| </button> |
| </div> |
| </div> |
| <div class="voice-option p-4 rounded-lg border border-gray-200 cursor-pointer transition-colors duration-300" data-voice="3"> |
| <div class="flex items-center"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-10 h-10 flex items-center justify-center mr-4"> |
| <i class="fas fa-volume-up"></i> |
| </div> |
| <div class="flex-grow"> |
| <p class="font-medium">Energetic (Male)</p> |
| <p class="text-sm text-gray-500">Dynamic, enthusiastic</p> |
| </div> |
| <button class="text-indigo-600 hover:text-indigo-800"> |
| <i class="fas fa-play"></i> Preview |
| </button> |
| </div> |
| </div> |
| <div class="voice-option p-4 rounded-lg border border-gray-200 cursor-pointer transition-colors duration-300" data-voice="4"> |
| <div class="flex items-center"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-10 h-10 flex items-center justify-center mr-4"> |
| <i class="fas fa-volume-up"></i> |
| </div> |
| <div class="flex-grow"> |
| <p class="font-medium">Warm (Female)</p> |
| <p class="text-sm text-gray-500">Soothing, trustworthy</p> |
| </div> |
| <button class="text-indigo-600 hover:text-indigo-800"> |
| <i class="fas fa-play"></i> Preview |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| <div class="flex justify-between"> |
| <button class="prev-step bg-white border border-gray-300 text-gray-700 px-6 py-3 rounded-lg hover:bg-gray-50 transition-colors duration-300 font-medium"> |
| <i class="fas fa-arrow-left mr-2"></i> Back |
| </button> |
| <button class="next-step bg-indigo-600 text-white px-6 py-3 rounded-lg hover:bg-indigo-700 transition-colors duration-300 font-medium"> |
| Continue to Storyboard <i class="fas fa-arrow-right ml-2"></i> |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div id="step3" class="step-content hidden"> |
| <h2 class="text-2xl font-bold text-gray-800 mb-6">Storyboard Preview</h2> |
| <p class="text-gray-600 mb-8">Review and customize the automatically generated scenes for your video. Drag to reorder scenes or click to edit.</p> |
| |
| <div class="mb-8"> |
| <div class="space-y-6" id="storyboardContainer"> |
| |
| <div class="scene bg-white rounded-xl shadow-md overflow-hidden border border-gray-200 hover:border-indigo-300 transition-colors duration-300" data-scene="1"> |
| <div class="flex flex-col md:flex-row"> |
| <div class="w-full md:w-1/3 storyboard-panel bg-indigo-50" style="background-image: url('https://placehold.co/600x400/e0e7ff/6366f1?text=Scene+1')"> |
| <div class="p-4 bg-black bg-opacity-30 text-white"> |
| <p class="font-medium">Scene 1</p> |
| </div> |
| </div> |
| <div class="w-full md:w-2/3 p-6"> |
| <div class="flex items-start mb-4"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-3 flex-shrink-0"> |
| 1 |
| </div> |
| <div> |
| <p class="font-medium text-gray-800 mb-1">Introduction</p> |
| <p class="text-gray-600">Welcome to our product overview. Today we'll explore the key features that make our solution stand out in the market.</p> |
| </div> |
| </div> |
| <div class="flex space-x-3"> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-image mr-1"></i> Change Visual |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-edit mr-1"></i> Edit Text |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-trash-alt mr-1"></i> Remove |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| <div class="scene bg-white rounded-xl shadow-md overflow-hidden border border-gray-200 hover:border-indigo-300 transition-colors duration-300" data-scene="2"> |
| <div class="flex flex-col md:flex-row"> |
| <div class="w-full md:w-1/3 storyboard-panel bg-indigo-50" style="background-image: url('https://placehold.co/600x400/e0e7ff/6366f1?text=Scene+2')"> |
| <div class="p-4 bg-black bg-opacity-30 text-white"> |
| <p class="font-medium">Scene 2</p> |
| </div> |
| </div> |
| <div class="w-full md:w-2/3 p-6"> |
| <div class="flex items-start mb-4"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-3 flex-shrink-0"> |
| 2 |
| </div> |
| <div> |
| <p class="font-medium text-gray-800 mb-1">Key Features</p> |
| <p class="text-gray-600">Our solution offers three powerful features: intuitive interface, real-time analytics, and seamless integration with your existing tools.</p> |
| </div> |
| </div> |
| <div class="flex space-x-3"> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-image mr-1"></i> Change Visual |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-edit mr-1"></i> Edit Text |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-trash-alt mr-1"></i> Remove |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| <div class="scene bg-white rounded-xl shadow-md overflow-hidden border border-gray-200 hover:border-indigo-300 transition-colors duration-300" data-scene="3"> |
| <div class="flex flex-col md:flex-row"> |
| <div class="w-full md:w-1/3 storyboard-panel bg-indigo-50" style="background-image: url('https://placehold.co/600x400/e0e7ff/6366f1?text=Scene+3')"> |
| <div class="p-4 bg-black bg-opacity-30 text-white"> |
| <p class="font-medium">Scene 3</p> |
| </div> |
| </div> |
| <div class="w-full md:w-2/3 p-6"> |
| <div class="flex items-start mb-4"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-3 flex-shrink-0"> |
| 3 |
| </div> |
| <div> |
| <p class="font-medium text-gray-800 mb-1">Customer Benefits</p> |
| <p class="text-gray-600">By using our product, customers report a 40% increase in productivity and 30% reduction in operational costs within the first three months.</p> |
| </div> |
| </div> |
| <div class="flex space-x-3"> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-image mr-1"></i> Change Visual |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-edit mr-1"></i> Edit Text |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-trash-alt mr-1"></i> Remove |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| <div class="scene bg-white rounded-xl shadow-md overflow-hidden border border-gray-200 hover:border-indigo-300 transition-colors duration-300" data-scene="4"> |
| <div class="flex flex-col md:flex-row"> |
| <div class="w-full md:w-1/3 storyboard-panel bg-indigo-50" style="background-image: url('https://placehold.co/600x400/e0e7ff/6366f1?text=Scene+4')"> |
| <div class="p-4 bg-black bg-opacity-30 text-white"> |
| <p class="font-medium">Scene 4</p> |
| </div> |
| </div> |
| <div class="w-full md:w-2/3 p-6"> |
| <div class="flex items-start mb-4"> |
| <div class="bg-indigo-100 text-indigo-800 rounded-full w-8 h-8 flex items-center justify-center mr-3 flex-shrink-0"> |
| 4 |
| </div> |
| <div> |
| <p class="font-medium text-gray-800 mb-1">Call to Action</p> |
| <p class="text-gray-600">Ready to experience these benefits for yourself? Visit our website today to start your free trial or schedule a demo with our team.</p> |
| </div> |
| </div> |
| <div class="flex space-x-3"> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-image mr-1"></i> Change Visual |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-edit mr-1"></i> Edit Text |
| </button> |
| <button class="text-indigo-600 hover:text-indigo-800 text-sm font-medium"> |
| <i class="fas fa-trash-alt mr-1"></i> Remove |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| <div class="mb-8"> |
| <button class="bg-white border border-indigo-600 text-indigo-600 px-4 py-2 rounded-lg hover:bg-indigo-50 transition-colors duration-300"> |
| <i class="fas fa-plus mr-2"></i> Add New Scene |
| </button> |
| </div> |
|
|
| <div class="flex justify-between"> |
| <button class="prev-step bg-white border border-gray-300 text-gray-700 px-6 py-3 rounded-lg hover:bg-gray-50 transition-colors duration-300 font-medium"> |
| <i class="fas fa-arrow-left mr-2"></i> Back |
| </button> |
| <button class="next-step bg-indigo-600 text-white px-6 py-3 rounded-lg hover:bg-indigo-700 transition-colors duration-300 font-medium"> |
| Generate Final Video <i class="fas fa-arrow-right ml-2"></i> |
| </button> |
| </div> |
| </div> |
|
|
| |
| <div id="step4" class="step-content hidden"> |
| <h2 class="text-2xl font-bold text-gray-800 mb-6">Your Video is Ready!</h2> |
| |
| <div class="mb-8 bg-gray-50 rounded-xl p-8 text-center"> |
| <div class="max-w-2xl mx-auto"> |
| <div class="bg-black rounded-lg overflow-hidden mb-6"> |
| <div class="aspect-w-16 aspect-h-9"> |
| <div class="w-full h-64 bg-indigo-100 flex items-center justify-center"> |
| <i class="fas fa-play text-4xl text-indigo-600"></i> |
| </div> |
| </div> |
| </div> |
| <h3 class="text-xl font-semibold text-gray-800 mb-2">Product Overview Explainer</h3> |
| <p class="text-gray-600 mb-6">Duration: 1:45 | Created: Just now</p> |
| <div class="flex flex-wrap justify-center gap-4"> |
| <button class="bg-indigo-600 text-white px-6 py-3 rounded-lg hover:bg-indigo-700 transition-colors duration-300 font-medium"> |
| <i class="fas fa-download mr-2"></i> Download Video |
| </button> |
| <button class="bg-white border border-gray-300 text-gray-700 px-6 py-3 rounded-lg hover:bg-gray-50 transition-colors duration-300 font-medium"> |
| <i class="fas fa-share-alt mr-2"></i> Share |
| </button> |
| <button class="bg-white border border-gray-300 text-gray-700 px-6 py-3 rounded-lg hover:bg-gray-50 transition-colors duration-300 font-medium"> |
| <i class="fas fa-edit mr-2"></i> Edit Again |
| </button> |
| </div> |
| </div> |
| </div> |
|
|
| <div class="mb-8"> |
| <h3 class="text-lg font-semibold text-gray-800 mb-4">Video Details</h3> |
| <div class="bg-white rounded-lg border border-gray-200 overflow-hidden"> |
| <table class="min-w-full divide-y divide-gray-200"> |
| <tbody class="bg-white divide-y divide-gray-200"> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-500">Title</td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">Product Overview Explainer</td> |
| </tr> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-500">Duration</td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">1 minute 45 seconds</td> |
| </tr> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-500">Resolution</td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">1080p (Full HD)</td> |
| </tr> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-500">File Size</td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">24.5 MB</td> |
| </tr> |
| <tr> |
| <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-500">Created</td> |
| <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">Just now</td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
|
|
| <div class="flex justify-between"> |
| <button class="prev-step bg-white border border-gray-300 text-gray-700 px-6 py-3 rounded-lg hover:bg-gray-50 transition-colors duration-300 font-medium"> |
| <i class="fas fa-arrow-left mr-2"></i> Back |
| </button> |
| <button class="bg-indigo-600 text-white px-6 py-3 rounded-lg hover:bg-indigo-700 transition-colors duration-300 font-medium"> |
| Create Another Video |
| </button> |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| <script> |
| document.addEventListener('DOMContentLoaded', function() { |
| |
| let currentStep = 1; |
| const totalSteps = 4; |
| |
| |
| const dropZone = document.getElementById('dropZone'); |
| const fileInput = document.getElementById('fileInput'); |
| const uploadedFile = document.getElementById('uploadedFile'); |
| const fileName = document.getElementById('fileName'); |
| const fileSize = document.getElementById('fileSize'); |
| const removeFile = document.getElementById('removeFile'); |
| |
| dropZone.addEventListener('click', () => fileInput.click()); |
| |
| fileInput.addEventListener('change', function(e) { |
| if (this.files.length) { |
| const file = this.files[0]; |
| fileName.textContent = file.name; |
| fileSize.textContent = formatFileSize(file.size); |
| uploadedFile.style.display = 'flex'; |
| |
| |
| setTimeout(() => { |
| document.getElementById('generatedScript').textContent = |
| "Based on your document, we've created an engaging script for your explainer video. " + |
| "The video will start with an introduction to your product, followed by key features, " + |
| "customer benefits, and a strong call to action. The total duration will be approximately 1 minute 45 seconds."; |
| }, 1500); |
| } |
| }); |
| |
| removeFile.addEventListener('click', function(e) { |
| e.stopPropagation(); |
| fileInput.value = ''; |
| uploadedFile.style.display = 'none'; |
| document.getElementById('generatedScript').textContent = |
| "Your script will be automatically generated here after document processing. " + |
| "Our AI will analyze your content and create an engaging narrative for your explainer video."; |
| }); |
| |
| |
| ['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-indigo-500'); |
| dropZone.classList.remove('border-gray-300'); |
| } |
| |
| function unhighlight() { |
| dropZone.classList.remove('border-indigo-500'); |
| dropZone.classList.add('border-gray-300'); |
| } |
| |
| |
| dropZone.addEventListener('drop', handleDrop, false); |
| |
| function handleDrop(e) { |
| const dt = e.dataTransfer; |
| const files = dt.files; |
| fileInput.files = files; |
| fileInput.dispatchEvent(new Event('change')); |
| } |
| |
| function formatFileSize(bytes) { |
| if (bytes === 0) return '0 Bytes'; |
| const k = 1024; |
| const sizes = ['Bytes', 'KB', 'MB', 'GB']; |
| const i = Math.floor(Math.log(bytes) / Math.log(k)); |
| return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; |
| } |
| |
| |
| const nextButtons = document.querySelectorAll('.next-step'); |
| const prevButtons = document.querySelectorAll('.prev-step'); |
| |
| nextButtons.forEach(button => { |
| button.addEventListener('click', goToNextStep); |
| }); |
| |
| prevButtons.forEach(button => { |
| button.addEventListener('click', goToPrevStep); |
| }); |
| |
| function goToNextStep() { |
| if (currentStep < totalSteps) { |
| document.getElementById(`step${currentStep}`).classList.add('hidden'); |
| currentStep++; |
| document.getElementById(`step${currentStep}`).classList.remove('hidden'); |
| updateProgressBar(); |
| updateStepIndicators(); |
| } |
| } |
| |
| function goToPrevStep() { |
| if (currentStep > 1) { |
| document.getElementById(`step${currentStep}`).classList.add('hidden'); |
| currentStep--; |
| document.getElementById(`step${currentStep}`).classList.remove('hidden'); |
| updateProgressBar(); |
| updateStepIndicators(); |
| } |
| } |
| |
| function updateProgressBar() { |
| const progressPercentage = (currentStep / totalSteps) * 100; |
| document.querySelector('.progress-bar').style.width = `${progressPercentage}%`; |
| } |
| |
| function updateStepIndicators() { |
| |
| for (let i = 1; i <= totalSteps; i++) { |
| const indicator = document.querySelector(`.flex.justify-between.mb-2 div:nth-child(${i}) div`); |
| const label = document.querySelector(`.flex.justify-between.mb-2 div:nth-child(${i}) p`); |
| |
| if (i < currentStep) { |
| indicator.className = 'w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-indigo-100 text-indigo-600 font-bold'; |
| label.className = 'mt-2 text-sm font-medium text-indigo-600'; |
| } else if (i === currentStep) { |
| indicator.className = 'w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-indigo-600 text-white font-bold'; |
| label.className = 'mt-2 text-sm font-medium text-indigo-600'; |
| } else { |
| indicator.className = 'w-12 h-12 mx-auto rounded-full flex items-center justify-center bg-gray-200 text-gray-600 font-bold'; |
| label.className = 'mt-2 text-sm font-medium text-gray-500'; |
| } |
| } |
| } |
| |
| |
| const avatarOptions = document.querySelectorAll('.avatar-option'); |
| avatarOptions.forEach(option => { |
| option.addEventListener('click', function() { |
| avatarOptions.forEach(opt => { |
| opt.classList.remove('border-indigo-500', 'bg-indigo-50'); |
| opt.classList.add('border-transparent'); |
| }); |
| this.classList.add('border-indigo-500', 'bg-indigo-50'); |
| this.classList.remove('border-transparent'); |
| }); |
| }); |
| |
| |
| const voiceOptions = document.querySelectorAll('.voice-option'); |
| voiceOptions.forEach(option => { |
| option.addEventListener('click', function() { |
| voiceOptions.forEach(opt => { |
| opt.classList.remove('border-indigo-500', 'bg-indigo-50'); |
| opt.classList.add('border-gray-200'); |
| }); |
| this.classList.add('border-indigo-500', 'bg-indigo-50'); |
| this.classList.remove('border-gray-200'); |
| }); |
| }); |
| |
| |
| const storyboardContainer = document.getElementById('storyboardContainer'); |
| |
| |
| const scenes = document.querySelectorAll('.scene'); |
| scenes.forEach(scene => { |
| scene.setAttribute('draggable', 'true'); |
| |
| scene.addEventListener('dragstart', function() { |
| this.classList.add('opacity-50'); |
| }); |
| |
| scene.addEventListener('dragend', function() { |
| this.classList.remove('opacity-50'); |
| }); |
| }); |
| |
| storyboardContainer.addEventListener('dragover', function(e) { |
| e.preventDefault(); |
| const afterElement = getDragAfterElement(storyboardContainer, e.clientY); |
| const draggable = document.querySelector('.scene.opacity-50'); |
| if (afterElement == null) { |
| storyboardContainer.appendChild(draggable); |
| } else { |
| storyboardContainer.insertBefore(draggable, afterElement); |
| } |
| }); |
| |
| function getDragAfterElement(container, y) { |
| const draggableElements = [...container.querySelectorAll('.scene:not(.opacity-50)')]; |
| |
| return draggableElements.reduce((closest, child) => { |
| const box = child.getBoundingClientRect(); |
| const offset = y - box.top - box.height / 2; |
| if (offset < 0 && offset > closest.offset) { |
| return { offset: offset, element: child }; |
| } else { |
| return closest; |
| } |
| }, { offset: Number.NEGATIVE_INFINITY }).element; |
| } |
| }); |
| </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=moralec/explainer-video-generator" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |