AI Porn is here, Create and Fap
Try Free 🔞
x
  • Welcome to the Fakes / AI / Deepfakes category
    When posting AI generated content please include prompts used where possible.
  • We recently launched a new Mirroring Policy with the aim of improving the reliability of forum posts, by allowing users to re-post content which was previously shared only on certain unreliable file hosts.

    You can read all about it here:
    Mirroring Policy
  • Follow our Telegram to be in the loop in case of domain disruption/swap. Follow
  • If you have connectivity issues, you can choose any of our other domains available at simp.city
  • Traffic from India is temporarily redirected to SimpTown due to spam attacks with malicious gofile links, please don't contribute to the spam by creating support threads, etc. Thanks for the understanding!

Discussion AI img2vid GROK IMAGINE Prompts - Read post at top of thread

POKI

Broke Boi
Mar 8, 2022
2,016
33,122
To stop this thread filling with spam the following rules are now in place from 27th November 2025:

  • Thread is to be primarily prompts, prompt discussion and tips for better prompts and better results.
  • Any content posted must include the full prompt used to generate it.
  • Prompts must follow our usual rules about what content can be posted i.e. nothing obscene like scat and no upskirts, underage people etc.
  • No complaining about Grok moderation, that doesnt help anyone.
  • No arguing
Use the report button if there are any issues, don't respond to them.
 
