GPicy / AI-Powered Old Photo Restoration - Bring Your Memories Back to Life

// ==UserScript==
// @name         AI-Powered Old Photo Restoration - Bring Your Memories Back to Life
// @name:es      Restauración de Fotos Antiguas con IA - Revive Tus Recuerdos
// @name:de      KI-basierte Alte Foto Restaurierung - Erwecken Sie Ihre Erinnerungen zum Leben
// @name:fr      Restauration de Photos Anciennes par IA - Redonnez Vie à Vos Souvenirs
// @name:it      Restauro di Foto Antiche con IA - Riporta in Vita i Tuoi Ricordi
// @name:pt      Restauração de Fotos Antigas com IA - Reviva Suas Memórias
// @name:ru      Восстановление Старых Фото на базе ИИ - Оживите Ваши Воспоминания
// @name:ja      AIで古い写真を修復 - 思い出を蘇らせる
// @name:ko      인공지능 기반 구형 사진 복원 - 추억을 되살리세요
// @name:ar      استعادة الصور القديمة بالذكاء الاصطناعي - إعادة الحياة لذكرياتك
// @name:tr      Yapay Zeka Destekli Eski Fotoğraf Restorasyonu - Anılarınızı Hayata Döndürün
// @name:nl      AI-Gestuurde Restauratie van Oude Foto's - Breng Uw Herinneringen Weer tot Leven
// @name:sv      AI-drivet Återställande av Gamla Foton - Återuppliva Dina Minnen
// @name:da      AI-drevet Restaurering af Gamle Fotos - Bring Dine Minder Tilbage til Livet
// @name:zh      人工智能老照片修复 - 重温珍贵回忆
// @name:zh-TW   人工智慧老照片修復 - 重溫珍貴回憶
// @description  Effortlessly restore the glory of your old photographs with our AI technology. Experience high-definition clarity and reclaim the vivid past in your portraits.
// @description:es  Restaura sin esfuerzo la gloria de tus fotografías antiguas con nuestra tecnología IA. Experimenta la claridad en alta definición y recupera el pasado vívido en tus retratos.
// @description:de  Stellen Sie den alten Glanz Ihrer Fotografien mühelos mit unserer KI-Technologie wieder her. Erleben Sie hochauflösende Klarheit und bringen Sie die lebendige Vergangenheit in Ihren Porträts zurück.
// @description:fr  Restaurez sans effort la gloire de vos vieilles photos grâce à notre technologie IA. Vivez une clarté haute définition et réclamez le passé vibrant dans vos portraits.
// @description:it  Ripristina senza sforzo la gloria delle tue vecchie fotografie con la nostra tecnologia IA. Vivi la chiarezza in alta definizione e rivendica il passato vivido nei tuoi ritratti.
// @description:pt  Restaure com facilidade a glória das suas fotografias antigas com a nossa tecnologia de IA. Experimente a clareza em alta definição e recupere o passado vívido nos seus retratos.
// @description:ru  Без труда восстановите прежнюю красоту ваших старых фотографий с помощью нашей технологии ИИ. Опыт высокой четкости и возвращение к яркому прошлому в портретах.
// @description:ja  私たちのAI技術で手軽に古い写真の栄光を復元します。ハイデフィニションな明瞭さを体験し、ポートレートで鮮やかな過去を取り戻しましょう。
// @description:ko  우리의 AI 기술로 고화질로 당신의 옛 사진의 영광을 쉽게 복원하세요. 초고해상도의 선명함을 경험하고 당신의 초상에서 생생한 과거를 되찾으세요.
// @description:ar  استعِد بسهولة مجد الصور القديمة مع تقنية الذكاء الاصطناعي لدينا. تجربة الوضوح عالي الدقة واستعادة الماضي الحيوي في صورك.
// @description:tr  Yapay zekamızla eski fotoğraflarınızın ihtişamını kolayca geri getirin. Yüksek çözünürlüklü netliği deneyimleyin ve portrelerinizdeki canlı geçmişi yeniden kazanın.
// @description:nl  Herstel moeiteloos de glorie van uw oude foto's met onze AI-technologie. Ervaar hoogwaardige helderheid en herclaim het levendige verleden in uw portretten.
// @description:sv  Återställ enkelt dina gamla fotografiers forna glans med vår AI-teknik. Upplev högupplöst klarhet och återta det levande förflutna i dina porträtt.
// @description:da  Genskab nemt dine gamle fotografiers storhed med vores AI-teknologi. Oplev højdefinitions klarhed og genvind det levende fortid i dine portrætter.
// @description:zh  用我们的人工智能技术轻松恢复老照片的荣耀。体验高清晰度,并在您的肖像中重现生动的过去。
// @description:zh-TW 使用我們的人工智慧技術輕鬆恢復舊照片的榮光。體驗高清晰度,並在您的肖像中重新展現生動的過去。
// @namespace    http://gpicy.com
// @author       gpicy
// @version      1.3.5
// @match        *://*/*
// @supportURL   https://gpicy.com/en-US/portrait-restoration?utm_source=openuserjs
// @grant        none
// @run-at       document-start
// @license      Apache-2.0
// ==/UserScript==

