دکمه دانلود تصویر و نوار پیشرفت این کد تغییر بده <!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=0.8">
    <title>Gradio فشرده</title>
    <script type="module" src="https://gradio.s3-us-west-2.amazonaws.com/4.44.0/gradio.js"></script>
    <style>
        body, html {
            margin: 0;
            padding: 0;
            height: 100%;
            overflow: auto;
            background-color: #f4f4f9;
            font-family: sans-serif;
            position: relative;
        }

        #loader {
            display: flex;
            width: 100%;
            height: 100%;
            justify-content: center;
            align-items: center;
            position: fixed;
            top: 0;
            left: 0;
            background-color: #f4f4f9;
            z-index: 9999;
            text-align: center;
        }

        #progress {
            width: 80%;
            height: 30px;
            background-color: #eee;
            border: 1px solid #ccc;
            border-radius: 5px;
            overflow: hidden;
            margin-bottom: 10px;
        }

        #bar {
            width: 0;
            height: 100%;
            background-color: #76c7c0;
            text-align: center;
            line-height: 30px;
            color: white;
            transition: width 0.2s ease;
        }

        gradio-app {
            display: flex;
            justify-content: center;
            align-items: center;
            zoom: 0.8;
            min-height: 100vh;
        }

        #videoModal {
            display: none;
            position: fixed;
            z-index: 10001;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            overflow: auto;
            background-color: rgba(0,0,0,0.8);
            justify-content: center;
            align-items: center;
            flex-direction: column;
            padding: 20px;
            box-sizing: border-box;
        }

        #videoModalContent {
            background-color: #fff;
            color: #333;
            padding: 20px;
            border-radius: 5px;
            max-width: 600px;
            width: 100%;
            text-align: center;
        }

        #videoModal video {
            width: 100%;
            max-height: 500px;
            margin-bottom: 10px;
            border-radius: 10px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
        }

        .notification, .image-save-notification {
            display: none;
            position: fixed;
            z-index: 10002;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            background-color: #fff;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0,0,0,0.5);
            text-align: center;
            color: #333;
            max-width: 400px;
            width: 80%;
            overflow-y: auto;
            max-height: 90%;
        }

        #tutorialTitle {
            color: red;
        }
        
        #einsteinTip {
            margin-top: 10px;
            font-style: italic;
            color: #555;
        }
        
        #downloadButton {
            position: fixed;
            bottom: 10px;
            left: 10px;
            background-color: #76c7c0;
            color: white;
            font-size: 16px;
            border: none;
            border-radius: 5px;
            padding: 10px 20px;
            cursor: pointer;
            z-index: 10000;
        }
        
        .download-image-button {
            background-color: #76c7c0;
            color: white;
            font-size: 14px;
            border: none;
            border-radius: 5px;
            padding: 5px 10px;
            cursor: pointer;
            margin-top: 5px;
            display: block;
        }
        
        .image-preview {
            margin-bottom: 15px;
        }

        .confirm-text {
            color: green;
        }

    </style>
