<p>&nbsp;</p>
<style>
    /* تنظیمات پایه برای body و html */
    html, body {
        margin: 0;
        padding: 0;
        height: 100%;
        overflow: hidden;
        background-color: #f0f0f0;
        font-family: Arial, sans-serif;
    }

    /* متغیر CSS برای ارتفاع نمایشگر */
    :root {
        --vh: 100%;
    }

    /* حالت عادی */
    .iframe-container.normal {
        position: relative;
        width: 100%;
        height: 100vh;
        overflow: hidden;
    }

    .iframe-container.normal iframe {
        width: 100%;
        height: 100%;
        border: none;
        display: none;
        position: relative;
        top: 0;
    }

    /* حالت تمام صفحه */
    .iframe-container.fullscreen {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: calc(var(--vh) * 100);
        overflow: hidden;
        z-index: 1;
    }

    .iframe-container.fullscreen iframe {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        border: none;
        display: block;
    }

    /* استایل‌های مشترک */
    .loading {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        display: flex;
        flex-direction: column;
        align-items: center;
        z-index: 10000;
    }

    .loading-message {
        margin-bottom: 20px;
        font-size: 18px;
    }

    .progress {
        width: 80%;
        max-width: 400px;
        height: 20px;
        background-color: #ddd;
        border-radius: 5px;
        overflow: hidden;
    }

    .progress-bar {
        height: 100%;
        width: 0;
        background-color: #4caf50;
        transition: width 1s;
    }

    .error-message {
        display: none;
        color: red;
        margin-top: 20px;
        font-size: 16px;
        text-align: center;
    }

    #retryButton {
        display: none;
        margin-top: 10px;
        padding: 10px 20px;
        font-size: 16px;
        cursor: pointer;
        background-color: #4caf50;
        color: white;
        border: none;
        border-radius: 5px;
    }

    /* استایل دکمه دانلود */
    .download-button {
        display: none; /* مخفی کردن اولیه */
        width: auto;
        height: 25px; /* کاهش ارتفاع */
        color: white;
        text-align: center;
        padding: 2px 8px; /* کاهش فاصله داخلی */
        border-radius: 5px;
        cursor: pointer;
        font-size: 12px; /* کاهش اندازه فونت */
        line-height: 20px; /* تنظیم ارتفاع خط */
        transition: background-color 0.3s;
        position: fixed;
        top: 10px;
        right: 10px;
        z-index: 10001;
        text-decoration: none;
        background-color: #4CAF50;
    }

    .download-button:hover {
        background-color: #45a049;
    }

    /* اعلان */
    .notification {
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background-color: #ffffff;
        padding: 20px 30px;
        border-radius: 5px;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        z-index: 10003;
        display: none;
        text-align: center;
        width: 300px;
    }

    .notification-buttons {
        display: flex;
        justify-content: center;
        margin-top: 20px;
    }

    .notification-buttons button {
        background-color: #4CAF50;
        color: #ffffff;
        border: none;
        padding: 5px 10px;
        border-radius: 5px;
        cursor: pointer;
        margin: 0 5px;
    }

    .notification-buttons button:hover {
        background-color: #45a049;
    }
