Check server response of

Server response
NS records
Whois domain
Response headers
Request headers
Raw HTML code
301 Moved Permanently - defuq.com
HTTP Status: 301
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
Server: nginx/1.24.0 (Ubuntu)
Date: Mon, 19 May 2025 04:06:14 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://defuq.com/

HTTP Code 301 Moved Permanently

301 status code means that the requested resource has been permanently moved to a new URL. All future requests should use the new address.

When is Code 301 used?

  • When changing a website domain
  • When modifying URL structures
  • When setting up redirects for SEO

What does Code 301 mean for the user?

The browser will automatically redirect the user to the new address, and search engines will update their indexes.

200 OK - https://defuq.com/
HTTP Status: 200
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
Server: nginx/1.24.0 (Ubuntu)
Date: Mon, 19 May 2025 04:06:14 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 41099
Connection: keep-alive
Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0

HTTP Code 200 OK

200 status code is a standard successful HTTP server response. It means that the client’s request (e.g., from a browser) was successfully processed, and the server is delivering the requested data.

When is Code 200 used?

  • When loading a web page
  • When successfully receiving an API response
  • When processing a form or another HTTP request

What does Code 200 mean for the user?

The user receives content without errors, and the page or application functions properly. If Code 200 is accompanied by data, the browser or program processes and displays it to the user.

