// ==UserScript== // @name YouTubeAdSolutions // @name:ar YouTubeAdSolutions // @name:be YouTubeAdSolutions // @name:bg YouTubeAdSolutions // @name:ckb YouTubeAdSolutions // @name:cs YouTubeAdSolutions // @name:da YouTubeAdSolutions // @name:de YouTubeAdSolutions // @name:el YouTubeAdSolutions // @name:en YouTubeAdSolutions // @name:eo YouTubeAdSolutions // @name:es YouTubeAdSolutions // @name:es-419 YouTubeAdSolutions // @name:fi YouTubeAdSolutions // @name:fr YouTubeAdSolutions // @name:fr-CA YouTubeAdSolutions // @name:he YouTubeAdSolutions // @name:hr YouTubeAdSolutions // @name:hu YouTubeAdSolutions // @name:id YouTubeAdSolutions // @name:it YouTubeAdSolutions // @name:ja YouTubeAdSolutions // @name:ka YouTubeAdSolutions // @name:ko YouTubeAdSolutions // @name:mr YouTubeAdSolutions // @name:nb YouTubeAdSolutions // @name:nl YouTubeAdSolutions // @name:pl YouTubeAdSolutions // @name:pt-BR YouTubeAdSolutions // @name:ro YouTubeAdSolutions // @name:ru YouTubeAdSolutions // @name:sk YouTubeAdSolutions // @name:sr YouTubeAdSolutions // @name:sv YouTubeAdSolutions // @name:th YouTubeAdSolutions // @name:tr YouTubeAdSolutions // @name:uk YouTubeAdSolutions // @name:ug YouTubeAdSolutions // @name:vi YouTubeAdSolutions // @name:zh-CN YouTubeAdSolutions // @name:zh-TW YouTubeAdSolutions // @description Premium-Logo, Downloader, Audio-Features, Skip-Highlight, Picture-in-Picture, Miniplayer, Speed-Control & Shorts Volume Slider. // @description:ar شعار بريميوم، أداة تنزيل، ميزات الصوت، تخطي التمييز، صورة داخل صورة، مشغل مصغر، التحكم بالسرعة ومنزلق صوت Shorts. // @description:be Прэміум-лагатып, загрузнік, аўдыя-функцыі, прапуск падсветкі, малюнак у малюнку, міні-плэер, кантроль хуткасці і рэгулятар гучнасці Shorts. // @description:bg Premium лого, изтегляне, аудио функции, пропускане на акценти, картина в картината, мини плейър, контрол на скоростта и плъзгач за силата на Shorts. // @description:ckb لۆگۆی پرێمیوم، داگرتن، تایبەتمەندیی دەنگ، تێپەڕاندنی دیاریکردن، وێنە لە ناو وێنەدا، مینی پلەیەر، کۆنترۆڵی خێرایی و سلایدەری دەنگی Shorts. // @description:cs Prémiové logo, stahování, zvukové funkce, přeskočení zvýraznění, obraz v obraze, minipřehrávač, ovládání rychlosti a posuvník hlasitosti Shorts. // @description:da Premium-logo, downloader, lydfunktioner, spring markeringer over, billede-i-billede, miniafspiller, hastighedskontrol og lydstyrkeskyder til Shorts. // @description:de Premium-Logo, Downloader, Audio-Funktionen, Skip-Highlight, Picture-in-Picture, Miniplayer, Geschwindigkeitskontrolle & Lautstärkeregler für Shorts. // @description:el Λογότυπο Premium, λήψη, λειτουργίες ήχου, παράλειψη επισήμανσης, εικόνα σε εικόνα, mini player, έλεγχος ταχύτητας και ρυθμιστικό έντασης Shorts. // @description:en Premium logo, downloader, audio features, skip highlight, picture-in-picture, miniplayer, speed control & Shorts volume slider. // @description:eo Premium-emblemo, elŝutilo, sonaj funkcioj, preterpasi emfazon, bildo-en-bildo, mini-ludilo, rapideca kontrolo kaj glitilo de Shorts-laŭteco. // @description:es Logotipo Premium, descargador, funciones de audio, omitir resaltado, imagen en imagen, minirreproductor, control de velocidad y control de volumen de Shorts. // @description:es-419 Logotipo Premium, descargador, funciones de audio, omitir resaltados, imagen en imagen, minirreproductor, control de velocidad y control de volumen de Shorts. // @description:fi Premium-logo, latausohjelma, ääniominaisuudet, korostusten ohitus, kuva kuvassa, minisoitin, nopeudensäätö ja Shorts-äänenvoimakkuussäädin. // @description:fr Logo Premium, téléchargeur, fonctions audio, saut de surbrillance, image dans l’image, mini-lecteur, contrôle de vitesse et curseur de volume Shorts. // @description:fr-CA Logo Premium, téléchargeur, fonctions audio, saut de surbrillance, image dans l’image, mini-lecteur, contrôle de vitesse et curseur de volume Shorts. // @description:he לוגו פרימיום, הורדה, תכונות שמע, דילוג על הדגשות, תמונה בתוך תמונה, נגן מוקטן, שליטת מהירות ומחוון עוצמת קול ל-Shorts. // @description:hr Premium logo, preuzimanje, audio funkcije, preskakanje isticanja, slika u slici, mini player, kontrola brzine i klizač glasnoće za Shorts. // @description:hu Prémium logó, letöltő, hangfunkciók, kiemelések kihagyása, kép a képben, mini lejátszó, sebességszabályzás és Shorts hangerőcsúszka. // @description:id Logo Premium, pengunduh, fitur audio, lewati sorotan, gambar dalam gambar, pemutar mini, kontrol kecepatan dan penggeser volume Shorts. // @description:it Logo Premium, downloader, funzioni audio, salta evidenziazioni, picture-in-picture, mini player, controllo velocità e cursore volume Shorts. // @description:ja プレミアムロゴ、ダウンローダー、音声機能、ハイライトのスキップ、ピクチャーインピクチャー、ミニプレーヤー、速度調整とShorts音量スライダー。 // @description:ka პრემიუმ ლოგო, ჩამოტვირთვა, აუდიო ფუნქციები, გამოკვეთების გამოტოვება, სურათი სურათში, მინი დამკვრელი, სიჩქარის კონტროლი და Shorts ხმის რეგულატორი. // @description:ko 프리미엄 로고, 다운로드, 오디오 기능, 하이라이트 건너뛰기, 화면 속 화면, 미니 플레이어, 속도 조절 및 Shorts 볼륨 슬라이더. // @description:mr प्रीमियम लोगो, डाउनलोडर, ऑडिओ वैशिष्ट्ये, हायलाइट वगळा, पिक्चर-इन-पिक्चर, मिनी प्लेअर, गती नियंत्रण आणि Shorts व्हॉल्यूम स्लायडर. // @description:nb Premium-logo, nedlasting, lydfunksjoner, hopp over høydepunkter, bilde-i-bilde, minispiller, hastighetskontroll og volumskyveknapp for Shorts. // @description:nl Premium-logo, downloader, audiofuncties, markeringen overslaan, picture-in-picture, minispeler, snelheidsregeling en volumeschuif voor Shorts. // @description:pl Logo Premium, pobieranie, funkcje audio, pomijanie wyróżnień, obraz w obrazie, mini odtwarzacz, kontrola prędkości i suwak głośności Shorts. // @description:pt-BR Logotipo Premium, downloader, recursos de áudio, pular destaques, picture-in-picture, mini player, controle de velocidade e controle de volume do Shorts. // @description:ro Logo Premium, descărcare, funcții audio, sărire evidențieri, imagine în imagine, mini player, control viteză și glisor volum Shorts. // @description:ru Премиум-логотип, загрузчик, аудиофункции, пропуск выделений, картинка в картинке, мини-плеер, контроль скорости и регулятор громкости Shorts. // @description:sk Prémiové logo, sťahovanie, zvukové funkcie, preskočenie zvýraznení, obraz v obraze, mini prehrávač, ovládanie rýchlosti a posuvník hlasitosti Shorts. // @description:sr Premium logo, preuzimanje, audio funkcije, preskakanje isticanja, slika u slici, mini plejer, kontrola brzine i klizač jačine zvuka za Shorts. // @description:sv Premium-logotyp, nedladdning, ljudfunktioner, hoppa över markeringar, bild-i-bild, minispelare, hastighetskontroll och volymreglage för Shorts. // @description:th โลโก้พรีเมียม, ดาวน์โหลด, ฟีเจอร์เสียง, ข้ามไฮไลต์, ภาพซ้อนภาพ, มินิเพลเยอร์, ควบคุมความเร็ว และตัวปรับเสียง Shorts // @description:tr Premium logo, indirici, ses özellikleri, vurguları atla, resim içinde resim, mini oynatıcı, hız kontrolü ve Shorts ses kaydırıcısı. // @description:uk Преміум-логотип, завантажувач, аудіофункції, пропуск виділень, зображення в зображенні, мініплеєр, контроль швидкості та регулятор гучності Shorts. // @description:ug Premium لوگو، چۈشۈرگۈچ، ئاۋاز ئىقتىدارلىرى، يورۇتۇشنى ئۆتكۈزۈش، رەسىم ئىچىدە رەسىم، كىچىك قويغۇچ، سۈرئەت كونترول ۋە Shorts ئاۋاز سىيرىغۇچى. // @description:vi Logo Premium, trình tải xuống, tính năng âm thanh, bỏ qua nổi bật, hình trong hình, trình phát mini, điều khiển tốc độ và thanh âm lượng Shorts. // @description:zh-CN 高级徽标、下载器、音频功能、跳过高亮、画中画、迷你播放器、速度控制和 Shorts 音量滑块。 // @description:zh-TW 高級標誌、下載器、音訊功能、跳過重點、子母畫面、迷你播放器、速度控制與 Shorts 音量滑桿。 // @namespace http://tampermonkey.net/ // @version 2.0 // @author Pascal // @match https://www.youtube.com/* // @grant none // @icon https://www.youtube.com/s/desktop/ee47b5e0/img/logos/favicon_144x144.png // @run-at document-start // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; let audioCtx, source, gainNode, bassFilter; let isAudioInited = false; let isAdActive = false; const tripleControlClass = 'custom-audio-control'; // --- 0. ANTI-BLOCK-ENFORCEMENT --- function removeEnforcementMessage() { const enforcement = document.querySelector('ytd-enforcement-message-view-model'); if (enforcement) { enforcement.remove(); const video = document.querySelector('video'); if (video && video.paused) video.play(); console.log("YouTube Sperr-Dialog entfernt."); } const overlay = document.querySelector('tp-yt-iron-overlay-backdrop'); if (overlay) { overlay.remove(); } } // --- 1. TRUSTED TYPES BYPASS --- if (window.trustedTypes && trustedTypes.createPolicy) { if (!trustedTypes.defaultPolicy) { try { const passThroughFn = (x) => x; trustedTypes.createPolicy('default', { createHTML: passThroughFn, createScriptURL: passThroughFn, createScript: passThroughFn, }); } catch (e) {} } } // --- 2. CSS ANPASSUNGEN (Global & Shorts) --- const style = document.createElement('style'); style.innerHTML = ` ytd-masthead, #masthead-container { z-index: 50000 !important; } #search-form, yt-searchbox { z-index: 60000 !important; position: relative !important; } .ytp-pip-btn svg, #custom-miniplayer-button svg { fill: white !important; } /* SHORTS SLIDER STYLING */ .custom-shorts-slider { position: fixed; right: 60px; bottom: 50%; transform: rotate(-90deg) translateX(50%); transform-origin: right center; width: 600px; /* EXTRA LANG */ height: 8px; accent-color: #ff0000; z-index: 999999; cursor: pointer; opacity: 0; transition: opacity 0.3s, visibility 0.3s; visibility: hidden; filter: drop-shadow(0px 0px 4px rgba(0,0,0,0.6)); } body[is-shorts] .custom-shorts-slider { opacity: 0.5; visibility: visible; } body[is-shorts] .custom-shorts-slider:hover { opacity: 1; } `; document.head.appendChild(style); // --- 3. AUDIO LOGIK --- function initAudio() { const video = document.querySelector('video'); if (!video || isAudioInited) return; try { audioCtx = new (window.AudioContext || window.webkitAudioContext)(); source = audioCtx.createMediaElementSource(video); gainNode = audioCtx.createGain(); bassFilter = audioCtx.createBiquadFilter(); bassFilter.type = "lowshelf"; bassFilter.frequency.value = 150; source.connect(bassFilter); bassFilter.connect(gainNode); gainNode.connect(audioCtx.destination); isAudioInited = true; } catch (e) { console.warn("Audio Fehler:", e); } } function createControlPair(color, title) { const $container = document.createElement('span'); $container.className = tripleControlClass; $container.style.cssText = 'display: inline-flex; align-items: center; height: 100%; vertical-align: middle; margin-right: 8px;'; const $btn = document.createElement('button'); $btn.className = 'ytp-button'; $btn.title = title; $btn.innerHTML = ``; $btn.style.cssText = 'display: inline-flex; align-items: center; justify-content: center; min-width: 36px; height: 100%; cursor: pointer; background: none; border: none;'; const $slider = document.createElement('input'); $slider.type = 'range'; $slider.style.cssText = `display: none; width: 8vw; accent-color: ${color}; margin: 0 5px; cursor: pointer;`; const $label = document.createElement('span'); $label.style.cssText = `display: none; color: ${color}; font-size: 11px; font-weight: bold; min-width: 30px; font-family: Roboto;`; $btn.onclick = (e) => { e.preventDefault(); const show = ($slider.style.display === 'none'); $slider.style.display = $label.style.display = show ? 'inline-block' : 'none'; }; $container.append($btn, $slider, $label); return { $container, $slider, $label }; } // --- 4. PiP LOGIK --- async function togglePiP() { const video = document.querySelector('video'); if (!video) return; try { if (document.pictureInPictureElement) { await document.exitPictureInPicture(); } else { await video.requestPictureInPicture(); } } catch (err) {} } // --- 5. PREMIUM LOGO --- function applyPremiumLogo() { const logoSelectors = ["ytd-logo #logo-icon", "ytd-topbar-logo-renderer #logo", "a#logo svg"]; logoSelectors.forEach(selector => { const container = document.querySelector(selector); if (container) { const svg = container.tagName === 'svg' ? container : container.querySelector("svg"); if (svg && !svg.getAttribute('data-is-premium')) { svg.setAttribute('width', '101'); svg.setAttribute('viewBox', '0 0 101 20'); svg.setAttribute('data-is-premium', 'true'); svg.innerHTML = ''; } } }); } // --- 6. SKIP-BUTTON HIGHLIGHT --- function highlightSkip() { const btn = document.querySelector('.ytp-skip-ad-button, .ytp-ad-skip-button'); if (btn && !btn.getAttribute('data-hl')) { btn.setAttribute('data-hl', 'true'); btn.style.border = "3px solid #ff00ff"; btn.style.boxShadow = "0 0 15px #ff00ff"; btn.style.borderRadius = "4px"; } } // --- 7. DOWNLOADER (Final: 60px Optimization) --- function initializDownload() { const rightControls = document.querySelector('.ytp-right-controls'); if (!rightControls || document.getElementById('dwnldBtnPlayer')) return; const dwnldBtn = document.createElement('button'); dwnldBtn.id = 'dwnldBtnPlayer'; dwnldBtn.className = 'ytp-button'; dwnldBtn.setAttribute('title', 'Download'); // Deine optimierte Breite von 60px dwnldBtn.style.cssText = ` display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; width: 60px; `; // SVG Pfad angepasst für perfekte Zentrierung im 60px Container dwnldBtn.innerHTML = ` `; let menu = document.getElementById('dwnldMenuGlobal'); if (!menu) { menu = document.createElement('div'); menu.id = 'dwnldMenuGlobal'; document.body.appendChild(menu); } menu.style.cssText = ` display: none; position: fixed; background: rgba(28, 28, 28, 0.98); border-radius: 12px; min-width: 200px; box-shadow: 0 8px 32px rgba(0,0,0,0.8); z-index: 2147483647; padding: 8px 0; border: 1px solid rgba(255,255,255,0.15); font-family: 'Roboto', sans-serif; backdrop-filter: blur(12px); `; dwnldBtn.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); const rect = dwnldBtn.getBoundingClientRect(); const currentId = new URLSearchParams(window.location.search).get('v'); const sources = [ { name: '🎞️ MP3 / MP4 (Y2Mate)', url: 'https://evdfrance.fr/convert/?id=' + currentId }, { name: '🎶 MP3 (YTMP3)', url: 'https://ytmp3.as/#' + currentId + '/mp3' }, { name: '🚀 4K Video (Loader)', url: 'https://loader.to/api/card/?url=https://www.youtube.com/watch?v=' + currentId }, { name: '🟢 MP4 (SaveFrom)', url: 'https://ssyoutube.com/watch?v=' + currentId }, { name: '✂️ DVR / Edit (Dirpy)', url: 'https://dirpy.com/studio?url=https://www.youtube.com/watch?v=' + currentId }, { name: '📺 Multi-Format (noTube)', url: 'https://notube.net/convert/de?url=https://www.youtube.com/watch?v=' + currentId }, { name: '🛡️ Cobalt (No Ads)', url: 'https://cobalt.tools/' } ]; menu.innerHTML = ""; sources.forEach(src => { const item = document.createElement('a'); item.href = src.url; item.target = "_blank"; item.innerText = src.name; item.style.cssText = "display: block; padding: 12px 20px; color: white; text-decoration: none; font-size: 14px;"; // Menü beim Klick auf einen Link automatisch schließen item.addEventListener('click', () => { menu.style.display = 'none'; }); item.onmouseover = () => item.style.backgroundColor = "rgba(255,255,255,0.1)"; item.onmouseout = () => item.style.backgroundColor = "transparent"; menu.appendChild(item); }); menu.style.display = 'block'; const menuRect = menu.getBoundingClientRect(); menu.style.left = (rect.left + (rect.width / 2) - (menuRect.width / 2)) + 'px'; menu.style.top = (rect.top - menuRect.height - 15) + 'px'; const close = (event) => { if (!dwnldBtn.contains(event.target) && !menu.contains(event.target)) { menu.style.display = 'none'; window.removeEventListener('mousedown', close); } }; setTimeout(() => window.addEventListener('mousedown', close), 1); }, true); const pipBtn = document.querySelector('.ytp-pip-btn') || document.querySelector('.ytp-miniplayer-button'); if (pipBtn) { rightControls.insertBefore(dwnldBtn, pipBtn); } else { rightControls.prepend(dwnldBtn); } } // --- 8. SETUP INTERFACE (Audio, PiP, Miniplayer) --- function setupInterface() { const rightControls = document.querySelector('.ytp-right-controls'); const timeDisp = document.querySelector('.ytp-time-display'); const videoPlayer = document.getElementById('movie_player'); if (timeDisp && !document.querySelector('.' + tripleControlClass)) { const savedVol = sessionStorage.getItem('custom-player-volume') ?? 0.948; if (videoPlayer && videoPlayer.setVolume) videoPlayer.setVolume((savedVol**2)*100); const vol = createControlPair('#FF0000', 'Volume'); vol.$slider.min = '0'; vol.$slider.max = '1'; vol.$slider.step = '0.01'; vol.$slider.value = savedVol; vol.$label.textContent = Math.round((savedVol**2)*100) + "%"; vol.$slider.oninput = () => { if (videoPlayer && videoPlayer.setVolume) videoPlayer.setVolume((vol.$slider.value**2)*100); vol.$label.textContent = Math.round((vol.$slider.value**2)*100) + "%"; sessionStorage.setItem('custom-player-volume', vol.$slider.value); }; const savedBoost = sessionStorage.getItem('custom-player-boost') ?? 1; const boost = createControlPair('#FFFF00', 'Booster'); boost.$slider.min = '1'; boost.$slider.max = '10'; boost.$slider.step = '0.1'; boost.$slider.value = savedBoost; boost.$label.textContent = savedBoost + "x"; boost.$slider.oninput = () => { initAudio(); if(gainNode) gainNode.gain.value = boost.$slider.value; boost.$label.textContent = boost.$slider.value + "x"; sessionStorage.setItem('custom-player-boost', boost.$slider.value); }; const savedBass = sessionStorage.getItem('custom-player-bass') ?? 0; const bass = createControlPair('#FFA500', 'Bass'); bass.$slider.min = '0'; bass.$slider.max = '30'; bass.$slider.step = '1'; bass.$slider.value = savedBass; bass.$label.textContent = savedBass + "dB"; bass.$slider.oninput = () => { initAudio(); if(bassFilter) bassFilter.gain.value = bass.$slider.value; bass.$label.textContent = bass.$slider.value + "dB"; sessionStorage.setItem('custom-player-bass', bass.$slider.value); }; timeDisp.after(bass.$container); timeDisp.after(boost.$container); timeDisp.after(vol.$container); } if (rightControls && !document.querySelector('.ytp-pip-btn')) { const pipBtn = document.createElement('button'); pipBtn.className = 'ytp-button ytp-pip-btn'; pipBtn.title = 'Picture-in-Picture (p)'; pipBtn.style.cssText = 'display: inline-flex; align-items: center; justify-content: center;'; pipBtn.innerHTML = ``; pipBtn.onclick = (e) => { e.preventDefault(); togglePiP(); }; rightControls.prepend(pipBtn); } if (rightControls && !document.getElementById('custom-miniplayer-button')) { const miniBtn = document.createElement('button'); miniBtn.id = 'custom-miniplayer-button'; miniBtn.className = 'ytp-button'; miniBtn.title = 'Miniplayer (i)'; miniBtn.style.cssText = 'display: inline-flex; align-items: center; justify-content: center;'; miniBtn.innerHTML = ``; miniBtn.onclick = (e) => { e.preventDefault(); document.dispatchEvent(new KeyboardEvent('keydown', { key: 'i', keyCode: 73, bubbles: true })); }; rightControls.appendChild(miniBtn); } } // --- 9. SPEED CONTROLLER LOGIK (Neutral Design - No Icon - Force 10x) --- let manualSpeed = 1.0; function setupSpeedInterface() { const actionsMenu = document.querySelector('#actions-inner #menu ytd-menu-renderer #top-level-buttons-computed'); const video = document.querySelector('video'); // Neutralisierte IDs if (!actionsMenu || !video || document.getElementById('premium-speed-control')) return; const control = document.createElement('div'); control.id = 'premium-speed-control'; control.className = 'premium-speed-logic top-level-buttons style-scope ytd-menu-renderer'; control.innerHTML = `
${video.playbackRate}x
`; const btnDown = control.querySelector('#speed-down-btn'); const btnUp = control.querySelector('#speed-up-btn'); const display = control.querySelector('#premium-speed-display'); const updateSpeed = (delta) => { manualSpeed = Math.round((video.playbackRate + delta) * 100) / 100; manualSpeed = Math.max(0.25, Math.min(10, manualSpeed)); video.playbackRate = manualSpeed; display.textContent = `${manualSpeed}x`; }; btnDown.onclick = (e) => { e.stopPropagation(); updateSpeed(-0.25); }; btnUp.onclick = (e) => { e.stopPropagation(); updateSpeed(0.25); }; video.addEventListener('ratechange', () => { if (!isAdActive) { if (video.playbackRate !== manualSpeed) { video.playbackRate = manualSpeed; } display.textContent = `${manualSpeed}x`; } }); actionsMenu.appendChild(control); } // --- 10. HANDLE ADS (Feinschliff für Direktlinks & Kaltstarts) --- function handleAds() { const video = document.querySelector('video'); const ad = document.querySelector('.ad-showing, .ad-interrupting, .ytp-ad-player-overlay'); const speedDisplay = document.querySelector('#premium-speed-display'); if (video && ad) { isAdActive = true; // Aggressiver Mute: Falls YouTube versucht, den Ton wieder einzuschalten (Direktlinks) if (!video.muted) { video.muted = true; video.volume = 0; // Zusätzliche Sicherheit } // Geschwindigkeit bleibt wie gewünscht bei 2.0x if (video.playbackRate !== 2.0) { video.playbackRate = 2.0; } if (speedDisplay && speedDisplay.textContent !== "2x") { speedDisplay.textContent = "2x"; } } else if (video && isAdActive) { isAdActive = false; video.muted = false; // Lautstärke aus Speicher wiederherstellen const savedVol = sessionStorage.getItem('custom-player-volume') || 0.8; video.volume = savedVol; // Zurück auf die manuell gewählte Geschwindigkeit video.playbackRate = manualSpeed; if (speedDisplay) speedDisplay.textContent = manualSpeed + "x"; console.log("%c[Premium] Werbung beendet - Normalmodus", "color: #00ff00"); } } // --- 11. SHORTS VOLUME SLIDER --- function setupShortsUI() { if (document.querySelector('.custom-shorts-slider')) return; // Geändert auf sessionStorage const savedVol = sessionStorage.getItem('custom-player-volume') || 0.8; const $slider = document.createElement('input'); $slider.className = 'custom-shorts-slider'; $slider.type = 'range'; $slider.min = '0'; $slider.max = '1'; $slider.step = '0.01'; $slider.value = savedVol; const updateAllShorts = (val) => { document.querySelectorAll('video').forEach(v => { if (window.location.href.includes('/shorts/')) { v.volume = val; v.muted = (val == 0); } }); }; $slider.oninput = () => updateAllShorts($slider.value); // Geändert auf sessionStorage $slider.onchange = () => sessionStorage.setItem('custom-player-volume', $slider.value); document.body.appendChild($slider); window.addEventListener('yt-navigate-finish', checkShortsStatus); checkShortsStatus(); } function checkShortsStatus() { if (window.location.href.includes('/shorts/')) { document.body.setAttribute('is-shorts', ''); const v = document.querySelector('video'); if (v) { // Geändert auf sessionStorage v.volume = sessionStorage.getItem('custom-player-volume') || 0.8; } } else { document.body.removeAttribute('is-shorts'); } } // --- SHORTCUTS & DEBUG --- document.addEventListener('keydown', (e) => { if (e.target.tagName === 'INPUT' || e.target.isContentEditable) return; if (e.key.toLowerCase() === 'p') { e.preventDefault(); togglePiP(); } }, { capture: true }); // --- INTERVALLE --- setInterval(handleAds, 200); // Schnellerer Takt (200ms statt 500ms) setInterval(initializDownload, 800); setInterval(removeEnforcementMessage, 1000); setInterval(applyPremiumLogo, 1000); setInterval(setupInterface, 2000); setInterval(setupSpeedInterface, 1000); setInterval(highlightSkip, 1000); setInterval(setupShortsUI, 2000); // Initialer Start setupShortsUI(); })();