// ==UserScript== // @name [Huggingface] Text to Video Brute-Forcer // @namespace onlypuppy7 // @match https://damo-vilab-modelscope-text-to-video-synthesis.hf.space/* // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_getResourceText // @grant GM_getResourceURL // @grant GM_addElement // @grant GM_openInTab // @version 1.0 // @author onlypuppy7 // @description Clicks the generate button until success // @license MIT // @downloadURL none // ==/UserScript== (() => { const intervalMs = 200; let isScriptInitiated = false; let framesSliderValue = GM_getValue("framesSliderValue", 32); let configMenu; let isMinimized = false; const observeSlider = setInterval(() => { const labelWrap = document.querySelector('.label-wrap'); if (labelWrap) { labelWrap.click(); const framesSlider = document.querySelector("#range_id_1"); if (framesSlider) { clearInterval(observeSlider); setFramesSliderValue(framesSliderValue); } } }, 100); function checkForText() { if (isScriptInitiated) { const text = document.documentElement.textContent; if (text.includes("queue: ")) { console.log("Text found! Stopping..."); setStatus("done"); return; } const button = document.querySelector("#component-6"); if (button) { button.click(); console.log("Button clicked. Waiting for the next attempt..."); } setTimeout(checkForText, intervalMs); } } function setFramesSliderValue(value) { const framesSlider = document.querySelector("#range_id_1"); if (framesSlider) { framesSlider.value = value; framesSlider.dispatchEvent(new Event("input", { bubbles: true })); console.log(`Frames slider set to ${value}.`); } } function handleKeyPress(event) { if (event.key === "Enter") { startBruteForcer(); } } function updateFramesSliderValue(newValue) { framesSliderValue = newValue; GM_setValue("framesSliderValue", newValue); } function minimizeMenu() { isMinimized = !isMinimized; const contentContainer = document.getElementById("config-menu-content"); const minimizeButton = document.getElementById("minimize-button"); if (contentContainer && minimizeButton) { contentContainer.style.display = isMinimized ? "none" : "block"; minimizeButton.textContent = isMinimized ? "+" : "-"; } } function createConfigMenu() { configMenu = document.createElement("div"); configMenu.id = "config-menu"; configMenu.style.position = "fixed"; configMenu.style.top = "20px"; configMenu.style.left = "20px"; configMenu.style.zIndex = "9999"; configMenu.style.background = "rgba(255, 255, 255, 0.9)"; configMenu.style.border = "1px solid #ccc"; configMenu.style.borderRadius = "5px"; configMenu.style.padding = "10px"; configMenu.style.boxShadow = "0 0 10px rgba(0, 0, 0, 0.2)"; configMenu.innerHTML = `
Brute-Forcer Config
`; document.body.appendChild(configMenu); const framesSlider = document.getElementById("frames-slider"); if (framesSlider) { framesSlider.value = framesSliderValue; framesSlider.addEventListener("input", (event) => { const newValue = parseInt(event.target.value); updateFramesSliderValue(newValue); }); } const startButton = document.getElementById("start-button"); startButton.addEventListener("click", () => { startBruteForcer(); }); const downloadButton = document.getElementById("download-button"); downloadButton.addEventListener("click", () => { const videoElement = document.querySelector('video'); const filenameInput = document.querySelector('input[data-testid="textbox"]'); if (videoElement && filenameInput) { const videoUrl = videoElement.getAttribute('src'); const filename = filenameInput.value.trim(); const pattern = /[^a-zA-Z0-9-_]/g; const sanitizedFilename = filename.replace(pattern, '_'); if (sanitizedFilename) { const anchorElement = document.createElement('a'); anchorElement.href = videoUrl; anchorElement.download = sanitizedFilename + '.mp4'; anchorElement.click(); } else { console.log('Invalid filename.'); } } else { console.log('Video element or filename input not found.'); } function sanitizeFilename(filename) { // Regex pattern to replace invalid filename characters with underscores } }); const minimizeButton = document.getElementById("minimize-button"); minimizeButton.addEventListener("click", () => { minimizeMenu(); }); } function setStatus(status) { const statusArea = document.getElementById("status-area"); if (statusArea) { statusArea.textContent = ""; const statusIcon = document.createElement("span"); statusIcon.className = "status-icon"; statusArea.appendChild(statusIcon); statusArea.classList.remove("idle", "brute-forcing", "done"); if (status === "idle") { statusArea.classList.add("idle"); } else if (status === "brute-forcing") { statusArea.classList.add("brute-forcing"); const loader = document.createElement("span"); loader.className = "loader"; statusArea.appendChild(loader); } else if (status === "done") { statusArea.classList.add("done"); } } } function startBruteForcer() { console.log("Script initiated."); isScriptInitiated = true; setStatus("brute-forcing"); checkForText(); } function initializeScript() { GM_addStyle(` #config-menu { font-family: Arial, sans-serif; font-size: 14px; background-color: #fff; border: 1px solid #ccc; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); padding: 10px; position: absolute; top: 20px; left: 20px; z-index: 9999; } #config-menu-header { display: flex; justify-content: space-between; align-items: center; background-color: #f0f0f0; padding: 5px; border-bottom: 1px solid #ccc; } #config-menu-content { margin-top: 10px; } #frames-slider, #frames-slider-value { display: inline-block; } #enter-toggle-checkbox { margin-left: 5px; } #start-button { margin-top: 10px; } #status-area { margin-top: 20px; display: flex; align-items: center; } .status-icon { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 5px; } .idle .status-icon { background-color: gray; } .brute-forcing .status-icon { background-color: darkblue; } .done .status-icon { background-color: green; } .loader { border: 3px solid #f3f3f3; border-top: 3px solid #3498db; border-radius: 50%; width: 10px; height: 10px; animation: spin 0.5s linear infinite; margin-left: 5px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } `); createConfigMenu(); setStatus("idle"); document.addEventListener("keydown", handleKeyPress); } initializeScript(); })();