GET / HTTP/1.1
Host: defuq.com
Accept: */*
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AI Video of Celebrities, Famous Figures & Personalities | Create Your AI Video Today!</title>
    <meta name="description"
        content="Create realistic Deepfake AI voice clones of famous celebrities like Trump, Elon Musk, Hollywood stars, or even family members. Try advanced AI voice cloning today!">
    <meta name="keywords"
        content="AI voice cloning, deepfake, celebrity voice cloning, clone your voice, voice cloning for celebrities, text-to-speech AI, Elon Musk voice, Trump voice, Hollywood star voices, Mike Tyson, Taylor Swift, Joe Rogan, Morgan Freeman">

    <script src="https://accounts.google.com/gsi/client" async></script>
    <link rel="icon" type="image/png" href="/static/favicon.png">
    <link rel="stylesheet" href="/static/css/styles.css">
    <link rel="stylesheet" href="/static/css/buttons.css">
  
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/build/jwt-decode.min.js"></script> <!-- For google one tap -->
    <script src="https://unpkg.com/@dotlottie/[email protected]/dist/dotlottie-player.mjs" type="module"></script>
    <script src="https://cdn.jsdelivr.net/npm/swiper@9/swiper-bundle.min.js"></script>
    <script src="/static/scripts/slider" defer></script>
</head>
</head>
<body>
    <header>
        <div class="user-info" >
            <!-- <span id="user-name"></span> -->
            <span id="credits"></span>
            <span id="subscription-data"></span>
        </div>
        <div id="logo">
            <img src="../static/defuq_logo_128.png" alt="Logo Defuq" />
        </div>
        <h1 id="headertitle">AI Video Studio</h1>
        <h2 id="header-sub-title">Go viral -creating AI Videos with trending famous people</h2>
       
        <dotlottie-player id="loadingLottie" src="https://lottie.host/bab5a16c-4600-49f2-ae40-0ab3dd1690c1/PHVLcuVivq.lottie" class="loading-lottie" background="transparent" speed="1" style="width: 300px; height: 300px;" loop autoplay></dotlottie-player>
    </header>
    <form id="tts-form">
        <!-- Dropdown to select speaker -->
         <div id="div-single">
            <div class="dropdown active">
                <button class="dropdown-button">
                    <img src="../static/trump_icon.webp" alt="Trump" id="dropdown-img">
                    <span id="selected-text">Select Person</span>
                </button>
                <div class="dropdown-content">
                    <a href="#" data-value="Donald Trump">
                        <img src="../static/trump_icon.webp" alt="Donald Trump">
                        Trump
                    </a>
                    <a href="#" data-value="Elon Musk">
                        <img src="../static/elon_icon.webp" alt="Elon Musk">
                        Elon Musk
                    </a>
                    <a href="#" data-value="Taylor Swift">
                        <img src="../static/taylor_icon.webp" alt="Taylor Swift">
                        Taylor Swift
                    </a>
                    <a href="#" data-value="Mike Tyson">
                        <img src="../static/mike_tyson_icon.webp" alt="Mike Tyson">
                        Mike Tyson
                    </a>
                    <a href="#" data-value="Joe Rogan">
                        <img src="../static/rogan_icon.webp" alt="Joe Rogan">
                        Joe Rogan
                    </a> 
                    <a href="#" data-value="Joe Biden">
                        <img src="../static/biden_icon.webp" alt="Joe Biden">
                        Joe Biden
                    </a>
                    <a href="#" data-value="Morgan Freeman">
                        <img src="../static/morgan_icon.webp" alt="Morgan Freeman">
                        Morgan Freeman
                    </a>
                    <a href="#" data-value="Justin Trudeau">
                        <img src="../static/trudeau_icon.webp" alt="Justin Trudeau">
                        Justin Trudeau
                    </a>
                </div>
            </div>
            <br>
            <br>

            <label for="text">Type your text to create a personalized celebrity AI video:</label><br>
            <div class="gradient-border">
            <textarea class="text-area" id="text"  name="text" rows="4" cols="50" maxlength="250"
                placeholder="Write your message here..."></textarea>
            </div>
                <script src="/static/scripts/hinttext" defer></script>
            <div class="info-container">
                <div id="charCount">250 characters remaining</div>
                <div id="error-message" style="display: none;">Please enter text.</div>
            </div>
        </div> 

        <div id="div-multiple">
            <div class="swiper">
                <div class="swiper-wrapper"></div>
            </div>
        </div>
        <div class="toggle-button-container">
            <span id="toggle-button-span">Create one video:</span>
            <button id="toggleButton" >
                <img id="toggleImage" src="/static/multi_mode.png" alt="Toggle Mode">
            </button>
        </div>
        <BR>
            
       
        <div class="radio-container">
            <label class="radio-label">
                <input type="radio" name="radioGroup" value="none" checked="checked">
                <img src="../static/no_greeting_256.png" alt="No Greeting" title="No greeting (default)">
            </label>
            <label class="radio-label">
                <input type="radio" name="radioGroup" value="bday">
                <img src="../static/bday_256.png" alt="Birthday Greeting"
                    title="This adds a birthday greeting to the video">
            </label>
        </div>

        <br>
        <div class="button-container">
            <button id="buttonGenerateText" class="btn-hover color-4"
                tooltip="Modify the text above to match his speaking style with AI"><i>Trumpify</i></button>
            <button id="buttonGenerateSpeech" class="btn-hover color-9" tooltip="Generate the AI video">Generate
                Video</button>
        </div>

        <div id="error-message-login" class="error-message-login" style="display: none">Please use Google login. Can't <a href="/static/thirdpartycookies.webp" target="_blank">login</a>?</div>
           
      
     
    
    </form>

    <!-- Loading Bar -->
    <div id="progress-container">
        <div id="progress-bar"></div>
    </div>
    <p id="status"></p>

    <h2 id="generated-video-header">Generated video:</h2>
    <div id="video-container" style=" text-align: center;"></div>


    <!-- Previously generated video files -->
     <h2 id="prev-generated-video-header" style="display: block; text-align: center;">Previous video Files:</h2> 
    <div id="video-list"></div>

    <script>
        let speaker = "Donald Trump";
        let selectedGreeting = getSelectedRadioValue();
               
        let progressBar = document.getElementById("progress-bar");
        let progressContainer = document.getElementById("progress-container");
        let status = document.getElementById("status");
        let loadingLottie = document.getElementById("loadingLottie");
        let hasSubscription  = false;
        let isMultiMode = false; /* Doing multiple speeches at the same time */

        // Create a WebSocket connection for progress
        const protocol = window.location.protocol === "https:" ? "wss" : "ws";
        const ws = new WebSocket(`${protocol}://${window.location.host}/ws`);

        ws.onopen = function() {
            console.info("WebSocket connection established.");
        };
       
        function handleCredentialResponse(response) {
            // Decode the JWT token contained in response.credential
            const data = jwt_decode(response.credential);
            console.log(data);
            
            // Send the token to the server via a POST request to /api/auth
            fetch('/api/auth', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    credential: response.credential  // Send the raw token as credential
                })
            })
            .then(res => res.json())
            .then(responseData => {
                console.log('Server response:', responseData);
                if (responseData.success) {
                    localStorage.setItem('user', JSON.stringify(responseData.user));
                    localStorage.setItem('auth_token', responseData.access_token);
                    updateUI(responseData.user);
                    document.getElementById('logout-button').style.display = "block"
                }else {
                    console.error('Authentication failed:', data.error);
                }
            })
            .catch(error => {
                console.error('Error during authentication:', error);
            });
        }

       

        function updateUI(user) {
            
            document.getElementById('credits').innerText = `Credits: ${user.credits_remaining}`;
           
            let subscriptionEnd = new Date(user.subscription_end);
            let currentDate = new Date();
            
            // Check if the user is subscribed
            hasSubscription = subscriptionEnd > currentDate;
            let subscriptionElement = document.getElementById('subscription-data');
            
            if (hasSubscription) {
                // Format the subscription end date
                let formattedDate = subscriptionEnd.toLocaleDateString('en-US', { 
                    month: 'long',
                    day: 'numeric',
                    year: 'numeric'
                });
                
                subscriptionElement.innerText = `Subscription end: ${formattedDate}`;
            } else {
                // If not subscribed, show "Get New Subscription" message and button
                subscriptionElement.innerText = "";
                
                // Create "Get New Subscription" button
                let subscribeButton = document.createElement("button");
                subscribeButton.id = "subscribe-button";
                subscribeButton.innerText = "Subscribe";
                subscribeButton.classList.add("btn-hover", "color-11");
                
                //redirect to subscription page or process subscription)
                subscribeButton.addEventListener("click", () => {
                    window.location.href = "/products";  
                });
                
                // Append the button to the DOM
                subscriptionElement.appendChild(subscribeButton);
            }
        }

        //websocket onmessage
        ws.onmessage = function(event) {
            const data = JSON.parse(event.data);
            progressContainer.classList.remove("fade-out");
            status.classList.remove("fade-out");

            progressContainer.style.display = "block";
            progressBar.style.width = data.progress + "%";
            status.innerText = data.message;

            if (data.message === "updateUI") {
                updateUI(data.user); 
            }

            if (data.progress >= 100)
            {

                status.innerText = "Done! ✅";

                // Wait 2 seconds, then fade out the progress bar
                setTimeout(() => {
                    progressContainer.classList.add("fade-out");
                    status.classList.add("fade-out");
                    setTimeout(() => {
                        progressContainer.style.display = "none";
                    }, 1000); // Allow fade-out to complete
                }, 2000);
            }
        };

        ws.onerror = function(error) {
            console.error("WebSocket error:", error);
        };

        function logout() {
                // Clear the auth_token from localStorage
                localStorage.removeItem('auth_token');
                localStorage.removeItem('user'); // Replace 'user_data' with the actual key if different
                location.reload(); // Reload the page to clear the UI              
           }  
        function getSelectedRadioValue() {
            const selectedValue = document.querySelector('input[name="radioGroup"]:checked').value;
            /* console.log("Selected Value:", selectedValue); // For debugging */
            return selectedValue;
        }

