upload.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. let startFile = null;
  2. let endFile = null;
  3. const processBtn = document.getElementById("processBtn");
  4. document.getElementById("startFrame").addEventListener("change", (e) => handleFile(e, "start"));
  5. document.getElementById("endFrame").addEventListener("change", (e) => handleFile(e, "end"));
  6. function handleFile(e, type) {
  7. const file = e.target.files[0];
  8. if (!file) return;
  9. const preview = document.getElementById(type + "Preview");
  10. const fileName = document.getElementById(type + "FileName");
  11. const previewContainer = document.getElementById(type + "PreviewContainer");
  12. const card = document.getElementById(type + "Card");
  13. const uploadContent = card.querySelector('.upload-content');
  14. preview.src = URL.createObjectURL(file);
  15. fileName.textContent = file.name;
  16. uploadContent.style.display = 'none';
  17. previewContainer.classList.add('show');
  18. card.classList.add('active');
  19. if (type === "start") startFile = file;
  20. else endFile = file;
  21. processBtn.disabled = !(startFile && endFile);
  22. }
  23. processBtn.addEventListener("click", async () => {
  24. const formData = new FormData();
  25. formData.append("first_frame", startFile);
  26. formData.append("last_frame", endFile);
  27. processBtn.innerHTML = '⏳ Processing<span class="spinner"></span>';
  28. processBtn.classList.add('processing');
  29. processBtn.disabled = true;
  30. try {
  31. const response = await fetch("/video/video-generator/", { method: "POST", body: formData });
  32. const data = await response.json();
  33. processBtn.innerHTML = "🚀 Generate Video";
  34. processBtn.classList.remove('processing');
  35. processBtn.disabled = false;
  36. if (data.video_url) {
  37. const video = document.getElementById("outputVideo");
  38. video.src = data.video_url;
  39. new bootstrap.Modal(document.getElementById("videoModal")).show();
  40. } else {
  41. alert("No video URL in response. Check backend output.");
  42. console.log("Response:", data);
  43. }
  44. } catch (err) {
  45. alert("Error: " + err.message);
  46. processBtn.innerHTML = "🚀 Generate Video";
  47. processBtn.classList.remove('processing');
  48. processBtn.disabled = false;
  49. }
  50. });