Disable all YouTube EXPERIMENT_FLAGS

To Disable all YouTube EXPERIMENT_FLAGS

Versión del día 17/07/2023. Echa un vistazo a la versión más reciente.

// ==UserScript==
// @name        Disable all YouTube EXPERIMENT_FLAGS
// @namespace   UserScripts
// @match       https://www.youtube.com/*
// @version     0.1.3
// @license     MIT
// @author      CY Fung
// @description To Disable all YouTube EXPERIMENT_FLAGS
// @grant       none
// @unwrap
// @run-at      document-start
// @allFrames   true
// @inject-into page
// ==/UserScript==

((__CONTEXT__) => {

  const DISABLE_CINEMATICS = FALSE;
  // cinematic feature is no longer an experimential feature.
  // It has been officially implemented.
  // To disable cinematics, the user shall use other userscripts or just turn off the option in the video options.


  let fStop = false;
  let isMainWindow = false;
  let mz = new Set();
  try {
    isMainWindow = window.document === window.top.document
  } catch (e) { }

  const { Promise, requestAnimationFrame } = __CONTEXT__;

  function f() {
    if (fStop) return;
    let EXPERIMENT_FLAGS = null;
    try {
      EXPERIMENT_FLAGS = yt.config_.EXPERIMENT_FLAGS
    } catch (e) { }

    if (EXPERIMENT_FLAGS) {

      if (isMainWindow) {
        for (const [key, value] of Object.entries(EXPERIMENT_FLAGS)) {

          if (value === true) {
            // if(key.indexOf('modern')>=0 || key.indexOf('enable')>=0 || key.indexOf('theme')>=0 || key.indexOf('skip')>=0  || key.indexOf('ui')>=0 || key.indexOf('observer')>=0 || key.indexOf('polymer')>=0 )continue;

            if (mz.has(key)) continue;
            mz.add(key);
            const kl = key.length;
            const kl5 = kl % 5;
            const kl3 = kl % 3;
            const kl2 = kl % 2;
            const kl7 = kl % 7;
            if (!DISABLE_CINEMATICS) {

              let cineKey = key === 'enable_cinematic_blur_desktop_loading' ? 1
                : key === 'kevlar_watch_cinematics' ? 2
                  : key === 'web_cinematic_masthead' ? 3
                    : key === 'web_watch_cinematics_preferred_reduced_motion_default_disabled' ? 4 : 0;
              if (cineKey > 0) {
                return;
              }
            }

            if (key.indexOf('kevlar_') >= 0) {
              // if(key==='kevlar_prefetch_data_augments_network_data') continue;

              if (kl5 === 0 && kl3 === 2 && kl2 === 0) { // home page / watch page icons

                if (key === 'kevlar_three_dot_ink') continue;
                if (key === 'kevlar_use_wil_icons') continue;
                if (key === 'kevlar_home_skeleton') continue;
              }

              if (kl5 === 0 && kl3 === 1 && kl2 === 1) {

                if (key === 'kevlar_fluid_touch_scroll') continue;
                if (key === 'kevlar_watch_color_update') continue;
                if (key === 'kevlar_use_vimio_behavior') continue; // home page - channel icon

              }

              if (kl3 === 2 && kl5 === 4 && kl2 < 2) {  // collapsed meta
                // no teaser, use latest collapsed meta design
                if (key === 'kevlar_structured_description_content_inline') continue;
                if (key === 'kevlar_watch_metadata_refresh') continue;

              }


              if (kl5 === 3 && kl3 === 1 && kl2 === 0) {

                if (key === 'kevlar_watch_js_panel_height') continue; // affect Tabview Youtube


              }


            } else {

              if (kl5 === 1 && kl3 === 0 && kl2 === 1 && kl7 === 0) {
                if (key === 'web_darker_dark_theme') return; // it also affect cinemtaics
              }

              if (kl3 === 0 && kl5 === 2) {  // modern menu

                if (key === 'web_button_rework_with_live') continue;
                if (key === 'web_fix_fine_scrubbing_drag') continue;
              }


              if (kl3 === 1 && kl5 === 4 && kl2 === 1) {  // full screen -buggy
                if (key === 'external_fullscreen') continue;
              }

              if (kl3 === 0 && kl5 === 3 && kl2 === 0) { // minimize menu
                if (key === 'web_modern_buttons') continue;
                if (key === 'web_modern_dialogs') continue;

              }

              if (kl3 === 1 && kl5 === 0 && kl7 === 5 && kl2 === 0) { // Tabview Youtube - multiline transcript
                if (key === 'enable_mixed_direction_formatted_strings') continue;
              }

            }






            // console.log(key)
            EXPERIMENT_FLAGS[key] = false;
          }

        }
      } else {


        for (const [key, value] of Object.entries(EXPERIMENT_FLAGS)) {

          if (value === true) {
            // if(key.indexOf('modern')>=0 || key.indexOf('enable')>=0 || key.indexOf('theme')>=0 || key.indexOf('skip')>=0  || key.indexOf('ui')>=0 || key.indexOf('observer')>=0 || key.indexOf('polymer')>=0 )continue;

            if (mz.has(key)) continue;
            mz.add(key);




            // console.log(key)
            EXPERIMENT_FLAGS[key] = false;
          }

        }


      }

      EXPERIMENT_FLAGS.desktop_delay_player_resizing = false;
      EXPERIMENT_FLAGS.web_animated_like = false;
      EXPERIMENT_FLAGS.web_animated_like_lazy_load = false;

      // EXPERIMENT_FLAGS.kevlar_prefetch_data_augments_network_data = true; // TBC

      let isYtLoaded = false;
      try {
        isYtLoaded = typeof ytcfg.set === 'function';
      } catch (e) { }
      if (isYtLoaded) {
        Promise.resolve().then(fhandler);
      }

    }

  }
  let cid = setInterval(f, 1);
  (async () => {
    while (true) {
      f();
      if (fStop) break;
      await (new Promise(requestAnimationFrame));
    }
  })();
  f();
  function fhandler() {
    Promise.resolve().then(() => {
      fStop = true;
      cid && clearInterval(cid); cid = 0;
    });
    document.removeEventListener('yt-page-data-fetched', fhandler, false);
    document.removeEventListener('yt-navigate-finish', fhandler, false);
    document.removeEventListener('spfdone', fhandler, false);
  }
  document.addEventListener('yt-page-data-fetched', fhandler, false);
  document.addEventListener('yt-navigate-finish', fhandler, false);
  document.addEventListener('spfdone', fhandler, false);

})({ Promise, requestAnimationFrame });