// ==UserScript==
// @name Advanced YouTube Age Restriction Bypass Pro
// @description Watch age-restricted YouTube videos without login or age verification 😎 with enhanced features!
// @version 4.1.0
// @author Zerody (Enhanced by Cody)
// @namespace https://github.com/zerodytrash/Simple-YouTube-Age-Restriction-Bypass/
// @supportURL https://github.com/zerodytrash/Simple-YouTube-Age-Restriction-Bypass/issues
// @license MIT
// @match https://www.youtube.com/*
// @match https://www.youtube-nocookie.com/*
// @match https://m.youtube.com/*
// @match https://music.youtube.com/*
// @grant none
// @run-at document-start
// @compatible chrome
// @compatible firefox
// @compatible opera
// @compatible edge
// @compatible safari
// ==/UserScript==
(function () {
'use strict';
// Configuration constants
const CONFIG = {
ENABLE_UNLOCK_NOTIFICATION: true,
ENABLE_AUTO_AD_SKIPPER: true,
DEFAULT_VIDEO_QUALITY: '1080p', // Options: '144p', '240p', '360p', '480p', '720p', '1080p', '4K'
ENABLE_ERROR_REPORTING: true,
COUNTRY_SPECIFIC_PROXIES: {
US: 'https://us-proxy.server.com',
EU: 'https://eu-proxy.server.com',
},
RATE_LIMIT_REQUESTS: 10,
LOG_LEVEL: 'INFO', // Levels: INFO, WARN, ERROR
};
const UNLOCKABLE_PLAYABILITY_STATUSES = ['AGE_VERIFICATION_REQUIRED', 'CONTENT_WARNING'];
let rateLimitCount = 0;
const logger = {
info: (msg) => logMessage('INFO', msg),
warn: (msg) => logMessage('WARN', msg),
error: (msg) => logMessage('ERROR', msg),
};
function logMessage(level, msg) {
if (['INFO', 'WARN', 'ERROR'].indexOf(level) >= ['INFO', 'WARN', 'ERROR'].indexOf(CONFIG.LOG_LEVEL)) {
console.log(`%cYouTube Bypass Pro [${level}]`, `color: ${getLogColor(level)};`, msg);
}
}
function getLogColor(level) {
return {
INFO: 'blue',
WARN: 'orange',
ERROR: 'red',
}[level] || 'black';
}
// Dynamic notification system
function showNotification(message) {
if (!CONFIG.ENABLE_UNLOCK_NOTIFICATION) return;
const notification = document.createElement('div');
notification.textContent = message;
Object.assign(notification.style, {
position: 'fixed',
bottom: '10px',
right: '10px',
backgroundColor: '#007BFF',
color: '#FFF',
padding: '10px',
borderRadius: '5px',
zIndex: 9999,
fontSize: '14px',
});
document.body.appendChild(notification);
setTimeout(() => notification.remove(), 5000);
}
// Country-specific proxy selection
function getProxyForCountry(countryCode) {
return CONFIG.COUNTRY_SPECIFIC_PROXIES[countryCode] || Object.values(CONFIG.COUNTRY_SPECIFIC_PROXIES)[0];
}
// Auto-skip ads
function enableAdSkipper() {
if (!CONFIG.ENABLE_AUTO_AD_SKIPPER) return;
const observer = new MutationObserver((mutations) => {
mutations.forEach(() => {
const skipButton = document.querySelector('.ytp-ad-skip-button');
if (skipButton) {
skipButton.click();
logger.info('Skipped an ad.');
observer.disconnect(); // Temporarily stop observing
setTimeout(() => observer.observe(document.body, { childList: true, subtree: true }), 1000); // Reconnect
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
}
// Video quality enforcement
function setDefaultVideoQuality() {
const observer = new MutationObserver(() => {
const settingsButton = document.querySelector('.ytp-settings-button');
if (settingsButton) {
settingsButton.click();
const interval = setInterval(() => {
const qualityMenu = [...document.querySelectorAll('.ytp-menuitem')].find(
(item) => item.textContent.includes(CONFIG.DEFAULT_VIDEO_QUALITY)
);
if (qualityMenu) {
qualityMenu.click();
logger.info(`Set video quality to ${CONFIG.DEFAULT_VIDEO_QUALITY}`);
clearInterval(interval);
}
}, 200);
observer.disconnect();
}
});
observer.observe(document.body, { childList: true, subtree: true });
}
// Error reporting
function reportError(error) {
if (!CONFIG.ENABLE_ERROR_REPORTING) return;
fetch('https://error-reporting.server.com/report', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ error: error.message, timestamp: new Date().toISOString() }),
});
logger.error('Error reported to server.');
}
// Unlock video response
async function unlockResponse(response) {
try {
if (response.playabilityStatus && UNLOCKABLE_PLAYABILITY_STATUSES.includes(response.playabilityStatus.status)) {
showNotification('Attempting to unlock video...');
const proxy = getProxyForCountry('US');
const unlockedResponse = await fetch(`${proxy}/unlock`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ videoId: response.videoDetails.videoId }),
}).then((res) => res.json());
if (unlockedResponse.errorMessage) {
throw new Error(unlockedResponse.errorMessage);
}
Object.assign(response, unlockedResponse);
logger.info('Video unlocked successfully.');
showNotification('Video unlocked successfully!');
}
} catch (error) {
logger.warn(`Proxy failed: ${error.message}. Retrying with fallback...`);
const fallbackProxy = getProxyForCountry('EU');
if (fallbackProxy && fallbackProxy !== proxy) {
unlockResponse({ ...response, proxy: fallbackProxy });
} else {
reportError(error);
logger.error(`Failed to unlock video: ${error.message}`);
showNotification('Failed to unlock video.');
}
}
}
// Hook into XMLHttpRequest.open
const nativeXHROpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, ...args) {
if (url.includes('/youtubei/v1/player')) {
this.addEventListener('readystatechange', function () {
if (this.readyState === 4 && this.status === 200) {
try {
const response = JSON.parse(this.responseText);
unlockResponse(response);
this.responseText = JSON.stringify(response);
} catch (err) {
logger.error('Error processing video response: ' + err.message);
}
}
});
}
nativeXHROpen.call(this, method, url, ...args);
};
// Initialize script features
function init() {
logger.info('Initializing Advanced YouTube Bypass Pro...');
enableAdSkipper();
setDefaultVideoQuality();
logger.info('Features initialized successfully!');
}
init();
})();