AI Vision
প্রিভিউ
ম্যাজিক তৈরি হচ্ছে…
সিন বিশ্লেষণ করা হচ্ছে
0%
ভিডিও দেখতে বাম পাশ থেকে একটি প্রম্পট জেনারেট করুন।
ভিডিও সফলভাবে তৈরি হয়েছে!
// স্মার্ট ডেটাবেস: কীওয়ার্ড ভিত্তিক ভিডিও সিলেকশন
const videoDatabase = [
{
keywords: [‘city’, ‘town’, ‘future’, ‘cyberpunk’, ‘tech’, ‘building’, ‘car’, ‘শহর’, ‘বিল্ডিং’],
url: ‘https://videos.pexels.com/video-files/856973/856973-sd_640_360_24fps.mp4’
},
{
keywords: [‘nature’, ‘forest’, ‘tree’, ‘green’, ‘river’, ‘water’, ‘mountain’, ‘hill’, ‘প্রকৃতি’, ‘গাছ’, ‘পাহাড়’],
url: ‘https://videos.pexels.com/video-files/855018/855018-sd_640_360_25fps.mp4’
},
{
keywords: [‘sea’, ‘beach’, ‘ocean’, ‘sunset’, ‘sun’, ‘waves’, ‘relax’, ‘সমুদ্র’, ‘সৈকত’, ‘সূর্য’],
url: ‘https://videos.pexels.com/video-files/3129671/3129671-sd_640_360_24fps.mp4’
},
{
keywords: [‘space’, ‘sky’, ‘star’, ‘universe’, ‘planet’, ‘galaxy’, ‘moon’, ‘night’, ‘মহাকাশ’, ‘আকাশ’, ‘চাঁদ’],
url: ‘https://videos.pexels.com/video-files/1448735/1448735-sd_640_360_24fps.mp4’
},
{
keywords: [‘abstract’, ‘art’, ‘color’, ‘paint’, ‘dream’, ‘magic’, ‘রং’, ‘শিল্প’],
url: ‘https://videos.pexels.com/video-files/2795405/2795405-sd_640_360_25fps.mp4’
},
{
keywords: [‘tech’, ‘computer’, ‘code’, ‘hacker’, ‘digital’, ‘screen’, ‘প্রযুক্তি’, ‘কম্পিউটার’],
url: ‘https://videos.pexels.com/video-files/5377684/5377684-sd_640_360_25fps.mp4’
}
];
// ডিফল্ট ভিডিও (যদি কোনো কীওয়ার্ড না মেলে)
const fallbackVideos = videoDatabase.map(v => v.url);
const loadingTexts = [
“প্রম্পট বিশ্লেষণ করা হচ্ছে…”,
“AI কনসেপ্ট জেনারেট করছে…”,
“ফ্রেম কম্পোজিশন তৈরি হচ্ছে…”,
“রেন্ডারিং চলছে (GPU)…”,
“কালার গ্রেডিং করা হচ্ছে…”,
“ফাইনাল ভিডিও এনকোডিং…”
];
let isGenerating = false;
function findBestMatchVideo(prompt) {
const lowerPrompt = prompt.toLowerCase();
// সব ভিডিও চেক করি, কোনটার কীওয়ার্ড প্রম্পটে আছে
const matchedVideo = videoDatabase.find(video => {
return video.keywords.some(keyword => lowerPrompt.includes(keyword));
});
if (matchedVideo) {
return matchedVideo.url;
} else {
// কোনো ম্যাচ না পেলে র্যান্ডম ভিডিও
return fallbackVideos[Math.floor(Math.random() * fallbackVideos.length)];
}
}
function generateVideo() {
const prompt = document.getElementById(‘promptInput’).value.trim();
if (!prompt) {
showToastMsg(“দয়া করে প্রথমে কিছু লিখুন (প্রম্পট দিন)।”, true);
return;
}
if (isGenerating) return;
isGenerating = true;
// UI Update Start
const btn = document.getElementById(‘generateBtn’);
const originalBtnText = btn.innerHTML;
btn.innerHTML = ` জেনারেট হচ্ছে…`;
btn.classList.add(‘opacity-70’, ‘cursor-not-allowed’);
// Hide previous results
document.getElementById(’emptyState’).classList.add(‘hidden’);
document.getElementById(‘videoContainer’).classList.add(‘hidden’);
document.getElementById(‘loadingState’).classList.remove(‘hidden’);
document.getElementById(‘actionButtons’).classList.add(‘opacity-50’, ‘pointer-events-none’);
// Reset Progress
const progressBar = document.getElementById(‘progressBar’);
const progressPercent = document.getElementById(‘progressPercent’);
progressBar.style.width = ‘0%’;
progressPercent.innerText = ‘0%’;
// Simulation Logic (4 seconds)
let duration = 4000;
let intervalTime = 100;
let elapsedTime = 0;
let textIndex = 0;
const simInterval = setInterval(() => {
elapsedTime += intervalTime;
let percent = Math.min(100, Math.floor((elapsedTime / duration) * 100));
// Update Progress Bar
progressBar.style.width = `${percent}%`;
progressPercent.innerText = `${percent}%`;
// Update Loading Text periodically
if (elapsedTime % 800 === 0 && textIndex = duration) {
clearInterval(simInterval);
finishGeneration(prompt);
// Reset Button
btn.innerHTML = originalBtnText;
btn.classList.remove(‘opacity-70’, ‘cursor-not-allowed’);
isGenerating = false;
}
}, intervalTime);
}
function finishGeneration(prompt) {
document.getElementById(‘loadingState’).classList.add(‘hidden’);
// Find appropriate video based on prompt
const selectedVideoUrl = findBestMatchVideo(prompt);
const videoPlayer = document.getElementById(‘mainVideoPlayer’);
const container = document.getElementById(‘videoContainer’);
// Load Video
videoPlayer.src = selectedVideoUrl;
videoPlayer.load(); // Force reload
// Handle Video Error (Fallback)
videoPlayer.onerror = function() {
console.log(“Video failed to load, trying fallback.”);
videoPlayer.src = fallbackVideos[0];
};
container.classList.remove(‘hidden’);
// Enable buttons
document.getElementById(‘actionButtons’).classList.remove(‘opacity-50’, ‘pointer-events-none’);
showToastMsg(“ভিডিও সফলভাবে তৈরি হয়েছে!”);
addToGallery(selectedVideoUrl, prompt);
}
function addToGallery(videoSrc, prompt) {
const grid = document.getElementById(‘galleryGrid’);
const newItem = document.createElement(‘div’);
newItem.className = ‘group relative aspect-video bg-slate-800 rounded-xl overflow-hidden border border-slate-700 cursor-pointer hover:border-purple-500 transition-all animate-fade-in’;
newItem.innerHTML = `
${prompt}
NEW
`;
// Insert at the beginning
grid.insertBefore(newItem, grid.firstChild);
}
function showToastMsg(msg, isError = false) {
const toast = document.getElementById(‘toast’);
const toastText = document.getElementById(‘toastMsg’);
const icon = toast.querySelector(‘i’);
toastText.innerText = msg;
if(isError) {
icon.className = “fa-solid fa-circle-exclamation text-red-400”;
toast.classList.add(‘border-red-500/50’);
} else {
icon.className = “fa-solid fa-check-circle text-green-400”;
toast.classList.remove(‘border-red-500/50’);
}
toast.classList.remove(‘translate-y-20’, ‘opacity-0’);
setTimeout(() => {
toast.classList.add(‘translate-y-20’, ‘opacity-0’);
}, 3000);
}
function downloadVideo() {
const videoSrc = document.getElementById(‘mainVideoPlayer’).src;
if(videoSrc) {
// Create a temporary anchor
const a = document.createElement(‘a’);
a.href = videoSrc;
a.target = ‘_blank’; // Opens in new tab which usually triggers download for video files
a.download = `ai_vision_${Date.now()}.mp4`; // Hint for download name
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
showToastMsg(“ডাউনলোড শুরু হচ্ছে…”);
}
}
function shareVideo() {
// Copy URL to clipboard
const videoSrc = document.getElementById(‘mainVideoPlayer’).src;
navigator.clipboard.writeText(videoSrc).then(() => {
showToastMsg(“লিঙ্ক ক্লিপবোর্ডে কপি হয়েছে!”);
}).catch(err => {
showToastMsg(“কপি করতে সমস্যা হয়েছে”, true);
});
}