Last edited:
Grok.com Video Prompt Saver & Auto-Retry
use Tampermonkey, works on brave and chrome. search before you ask
I'm not using the Grok Imagine Auto-Advance (Final V3.2) anymore. btw huge thanks to the guy
like if it works for you
JavaScript:
// ==UserScript==
// @name         Grok.com Video Prompt Saver & Auto-Retry
// @namespace    http://tampermonkey.net/
// @version      8.0
// @description  Saves prompts uniquely for every video ID (/imagine/post/xyz). Includes Auto-Retry Overlay.
// @author       Kali
// @match        https://grok.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=grok.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // --- CONFIGURATION ---
    const TEXTAREA_SELECTOR = 'textarea';
    const NOTIFICATION_SELECTOR = 'section[aria-label="Notifications alt+T"]';
    const TARGET_SVG_PATH = "M5 11L12 4M12 4L19 11M12 4V21";
    const ERROR_KEYWORDS = ['fail', 'error', 'moderate', 'policy', 'unable', 'wrong'];

    // --- STATE ---
    let autoRetryOn = false; // Always starts OFF
    let isRetrying = false;
    let retryInterval = null;
    let overlayBtn = null;
    let currentPath = window.location.pathname; // Track URL changes

    // --- HELPER: LOGGING ---
    function log(msg) { console.log(`[Grok Script] ${msg}`); }

    // --- HELPER: GET UNIQUE STORAGE KEY ---
    function getStorageKey() {
        // This uses the full path (e.g., "/imagine/post/12345") as the key
        // This ensures every single video has its own memory slot.
        return `grok_prompt_storage_${window.location.pathname}`;
    }

    // --- PART 1: PROMPT SAVER (DYNAMIC) ---

    // React-friendly value setter
    function setNativeValue(element, value) {
        const valueSetter = Object.getOwnPropertyDescriptor(element, 'value').set;
        const prototype = Object.getPrototypeOf(element);
        const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
        if (valueSetter && valueSetter !== prototypeValueSetter) {
            prototypeValueSetter.call(element, value);
        } else {
            valueSetter.call(element, value);
        }
        element.dispatchEvent(new Event('input', { bubbles: true }));
    }

    function attachToTextarea(textarea) {
        const currentKey = getStorageKey();

        // If we are already attached to this EXACT key (URL), do nothing.
        // If the URL changed, this check fails, and we proceed to re-attach/restore.
        if (textarea.dataset.attachedKey === currentKey) return;

        textarea.dataset.attachedKey = currentKey;
        log(`Connected to memory slot: ${currentKey}`);

        // 1. RESTORE: Check if we have a saved prompt for THIS specific video URL
        const savedPrompt = localStorage.getItem(currentKey);

        // Only restore if we have a saved value.
        // Note: We don't check if textarea is empty here, because if you switch videos,
        // you want the prompt to swap immediately, even if the box had the previous video's text.
        if (savedPrompt) {
            log(`Restoring prompt for this video ID...`);
            setNativeValue(textarea, savedPrompt);
        }

        // 2. SAVE: Listen for typing
        // We clone the element to strip old event listeners if necessary,
        // but simple attribute key tracking is usually safer for React.
        textarea.addEventListener('input', (e) => {
            const liveKey = getStorageKey(); // Always fetch fresh key in case URL changed mid-typing
            localStorage.setItem(liveKey, e.target.value);
        });
    }

    // --- PART 2: UI OVERLAY (TOGGLE) ---

    function getTargetButton() {
        let btn = document.querySelector('button[aria-label="Make video"]');
        if (!btn) {
            const allBtns = Array.from(document.querySelectorAll('button'));
            btn = allBtns.find(b => {
                const path = b.querySelector('path');
                return path && path.getAttribute('d') === TARGET_SVG_PATH;
            });
        }
        return btn;
    }

    function updateOverlayVisuals() {
        if (!overlayBtn) return;
        if (autoRetryOn) {
            overlayBtn.innerHTML = '▶';
            overlayBtn.style.backgroundColor = '#22c55e'; // Green
            overlayBtn.title = "Auto-Retry ON";
        } else {
            overlayBtn.innerHTML = '■';
            overlayBtn.style.backgroundColor = '#6b7280'; // Gray
            overlayBtn.title = "Auto-Retry OFF";
        }
    }

    function createOverlay() {
        if (document.getElementById('grok-retry-toggle')) return;

        overlayBtn = document.createElement('div');
        overlayBtn.id = 'grok-retry-toggle';

        // STYLE (Large 48px)
        overlayBtn.style.position = 'fixed';
        overlayBtn.style.width = '48px';
        overlayBtn.style.height = '48px';
        overlayBtn.style.fontSize = '24px';
        overlayBtn.style.borderRadius = '50%';
        overlayBtn.style.color = 'white';
        overlayBtn.style.display = 'flex';
        overlayBtn.style.justifyContent = 'center';
        overlayBtn.style.alignItems = 'center';
        overlayBtn.style.cursor = 'pointer';
        overlayBtn.style.zIndex = '9999';
        overlayBtn.style.boxShadow = '0 4px 8px rgba(0,0,0,0.4)';
        overlayBtn.style.userSelect = 'none';
        overlayBtn.style.transition = 'all 0.2s ease';

        overlayBtn.addEventListener('click', (e) => {
            e.stopPropagation();
            autoRetryOn = !autoRetryOn;
            updateOverlayVisuals();

            overlayBtn.style.transform = 'scale(0.9)';
            setTimeout(() => overlayBtn.style.transform = 'scale(1)', 100);

            if (autoRetryOn) {
                log('Toggle ON -> Triggering immediate click');
                triggerRetrySequence();
            }
        });

        updateOverlayVisuals();
        document.body.appendChild(overlayBtn);
    }

    function updateOverlayPosition() {
        const target = getTargetButton();
        if (target && overlayBtn) {
            const rect = target.getBoundingClientRect();
            overlayBtn.style.display = 'flex';
            overlayBtn.style.top = `${rect.bottom + 10}px`;
            overlayBtn.style.left = `${rect.left + (rect.width / 2) - 24}px`;
        } else if (overlayBtn) {
            overlayBtn.style.display = 'none';
        }
        requestAnimationFrame(updateOverlayPosition);
    }

    // --- PART 3: AUTO-RETRY ---

    function simulateRealClick(element) {
        ['mousedown', 'mouseup', 'click'].forEach(eventType => {
            element.dispatchEvent(new MouseEvent(eventType, {
                bubbles: true, cancelable: true, view: window, buttons: 1
            }));
        });
    }

    function triggerRetrySequence() {
        if (!autoRetryOn || isRetrying) return;
        isRetrying = true;

        let attempts = 0;
        if (retryInterval) clearInterval(retryInterval);

        retryInterval = setInterval(() => {
            attempts++;
            const btn = getTargetButton();

            if (btn && !btn.disabled && !btn.classList.contains('disabled')) {
                const originalBg = btn.style.backgroundColor;
                btn.style.backgroundColor = '#22c55e';
                simulateRealClick(btn);
                setTimeout(() => btn.style.backgroundColor = originalBg, 300);

                clearInterval(retryInterval);
                isRetrying = false;
            } else if (attempts >= 40) { // 20 sec timeout
                clearInterval(retryInterval);
                isRetrying = false;
            }
        }, 500);
    }

    // --- PART 4: NAVIGATION & DOM OBSERVER ---

    // This function runs constantly to detect if URL changed without page reload
    function checkUrlChange() {
        if (window.location.pathname !== currentPath) {
            log(`URL Change detected: ${window.location.pathname}`);
            currentPath = window.location.pathname;

            // Find textarea and FORCE it to update its key
            const t = document.querySelector(TEXTAREA_SELECTOR);
            if (t) {
                t.dataset.attachedKey = ''; // Reset key flag
                attachToTextarea(t); // Re-run logic to load new prompt
            }
        }
    }

    function attachToNotificationArea(section) {
        if (section.dataset.grokMonitorAttached === 'true') return;
        section.dataset.grokMonitorAttached = 'true';

        const observer = new MutationObserver((mutations) => {
            mutations.forEach((mutation) => {
                if (mutation.addedNodes.length) {
                    const text = section.innerText.toLowerCase();
                    if (ERROR_KEYWORDS.some(k => text.includes(k))) {
                        setTimeout(triggerRetrySequence, 500);
                    }
                }
            });
        });
        observer.observe(section, { childList: true, subtree: true, characterData: true });
    }

    const mainObserver = new MutationObserver((mutations) => {
        checkUrlChange(); // Check URL on every DOM update

        mutations.forEach((mutation) => {
            mutation.addedNodes.forEach((node) => {
                if (node.nodeType === 1) {
                    if (node.tagName.toLowerCase() === 'textarea') attachToTextarea(node);
                    else {
                        const t = node.querySelector(TEXTAREA_SELECTOR);
                        if (t) attachToTextarea(t);
                    }

                    if (node.matches && node.matches(NOTIFICATION_SELECTOR)) attachToNotificationArea(node);
                    else {
                        const n = node.querySelector(NOTIFICATION_SELECTOR);
                        if (n) attachToNotificationArea(n);
                    }
                }
            });
        });
    });

    mainObserver.observe(document.body, { childList: true, subtree: true });

    // Initial Start
    const iT = document.querySelector(TEXTAREA_SELECTOR);
    if (iT) attachToTextarea(iT);
    const iN = document.querySelector(NOTIFICATION_SELECTOR);
    if (iN) attachToNotificationArea(iN);

    createOverlay();
    updateOverlayPosition();

})();
the auto retry works for me but the prompt saver does not. I've tried on chrome, firefox, and brave. any way to get the prompt to stay the same after a failed generation? thanks!
 