</head>
<body>
    <!-- نوار پیشرفت و پیام انتظار -->
    <div id="loader">
        <div id="progress">
            <div id="bar">0%</div>
        </div>
        <div>لطفاً صبر کنید...</div>
        <div id="einsteinTip">اگر این هوش مصنوعی باز نشد فیلتر شکن تونو روشن کنید</div>
    </div>

    <!-- Gradio App -->
    <gradio-app src="https://victorestrada-diffusers-image-outpaint.hf.space/"></gradio-app>

    <!-- مودال نمایش ویدیو -->
    <div id="videoModal">
        <div id="videoModalContent">
            <h3 id="tutorialTitle">آموزش دانلود ویدیو</h3>
            <video controls id="videoPreview"></video>
        </div>
    </div>
    
    <!-- اعلان (مودال) برای نمایش تصاویر -->
    <div class="notification" id="imageNotification">
        <h3>تصاویر قابل دانلود</h3>
        <div id="imageContainer"></div>
        <button id="closeImageNotification">بستن</button>
    </div>
    
    <!-- اعلان برای ذخیره تصویر -->
    <div class="image-save-notification" id="imageSaveNotification">
        <h3>راهنمایی ذخیره تصویر</h3>
        <p class="confirm-text">برای ذخیره تصویر روی تأیید کلیک کنید. پس از باز شدن کامل تصویر، اسکرین‌شات بگیرید و سپس آن را برش دهید.</p>
        <button id="confirmSaveButton">تأیید</button>
        <button id="closeSaveNotification">بستن</button>
    </div>
    
    <!-- دکمه دانلود اصلی -->
    <button id="downloadButton">دانلود تصویر</button>

    <!-- اعلان ساده برای تصاویر نیافتاده -->
    <div class="notification" id="noImagesFoundNotification">
        <h3>هیچ تصویر ساخته شده‌ای یافت نشد</h3>
    </div>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            function modifyText() {
                document.querySelectorAll('body *').forEach(element => {
                    element.childNodes.forEach(node => {
                        if (node.nodeType === Node.TEXT_NODE) {
                            // مخفی کردن عناصر حاوی "GPU"
                            if (node.nodeValue.includes('GPU')) {
                                node.parentElement.style.display = 'none';
                            }
                            // جایگزینی متن‌های مشخص
                            const replacements = {
                                'Examples': 'نمونه ها',
                                'Expected Ratio': 'اندازه مورد انتظار',
                                'Prompt': 'متن',
                                'Optional': 'انگلیسی وارد کنید',
                                'Generate': 'شروع ساخت',
                                'Diffusers Image Outpaint': 'ابزار فوق پیشرفته گسترش تصاویر',
                                'Drop an image you would like to extend, pick your expected ratio and hit شروع ساخت': 'با نرم افزار هوش مصنوعی',
                                'Input Image': 'تصویر ورودی',
                                'Alignment': 'تراز',
                                'Advanced settings': 'تنظیمات پیشرفته',
                                'Middle': 'وسط',
                                'Left': 'چپ',
                                'Right': 'راست',
                                'Top': 'بالا',
                                'Bottom': 'پایین',
                                'Width': 'عرض',
                                'Steps': 'مراحل',
                                'Height': 'ارتفاع',
                                'Mask': 'ماسک',
                                'Overlap': 'همپوشانی',
                                'Resize input image': 'تغییر اندازه تصویر ورودی',
                                'Loading': 'در حال بارگذاری'
                            };
                            for (const [original, replacement] of Object.entries(replacements)) {
                                if (node.nodeValue.includes(original)) {
                                    node.nodeValue = node.nodeValue.replace(original, replacement);
                                }
                            }
                        }
                    });
                });
            }

            function showContent() {
                document.getElementById('loader').style.display = 'none';
            }

            window.onload = function() {
                const simulateProgress = (callback) => {
                    let progress = 0;
                    const progressElement = document.getElementById('bar');

                    const updateProgress = () => {
                        progress += 1;
                        if (progress > 100) progress = 100;
                        progressElement.style.width = progress + '%';
                        progressElement.textContent = progress + '%';

                        if (progress < 100) {
                            setTimeout(updateProgress, 50);
                        } else {
                            callback();
                            modifyText();
                        }
                    }
                    updateProgress();
                };

                simulateProgress(showContent);
            };

            // اضافه کردن دکمه دانلود به تصاویر با فرمت WebP
            function addDownloadButtonsToWebPImages() {
                const imageContainer = document.getElementById('imageContainer');
                imageContainer.innerHTML = ''; // پاکسازی

                let found = false;
                document.querySelectorAll('img').forEach((img, index) => {
                    const excludedImgSrc = 'https://victorestrada-diffusers-image-outpaint.hf.space/file=/tmp/gradio/58d27ee015923ff8867291e88910c3b1fc5e49698a7a06372037c6d58cd5452e/example_1.webp';
                    if (img.src.endsWith('.webp') && img.src !== excludedImgSrc) {
                        found = true;
                        const div = document.createElement('div');
                        div.classList.add('image-preview');

                        const clonedImg = img.cloneNode(true);
                        clonedImg.style.maxWidth = '100%';

                        const downloadButton = document.createElement('button');
                        downloadButton.textContent = 'دانلود این تصویر';
                        downloadButton.classList.add('download-image-button');
                        downloadButton.addEventListener('click', function() {
                            showSaveNotification(img.src, `image-${index + 1}.webp`);
                        });

                        div.appendChild(clonedImg);
                        div.appendChild(downloadButton);
                        imageContainer.appendChild(div);
                    }
                });

                if (found) {
                    document.getElementById('imageNotification').style.display = 'block';
                } else {
                    document.getElementById('noImagesFoundNotification').style.display = 'block';
                    setTimeout(() => {
                        document.getElementById('noImagesFoundNotification').style.display = 'none';
                    }, 3000); // نمایش برای ۳ ثانیه
                }
            }

            function showSaveNotification(imageSrc, downloadName) {
                const saveNotification = document.getElementById('imageSaveNotification');
                saveNotification.style.display = 'block';
                
                const confirmButton = document.getElementById('confirmSaveButton');
                confirmButton.onclick = function() {
                    saveNotification.style.display = 'none';
                    const a = document.createElement('a');
                    a.href = imageSrc;
                    a.download = downloadName;
                    document.body.appendChild(a);
                    a.click();
                    document.body.removeChild(a);
                };
            }

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

            document.getElementById('closeImageNotification').addEventListener('click', function() {
                document.getElementById('imageNotification').style.display = 'none';
            });

            document.getElementById('closeSaveNotification').addEventListener('click', function() {
                document.getElementById('imageSaveNotification').style.display = 'none';
            });

            // مشاهده تغییرات برای نشان دادن تصاویر پویا
            const observer = new MutationObserver(modifyText);
            observer.observe(document.body, { childList: true, subtree: true });
        });
    </script>