/* ************* ON LOAD **********************/
        document.addEventListener('DOMContentLoaded', function () {

            const singleDiv = document.getElementById("div-single");
            const multipleDiv = document.getElementById("div-multiple");
            const toggleButtonSpan = document.getElementById("toggle-button-span");
            
            // Load initial state from sessionStorage
            let isMultiMode = localStorage.getItem("isMultiMode") === "true";

            //coming from the succes page (means user bought subscription)
            const params = new URLSearchParams(window.location.search);
            if (params.get('from') === 'success') {
                const token = localStorage.getItem('auth_token'); 

                if (!token) {
                    console.error('No access token found');
                    showGooglePrompt()
                    return;
                }

                fetch('/api/get-user', {
                    headers: {
                    'Authorization': `Bearer ${token}`
                    }
                })
                .then(res => {
                if (res.status === 401) {
                    console.warn('Token expired or invalid');
                    localStorage.removeItem('auth_token');
                    showGoogleOneTap();  // fallback on 401
                    return;
                }
                return res.json();
                })
                    .then(user => updateUI(user))
                    .catch(err => 
                    { 
                        console.error(err)
                        showGooglePrompt();
                        
                });
            }
            
            //update toogle button multimode or single mode
            function updateButton() {
                toggleImage.src = isMultiMode ?  "/static/single_mode.png": "/static/multi_mode.png";
                toggleButtonSpan.innerText = isMultiMode ? "Create Single Clip Video:" : "Create Multi-Clip Video:";
                // Show/hide divs based on mode
                singleDiv.style.display = isMultiMode ? "none" : "block";
                multipleDiv.style.display = isMultiMode ? "block" : "none";
            }

            toggleButton.addEventListener("click", function (event) {
                event.preventDefault();

                isMultiMode = !isMultiMode;
                localStorage.setItem("isMultiMode", JSON.stringify(isMultiMode));
                updateButton();
                console.log("isMultiMode:", isMultiMode);
            });

            updateButton();
         

            const textarea = document.getElementById('text');
            const charCount = document.getElementById('charCount');
            const maxLength = textarea.getAttribute('maxlength');

            textarea.addEventListener('input', function () {
                localStorage.setItem("text", this.value);
                const remaining = maxLength - textarea.value.length;
                charCount.textContent = `${remaining} characters remaining`;
                
                if (remaining < 0) {
                    charCount.style.color = "red";
                } else {
                    charCount.style.color = "gray";
                }
                
                validateText();
            });

            // Check if the user is authenticated but only if was one time already authenticated
            if (localStorage.getItem('auth_token')) {
                var auth_token =localStorage.getItem('auth_token')
                if (auth_token) {
                    const decodedToken = jwt_decode(auth_token);
                    /* console.log(decodedToken); // This will l`og the user information */
                    updateUI(JSON.parse(localStorage.getItem('user')));
                    document.getElementById('logout-button').style.display = "block";
                    

                } else {
                    console.log('User is not authenticated');
                }
            } 
             
        /* When user bought subscription, update ui */    
        if (document.referrer.includes(window.location.origin)) {
                console.log("User navigated from another page within the same domain.");
                updateUI(JSON.parse(localStorage.getItem('user')));
            }
        });

        // Prevent video from playing when clicked (useful for mobile devices)
        document.querySelectorAll("video").forEach(video => {
            video.addEventListener("click", (event) => {
                event.preventDefault(); // Stop unintended behaviors
                document.activeElement.blur(); // Remove focus from any input fields
            });
        });

        function getFirstName(speaker) {
            return speaker.split(' ')[0];
        }

        function validateText() {
            let text = document.getElementById("text").value.trim();
            let errorMessage = document.getElementById("error-message");

            if (!text) {
                errorMessage.style.display = "block"; // Show error message
                return false; // Return false when validation fails
            }

            errorMessage.style.display = "none"; // Hide error message if input is valid
            return true; // Return true when validation passes
        }

        function showGooglePrompt(){
             // User is not authenticated, show Google One Tap
             console.log("Google One Tap is displayed");
            // Initialize Google One Tap
            google.accounts.id.initialize({
                client_id: '596694844539-hsilemb8u79a5ut0et0eufea7thhid7f.apps.googleusercontent.com', // YOUR_GOOGLE_CLIENT_ID 
                callback: handleCredentialResponse,
                auto_select: true,
                itp_support: true,
                use_fedcm_for_prompt: true 
            });
            google.accounts.id.prompt();

            document.getElementById('error-message-login').style.display = "block";
            setTimeout(() => {
                document.getElementById('error-message-login').style.display = "none";
            }, 5000); // Hide after 5 seconds
        }

        // Ensure dropdown is open on page load 
        document.addEventListener('DOMContentLoaded', function () {

             loadvideoList(); 

            document.querySelector('.dropdown').classList.add('active');


            document.querySelector('.dropdown-button').addEventListener('click', function (event) {
                event.preventDefault();

                const dropdown = document.querySelector('.dropdown');
                dropdown.classList.toggle('active');
            });


            document.querySelectorAll('.dropdown-content a').forEach(item => {
                item.addEventListener('click', function (event) {
                    event.preventDefault();

                    const selectedValue = item.getAttribute('data-value');
                    speaker = selectedValue;
                    const selectedText = item.textContent;
                    const selectedImg = item.querySelector('img').src;

                    console.log(selectedText);
                    document.getElementById('buttonGenerateText').textContent = getFirstName(selectedText.trim()) + "ify";

                    // Update the button text and image
                    document.getElementById('selected-text').textContent = selectedText;
                    document.getElementById('dropdown-img').src = selectedImg;

                    // Close the dropdown
                    document.querySelector('.dropdown').classList.toggle('active');
                });
            });

            document.addEventListener('click', function (event) {
                if (!event.target.closest('.dropdown'))
                {
                    document.querySelector('.dropdown').classList.remove('active');
                }
            });

            // Trumpify 
            document.getElementById("buttonGenerateText").addEventListener("click", function (event) {
                event.preventDefault(); // Prevent default behavior (useful if inside a form)
                
                if (!validateText())
                {
                    return;
                }
                let text = document.getElementById("text").value.trim();  // Get the text from the textarea
                const authToken = localStorage.getItem('auth_token'); // Retrieve stored JWT
                if (!authToken) {
                    //show login is mandatory


                    showGooglePrompt()
                    return;
                }
                console.log("Trumpify function triggered with text:", text);

                // Prepare data for the API
                let data = {
                    text: text,  // Send the text entered by the user
                    speaker: speaker // Optional, specify the public figure
                };

                loadingLottie.style.display = "block"; // Show loading animation
                // Send the data to  backend using fetch
                fetch('/generate_text', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${authToken}`
                    },
                    body: JSON.stringify(data)
                })
                .then(response => response.json())
                .then(data => {
                    if (data.transformed_text)
                    {
                        document.getElementById("text").value = data.transformed_text;
                    } 
                })
                .catch(error => {
                    console.error('Error:', error);
                    /* document.getElementById("text").value = "Please try again later.";  ********************* do this in error text under the text ********************************** */
                }).finally(() => {
                    loadingLottie.style.display = "none"; // Hide loading animation
                });
            });

           

            document.getElementById("buttonGenerateSpeech").addEventListener("click", function (event) {
                event.preventDefault(); 

                isMultiMode = JSON.parse(localStorage.getItem("isMultiMode"));

                if (!validateText() && !isMultiMode)
                {
                    return;
                }

                let text = document.getElementById("text").value.trim();
                var content = null;
                
                if(isMultiMode){
                    content =  JSON.parse(localStorage.getItem("savedItems"));
                } else {
                    content = [{text: text, speaker: speaker} ]
                }


                const authToken = localStorage.getItem('auth_token'); // Retrieve stored JWT
                //console.log("Bearer: " +authToken)
                if (!authToken) {
                    showGooglePrompt()
                    return;
                }

                 // Send a start message to the server via WebSocket
                ws.send(JSON.stringify({ event: "start" }));
                
                
               
                // Show loading bar
                progressContainer.style.display = "block";
               
                console.log(content)
                fetch("/", {
                    method: "POST",
                    headers: {
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${authToken}`
                    },
                    body: JSON.stringify({ 
                        overlay: getSelectedRadioValue(),
                        content: content
                    })
                })
                .then(response => response.json())
                .then(data => {
                    if (data.file && Array.isArray(data.file)) {
                        let videoContainer = document.getElementById("video-container");
                        videoContainer.style.display = "block";
                        videoContainer.innerHTML = ""; // Clear previous videos
                        
                        // Create a wrapper for all videos
                        let videosWrapper = document.createElement("div");
                        videosWrapper.style.display = "flex";
                        videosWrapper.style.flexDirection = "column";
                        videosWrapper.style.alignItems = "center";
                        videosWrapper.style.gap = "20px";
                        
                        // Process each video URL in the array
                        data.file.forEach((videoUrl, index) => {
                            // Create individual video wrapper
                            let videoWrapper = document.createElement("div");
                            videoWrapper.style.display = "flex";
                            videoWrapper.style.flexDirection = "column"; 
                            videoWrapper.style.alignItems = "center";
                            videoWrapper.style.width = "100%";
                            
                            // Create video element
                            let videoElement = document.createElement("video");
                            videoElement.controls = true;
                            videoElement.src = videoUrl;
                            videoElement.style.width = "100%";
                            
                            if (!hasSubscription) {
                                videoElement.controlsList = "nodownload";
                                videoElement.oncontextmenu = () => false;
                            }
                            
                            // Add index label if there are multiple videos
                            if (data.file.length > 1) {
                                let videoLabel = document.createElement("h4");
                                videoLabel.innerText = `Video ${index + 1}`;
                                videoWrapper.appendChild(videoLabel);
                            }
                            
                            videoWrapper.appendChild(videoElement);
                            
                            // Create download button
                            let downloadButton = document.createElement("a");
                            downloadButton.classList.add("btn-hover", "color-11");
                            downloadButton.style.marginTop = "10px";
                            
                            if (!hasSubscription) {
                                downloadButton.href = "#";
                                downloadButton.style.pointerEvents = "none";
                                downloadButton.style.opacity = "0.5";
                                downloadButton.innerText = "🔒 Subscribe to Download";
                            } else {
                                downloadButton.href = videoUrl;
                                downloadButton.download = `video-${index + 1}.mp4`;
                                downloadButton.innerText = "Download";
                            }
                            
                           
                            //create share button
                            let shareButton = document.createElement("a");
                            shareButton.classList.add("btn-hover", "color-8");
                            shareButton.style.marginTop = "10px";
                            shareButton.innerText = "Share";
                            shareButton.onclick = () => shareVideo(videoUrl);


                            videoWrapper.appendChild(downloadButton);
                            videoWrapper.appendChild(shareButton);
                            
                            // Load and play video
                            videoElement.load();
                            if (index === 0) videoElement.play(); // Only play the first video automatically
                            
                            // Add the complete wrapper to the container
                            videosWrapper.appendChild(videoWrapper);
                        });
                        
                        videoContainer.appendChild(videosWrapper);
                        
                    } else if (data.file && !Array.isArray(data.file)) {
                        // Fallback for backward compatibility if data.file is a single string
                        let videoContainer = document.getElementById("video-container");
                        videoContainer.classList.add('video-container');
                        videoContainer.style.display = "block";
                        videoContainer.innerHTML = ""; // Clear previous video
                        
                        let videoWrapper = document.createElement("div");
                        videoWrapper.style.display = "flex";
                        videoWrapper.style.flexDirection = "column"; 
                        videoWrapper.style.alignItems = "center"; 
                        
                        let videoElement = document.createElement("video");
                        videoElement.controls = true;
                        videoElement.src = data.file;
                        videoElement.style.width = "100%";
                        
                        if (!hasSubscription) {
                            videoElement.controlsList = "nodownload";
                            videoElement.oncontextmenu = () => false;
                        }
                        
                        let downloadButton = document.createElement("a");
                        downloadButton.classList.add("btn-hover", "color-11"); 
                        downloadButton.style.marginTop = "10px";
                        downloadButton.id = "download-button";

                        if (!hasSubscription) {
                            downloadButton.href = "#";
                            downloadButton.style.pointerEvents = "none";
                            downloadButton.style.opacity = "0.5";
                            downloadButton.innerText = "🔒 Subscribe to Download";
                        } else {
                            downloadButton.href = videoElement.src;
                            downloadButton.download = "video.mp4";
                            downloadButton.innerText = "Download";
                        }
                        
                        // Create share button
                        let shareButton = document.createElement("a");
                        shareButton.classList.add("btn-hover", "color-8");
                        shareButton.id = "share-button";
                        
                        shareButton.innerText = "Share";
                        shareButton.onclick = () => shareVideo(data.file);

                        // Create a wrapper div for buttons and set them horizontally
                        let buttonWrapper = document.createElement("div");
                        buttonWrapper.style.display = "flex";
                        buttonWrapper.style.justifyContent = "center";  // Center the buttons
                        buttonWrapper.style.gap = "10px";  // Space between buttons
                        buttonWrapper.style.maxWidth = "100%"; // Set max width to 100% to prevent overflow

                        // Append the buttons to the wrapper
                        buttonWrapper.appendChild(downloadButton);
                        buttonWrapper.appendChild(shareButton);

                        // Append video and button wrapper to the video wrapper
                        videoWrapper.appendChild(videoElement);
                        videoWrapper.appendChild(buttonWrapper);
                       
                        videoContainer.appendChild(videoWrapper);
                        
                        videoElement.load();
                        videoElement.play();
                    } else {
                        alert("Error: " + (data.error || "No video files were returned"));
                    }
                })
                .catch(error => {
                    clearInterval(progressInterval);
                    loadingBar.style.display = "none";
                    alert("An error occurred. Please try again.");
                });
            });

            function loadvideoList() {
                fetch("/get_video_list")
                    .then(response => response.json())
                    .then(data => {
                        const videoListContainer = document.getElementById("video-list");
                        videoListContainer.innerHTML = ""; // Clear previous list

                        document.getElementById("prev-generated-video-header").style.display = "block";
                        data.files.forEach(file => {
                            let videoElement = document.createElement("video");
                            videoElement.controls = true;
                            videoElement.src = file;
                            if (!hasSubscription) {
                                videoElement.controlsList = "nodownload";
                                videoElement.oncontextmenu = () => false;
                            }

                            // Create download button
                            let downloadButton = document.createElement("a");
                            downloadButton.classList.add("btn-hover", "color-11");
                            downloadButton.id = "download-button";
                            if (!hasSubscription) {
                                downloadButton.href = "#";
                                downloadButton.style.pointerEvents = "none";
                                downloadButton.style.opacity = "0.5";
                                downloadButton.innerText = "🔒 Subscribe to Download";
                            } else {
                                downloadButton.href = videoElement.src;
                                downloadButton.download = "video.mp4";
                                downloadButton.innerText = "Download";
                            }

                            // Create share button
                            let shareButton = document.createElement("a");
                            shareButton.classList.add("btn-hover", "color-8");
                            shareButton.id = "share-button";
                            shareButton.style.marginTop = "10px";
                            shareButton.innerText = "Share";
                            shareButton.onclick = () => shareVideo(file);

                            // Create a wrapper div for buttons and set them horizontally
                            let buttonWrapper = document.createElement("div");
                            buttonWrapper.style.display = "flex";
                            buttonWrapper.style.justifyContent = "center";  // Center the buttons
                            buttonWrapper.style.gap = "10px";  // Space between buttons
                            buttonWrapper.style.maxWidth = "100%"; // Set max width to 100% to prevent overflow

                            // Append the buttons to the wrapper
                            buttonWrapper.appendChild(downloadButton);
                            buttonWrapper.appendChild(shareButton);

                            // Create the video wrapper
                            let videoWrapper = document.createElement("div");
                            videoWrapper.style.display = "flex";
                            videoWrapper.style.flexDirection = "column";
                            videoWrapper.style.alignItems = "center";
                            videoWrapper.classList.add('video-container');

                            // Append video and button wrapper to the video wrapper
                            videoWrapper.appendChild(videoElement);
                            videoWrapper.appendChild(buttonWrapper);

                            // Append video wrapper to the container
                            videoListContainer.appendChild(videoWrapper);
                            videoListContainer.appendChild(document.createElement("br"));
                        });

                    })
                    .catch(error => console.log("Error loading video list: ", error));
            }
        });
        
        function shareVideo(url) {
                if (navigator.share) {
                    navigator.share({
                    title: 'Check out this video',
                    url: url
                    }).then(() => console.log('Shared successfully'))
                    .catch(err => console.error('Share failed', err));
                } else {
                    alert('Sharing not supported on this device.');
                }
            }
        // Load old text when the page loads
        window.onload = function () {

            /*  Load previous text */
            const savedText = localStorage.getItem("text");
            if (savedText) {
                document.getElementById("text").value = savedText;
            }

        };
    </script>

    <h2>Why Use AI Voice Cloning?</h2>
    <ul>
        <li>🎤 <strong>Celebrity AI Videos</strong>: Generate videos of celebrities like Donald Trump, Elon Musk,
            Morgan Freeman, and more.</li>
        <li>😂 <strong>Why?</strong>: Defuq is for everyone who loves to have fun! Whether you're a seasoned content creator, an influencer, someone who enjoys surprising friends with something fresh, or just a master of trolling—Defuq has you covered. Get ready to create, share, and entertain like never before!</li>
        <li>🗣️ <strong>Custom AI Voice Models</strong>: Clone your voice (coming soon) or create voices for storytelling, gaming, and
            entertainment.</li>
        <li>🔊 <strong>Text-to-Speech AI</strong>: Convert text into ultra-realistic speech with deep learning models.
        </li>

    </ul>

    <h2>Frequently Asked Questions (FAQ)</h2>
    <ul>
        <li>
            <h3>🤖 How does AI Voice Cloning work?</h3>
            <p>Our AI model processes audio samples and applies deep learning techniques to generate a synthetic voice
                that mimics the original speaker.</p>
        </li>


        <li>
            <h3>🎙️ Can I clone any celebrity's voice?</h3>
            <p>Absolutely! Very soon, you'll be able to. Our AI will support voice cloning for public figures—including Hollywood stars, politicians, entrepreneurs—as well as your friends, family, and even yourself!</p>
        </li>

        <li>
            <h3>📜 Is AI Voice Cloning legal?</h3>
            <p>Using AI-generated videos for entertainment and parody is generally allowed, but always ensure you have
                permission for commercial or public use.</p>
        </li>
    </ul>

    <h2>Start Using Defuq AI videos Now</h2>
    <ul>
        <li>
            <p>Enter your text above and generate AI-powered celebrity voices instantly. Try our free voice cloning tool
                today! Don't forget to login with your Google account, need help? See below</p>
        </li>
    </ul>
    <h2>Help! I can't log in (anymore)</h2>
    <ul>
        <li>
            <p>If you're having trouble logging in, it may be because you previously dismissed the Google login popup. To enable it again, follow this quick
                <a href="/static/thirdpartycookies.webp" target="_blank">5-second guide</a>.
            </p>
        </li>
    </ul>
    <footer>
        <p>© 2025 Defuq.com | Advanced AI Voice Cloning Solutions | All Rights Reserved.</p>
        <p>
            <a href="/products">Products</a> |  
            <a href="/privacy">Privacy Policy</a> | 
            <a href="/tos">Terms of Service</a> |  
            <span onClick="logout()" id="logout-button" style="display: none; cursor: pointer;">Logout</span>
        </p>
    </footer>
    
