YouTube - Filtrar videos "Members only" (Ocultar o Marcar)

🇲🇽 Filtra videos "Solo para miembros" en YouTube: puedes ocultarlos o marcarlos visualmente según prefieras.

// ==UserScript==
// @name         YouTube - Filtrar videos "Members only" (Ocultar o Marcar)
// @namespace    https://greasyfork.org/users/TuUsuario
// @version      1.0
// @description  🇲🇽 Filtra videos "Solo para miembros" en YouTube: puedes ocultarlos o marcarlos visualmente según prefieras.
// @author       TuNombre
// @match        https://www.youtube.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    /**
     * 🇲🇽 OPCIÓN DE MODO:
     * Cambia el valor de 'mode' a "hide" (ocultar) o "highlight" (marcar visualmente)
     * Por defecto está en "hide" para ocultar los videos.
     *
     * 🇺🇸 MODE OPTION:
     * Change the value of 'mode' to "hide" or "highlight"
     * Default is "hide" to completely hide the videos.
     */
    const mode = "hide"; // Opciones válidas: "hide" o "highlight"

    function filterMembersOnlyVideos() {
        const videos = document.querySelectorAll('ytd-grid-video-renderer, ytd-rich-item-renderer, ytd-video-renderer');

        videos.forEach(video => {
            const alreadyHandled = video.getAttribute("data-members-handled");

            if (!alreadyHandled && (video.innerText.includes("Members only") || video.innerText.includes("Solo para miembros"))) {
                if (mode === "hide") {
                    video.style.display = "none";
                } else if (mode === "highlight") {
                    video.style.boxSizing = "border-box";
                    video.style.border = "2px solid crimson";
                    video.style.filter = "grayscale(70%) opacity(75%)";
                    video.style.backgroundColor = "#fff0f0";
                }
                video.setAttribute("data-members-handled", "true");
            }
        });
    }

    const observer = new MutationObserver(() => {
        filterMembersOnlyVideos();
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    window.addEventListener('load', filterMembersOnlyVideos);
})();