</body>
</html>
از کد پایین الگو بگیر و مثل کد پایین باشه مخفی سازی ها نیز از بین نره
<p> </p>
<style>
        /* مخفی کردن تمامی لینک‌ها */
        a {
          display: none !important;
        }

        body, html {
          margin: 0;
          padding: 0;
          height: 100%;
          overflow: hidden; /* جلوگیری از اسکرول در زمان نمایش نوار پیشرفت */
          background-color: #f4f4f9;
          font-family: Arial, sans-serif;
        }

        #loader {
          width: 100%;
          height: 100%;
          display: flex;
          flex-direction: column;
          justify-content: center;
          align-items: center;
          background-color: #f4f4f9;
          position: fixed; /* تغییر به fixed برای پوشش کامل صفحه */
          top: 0;
          left: 0;
          z-index: 9999; /* بالاتر از سایر عناصر */
        }

        #progress {
          width: 80%;
          height: 30px; /* تعیین ارتفاع مشخص */
          background-color: #eee;
          border: 1px solid #ccc; /* حاشیه برای وضوح بیشتر */
          border-radius: 5px;
          overflow: hidden;
          margin-bottom: 10px;
        }

        #bar {
          width: 0%;
          height: 100%; /* پر شدن کامل ارتفاع #progress */
          background-color: #76c7c0;
          text-align: center;
          line-height: 30px;
          color: white;
          transition: width 0.15s ease-in-out;
        }

        .container {
          display: none; /* ابتدا مخفی است تا وقتی برنامه Gradio آماده شود */
          position: relative;
          overflow: hidden;
          height: 100vh;
          width: 100%;
        }

        gradio-app {
          position: absolute;
          top: 0;
          left: 0;
          right: 0;
          width: 100%;
          height: 100%;
        }

        /* استایل دکمه دانلود تصویر */
        #downloadButton {
          display: none; /* مخفی اولیه */
          position: absolute;
          top: 20px;
          right: 20px;
          background-color: #4CAF50;
          color: white;
          border: none;
          padding: 10px 20px;
          cursor: pointer;
          border-radius: 5px;
          z-index: 10000; /* بالاتر از loader */
        }

        #downloadButton:hover {
          background-color: #45a049;
        }

        /* استایل مودال اعلان */
        .modal {
          display: none; /* مخفی است */
          position: fixed;
          z-index: 10001; /* بالاتر از سایر عناصر */
          left: 0;
          top: 0;
          width: 100%;
          height: 100%;
          overflow: auto;
          background-color: rgba(0,0,0,0.4); /* پس‌زمینه نیمه‌شفاف */
        }

        .modal-content {
          background-color: #fefefe;
          margin: 10% auto;
          padding: 20px;
          border: 1px solid #888;
          width: 80%;
          max-width: 600px;
          border-radius: 10px;
          position: relative;
          text-align: center; /* مرکز کردن محتوا */
        }

        .close {
          color: #aaa;
          position: absolute;
          top: 10px;
          right: 20px;
          font-size: 28px;
          font-weight: bold;
          cursor: pointer;
        }

        .close:hover,
        .close:focus {
          color: black;
          text-decoration: none;
        }

        #modalImageList img {
          max-width: 100%;
          height: auto;
          margin-bottom: 10px;
        }

        #downloadImages {
          background-color: #008CBA;
          color: white;
          border: none;
          padding: 10px 15px;
          cursor: pointer;
          border-radius: 5px;
          margin-top: 20px; /* فاصله بیشتر از دکمه */
        }

        #downloadImages:hover {
          background-color: #007B9E;
        }

        #instructions {
          margin-top: 15px;
          font-size: 14px;
          color: #555;
        }

        /* استایل مودال تمام صفحه */
        #fullScreenModal {
          display: none; /* مخفی است */
          position: fixed;
          z-index: 10002; /* بالاتر از سایر عناصر */
          left: 0;
          top: 0;
          width: 100%;
          height: 100%;
          background-color: rgba(0,0,0,0.9); /* پس‌زمینه تاریک */
          overflow: auto;
        }

        .full-screen-content {
          position: relative;
          width: 100%;
          height: 100%;
          display: flex;
          justify-content: center;
          align-items: center;
          flex-wrap: wrap;
          padding: 20px;
          box-sizing: border-box;
        }

        .full-screen-content img {
          max-width: 90%;
          max-height: 90%;
          margin: 10px;
          border: 2px solid #fff;
          border-radius: 5px;
        }

        .close-fullscreen {
          position: absolute;
          top: 20px;
          right: 30px;
          color: #fff;
          font-size: 40px;
          font-weight: bold;
          cursor: pointer;
        }

        .close-fullscreen:hover,
        .close-fullscreen:focus {
          color: #bbb;
          text-decoration: none;
        }

        /* استایل مودال عدم یافتن تصاویر */
        #noImagesModal .modal-content {
            text-align: center;
        }

        #noImagesModal .modal-content img {
            border-radius: 10px;
        }
    </style>