</body>

</html>                               

Whois info of domain

Domain Name: DEFUQ.COM
Registry Domain ID: 1634983096_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.tucows.com
Registrar URL: http://www.tucows.com
Updated Date: 2024-12-16T05:27:25Z
Creation Date: 2011-01-14T07:45:51Z
Registry Expiry Date: 2026-01-14T07:45:51Z
Registrar: Tucows Domains Inc.
Registrar IANA ID: 69
Registrar Abuse Contact Email: [email protected]
Registrar Abuse Contact Phone: +1.4165350123
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
Name Server: NS1.ARGEWEBHOSTING.EU
Name Server: NS2.ARGEWEBHOSTING.COM
Name Server: NS3.ARGEWEBHOSTING.NL
DNSSEC: signedDelegation
DNSSEC DS Data: 4022 8 2 9D7BF79C433D517AB1AB576954A3C7462D84296530B8BAC4BF6B7CCC452659DA
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
>>> Last update of whois database: 2025-05-19T04:05:53Z <<<
For more information on Whois status codes, please visit https://icann.org/epp
NOTICE: The expiration date displayed in this record is the date the
TERMS OF USE: You are not authorized to access or query our Whois
by the following terms of use: You agree that you may use this Data only
to: (1) allow, enable, or otherwise support the transmission of mass