// ==UserScript== // @name Youtube Tools All in one local download mp3 mp4 HIGT QUALITY return dislikes and more // @name:zh-TW Youtube 工具 多合一本地下載 MP4、MP3 // @name:zh-HK Youtube 工具 多合一本地下載 MP4、MP3 // @name:zh-CN Youtube 工具 多合一本地下載 MP4、MP3 // @name:ja Youtube ツール オールインワンのローカル ダウンロード MP4、MP3 // @name:kr Youtube 도구 올인원 로컬 다운로드 외부 서비스 없이 MP4, MP3 // @name:ar Youtube Tools All in one local download mp3 mp4 HIGT QUALITY return dislikes and more // @name:bg Youtube-Tools Alles in einem lokalen Download von MP4, MP3. // @name:cs Nástroje YouTube Vše v jednom místní Stahujte MP4, MP3 // @name:da Youtube-værktøjer Alt i én lokal Download MP4, MP3 // @name:de Youtube-Tools Alles in einem lokalen Download von MP4, MP3 // @name:tel Youtube టూల్స్ అన్నీ ఒకే లోకల్ డౌన్లోడ్ MP4, Mp3 // @name:es Youtube Custom Todo en uno Descarga local MP4, MP3. // @name:en Youtube Tools All in one local download mp3 mp4. // @name:fr Outils Youtube Tout-en-un local Téléchargez MP4, MP3. // @name:fr-CA Outils Youtube Tout-en-un local Téléchargez MP4, MP3. // @name:he כלים של YouTube הכל במקום אחד מקומי הורדה MP4, MP3 באיכות גבוהה ללא שירות חיצוני ועוד. // @name:hu Youtube Eszközök Minden egy helyen Letöltés MP4, MP3. // @name:id Alat Youtube Semua dalam satu lokal Unduh MP4, MP3. // @name:it Strumenti Youtube Tutto in uno Scarica locale MP4, MP3. // @name:ko Youtube 도구 올인원 로컬 외부 서비스 없이 MP4, MP3 // @name:nb Youtube-verktøy Alt i ett lokalt Last ned MP4, MP3 // @name:nl Youtube Tools Alles in één lokaal Download MP4, MP3 // @name:pl Narzędzia YouTube Wszystko w jednym lokalnym. Pobierz MP4, MP3 // @name:pt-BR Ferramentas do Youtube Tudo em um local Baixe MP4, MP3 DE ALTA QUALIDAD. // @name:ro YInstrumente Youtube Toate într-un singur local Descărcați MP4, MP3. // @name:ru Инструменты Youtube Все в одном локальном формате. Загрузите MP4, MP3. // @name:sk Nástroje YouTube Všetko v jednom miestne Stiahnite si MP4, MP3 // @name:sr Иоутубе алати Све у једном локалном Преузми МП4, МП3 // @name:sv Youtube-verktyg Allt i ett lokalt Ladda ner MP4, MP3 // @name:th เครื่องมือ Youtube ทั้งหมดในที่เดียว ดาวน์โหลด MP4, MP3 // @name:tr Youtube Araçları Hepsi bir arada yerel Harici hizmet olmadan MP4, MP3 // @name:uk Інструменти Youtube Все в одному локальному завантаженні MP4, MP3 // @name:ug Youtube قوراللىرى ھەممىسى بىر يەرلىك چۈشۈرۈش MP4,mp3 // @name:vi Công cụ Youtube Tất cả trong một cục bộ Tải xuống MP4, MP3 // @description:zh-TW Youtube 工具 多合一本地下載 mp4、MP3 // @description:zh-HK Youtube 工具 多合一本地下載 mp4、MP3 // @description:zh-CN Youtube 工具 多合一本地下載 mp4、MP3 // @description:ja Youtube ツール オールインワン ローカル ダウンロード mp4、MP3 、 // @description:kr Youtube 도구 올인원 로컬 다운로드 mp4, MP3 // @description:ar Herramientas de YouTube Todo en uno Descarga local mp4, MP3 // @description:bg Инструменти за Youtube Всичко в едно локално изтегляне mp4, // @description:cs Nástroje YouTube Vše v jednom místní Stahování mp4, MP3 // @description:da Youtube-værktøjer Alt i ét lokalt Download mp4, MP3 // @description:de YouTube-Tools Alles in einem lokalen Laden Sie MP4, MP3 // @description:tel Youtube Tools All in one local Download mp4, MP3 HIGT QUALITY, // @description:es Youtube tools todo en uno personlizada youtube a tu estilo y descarga MP4 y MP3 // @description:fr Outils Youtube Tout-en-un local Téléchargez des mp4, des MP3 // @description:fr-CA Outils Youtube Tout-en-un local Téléchargez des mp4, des MP3 // @description:he כלים של YouTube הכל במקום אחד מקומי הורד mp4, MP3 // @description:hu Youtube Eszközök Minden egyben helyi Letöltés mp4, MP3 // @description:id Alat Youtube Semua dalam satu lokal Unduh mp4, MP3 // @description:it Strumenti Youtube Tutto in uno locale Scarica mp4, MP3 // @description:ko Youtube 도구 올인원 로컬 다운로드 mp4, MP3 // @description:nb YoYoutube-verktøy Alt i ett lokalt Last ned mp4, MP3 // @description:nl YouTube-tools Alles in één lokaal Download mp4, MP3 // @description:pl Narzędzia Youtube Wszystko w jednym miejscu Pobierz mp4, MP3 // @description:pt-BR Ferramentas do YouTube Tudo em um só local Baixe mp4, MP3 // @description:ro Instrumente Youtube Toate într-un singur local Descărcați mp4, MP3 // @description:ru Инструменты Youtube Все в одном, локально. Загрузите mp4, MP3 // @description:sk Nástroje YouTube Všetko v jednom miestnom Sťahujte mp4, MP3 // @description:sr Иоутубе алати Све у једном локалном Преузми мп4, МП3 // @description:sv Youtube-verktyg Allt i ett lokalt Ladda ner mp4, MP3 // @description:th เครื่องมือ Youtube ทั้งหมดในที่เดียว ดาวน์โหลด mp4, MP3 // @description:tr Youtube Araçları Hepsi bir arada yerel Harici hizmet olmadan mp4, MP3 // @description:uk Інструменти Youtube Все в одному локальному завантаженні mp4, MP3 // @description:ug Youtube قورالىنىڭ ھەممىسى بىر يەرلىك چۈشۈرۈشتە mp4, MP3 HIGH QUAقنى قا // @description:vi Công cụ Youtube Tất cả trong một cục bộ Tải xuống mp4, MP3 // @description:en Youtube Tools All in one local Download mp4, MP3 HIGT QUALITY // @description Youtube Tools All in one local Download mp4, MP3 HIGT QUALITY // @homepage https://github.com/DeveloperMDCM/ // @version 2.4.2.1 // @author DeveloperMDCM // @match *://www.youtube.com/* // @exclude *://music.youtube.com/* // @exclude *://*.music.youtube.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant GM_info // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant unsafeWindow // @run-at document-end // @grant GM_registerMenuCommand // @require https://cdn.jsdelivr.net/npm/izitoast@1.4.0/dist/js/iziToast.min.js // @compatible chrome // @compatible firefox // @compatible opera // @compatible safari // @compatible edge // @license MIT // @namespace https://github.com/DeveloperMDCM/ // @keywords youtube, tools, download, mp3, mp4, hi-quality, return, dislikes, audio free, download mp3, download mp4, audio mp3, audio mp4, audio download, audio, free download, free audio, download audio, download free, hi quality, high quality, best quality, best audio quality, best free audio quality, best free quality, best audio free quality, best audio free, best free audio, best free // @downloadURL none // ==/UserScript== (function () { 'use strict'; let validoUrl = document.location.href; const $e = (el) => document.querySelector(el); // any element const $id = (el) => document.getElementById(el); // element by id const $m = (el) => document.querySelectorAll(el); // multiple all elements const $cl = (el, pty) => document.createElement(el); // create element const $sp = (el, pty) => document.documentElement.style.setProperty(el, pty); // set property variable css const $ap = (el) => document.body.appendChild(el); // append element const apiDislikes = "https://returnyoutubedislikeapi.com/Votes?videoId="; // Api dislikes const apiGoogleTranslate = "https://translate.googleapis.com/translate_a/t"; // Api google translate let selectedBgColor = "#252525"; // Background color menu default let selectedTextColor = "#ffffff"; // Text color menu default let selectedBgAccentColor = "#ff0000"; // Accent color menu default const urlSharedCode = "https://greasyfork.org/es/scripts/460680-youtube-tools-all-in-one-local-download-mp3-mp4-higt-quality-return-dislikes-and-more"; const API_URL_AUDIO_VIDEO = "https://p.oceansaver.in/ajax/download.php?copyright=0&allow_extended_duration=1&" // API URL AUDIO VIDEO const API_KEY_DEVELOPERMDCM = 'dfcb6d76f2f6a9894gjkege8a4ab232222'; // API KEY FOR DOWNLOAD AUDIO VIDEO // for translate comments video const languagesTranslate = { "af": "Afrikaans", "sq": "Albanian", "am": "Amharic", "ar": "Arabic", "hy": "Armenian", "az": "Azerbaijani", "eu": "Basque", "be": "Belarusian", "bn": "Bengali", "bs": "Bosnian", "bg": "Bulgarian", "ca": "Catalan", "ceb": "Cebuano", "zh-CN": "Chinese (Simplified)", "zh-TW": "Chinese (Traditional)", "co": "Corsican", "hr": "Croatian", "cs": "Czech", "da": "Danish", "nl": "Dutch", "en": "English", "eo": "Esperanto", "et": "Estonian", "fi": "Finnish", "fr": "French", "fy": "Frisian", "gl": "Galician", "ka": "Georgian", "de": "German", "el": "Greek", "gu": "Gujarati", "ht": "Haitian Creole", "ha": "Hausa", "haw": "Hawaiian", "iw": "Hebrew", "hi": "Hindi", "hmn": "Hmong", "hu": "Hungarian", "is": "Icelandic", "ig": "Igbo", "id": "Indonesian", "ga": "Irish", "it": "Italian", "ja": "Japanese", "jw": "Javanese", "kn": "Kannada", "kk": "Kazakh", "km": "Khmer", "ko": "Korean", "ku": "Kurdish", "ky": "Kyrgyz", "lo": "Lao", "la": "Latin", "lv": "Latvian", "lt": "Lithuanian", "lb": "Luxembourgish", "mk": "Macedonian", "mg": "Malagasy", "ms": "Malay", "ml": "Malayalam", "mt": "Maltese", "mi": "Maori", "mr": "Marathi", "mn": "Mongolian", "my": "Myanmar (Burmese)", "ne": "Nepali", "no": "Norwegian", "ny": "Nyanja (Chichewa)", "ps": "Pashto", "fa": "Persian", "pl": "Polish", "pt": "Portuguese", "pa": "Punjabi", "ro": "Romanian", "ru": "Russian", "sm": "Samoan", "gd": "Scots Gaelic", "sr": "Serbian", "st": "Sesotho", "sn": "Shona", "sd": "Sindhi", "si": "Sinhala", "sk": "Slovak", "sl": "Slovenian", "so": "Somali", "es": "Spanish", "su": "Sundanese", "sw": "Swahili", "sv": "Swedish", "tl": "Tagalog (Filipino)", "tg": "Tajik", "ta": "Tamil", "te": "Telugu", "th": "Thai", "tr": "Turkish", "uk": "Ukrainian", "ur": "Urdu", "uz": "Uzbek", "vi": "Vietnamese", "cy": "Welsh", "xh": "Xhosa", "yi": "Yiddish", "yo": "Yoruba", "zu": "Zulu" } // var for wave let currentVideo = null; let waveStyle = 'dinamica'; let audioCtx = null; let analyser = null; let source = null; let animationId = null; let canvas = null; let ctx = null; let controlPanel = null; let bufferLength = 0; let dataArray = null; let smoothedData = []; let isSetup = false; const smoothingFactor = 0.05; const canvasHeight = 240; const scale = canvasHeight / 90; const PROCESSED_FLAG = 'wave_visualizer_processed'; function hideCanvas() { const canvas = $id('wave-visualizer-canvas'); if (canvas) { canvas.style.opacity = '0'; if (controlPanel) { controlPanel.style.opacity = '0'; } } } function showCanvas() { const canvas = $id('wave-visualizer-canvas'); if (audioCtx && audioCtx.state === 'suspended') { audioCtx.resume(); } if (canvas) { canvas.style.opacity = '1'; if (controlPanel) controlPanel.style.opacity = '1'; } } function Notify(type = 'info', message = '', title = '') { const defaultTitles = { success: 'Success', error: 'Error', info: 'Information', warning: 'Warning', }; iziToast[type]({ title: title || defaultTitles[type] || 'Notification', message: message, position: 'bottomLeft', }); } async function startDownloadVideoOrAudio(format, container) { const videoURL = window.location.href; // Notify('info', 'Starting download...'); // Check if already downloading if (container.dataset.downloading === 'true') { return; } // Get UI elements from the container const downloadBtn = container.querySelector('.download-btn'); const retryBtn = container.querySelector('.retry-btn'); const progressRetryBtn = container.querySelector('.progress-retry-btn'); const progressContainer = container.querySelector('.progress-container'); const progressFill = container.querySelector('.progress-fill'); const progressText = container.querySelector('.progress-text'); const downloadText = container.querySelector('.download-text'); // Set downloading flag container.dataset.downloading = 'true'; container.dataset.urlOpened = 'false'; // Update UI to show progress downloadBtn.style.display = 'none'; retryBtn.style.display = 'none'; progressRetryBtn.style.display = 'block'; progressContainer.style.display = 'flex'; progressFill.style.width = '0%'; progressText.textContent = '0%'; try { const response = await fetch(`${API_URL_AUDIO_VIDEO}format=${format}&url=${encodeURIComponent(videoURL)}&api=${API_KEY_DEVELOPERMDCM}`); const data = await response.json(); if (!data.success) { // Notify('error', 'Error starting download. Try again'); // Show retry button retryBtn.style.display = 'block'; progressContainer.style.display = 'none'; progressRetryBtn.style.display = 'none'; // Clear downloading flag container.dataset.downloading = 'false'; container.dataset.urlOpened = 'false'; return; } const progressURL = data.progress_url; // 3 seconds const checkProgress = setInterval(async () => { try { const progressResponse = await fetch(progressURL); const progressData = await progressResponse.json(); // Update progress in UI const progress = Math.min(progressData.progress / 10, 100); progressFill.style.width = `${progress}%`; progressText.textContent = `${Math.round(progress)}%`; if (progressData.progress >= 1000 && progressData.download_url) { clearInterval(checkProgress); // Check if URL was already opened if (container.dataset.urlOpened === 'true') { return; } // Mark URL as opened container.dataset.urlOpened = 'true'; // Update UI to show completion container.classList.add('completed'); container.classList.remove('video', 'audio'); downloadText.textContent = 'Download Complete!'; progressFill.style.width = '100%'; progressText.textContent = '100%'; progressRetryBtn.style.display = 'none'; container.dataset.downloading = 'false'; window.open(progressData.download_url); } } catch (e) { console.error('❌ Error in progress:', e); clearInterval(checkProgress); // Show retry button retryBtn.style.display = 'block'; progressContainer.style.display = 'none'; progressRetryBtn.style.display = 'none'; // Clear downloading flag container.dataset.downloading = 'false'; container.dataset.urlOpened = 'false'; } }, 3000); } catch (error) { // Notify('error', 'Error starting download. Try again'); retryBtn.style.display = 'block'; progressContainer.style.display = 'none'; progressRetryBtn.style.display = 'none'; // Clear downloading flag container.dataset.downloading = 'false'; container.dataset.urlOpened = 'false'; console.error('❌ Error starting download:', error); } } const UPDATE_INTERVAL = 1000; const STORAGE = { USAGE: 'YT_TOTAL_USAGE', VIDEO: 'YT_VIDEO_TIME', SHORTS: 'YT_SHORTS_TIME' }; let usageTime = GM_getValue(STORAGE.USAGE, 0); let videoTime = GM_getValue(STORAGE.VIDEO, 0); let shortsTime = GM_getValue(STORAGE.SHORTS, 0); let lastUpdate = Date.now(); let activeVideo = null; let activeType = null; // Inicializar almacenamiento GM_setValue(STORAGE.USAGE, usageTime); GM_setValue(STORAGE.VIDEO, videoTime); GM_setValue(STORAGE.SHORTS, shortsTime); function FormatterNumber(num, digits) { const lookup = [ { value: 1, symbol: '', }, { value: 1e3, symbol: ' K', }, { value: 1e6, symbol: ' M', }, ]; const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; const item = lookup .slice() .reverse() .find((item) => { return num >= item.value; }); return item ? (num / item.value).toFixed(digits).replace(rx, '$1') + item.symbol : '0'; } function paramsVideoURL() { const parametrosURL = new URLSearchParams(window.location.search); // Url parametros return parametrosURL.get('v'); } // Dislikes video async function videoDislike() { validoUrl = document.location.href; const validoVentana = $e('#below > ytd-watch-metadata > div'); if (validoVentana != undefined && document.location.href.split('?v=')[0].includes('youtube.com/watch')) { validoUrl = paramsVideoURL(); const urlShorts = `${apiDislikes}${validoUrl}`; try { const respuesta = await fetch(urlShorts); const datosShort = await respuesta.json(); const { dislikes } = datosShort; const dislikes_content = $e('#top-level-buttons-computed > segmented-like-dislike-button-view-model > yt-smartimation > div > div > dislike-button-view-model > toggle-button-view-model > button-view-model > button'); if (dislikes_content !== undefined) { dislikes_content.style = 'width: 90px'; dislikes_content.innerHTML = ` ${FormatterNumber(dislikes, 0)}`; } } catch (error) { console.log(error); } } } // dislikes shorts async function shortDislike() { validoUrl = document.location.href; const validoVentanaShort = $m( '#dislike-button > yt-button-shape > label > div > span' ); if (validoVentanaShort != undefined && document.location.href.split('/')[3] === 'shorts') { validoUrl = document.location.href.split('/')[4]; const urlShorts = `${apiDislikes}${validoUrl}`; try { const respuesta = await fetch(urlShorts); const datosShort = await respuesta.json(); const { dislikes } = datosShort; for (let i = 0; i < validoVentanaShort.length; i++) { validoVentanaShort[i].textContent = `${FormatterNumber( dislikes, 0 )}`; } } catch (error) { console.log(error); } } } // Url change in second load let prevUrl; let showDislikes = false; setInterval(() => { const svgDislike = $e('.svg-dislike-ico'); // Check svg in dom const currUrl = window.location.href; if (prevUrl !== undefined && currUrl !== prevUrl && !svgDislike && showDislikes) { setTimeout(async() => { await videoDislike(); await shortDislike(); },2000) } prevUrl = currUrl; }, 1000); // Create a Trusted Types policy const policy = window.trustedTypes?.createPolicy('default', { createHTML: (input) => input, }); // Styles for our enhancement panel GM_addStyle(` @import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"); @import url("https://cdn.jsdelivr.net/npm/izitoast@1.4.0/dist/css/iziToast.min.css"); :root { --primary-custom: #ff0000 !important; --bg-dark-custom: #1a1a1a !important; --bg-card-custom: #252525 !important; --text-custom: #ffffff !important; --text-custom-secondary: #9e9e9e !important; --accent-custom: #ff4444 !important; } body .container-mdcm { font-family: "Inter", -apple-system, sans-serif; color: var(--yt-enhance-menu-text, --text-custom); } #toggle-button:hover { background-color: rgba(255,255,255,0.1); border-radius: 50%; opacity: 1 !important; } .container-mdcm { width: 420px; max-width: 420px; background-color: var(--yt-enhance-menu-bg, #252525); border-radius: 16px 16px 0 0; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); backdrop-filter: blur(15px); border: 1px solid rgba(255, 255, 255, 0.1); display: flex; flex-direction: column; max-height: 80vh; overflow-y: auto; overflow-x: hidden; height: auto; } #shareDropdown { display: none; position: absolute; top: 50px; right: 100px; background-color: var(--yt-enhance-menu-bg, #252525); border-radius: 6px; padding: 10px; box-shadow: rgba(0, 0, 0, 0.2) 0px 4px 12px; z-index: 11; } #shareDropdown a { color: var(--text-custom); text-decoration: none; line-height: 2; font-size: 14px; } #shareDropdown a:hover { color: var(--primary-custom); } .header-mdcm { padding: 12px 16px; border-bottom: 1px solid rgba(255,255,255,0.1); position: sticky; top: 0; background-color: var(--yt-enhance-menu-bg, #252525); border-radius: 16px 16px 0 0; z-index: 10; display: flex; justify-content: space-between; align-items: center; } .header-mdcm h1 { font-size: 16px; margin: 0; font-weight: 600; display: flex; align-items: center; gap: 8px; } .header-mdcm i { color: var(--primary-custom) } .icons-mdcm { display: flex; gap: 4px; } .icons-mdcm i { color: var(--yh-enhance-menu-accent, var(--text-custom)); } .icon-btn-mdcm { background: rgba(255,255,255,0.1); border: none; color: var(--text-custom); width: 28px; height: 28px; border-radius: 6px; cursor: pointer; transition: all 0.3s; } .icon-btn-mdcm:hover { background: rgba(255,255,255,0.2); transform: translateY(-2px); } .icon-btn-mdcm i { color: var(--text-custom); outline: none; text-decoration: none; } .tabs-mdcm { padding: 10px 12px; margin: 10px 0; position: sticky; top: 50px; background-color: var(--yt-enhance-menu-bg, #252525); z-index: 10; display: flex; gap: 8px; -ms-overflow-style: none; padding-bottom: 8px; } .tabs-mdcm::-webkit-scrollbar { height: 0px; background-color: transparent; } .tabs-mdcm:hover::-webkit-scrollbar { height: 6px; } .tabs-mdcm::-webkit-scrollbar-thumb { background-color: rgba(255, 0, 0, 0.5); border-radius: 3px; } .tabs-mdcm::-webkit-scrollbar-track { background-color: transparent; } .tab-mdcm { padding: 6px 10px; border: none; background: rgba(255,255,255,0.05); cursor: pointer; font-size: 12px; color: var(--text-custom-secondary); border-radius: 6px; transition: all 0.3s; flex: 1; display: flex; align-items: center; gap: 6px; flex-shrink: 0; justify-content: center; white-space: nowrap; } .tab-mdcm svg { width: 14px; height: 14px; fill: currentColor; } .tab-mdcm.active { background: var(--yt-enhance-menu-accent, --primary-custom) !important; color: var(--text-custom); font-weight: 500; box-shadow: 0 4px 12px rgba(255,0,0,0.2); } .tab-mdcm:hover:not(.active) { background: rgba(255,255,255,0.1); transform: translateY(-1px); } .options-mdcm { flex: 1; overflow-y: auto; padding: 0 16px 0; scrollbar-width: thin; scrollbar-color: var(--primary-custom) var(--bg-dark-custom); max-height: 300px; display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; } .options-settings-mdcm { flex: 1; overflow-y: auto; padding: 0 16px 0; scrollbar-width: thin; scrollbar-color: var(--primary-custom) var(--bg-dark-custom); max-height: 300px; display: grid; gap: 8px; } .card-items-end { display: flex; justify-content: space-between; align-items: center; width: 175px; } .radio-mdcm { width: 14px; height: 14px; accent-color: var(--primary-custom); } .color-picker-mdcm { width: 50px; height: 24px; border: 1px solid rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.1); border-radius: 4px; cursor: pointer; transition: all 0.3s; } .color-picker-mdcm:hover { background: rgba(255, 255, 255, 0.2); } .options-mdcm::-webkit-scrollbar, .options-settings-mdcm::-webkit-scrollbar { width: 6px; } .options-mdcm::-webkit-scrollbar-track, .options-settings-mdcm::-webkit-scrollbar-track { background: var(--bg-dark-custom); border-radius: 3px; } .options-mdcm::-webkit-scrollbar-thumb, .options-settings-mdcm::-webkit-scrollbar-thumb { background: var(--primary-custom); border-radius: 3px; } .options-mdcm::-webkit-scrollbar-thumb:hover, .options-settings-mdcm::-webkit-scrollbar-thumb:hover { background: var(--accent-custom); } .options-mdcm::after, .options-settings-mdcm::after { content: ''; display: block; } .option-mdcm { display: grid; grid-template-columns: auto 1fr; align-items: center; margin-bottom: 0; padding: 5px; background: rgba(255,255,255,0.05); border-radius: 6px; transition: all 0.3s; border: 1px solid rgba(255,255,255,0.05); color: var(--yt-) gap: 6px; } .option-mdcm:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.1); } .option-settings-mdcm { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0; padding: 6px; background: rgba(255, 255, 255, 0.05); border-radius: 6px; transition: all 0.3s; border: 1px solid rgba(255, 255, 255, 0.05); gap: 6px; } .option-settings-mdcm:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.1); } .tab-content { display: none; } .tab-content.active { display: block; margin-bottom: 10px; } .checkbox-mdcm { width: 14px; height: 14px; accent-color: var(--yt-enhance-menu-accent, --primary-custom) !important; } label { font-size: 12px; color: var(--text-custom); } .slider-container-mdcm { background: rgba(255,255,255,0.05); padding: 10px; border-radius: 6px; } .slider-mdcm { width: 100%; height: 3px; accent-color: var(--yt-enhance-menu-accent, --primary-custom) !important; margin: 10px 0; } .reset-btn-mdcm { padding: 5px 10px; border: 1px solid rgba(255,255,255,0.2); background: rgba(255,255,255,0.1); color: var(--text-custom); border-radius: 4px; cursor: pointer; font-size: 11px; transition: all 0.3s; } .reset-btn-mdcm:hover { background: rgba(255,255,255,0.2); } .quality-selector-mdcm select { position: relative; padding: 3px; outline: none; border-radius: 4px; border: 1px solid rgba(255,255,255,0.2); background: var(--yt-enhance-menu-accent, --primary-custom) !important; color: var(--text-custom); width: fit-content; appearance: none; cursor: pointer; font-size: 11px; } .quality-selector-mdcm { background: rgba(255,255,255,0.05); padding: 10px; border-radius: 6px; } .select-wrapper-mdcm { position: relative; display: inline-block; } .select-wrapper-mdcm select { -webkit-appearance: auto; -moz-appearance: auto; } .actions-mdcm { position: sticky; top: 0; padding: 12px 16px; backdrop-filter: blur(15px); background-color: var(--yt-enhance-menu-bg, #252525); display: flex; gap: 6px; width: 390px; border-radius: 0 0 16px 16px; justify-content: space-between; align-items: center; } .action-buttons-mdcm { display: flex; gap: 6px; } .action-btn-mdcm { flex: 1; padding: 8px; border: none; border-radius: 6px; background: var(--primary-custom); color: var(--text-custom); cursor: pointer; font-size: 12px; font-weight: 500; transition: all 0.3s; display: flex; align-items: center; justify-content: center; gap: 4px; box-shadow: 0 4px 12px rgba(255,0,0,0.2); } .action-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(255,0,0,0.3); } textarea.textarea-mdcm { width: 100%; height: 50px; margin-top: 10px; margin-bottom: 12px; padding: 8px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); border-radius: 6px; color: var(--text-custom); font-size: 11px; resize: none; transition: all 0.3s; } textarea.textarea-mdcm:focus { outline: none; border-color: var(--primary-custom); background: rgba(255,255,255,0.08); } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .container-mdcm { animation: fadeIn 0.3s ease-out; } .developer-mdcm { font-size: 10px; color: var(--text-custom-secondary); } .developer-mdcm a { color: var(--primary-custom); text-decoration: none; } /* Styles for the import/export area */ #importExportArea { display: none; padding: 16px; margin: 0px; background-color: var(--yt-enhance-menu-bg, #252525); border-radius: 16px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); } #importExportArea.active { display: block; margin-top: 10px; } /* Style the textarea */ #importExportArea textarea { width: 370px; height: 20px; margin-bottom: 10px; padding: 8px; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 6px; background-color: rgba(255, 255, 255, 0.05); color: var(--text-custom); font-size: 12px; resize: vertical; } /* Style the buttons */ #importExportArea .action-buttons-mdcm { display: flex; justify-content: space-between; gap: 10px; } #importExportArea .action-btn-mdcm { flex: 1; padding: 10px 16px; border: none; border-radius: 6px; background-color: var(--primary-custom); color: var(--text-custom); font-size: 14px; font-weight: 500; cursor: pointer; transition: background-color 0.3s ease; } #importExportArea .action-btn-mdcm:hover { background-color: var(--accent-custom); } #yt-stats { position: fixed; top: 60px; right: 20px; background: #1a1a1a; color: white; padding: 15px; border-radius: 10px; width: 320px; box-shadow: 0 4px 12px rgba(0,0,0,0.4); font-family: Arial, sans-serif; display: none; } #yt-stats-toggle { font-size: 12px; color: #fff; padding: 12px 20px; border-radius: 5px; cursor: pointer; } .stat-row { margin: 15px 0; } .progress { height: 6px; overflow: hidden; background: #333; border-radius: 3px; margin: 8px 0; } .progress-bar { height: 100%; transition: width 0.3s; } .total-bar { background: #44aaff !important; } .video-bar { background: #00ff88 !important; } .shorts-bar { background: #ff4444 !important; } #cinematics { position: absolute !important; width: 90vw !important; height: 100vh ; } #cinematics div { position: fixed; inset: 0px; pointer-events: none; transform: scale(1.5, 2); } #cinematics > div > div > canvas:nth-child(1), #cinematics > div > div > canvas:nth-child(2) { position: absolute !important; width: 90vw !important; height: 100vh ; } // .html5-video-player.unstarted-mode { // background-image: url('https://avatars.githubusercontent.com/u/54366580?v=4'); // background-repeat: no-repeat; // background-position: 50% 50%; // display: flex; // justify-content: center; // align-items: center; // } #yt-enhancement-panel { position: fixed; top: 60px; right: 20px; z-index: 9999; } .color-picker { width: 100%; margin: 0; padding: 0; border: none; background: none; } .slider { width: 100%; } #toggle-panel { z-index: 10000; color: white; padding: 5px; border: none; cursor: pointer; display: flex; justify-content: center; transition: all 0.5s ease; width: 43px; border-radius: 100px; } #icon-menu-settings { display: flex; align-items: center; justify-content: center; width: 24px; height: 24px; padding: 7px; font-size: 20px; color: var(--yt-spec-icon-inactive); cursor: pointer; user-select: none; filter: drop-shadow(2px 4px 6px black); } .theme-option { margin-bottom: 15px; } .theme-option label { display: flex; align-items: center; } .theme-option { position: relative; width: auto; margin-bottom: 10px; padding: 10px; border-radius: 4px; cursor: pointer; } .theme-preview { position: absolute; top: 0; left: 0; right: 0; bottom: 0; border-radius: 10px; border: 1px solid #000; z-index: 1; } .theme-option input[type="radio"] { position: relative; z-index: 2; margin-right: 10px; cursor: pointer; } .theme-name { position: relative; z-index: 2; font-size: 15px; color: #fff; } .theme-option label { display: flex; align-items: center; width: 100%; position: relative; z-index: 2; } .buttons-tranlate, .select-traductor { background: #000; font-size: 10px; border: none; color: #fbf4f4 !important; padding: 3px 0; margin-left: 10px; width: 70px; border-radius: 10px; } .buttons-tranlate:hover { cursor: pointer; background-color: #6b6b6b; } button.botones_div { margin: 0; padding: 0; } button.botones_div:hover { cursor: pointer; color: #6b6b6b !important; } .tab-button:hover { background-color: #ec3203 !important; color: #ffffff !important; cursor: pointer; } .traductor-container { display: inline-block; align-items: center; gap: 8px; margin-top: 4px; } #eyes { opacity: 0; position: absolute; height: 24px; left: 0; width: 24px; } /* width */ ::-webkit-scrollbar { width: 4px; height: 10px; } /* Track */ ::-webkit-scrollbar-track { background: ##d5d5d5; } /* Handle */ ::-webkit-scrollbar-thumb { background: #000; } .color-boxes { display: flex; gap: 8px; } .color-box { width: 20px; height: 20px; border: 1px solid rgb(221 221 221 / 60%); border-radius: 4px; cursor: pointer; } .color-box.selected { border: 2px solid var(--primary-custom); filter: drop-shadow(0px 1px 6px red); } .containerButtons { display: flex; justify-content: center; align-items: center; flex-wrap: wrap; gap: 10px; } .containerButtons > button:hover { cursor: pointer; } /* Download Container Styles */ .download-container { width: 50%; padding: 12px; border-radius: 8px; margin-top: 8px; transition: all 0.3s ease; } .download-container.video { background: linear-gradient(135deg, #ff4444, #cc0000); color: white; } .download-container.audio { background: linear-gradient(135deg, #00cc44, #009933); color: white; } .download-info { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; } .download-text { font-weight: 600; font-size: 14px; } .download-quality { font-size: 12px; opacity: 0.9; } .progress-container { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; } .progress-bar { flex: 1; height: 6px; background: rgba(255, 255, 255, 0.3); border-radius: 3px; overflow: hidden; } .progress-fill { height: 100%; background: rgba(255, 255, 255, 0.8); border-radius: 3px; width: 0%; transition: width 0.3s ease; } .progress-text { font-size: 12px; font-weight: 500; min-width: 30px; } .download-footer { font-size: 10px; opacity: 0.7; text-align: center; } .download-footer a { text-decoration: none; color: #fff; } .download-container.completed { color: #fff; background: linear-gradient(135deg, #00cc44, #009933) !important; } .download-container.completed .download-text { font-weight: 700; } .progress-retry-btn { position: absolute; top: 95px; right: 50%; width: 24px; height: 24px; border: none; border-radius: 50%; background: rgba(255, 255, 255, 0.2); color: white; cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 12px; transition: all 0.3s ease; } .progress-retry-btn:hover { background: rgba(255, 255, 255, 0.3); transform: scale(1.1); } .download-container { position: relative; } .download-actions { display: flex; gap: 8px; margin-bottom: 8px; } .download-btn { flex: 1; padding: 8px 16px; border: none; border-radius: 4px; font-weight: 600; font-size: 12px; cursor: pointer; transition: all 0.3s ease; color: white; } .download-btn.video-btn { background: linear-gradient(135deg, #ff6666, #ff4444); } .download-btn.audio-btn { background: linear-gradient(135deg, #00dd55, #00cc44); } .download-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 8px rgba(0,0,0,0.2); } .download-btn:disabled { opacity: 0.6; cursor: not-allowed; transform: none; } .retry-btn { padding: 8px 16px; border: none; border-radius: 4px; font-weight: 600; font-size: 12px; cursor: pointer; transition: all 0.3s ease; background: linear-gradient(135deg, #ffaa00, #ff8800); color: white; } .retry-btn:hover { transform: translateY(-1px); box-shadow: 0 4px 8px rgba(0,0,0,0.2); } body { padding: 0; margin: 0; overflow-y: scroll; overflow-x: hidden; } .style-scope.ytd-comments { overflow-y: auto; overflow-x: hidden; height: auto; } ytd-comment-view-model[is-reply] #author-thumbnail.ytd-comment-view-model yt-img-shadow.ytd-comment-view-model, ytd-comment-view-model[is-creator-reply] #author-thumbnail.ytd-comment-view-model yt-img-shadow.ytd-comment-view-model { width: 40px; height: 40px; border-radius: 50%; } img.yt-img-shadow { border-radius: 50% !important; } #author-thumbnail.ytd-comment-view-model yt-img-shadow.ytd-comment-view-model { width: 40px; height: 40px; border-radius: 50%; overflow: visible; } ytd-item-section-renderer.ytd-watch-next-secondary-results-renderer { --ytd-item-section-item-margin: 8px; overflow-y: auto; overflow-x: hidden; height: auto; } .right-section.ytcp-header { display: flex; flex: 1; align-items: center; gap: 45px; justify-content: end; } #meta.ytd-playlist-panel-video-renderer { min-width: 0; padding: 0 8px; display: flexbox; display: flex; flex-direction: column-reverse; flex: 1; flex-basis: 0.000000001px; } .containerall { display: flex; align-items: center; justify-content: center; flex-direction: column; padding-bottom: 30px; max-width: 800px; margin: auto; } } .container .botoncalidades { margin: 3px 2px; width: 24.6%; } .botoncalidades:first-child { background-color: #0af; } .botoncalidades:last-child { background-color: red; width: 100px; } .selectcalidades, .botoncalidades, .selectcalidadesaudio { width: 50%; height: 27.8px; background-color: #fff; color: #000; font-size: 25px; text-align: center; border: 1px solid black; border-radius: 10px; border: none; font-size: 20px; margin: 2px 2px; } .botoncalidades { width: 70px; height: 30px; background-color: rgb(4, 156, 22); border: 0px solid #000; color: #fff; font-size: 20px; border-radius: 10px; margin: 2px 2px; } .botoncalidades:hover, .bntcontainer:hover { cursor: pointer; } .ocultarframe, .ocultarframeaudio { display: none; } .checked_updates { cursor: pointer; } #export-config, #import-config { width: 100%; display: flex; align-items: center; justify-content: center; gap: 10px; background-color: var(--yt-enhance-menu-accent, --primary-custom) !important;; color: #ffffff; border: none; padding: 5px; } #export-config:hover, #import-config:hover { background-color: #ff0000; color: #ffffff; cursor: pointer; } .yt-image-avatar-download { position: absolute; bottom: -10px; right: -14px; border: none; z-index: 1000; background: transparent; filter: drop-shadow(1px 0 6px red); color: var(--ytcp-text-primary); cursor: pointer; } .custom-classic-btn { display: flex; align-items: center; justify-content: center; background-color: rgba(255,255,255,0.1); border-radius: 50%; border: none; width: 48px; height: 48px; color: var(--yt-spec-icon-inactive); font-size: 24px; margin: 0px 8px; cursor: pointer; } .custom-classic-btn:hover { background-color: rgba(255,255,255,0.2); } .background-image-container { display: flex; flex-direction: column; align-items: center; gap: 8px; margin: 10px 0; } .background-image-preview { width: 160px; height: 90px; border-radius: 10px; background-size: cover; background-position: center; border: 2px solid #444; position: relative; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: box-shadow 0.2s; box-shadow: 0 2px 8px rgba(0,0,0,0.08); overflow: hidden; } .background-image-preview:hover .background-image-overlay { opacity: 1; } .background-image-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #fff; background: rgba(0,0,0,0.35); font-size: 18px; opacity: 0; transition: opacity 0.2s; pointer-events: none; } .background-image-preview:hover .background-image-overlay, .background-image-preview:focus .background-image-overlay { opacity: 1; } .background-image-overlay i { font-size: 28px; margin-bottom: 4px; } .background-image-text { font-size: 13px; font-weight: 500; text-shadow: 0 1px 4px #000; } .remove-background-image { position: absolute; top: 6px; right: 6px; background: #e74c3c; color: #fff; border: none; border-radius: 50%; width: 26px; height: 26px; font-size: 18px; cursor: pointer; z-index: 2; display: none; align-items: center; justify-content: center; padding: 0; line-height: 1; box-shadow: 0 2px 8px rgba(0,0,0,0.15); transition: background 0.2s; } .remove-background-image:hover { background: #c0392b; } .background-image-preview.has-image .remove-background-image { display: flex; } ytd-feed-filter-chip-bar-renderer[not-sticky] #chips-wrapper.ytd-feed-filter-chip-bar-renderer { padding: 10px; } `); // botons bottom video player const thumbnailVideo = ` `; const filterEyes = `