<!-- دکمه دانلود تصویر -->
<p><button id="downloadButton">دانلود تصویر</button></p>
<div id="loader">
<div id="progress">
<div id="bar">0%</div>
</div>
<div>لطفاً صبر کنید...</div>
</div>
<!-- بازیابی تصاویر داخل صفحه از طریق مدل Gradio امکان‌پذیر نیست، بنابراین این بخش تنها برای نمایش نمونه است -->
<div class="container"><gradio-app src="https://stabilityai-stable-diffusion-3-5-medium.hf.space/"></gradio-app></div>
<!-- مودال اعلان -->
<div id="imageModal" class="modal">
<div class="modal-content"><span class="close">×</span>
<h2>لیست تصاویر موجود</h2>
<div id="modalImageList"><!-- تصاویر شناسایی شده نمایش داده می‌شوند --></div>
<button id="downloadImages">نمایش تصاویر</button>
<div id="instructions">برای ذخیره تصاویر، آن‌ها را در حالت تمام صفحه نمایش دهید و از صفحه اسکرین شات بگیرید و بعدا برش بدید.</div>
</div>
</div>
<!-- مودال اعلام عدم یافتن تصاویر -->
<div id="noImagesModal" class="modal">
<div class="modal-content"><span class="close-no-images">×</span>
<h2>هیچ تصویری یافت نشد</h2>
<img src="https://via.placeholder.com/150" alt="No Images" style="max-width: 100%; height: auto; margin-bottom: 20px;" />
<p>هیچ تصویر ساخته شده ای برای دانلود یافت نشد.</p>
</div>
</div>
<!-- مودال تمام صفحه برای نمایش تصاویر -->
<div id="fullScreenModal" class="modal">
<div class="full-screen-content"><span class="close-fullscreen">×</span>
<div id="fullScreenImageList"><!-- تصاویر کامل صفحه نمایش داده می‌شوند --></div>
</div>
</div>
<!-- بارگذاری اسکریپت Gradio با async برای بهبود سرعت بارگذاری -->
<p>
<script async="" type="module" src="https://gradio.s3-us-west-2.amazonaws.com/5.3.0/gradio.js"></script>
<script>
        document.addEventListener('DOMContentLoaded', function() {
            function showContent() {
                document.getElementById('loader').style.display = 'none';
                document.querySelector('.container').style.display = 'block';
                document.body.style.overflow = 'auto'; // بازکردن اسکرول بعد از بارگذاری
                document.getElementById('downloadButton').style.display = 'block'; // نمایش دکمه دانلود پس از بارگذاری
            }
        
            function simulateProgress(callback) {
                let progressElement = document.getElementById('bar');
                let progress = 0;
                function updateProgress() {
                    progress += 1;
                    if (progress > 100) progress = 100;
                    progressElement.style.width = progress + '%';
                    progressElement.textContent = progress + '%';
                    if (progress < 100) {
                        setTimeout(updateProgress, 150); // بروزرسانی هر 150 میلی‌ثانیه
                    } else {
                        callback();
                    }
                }
                updateProgress();
            }
        
            window.onload = function() {
                simulateProgress(showContent);
        
                const gradioApp = document.querySelector('gradio-app');
        
                function checkIfLoaded() {
                    // تغییر 'some-element-inside-gradio' به یک عنصر واقعی داخل Gradio در صورت نیاز
                    if (gradioApp && gradioApp.shadowRoot && gradioApp.shadowRoot.querySelector('body')) { 
                        document.getElementById('bar').style.width = '100%';
                        document.getElementById('bar').textContent = '100%';
                        showContent();
                    } else {
                        setTimeout(checkIfLoaded, 100); // بررسی هر 100 میلی‌ثانیه
                    }
                }
        
                checkIfLoaded();
            }
        
            // عملکرد دکمه دانلود تصویر
            var downloadButton = document.getElementById('downloadButton');
            if (downloadButton) {
                downloadButton.addEventListener('click', function() {
                    // شناسایی تصاویر داخل .container و خارج از مودال
                    const images = document.querySelectorAll('.container img');
                    if (images.length === 0) {
                        // نمایش مودال عدم یافتن تصاویر
                        const noImagesModal = document.getElementById('noImagesModal');
                        noImagesModal.style.display = 'block';
                        return;
                    }
                
                    // نمایش مودال لیست تصاویر
                    const modal = document.getElementById('imageModal');
                    const modalImageList = document.getElementById('modalImageList');
                    modalImageList.innerHTML = ''; // پاکسازی قبل از اضافه کردن تصاویر جدید
            
                    images.forEach((img, index) => {
                        const imgWrapper = document.createElement('div');
                        imgWrapper.style.marginBottom = '10px';
            
                        const image = document.createElement('img');
                        image.src = img.src;
                        image.alt = `تصویر ${index + 1}`;
                        image.style.maxWidth = '100%';
                        image.style.height = 'auto';
            
                        imgWrapper.appendChild(image);
                        modalImageList.appendChild(imgWrapper);
                    });
                
                    modal.style.display = 'block';
                });
            }
        
            // بسته شدن مودال اعلان
            var closeModal = document.querySelector('.close');
            if (closeModal) {
                closeModal.addEventListener('click', function() {
                    document.getElementById('imageModal').style.display = 'none';
                });
            }
        
            // بسته شدن مودال عدم یافتن تصاویر
            var closeNoImagesModal = document.querySelector('.close-no-images');
            if (closeNoImagesModal) {
                closeNoImagesModal.addEventListener('click', function() {
                    document.getElementById('noImagesModal').style.display = 'none';
                });
            }
        
            // کلیک بیرون از مودال برای بستن آن (برای تمامی مودال‌ها)
            window.addEventListener('click', function(event) {
                const modal = document.getElementById('imageModal');
                const noImagesModal = document.getElementById('noImagesModal');
                if (event.target == modal) {
                    modal.style.display = 'none';
                }
                if (event.target == noImagesModal) {
                    noImagesModal.style.display = 'none';
                }
            });
        
            // عملکرد دکمه نمایش تصاویر در مودال
            var downloadImagesButton = document.getElementById('downloadImages');
            if (downloadImagesButton) {
                downloadImagesButton.addEventListener('click', function() {
                    const images = document.querySelectorAll('#modalImageList img');
                    if (images.length === 0) {
                        alert('هیچ تصویری برای نمایش موجود نیست.');
                        return;
                    }
                
                    // نمایش مودال تمام صفحه
                    const fullScreenModal = document.getElementById('fullScreenModal');
                    const fullScreenImageList = document.getElementById('fullScreenImageList');
                    fullScreenImageList.innerHTML = ''; // پاکسازی قبل از اضافه کردن تصاویر جدید
            
                    images.forEach((img, index) => {
                        const image = document.createElement('img');
                        image.src = img.src;
                        image.alt = `تصویر ${index + 1}`;
                        fullScreenImageList.appendChild(image);
                    });
                
                    fullScreenModal.style.display = 'block';
                    
                    // بستن مودال اعلان
                    document.getElementById('imageModal').style.display = 'none';
                });
            }
        
            // بسته شدن مودال تمام صفحه
            var closeFullScreenModal = document.querySelector('.close-fullscreen');
            if (closeFullScreenModal) {
                closeFullScreenModal.addEventListener('click', function() {
                    document.getElementById('fullScreenModal').style.display = 'none';
                });
            }
        });
    </script>
</p>