// ==UserScript== // @name ❎/NoSABR (Отключить авто-дублирование Youtube) + Сохранять оригинальный язык // @version 2025-08-29 // @description Отключите этот надоедливый голос ИИ на YouTube, сохранив оригинальный язык // @author emlinhax (modified) // @match https://www.youtube.com/* // @grant none // @license MIT // @run-at document-start // ==/UserScript==
(function() { 'use strict';
// Store original language let originalLanguage = null;
// Override ytcfg.set to disable SABR and preserve language window.ytcfg_set = ytcfg.set; ytcfg.set = (x) => { console.log("Disabling SABR Auto-dubbing and preserving original language...");
// Disable SABR for(var c in x.WEB_PLAYER_CONTEXT_CONFIGS) { x.WEB_PLAYER_CONTEXT_CONFIGS[c].serializedExperimentFlags = x.WEB_PLAYER_CONTEXT_CONFIGS[c].serializedExperimentFlags.replace(/html5_sabr(.*?)true/g, 'html5_sabr$1false'); console.log(x.WEB_PLAYER_CONTEXT_CONFIGS[c].serializedExperimentFlags); }
// Store original language if available if (x.HL && !originalLanguage) { originalLanguage = x.HL; console.log("Original language detected:", originalLanguage); }
window.ytcfg_set(x); };
// Function to ensure original language is maintained function maintainOriginalLanguage() { // Check if we have a stored original language if (!originalLanguage) { // Try to get it from URL or page content const urlParams = new URLSearchParams(window.location.search); originalLanguage = urlParams.get('hl') || navigator.language.split('-')[0]; }
// Force language preference if needed if (originalLanguage && originalLanguage !== 'en') { const player = document.querySelector('video'); if (player) { // Monitor for audio track changes const observer = new MutationObserver(() => { const audioTracks = player.audioTracks; if (audioTracks && audioTracks.length > 0) { for (let i = 0; i < audioTracks.length; i++) { // Try to select the track that matches our original language if (audioTracks[i].language === originalLanguage || audioTracks[i].language.startsWith(originalLanguage)) { audioTracks[i].enabled = true; console.log("Set audio track to:", audioTracks[i].language); break; } } } });
// Run when page is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', maintainOriginalLanguage); } else { maintainOriginalLanguage(); }
// Also run when navigating within YouTube (SPF) let lastUrl = location.href; new MutationObserver(() => { const url = location.href; if (url !== lastUrl) { lastUrl = url; setTimeout(maintainOriginalLanguage, 1000); } }).observe(document, { subtree: true, childList: true }); })();
//AI-corrected version.
// ==UserScript==
// @name ❎/NoSABR (Отключить авто-дублирование Youtube) + Сохранять оригинальный язык
// @version 2025-08-29
// @description Отключите этот надоедливый голос ИИ на YouTube, сохранив оригинальный язык
// @author emlinhax (modified)
// @match https://www.youtube.com/*
// @grant none
// @license MIT
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
// Store original language
let originalLanguage = null;
// Override ytcfg.set to disable SABR and preserve language
window.ytcfg_set = ytcfg.set;
ytcfg.set = (x) => {
console.log("Disabling SABR Auto-dubbing and preserving original language...");
// Disable SABR
for(var c in x.WEB_PLAYER_CONTEXT_CONFIGS) {
x.WEB_PLAYER_CONTEXT_CONFIGS[c].serializedExperimentFlags = x.WEB_PLAYER_CONTEXT_CONFIGS[c].serializedExperimentFlags.replace(/html5_sabr(.*?)true/g, 'html5_sabr$1false');
console.log(x.WEB_PLAYER_CONTEXT_CONFIGS[c].serializedExperimentFlags);
}
// Store original language if available
if (x.HL && !originalLanguage) {
originalLanguage = x.HL;
console.log("Original language detected:", originalLanguage);
}
window.ytcfg_set(x);
};
// Function to ensure original language is maintained
function maintainOriginalLanguage() {
// Check if we have a stored original language
if (!originalLanguage) {
// Try to get it from URL or page content
const urlParams = new URLSearchParams(window.location.search);
originalLanguage = urlParams.get('hl') || navigator.language.split('-')[0];
}
// Force language preference if needed
if (originalLanguage && originalLanguage !== 'en') {
const player = document.querySelector('video');
if (player) {
// Monitor for audio track changes
const observer = new MutationObserver(() => {
const audioTracks = player.audioTracks;
if (audioTracks && audioTracks.length > 0) {
for (let i = 0; i < audioTracks.length; i++) {
// Try to select the track that matches our original language
if (audioTracks[i].language === originalLanguage ||
audioTracks[i].language.startsWith(originalLanguage)) {
audioTracks[i].enabled = true;
console.log("Set audio track to:", audioTracks[i].language);
break;
}
}
}
});
observer.observe(player, { attributes: true, childList: true, subtree: true });
}
}
}
// Run when page is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', maintainOriginalLanguage);
} else {
maintainOriginalLanguage();
}
// Also run when navigating within YouTube (SPF)
let lastUrl = location.href;
new MutationObserver(() => {
const url = location.href;
if (url !== lastUrl) {
lastUrl = url;
setTimeout(maintainOriginalLanguage, 1000);
}
}).observe(document, { subtree: true, childList: true });
})();