(function() {
    const floatingMenu = document.createElement('div');
    floatingMenu.style.cssText = `
    position: fixed;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    background: linear-gradient(135deg, rgba(132, 16, 145, 0.45), rgba(222, 0, 114, 0.45));
    padding: 10px;
    border-radius: 0 5px 5px 0;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    z-index: 10000;
    `;

    const closeButton = document.createElement('div');
    closeButton.innerHTML = `×`; // "×" symbol
    closeButton.style.cssText = `
    position: absolute;
    top: 0;
    right: 0;
    width: 30px;
    height: 30px;
    margin-right: -10px;
    margin-top: -10px;
    border-radius: 15px; /* Makes it round */
    background-color: #FFF;
    color: #000;
    text-align: center;
    line-height: 30px;
    cursor: pointer;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    `;
    closeButton.onclick = function() {
        document.body.removeChild(floatingMenu);
    };

    const menuTranslations = {
        'en': {
            'Image OCR': '🖼️ Image OCR',
            'PDF OCR': '📄 PDF OCR',
            'Lossless Image Enlarge': '🔍 Lossless Image Enlarge',
            'Background Removal': '🚫 Background Removal',
            'Object Removal': '🧹 Object Removal',
            'Photo Colorization': '🎨 Photo Colorization',
            'Portrait Restoration': '👥 Portrait Restoration'
        },
        'fr': { // French
            'Image OCR': '🖼️ OCR d\'Image',
            'PDF OCR': '📄 OCR de PDF',
            'Lossless Image Enlarge': '🔍 Agrandissement d\'Image Sans Perte',
            'Background Removal': '🚫 Suppression de l\'Arrière-plan',
            'Object Removal': '🧹 Retrait d\'Objet',
            'Photo Colorization': '🎨 Colorisation de Photo',
            'Portrait Restoration': '👥 Restauration de Portrait'
        },
        'de': { // German
            'Image OCR': '🖼️ Bild OCR',
            'PDF OCR': '📄 PDF OCR',
            'Lossless Image Enlarge': '🔍 Verlustfreie Bildvergrößerung',
            'Background Removal': '🚫 Hintergrund Entfernen',
            'Object Removal': '🧹 Objektentfernung',
            'Photo Colorization': '🎨 Fotokolorierung',
            'Portrait Restoration': '👥 Porträtrestaurierung'
        },
        'es': { // Spanish
            'Image OCR': '🖼️ OCR de Imagen',
            'PDF OCR': '📄 OCR de PDF',
            'Lossless Image Enlarge': '🔍 Ampliación de Imagen Sin Pérdida',
            'Background Removal': '🚫 Eliminación de Fondo',
            'Object Removal': '🧹 Eliminación de Objeto',
            'Photo Colorization': '🎨 Colorización de Fotos',
            'Portrait Restoration': '👥 Restauración de Retrato'
        },
        'it': { // Italian
            'Image OCR': '🖼️ OCR Immagine',
            'PDF OCR': '📄 OCR PDF',
            'Lossless Image Enlarge': '🔍 Ingrandimento Immagine Senza Perdite',
            'Background Removal': '🚫 Rimozione dello Sfondo',
            'Object Removal': '🧹 Rimozione Oggetto',
            'Photo Colorization': '🎨 Colorazione Foto',
            'Portrait Restoration': '👥 Restauro Ritratto'
        },
        'pt': { // Portuguese
            'Image OCR': '🖼️ OCR de Imagem',
            'PDF OCR': '📄 OCR de PDF',
            'Lossless Image Enlarge': '🔍 Ampliação de Imagem sem Perda',
            'Background Removal': '🚫 Remoção de Fundo',
            'Object Removal': '🧹 Remoção de Objeto',
            'Photo Colorization': '🎨 Coloração de Foto',
            'Portrait Restoration': '👥 Restauração de Retrato'
        },
        'ja': { // Japanese
            'Image OCR': '🖼️ 画像OCR',
            'PDF OCR': '📄 PDF OCR',
            'Lossless Image Enlarge': '🔍 ロスレス画像拡大',
            'Background Removal': '🚫 背景削除',
            'Object Removal': '🧹 オブジェクト削除',
            'Photo Colorization': '🎨 写真着色',
            'Portrait Restoration': '👥 ポートレート修復'
        },
        'nl': { // Dutch
            'Image OCR': '🖼️ Afbeelding OCR',
            'PDF OCR': '📄 PDF OCR',
            'Lossless Image Enlarge': '🔍 Verliesvrije Afbeelding Vergroten',
            'Background Removal': '🚫 Achtergrond Verwijderen',
            'Object Removal': '🧹 Object Verwijderen',
            'Photo Colorization': '🎨 Foto Inkleuren',
            'Portrait Restoration': '👥 Portret Restauratie'
        },
        'ru': { // Russian
            'Image OCR': '🖼️ OCR изображений',
            'PDF OCR': '📄 OCR PDF',
            'Lossless Image Enlarge': '🔍 Безубыточное Увеличение Изображения',
            'Background Removal': '🚫 Удаление Фона',
            'Object Removal': '🧹 Удаление Объектов',
            'Photo Colorization': '🎨 Колоризация Фото',
            'Portrait Restoration': '👥 Реставрация Портретов'
        },
        'ko': { // Korean
            'Image OCR': '🖼️ 이미지 OCR',
            'PDF OCR': '📄 PDF OCR',
            'Lossless Image Enlarge': '🔍 손실 없는 이미지 확대',
            'Background Removal': '🚫 배경 제거',
            'Object Removal': '🧹 객체 제거',
            'Photo Colorization': '🎨 사진 채색',
            'Portrait Restoration': '👥 초상화 복원'
        },
        'ar': { // Arabic
            'Image OCR': '🖼️ OCR للصور',
            'PDF OCR': '📄 OCR لملفات PDF',
            'Lossless Image Enlarge': '🔍 تكبير الصورة بدون فقدان',
            'Background Removal': '🚫 إزالة الخلفية',
            'Object Removal': '🧹 إزالة الكائن',
            'Photo Colorization': '🎨 تلوين الصور',
            'Portrait Restoration': '👥 استعادة الصور الشخصية'
        },
        'th': { // Thai
            'Image OCR': '🖼️ OCR ภาพ',
            'PDF OCR': '📄 OCR ไฟล์ PDF',
            'Lossless Image Enlarge': '🔍 ขยายภาพแบบไม่สูญเสียข้อมูล',
            'Background Removal': '🚫 ลบพื้นหลัง',
            'Object Removal': '🧹 ลบวัตถุ',
            'Photo Colorization': '🎨 การตกแต่งสีภาพถ่าย',
            'Portrait Restoration': '👥 การซ่อมแซมภาพเหมือน'
        },
        'zh': { // Simplified Chinese
            'Image OCR': '🖼️ 图像文字识别',
            'PDF OCR': '📄 PDF文字识别',
            'Lossless Image Enlarge': '🔍 无损放大图像',
            'Background Removal': '🚫 背景移除',
            'Object Removal': '🧹 物体移除',
            'Photo Colorization': '🎨 照片上色',
            'Portrait Restoration': '👥 人像修复'
        },
        'zh-TW': { // Traditional Chinese
            'Image OCR': '🖼️ 圖像文字識別',
            'PDF OCR': '📄 PDF文字識別',
            'Lossless Image Enlarge': '🔍 無損放大圖像',
            'Background Removal': '🚫 背景移除',
            'Object Removal': '🧹 物體移除',
            'Photo Colorization': '🎨 照片上色',
            'Portrait Restoration': '👥 人像修復'
        },

    };

    // Detecting your browser's preferred language
    function detectLanguage() {
        const supportedLangs = Object.keys(menuTranslations);
        const defaultLang = 'en';
        const userLangs = navigator.languages.map(lang => lang.split('-')[0]);
        for (let lang of userLangs) {
            if (supportedLangs.includes(lang)) {
                return lang;
            }
        }
        return defaultLang;
    }

    // Get the language translation of the current user
    const currentLang = detectLanguage();
    const translations = menuTranslations[currentLang];

    // List of features and associated URLs
    const features = [
        { icon: '🖼️', name: 'Image OCR', url: 'https://gpicy.com/en-US/image-ocr?utm_source=openuserjs', desc: 'Image recognition to text' },
        { icon: '📄',   name: 'PDF OCR', url: 'https://gpicy.com/en-US/pdf-ocr?utm_source=openuserjs', desc: 'PDF recognition into text' },
        { icon: '🔍',   name: 'Lossless Image Enlarge', url: 'https://gpicy.com/en-US/lossless-image-enlarge?utm_source=openuserjs', desc: 'Lossless magnification of AI image' },
        { icon: '🚫',   name: 'Background Removal', url: 'https://gpicy.com/en-US/background-removal?utm_source=openuserjs', desc: 'AI Background Removal' },
        { icon: '🧹',   name: 'Object Removal', url: 'https://gpicy.com/en-US/object-removal?utm_source=openuserjs', desc: 'AI Object Removal' },
        { icon: '🎨',   name: 'Photo Colorization', url: 'https://gpicy.com/en-US/photo-colorization?utm_source=openuserjs', desc: 'AI Photo Colorization' },
        { icon: '👥',   name: 'Portrait Restoration', url: 'https://gpicy.com/en-US/portrait-restoration?utm_source=openuserjs', desc: 'AI Portrait Restoration' },
    ];

    floatingMenu.appendChild(closeButton);

    features.forEach(feature => {
        const button = document.createElement('button');
        const translatedName = translations[feature.name] || feature.name;
        button.innerHTML = `${translatedName}`;
        button.style.cssText = `
        display: block;
        width: 100%;
        margin: 5px 0;
        background-color: #FFF;
        color: #000;
        border: none;
        border-radius: 3px;
        padding: 10px;
        cursor: pointer;
        text-align: left;
        transition: transform 0.3s ease, box-shadow 0.3s ease;
        `;

        button.onmouseenter = function() {
            this.style.transform = 'translateX(10px)';
            this.style.boxShadow = '3px 3px 10px rgba(0, 0, 0, 0.2)';
        };

        button.onmouseleave = function() {
            this.style.transform = 'translateX(0)';
            this.style.boxShadow = 'none';
        };

        button.onclick = function() {
            window.open(feature.url, '_blank');
        };

        const tooltip = document.createElement('span');
        tooltip.textContent = feature.desc;
        tooltip.style.cssText = `
            visibility: hidden;
            width: 120px;
            background-color: black;
            color: #fff;
            text-align: center;
            border-radius: 6px;
            padding: 5px 0;
            position: absolute;
            z-index: 1;
            bottom: 125%;
            left: 50%;
            margin-left: -60px;
            opacity: 0;
            transition: opacity 0.3s;
        `;
        button.appendChild(tooltip);

        button.onmouseover = function() {
            tooltip.style.visibility = 'visible';
            tooltip.style.opacity = '1';
        };

        button.onmouseout = function() {
            tooltip.style.visibility = 'hidden';
            tooltip.style.opacity = '0';
        };

        floatingMenu.appendChild(button);
    });

    document.body.appendChild(floatingMenu);
})();