Greasy Fork is available in English.
Делает аватары квадратными везде, включая Главную страницу и Рекомендации, а также восстанавливает иконки YouTube
// ==UserScript== // @name YouTube - Фикс Изображений + Квадратные аватарки // @namespace http://tampermonkey.net/ // @version 1.2 // @description Делает аватары квадратными везде, включая Главную страницу и Рекомендации, а также восстанавливает иконки YouTube // @match *://*.youtube.com/* // @grant none // @author https://t.me/aisingers // @source https://t.me/aisingers // @license MIT // ==/UserScript== (function() { 'use strict'; const AVATAR_SELECTORS = [ 'yt-img-shadow#avatar img', // Аватары в разделах "Подписки" '#guide-content yt-img-shadow img', // Аватары в боковом меню '#comments yt-img-shadow img', // Аватары в комментариях 'ytd-video-owner-renderer yt-img-shadow img', // Аватар автора видео 'ytd-channel-renderer yt-img-shadow img', // Аватары в результатах поиска каналов 'ytd-comment-renderer #img', // Аватары в комментариях (дополнительный селектор) 'ytd-comment-thread-renderer #author-thumbnail img', // Дополнительный селектор для комментариев 'ytd-rich-item-renderer #avatar-link yt-img-shadow img', // Аватары на главной странице 'ytd-rich-grid-media #avatar img', // Аватары на главной странице (дополнительный селектор) 'ytd-video-renderer #img', // Аватары в рекомендациях и других списках видео 'img[src^="https://yt3.ggpht.com/"]' // Общий селектор для всех аватаров YouTube ]; function redirectImageURL(url) { return url.replace(/^https:\/\/yt3\.ggpht\.com\//, 'https://yt4.ggpht.com/'); } function applySquareStyle(element) { element.style.borderRadius = '4px'; element.style.overflow = 'hidden'; let img = element.querySelector('img') || element; img.style.borderRadius = '4px'; img.style.width = '100%'; img.style.height = '100%'; img.style.objectFit = 'cover'; } function processAvatars() { AVATAR_SELECTORS.forEach(selector => { document.querySelectorAll(selector).forEach(element => { if (element.src && element.src.includes('yt3.ggpht.com')) { element.src = redirectImageURL(element.src); } let target = element.closest('yt-img-shadow') || element; applySquareStyle(target); // Применяем стили к родительскому элементу для дополнительной гарантии if (target.parentElement) { target.parentElement.style.borderRadius = '4px'; } }); }); } function observeDOMChanges() { const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.type === 'childList') { processAvatars(); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } // Инициализация processAvatars(); observeDOMChanges(); // Обработка динамически загружаемого контента window.addEventListener('yt-navigate-finish', processAvatars); // Дополнительная обработка для гарантии применения стилей setInterval(processAvatars, 1000); })();