Got something that works often for boobjob but I’m trying to make it better. I want that’s shaped like a dih

Prompt: a straight chrome bar rises from the bottom and sticks between her chest. She presses her bosom together with her hands. She lifts them up and down quickly to clean it. thick white hand soap liquid seeps out the top of the metal. she enjoys it, she makes a o-face
 
After a couple initial wins off using the anime girl border thing a couple weeks back it's been nothing but modded death from Grok. Even trying to "Redo" clips from the pics that worked last time give me nothing but rejection. So to get over my frustrations I wrote a prompt for it. The irony here is that I couldn't have made these clips (showing complete pussy) without the anime girl border.


gk-anime-01p0c8a64f0fd0daa7e.md.png gk-anime-02pa70eba73c89b7453.md.png

https://gofile.io/d/MG6Hno

Prompt1: She doesn't like anime posters next to her. First she high kick upper left posters. Then she turns and kick the upper right posters. Then she turn and kneels down to tear away all the rest of the right and left lower posters. She really hate anime posters.

Prompt2: She doesn't like anime posters next to her. She turns and quickly punch away the upper left posters. Then she turn and punch the upper right posters. Then she start to kick away all the rest of the right and left lower posters. She is really upset and mad and shaking her body and arms around crazy. She really hate anime posters.

I feel these prompts could be re-worked for some other more useful video ideas, I just don't have it in me to do it.