Add video resolution and duration options to video generation forms; implement video status polling in frontend
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -37,4 +37,48 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
if (panel) panel.classList.add("active");
|
||||
});
|
||||
});
|
||||
|
||||
// ── Video status polling ───────────────────────────────
|
||||
const pollDiv = document.getElementById("video-poll-status");
|
||||
if (pollDiv) {
|
||||
const pollingUrl = pollDiv.dataset.pollingUrl;
|
||||
const statusText = document.getElementById("poll-status-text");
|
||||
const videoContainer = document.getElementById("poll-video-container");
|
||||
|
||||
const interval = setInterval(async () => {
|
||||
try {
|
||||
const resp = await fetch(
|
||||
"/generate/video/status?polling_url=" +
|
||||
encodeURIComponent(pollingUrl),
|
||||
);
|
||||
if (!resp.ok) return;
|
||||
const data = await resp.json();
|
||||
|
||||
if (statusText) {
|
||||
statusText.innerHTML = "Status: <strong>" + data.status + "</strong>";
|
||||
}
|
||||
|
||||
if (data.status === "completed") {
|
||||
clearInterval(interval);
|
||||
if (data.video_url && videoContainer) {
|
||||
const vid = document.createElement("video");
|
||||
vid.src = data.video_url;
|
||||
vid.controls = true;
|
||||
vid.className = "generated-video";
|
||||
videoContainer.appendChild(vid);
|
||||
const msg = pollDiv.querySelector("p");
|
||||
if (msg) msg.textContent = "Video ready!";
|
||||
}
|
||||
} else if (data.status === "failed") {
|
||||
clearInterval(interval);
|
||||
pollDiv.innerHTML =
|
||||
'<div class="alert alert-error">Generation failed: ' +
|
||||
(data.error || "Unknown error") +
|
||||
"</div>";
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Video polling error:", e);
|
||||
}
|
||||
}, 5000);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user