</style>
<!-- دکمه دانلود -->
<p><a href="#" class="download-button" id="downloadButton">دانلود تصویر 📥</a></p>
<!-- لودینگ و iframe -->
<div class="iframe-container normal">
<div class="loading" id="loadingContainer">
<div class="loading-message">لطفاً صبر کنید...</div>
<div class="progress">
<div class="progress-bar" id="progressBar"></div>
</div>
<div class="error-message" id="errorMessage">بارگیری زیاد طول کشید. در صورت عدم بارگذاری، فیلترشکن خود را روشن کنید.</div>
<button id="retryButton">بارگذاری مجدد</button></div>
<iframe id="myIframe" sandbox="allow-scripts allow-same-origin allow-forms allow-modals" allow="clipboard-read; clipboard-write"></iframe></div>
<p>
<script>
    const siteURL = 'http://magic.chenjunfeng.xyz/';

    let progress = 0;
    const progressBar = document.getElementById('progressBar');
    const retryButton = document.getElementById('retryButton');
    const errorMessage = document.getElementById('errorMessage');
    const loadingContainer = document.getElementById('loadingContainer');
    let interval;
    let iframeLoadedFlag = false;
    let dataImages = [];
    let generatedLinks = [];

    function startProgress() {
        loadingContainer.style.display = 'flex';
        progressBar.style.width = '0%';
        progress = 0;

        interval = setInterval(() => {
            if (progress < 100) {
                progress += 10;
                progressBar.style.width = progress + '%';
            }
            if (progress === 100) {
                clearInterval(interval);
                if (!iframeLoadedFlag) {
                    retryButton.style.display = 'block';
                    errorMessage.style.display = 'block';
                }
            }
        }, 1000);
    }

    function iframeLoaded() {
        iframeLoadedFlag = true;
        clearInterval(interval);
        loadingContainer.style.display = 'none';
        const iframeContainer = document.querySelector('.iframe-container');
        iframeContainer.classList.remove('normal');
        iframeContainer.classList.add('fullscreen');
        document.getElementById('myIframe').style.display = 'block';

        setupMutationObserver();

        // نمایش دکمه دانلود پس از بارگذاری iframe
        document.getElementById('downloadButton').style.display = 'block';
    }

    function iframeError() {
        clearInterval(interval);
        loadingContainer.style.display = 'flex';
        retryButton.style.display = 'block';
        errorMessage.style.display = 'block';
    }

    function loadIframe() {
        fetch(siteURL, { method: 'HEAD', mode: 'no-cors' })
            .then(() => {
                const iframe = document.getElementById('myIframe');
                iframe.src = siteURL;
                iframe.onload = iframeLoaded;
                iframe.onerror = iframeError;
            })
            .catch(() => {
                iframeError();
            });
    }

    retryButton.addEventListener('click', function() {
        progress = 0;
        progressBar.style.width = '0%';
        iframeLoadedFlag = false;
        retryButton.style.display = 'none';
        errorMessage.style.display = 'none';
        loadingContainer.style.display = 'flex';
        document.getElementById('myIframe').style.display = 'none';
        loadIframe();
        startProgress();
    });

    function setVh() {
        let vh = window.innerHeight * 0.01;
        document.documentElement.style.setProperty('--vh', `${vh}px`);
    }

    setVh();
    window.addEventListener('resize', setVh);

    loadIframe();
    startProgress();

    function modifyIframeContent() {
        const iframe = document.getElementById('myIframe');
        try {
            const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

            if (!iframeDocument) return;

            // مخفی کردن متن "Welcome to MagicQuill!"
            const textToHide1 = 'Welcome to MagicQuill!';
            const textNodes1 = getTextNodesContaining(iframeDocument.body, textToHide1);
            textNodes1.forEach(node => {
                const parentElement = node.parentElement;
                if (parentElement) {
                    parentElement.style.display = 'none';
                }
            });

            // مخفی کردن متن اول
            const text1 = 'Click the link to view our demo and tutorial. Give us a GitHub star if you are interested.';
            const textNodes2 = getTextNodesContaining(iframeDocument.body, text1);
            textNodes2.forEach(node => {
                const parentElement = node.parentElement;
                if (parentElement) {
                    parentElement.style.display = 'none';
                }
            });

            // مخفی کردن متن دوم و جایگزین کردن آن
            const text2 = 'Please turn off your VPN when using the demo.';
            const newText2 = 'اضافه کردن اشیاء داخل تصاویر، هوش مصنوعی غول چراغ جادو برنامه هوش مصنوعی';
            const textNodes3 = getTextNodesContaining(iframeDocument.body, text2);
            textNodes3.forEach(node => {
                const parentElement = node.parentElement;
                if (parentElement) {
                    parentElement.textContent = newText2;
                }
            });

            // مخفی کردن متن مجوز
            const licenseText = 'Note: This demo is governed by the license of CC BY-NC 4.0. We strongly advise users not to knowingly generate or allow others to knowingly generate harmful content, including hate speech, violence, pornography, deception, etc.';
            const licenseNodes = getTextNodesContaining(iframeDocument.body, licenseText);
            licenseNodes.forEach(node => {
                const parentElement = node.parentElement;
                if (parentElement) {
                    parentElement.style.display = 'none';
                }
            });

            // مخفی کردن لینک‌های ناخواسته
            const links = iframeDocument.querySelectorAll('a');
            links.forEach(link => {
                if (link.href === 'https://huggingface.co/spaces/yuntian-deng/ChatGPT4Turbo' || link.href === 'https://gradio.app/') {
                    link.style.display = 'none';
                }
            });

            // جایگزینی "Run" با "ساخت"
            const runText = 'Run';
            const runNodes = getTextNodesContaining(iframeDocument.body, runText);
            runNodes.forEach(node => {
                node.nodeValue = node.nodeValue.replace(runText, '🪄ساخت');
            });

            // جایگزینی "Click here to upload an image" با "کلیک برای انتخاب تصویر"
            const uploadText = 'Click here to upload an image';
            const uploadNodes = getTextNodesContaining(iframeDocument.body, uploadText);
            uploadNodes.forEach(node => {
                node.nodeValue = node.nodeValue.replace(uploadText, 'کلیک برای انتخاب تصویر');
            });

            // جایگزینی "Brush your canvas to tell" با "(متن انگلیسی وارد کنید)"
            const brushText = 'Brush your canvas to tell';
            const brushNodes = getTextNodesContaining(iframeDocument.body, brushText);
            brushNodes.forEach(node => {
                node.nodeValue = node.nodeValue.replace(brushText, '(انگلیسی وارد کنید)');
            });

            // به‌روزرسانی placeholder فیلدهای ورودی
            const inputElements = iframeDocument.querySelectorAll('input, textarea');
            inputElements.forEach(input => {
                if (input.placeholder && input.placeholder.includes('Brush your canvas to tell')) {
                    input.placeholder = '(متن انگلیسی وارد کنید)';
                }
            });

            // جایگزینی متون مشخص شده با ترجمه فارسی
            const textMappings = {
                'parameters': 'پارامترها',
                'Base Model Name': 'نام مدل پایه',
                'Negative Prompt': 'پرومپت منفی',
                'Fine Edge': 'لبه دقیق',
                'enable': 'فعال کردن',
                'disable': 'غیرفعال کردن',
                'Grow Size': 'اندازه رشد',
                'Edge Strength': 'قدرت لبه',
                'Color Strength': 'قدرت رنگ',
                'Inpaint Strength': 'قدرت نقاشی درون',
                'Seed': 'بذر',
                'res': 'محدودیت جی پی یو: بعدا سر بزن, و اگه الان میخوای با روشن کردن و خاموش کردن فیلتر شکن پور لایت این محدودیت برداشته میشه!',
                'Loading...': '...در حال بارگذاری',
                'CFG': 'راهنمایی',
                'Sampler Name': 'نام نمونه‌بردار',
                'Scheduler': 'زمان‌بند'
            };

            Object.keys(textMappings).forEach(englishText => {
                const persianText = textMappings[englishText];
                const nodes = getTextNodesContaining(iframeDocument.body, englishText);
                nodes.forEach(node => {
                    node.nodeValue = node.nodeValue.replace(englishText, persianText);
                });
            });

        } catch (error) {
            console.error("نمی‌توان به محتوای iframe دسترسی پیدا کرد: ", error);
        }
    }

    function getTextNodesContaining(node, text) {
        let textNodes = [];
        if (node.nodeType === Node.TEXT_NODE && node.nodeValue.includes(text)) {
            textNodes.push(node);
        } else {
            node.childNodes.forEach(child => {
                textNodes = textNodes.concat(getTextNodesContaining(child, text));
            });
        }
        return textNodes;
    }

    function setupMutationObserver() {
        const iframe = document.getElementById('myIframe');
        try {
            const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

            if (!iframeDocument) return;

            const observer = new MutationObserver(function(mutations) {
                mutations.forEach(function(mutation) {
                    if (mutation.addedNodes.length) {
                        modifyIframeContent();
                    }
                });
            });

            observer.observe(iframeDocument.body, {
                childList: true,
                subtree: true
            });

            // اعمال تغییرات اولیه
            modifyIframeContent();

        } catch (error) {
            console.error("نمی‌توان به محتوای iframe دسترسی پیدا کرد: ", error);
        }
    }

    document.getElementById('downloadButton').addEventListener('click', handleDownload);

    function createNotification(messageText, buttonsArray) {
        const notificationDiv = document.createElement('div');
        notificationDiv.classList.add('notification');
        notificationDiv.style.display = 'block';

        // پیام
        const messageSpan = document.createElement('span');
        messageSpan.innerText = messageText;
        notificationDiv.appendChild(messageSpan);

        // دکمه‌ها
        if (buttonsArray.length > 0) {
            const buttonsDiv = document.createElement('div');
            buttonsDiv.classList.add('notification-buttons');

            buttonsArray.forEach((btn) => {
                const button = document.createElement('button');
                button.innerText = btn.text;
                button.onclick = () => {
                    btn.onclick();
                    if (!btn.preventClose) {
                        notificationDiv.style.display = 'none';
                    }
                };
                buttonsDiv.appendChild(button);
            });

            notificationDiv.appendChild(buttonsDiv);
        }

        document.body.appendChild(notificationDiv);
        return notificationDiv;
    }

    function handleDownload(event) {
        event.preventDefault();
        try {
            const iframe = document.getElementById('myIframe');
            const iframeDocument = iframe.contentDocument || iframe.contentWindow.document;

            if (!iframeDocument) {
                alert("نمی‌توان به محتوای iframe دسترسی پیدا کرد.");
                return;
            }

            const images = iframeDocument.querySelectorAll('img');
            if (images.length === 0) {
                alert("هیچ تصویری برای دانلود یافت نشد.");
                return;
            }

            dataImages = [];
            images.forEach((img) => {
                // نادیده گرفتن تصاویر خاص با استفاده از src
                if (![
                    "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='576'%20height='576'%20viewBox='0%200%20576%20576'%20fill='none'%3e%3cpath%20d='M287.5%20229L86%20344.5L287.5%20460L489%20344.5L287.5%20229Z'%20stroke='url(%23paint0_linear_102_7)'%20stroke-width='59'%20stroke-linejoin='round'/%3e%3cpath%20d='M287.5%20116L86%20231.5L287.5%20347L489%20231.5L287.5%20116Z'%20stroke='url(%23paint1_linear_102_7)'%20stroke-width='59'%20stroke-linejoin='round'/%3e%3cpath%20d='M86%20344L288%20229'%20stroke='url(%23paint2_linear_102_7)'%20stroke-width='59'%20stroke-linejoin='bevel'/%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_102_7'%20x1='60'%20y1='341'%20x2='429.5'%20y2='344'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F9D100'/%3e%3cstop%20offset='1'%20stop-color='%23F97700'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint1_linear_102_7'%20x1='513.5'%20y1='231'%20x2='143.5'%20y2='231'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F9D100'/%3e%3cstop%20offset='1'%20stop-color='%23F97700'/%3e%3c/linearGradient%3e%3clinearGradient%20id='paint2_linear_102_7'%20x1='60'%20y1='344'%20x2='428.987'%20y2='341.811'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23F9D100'/%3e%3cstop%20offset='1'%20stop-color='%23F97700'/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e",
                    "data:image/svg+xml,%3csvg%20width='28'%20height='28'%20viewBox='0%200%2028%2028'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M26.9425%202.94265C27.4632%202.42195%2027.4632%201.57773%2026.9425%201.05703C26.4218%200.536329%2025.5776%200.536329%2025.0569%201.05703L22.5713%203.54256C21.1213%202.59333%2019.5367%202.43378%2018.1753%202.64006C16.5495%202.88638%2015.1127%203.66838%2014.3905%204.39053L12.3905%206.39053C12.1405%206.64058%2012%206.97972%2012%207.33334C12%207.68697%2012.1405%208.0261%2012.3905%208.27615L19.7239%2015.6095C20.2446%2016.1302%2021.0888%2016.1302%2021.6095%2015.6095L23.6095%2013.6095C24.3316%2012.8873%2025.1136%2011.4505%2025.36%209.82475C25.5663%208.46312%2025.4066%206.87827%2024.4571%205.42807L26.9425%202.94265Z'%20fill='%233c4555'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M12.276%2012.9426C12.7967%2012.4219%2012.7967%2011.5777%2012.276%2011.057C11.7553%2010.5363%2010.9111%2010.5363%2010.3904%2011.057L8.66651%2012.7809L8.27615%2012.3905C8.0261%2012.1405%207.68697%2012%207.33334%2012C6.97972%2012%206.64058%2012.1405%206.39053%2012.3905L4.39053%2014.3905C3.66838%2015.1127%202.88638%2016.5495%202.64006%2018.1753C2.43377%2019.5367%202.59333%2021.1214%203.54262%2022.5714L1.05703%2025.057C0.536329%2025.5777%200.536329%2026.4219%201.05703%2026.9426C1.57773%2027.4633%202.42195%2027.4633%202.94265%2026.9426L5.42817%2024.4571C6.87835%2025.4066%208.46315%2025.5663%209.82475%2025.36C11.4505%2025.1136%2012.8873%2024.3316%2013.6095%2023.6095L15.6095%2021.6095C16.1302%2021.0888%2016.1302%2020.2446%2015.6095%2019.7239L15.2188%2019.3332L16.9426%2017.6093C17.4633%2017.0886%2017.4633%2016.2444%2016.9426%2015.7237C16.4219%2015.203%2015.5777%2015.203%2015.057%2015.7237L13.3332%2017.4475L10.5521%2014.6665L12.276%2012.9426Z'%20fill='%23FF7C00'/%3e%3c/svg%3e",
                    "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
                ].includes(img.src)) {
                    dataImages.push(img.src);
                }
            });

            if (dataImages.length === 0) {
                alert("هیچ تصویر ساخته شده‌ای برای دانلود یافت نشد.");
                return;
            }

            // نمایش اعلان با تعداد تصاویر شناسایی شده
            const confirmDownloadNotification = createNotification(
                `${dataImages.length} تصویر شناسایی شد. آیا می‌خواهید آنها را ذخیره کنید؟`,
                [
                    {
                        text: 'تایید',
                        onclick: () => {
                            dataImages.forEach((imageUrl) => {
                                processImage(imageUrl);
                            });
                        }
                    },
                    {
                        text: 'لغو',
                        onclick: () => {
                            // بدون عملیات
                        }
                    }
                ]
            );

        } catch (error) {
            console.error("خطا در شناسایی تصاویر: ", error);
            alert("خطایی در شناسایی تصاویر رخ داد.");
        }
    }

    // تابع برای آپلود تصویر به سرور و دریافت لینک
    window.processImage = function(imageUrl) {
        // نمایش پیام ساخت لینک دانلود
        const buildingLinkNotification = createNotification(
            'در حال ساخت لینک دانلود، لطفاً صبر کنید...',
            []
        );

        // بعد از 3 ثانیه اعلان ناپدید می‌شود
        setTimeout(() => {
            if (buildingLinkNotification) {
                buildingLinkNotification.style.display = 'none';
            }
        }, 3000);

        // تبدیل data URL به blob
        function dataURLtoBlob(dataurl) {
            let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
            while(n--){
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new Blob([u8arr], {type:mime});
        }

        const blob = dataURLtoBlob(imageUrl);

        // آماده‌سازی فرم دیتا
        const formData = new FormData();
        formData.append('image', blob, 'downloaded_image.png');

        // ارسال تصویر به سرور
        fetch('https://www.aisada.ir/hamed/upload.php', {
            method: 'POST',
            body: formData,
            mode: 'cors'
        })
        .then(response => response.json())
        .then(data => {
            if (buildingLinkNotification) {
                buildingLinkNotification.style.display = 'none';
            }
            if (data.success) {
                generatedLinks.push(data.url);

                // نمایش پیغام لینک آماده با دکمه دانلود
                const downloadMessage = createNotification(
                    'لینک دانلود تصویر آماده شد.',
                    [
                        {
                            text: 'دانلود',
                            onclick: () => {
                                window.open(data.url, '_blank');
                            }
                        },
                        {
                            text: 'بستن',
                            onclick: () => {
                                // بدون عملیات
                            }
                        }
                    ]
                );

            } else {
                alert('خطا در آپلود تصویر: ' + data.message);
            }
        })
        .catch(error => {
            if (buildingLinkNotification) {
                buildingLinkNotification.style.display = 'none';
            }
            console.error('خطا:', error);
            alert('خطا در آپلود تصویر');
        });
    }
</script>
</p> من میخواستم وقتی کسی داخل وبسایت میشه هیچ کوکی وبسایت نتونه ذخیره کنه میشه همچین کاری ؟ همین سایت تو همین کد میشه