// ==UserScript==
// @name Bypass Chaturbate Age Verification
// @name:pt Chaturbate Sem Login - Remover Verificação de Idade
// @name:pt-BR Chaturbate Sem Login - Remover Verificação de Idade
// @name:es Chaturbate Sin Registro - Quitar Verificación de Edad
// @name:de Chaturbate Ohne Anmeldung - Altersverifikation Umgehen
// @name:it Chaturbate Senza Registrazione - Rimuovere la Verifica dell'Età
// @name:fr Chaturbate Sans Inscription - Contourner la Vérification d'Âge
// @name:zh Chaturbate 无需登录 - 绕过年龄验证
// @name:zh-CN Chaturbate 无需登录 - 绕过年龄验证
// @name:ar Chaturbate بدون تسجيل - تخطي التحقق من العمر
// @name:bn Chaturbate লগইন ছাড়া - বয়স যাচাই বাইপাস করুন
// @name:ru Chaturbate Без Регистрации - Обход Проверки Возраста
// @name:ja Chaturbate ログイン不要 - 年齢確認をバイパス
// @name:ko Chaturbate 로그인 없이 - 연령 확인 우회
// @name:pl Chaturbate Bez Rejestracji - Ominięcie Weryfikacji Wieku
// @name:zh-TW Chaturbate 無需登入 - 繞過年齡驗證
// @version 1.0.0
// @description Bypass Chaturbate's age verification wall. No VPN needed, no account required. Unblur images, block ads, and browse freely.
// @description:pt Assista Chaturbate sem criar conta e sem verificação de idade. Remove o bloqueio de idade, desbloqueia imagens e vídeos desfocados e bloqueia anúncios gratuitamente.
// @description:pt-BR Assista Chaturbate sem criar conta e sem verificação de idade. Remove o bloqueio de idade, desbloqueia imagens e vídeos desfocados e bloqueia anúncios gratuitamente.
// @description:es Mira Chaturbate sin cuenta y sin verificación de edad. Elimina el bloqueo de edad, desbloquea imágenes y videos difuminados y bloquea anuncios completamente gratis.
// @description:de Chaturbate ohne Konto und ohne Altersverifikation ansehen. Entfernt Alterssperren, entsperrt verschwommene Bilder und Videos und blockiert Werbung kostenlos.
// @description:it Guarda Chaturbate senza account e senza verifica dell'età. Rimuove i blocchi per età, sblocca immagini e video sfumati e blocca gli annunci gratuitamente.
// @description:fr Regardez Chaturbate sans compte et sans vérification d'âge. Supprime les blocages d'âge, débloque les images et vidéos floues et bloque les publicités gratuitement.
// @description:zh 无需账号即可观看 Chaturbate,绕过年龄验证。免费移除年龄限制、解除模糊图片和视频、屏蔽广告。
// @description:zh-CN 无需账号即可观看 Chaturbate,绕过年龄验证。免费移除年龄限制、解除模糊图片和视频、屏蔽广告。
// @description:ar شاهد Chaturbate بدون حساب وبدون التحقق من العمر. يزيل قيود العمر، يكشف الصور والفيديوهات المعتمة، ويحجب الإعلانات مجاناً.
// @description:bn অ্যাকাউন্ট ও বয়স যাচাই ছাড়াই Chaturbate দেখুন। বয়স ব্লক সরান, ঝাপসা ছবি ও ভিডিও আনব্লক করুন এবং বিনামূল্যে বিজ্ঞাপন ব্লক করুন।
// @description:ru Смотрите Chaturbate без аккаунта и без проверки возраста. Убирает возрастные блокировки, разблокирует размытые изображения и видео и блокирует рекламу бесплатно.
// @description:ja アカウントなし・年齢確認なしでChaturbateを視聴。年齢ブロックを解除、ぼかし画像・動画のアンブロック、広告ブロックを無料で。
// @description:ko 계정 없이, 연령 확인 없이 Chaturbate 시청. 연령 차단 해제, 흐린 이미지 및 동영상 해제, 광고 무료 차단.
// @description:pl Oglądaj Chaturbate bez konta i bez weryfikacji wieku. Usuwa blokady wiekowe, odblokowuje rozmyte obrazy i filmy oraz blokuje reklamy za darmo.
// @description:zh-TW 無需帳號即可觀看 Chaturbate,繞過年齡驗證。免費移除年齡限制、解除模糊圖片和影片、屏蔽廣告。
// @author chaturbetter
// @collaborator chaturbetter
// @license CC-BY-ND-4.0; https://creativecommons.org/licenses/by-nd/4.0/legalcode
// @copyright 2026, chaturbetter (https://chaturbetter.com/)
// @namespace https://chaturbetter.com/
// @homepageURL https://github.com/chaturbetter/bypass-chaturbate-age-verification
// @supportURL https://github.com/chaturbetter/bypass-chaturbate-age-verification/issues
// @contributionURL https://donatr.ee/chaturbetter/
// @icon https://chaturbetter.com/logo.svg
// @icon64 https://chaturbetter.com/logo.svg
// @group Adult
// @match *://chaturbate.com/*
// @match *://*.chaturbate.com/*
// @match *://auth.chaturbetter.com/*
// @run-at document-start
// @noframes
// @grant none
// ==/UserScript==
(function () {
'use strict';
const i18n = {
'pt': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Gravações', success: '🔥 Bypass Supremo Ativado! Bem-vindo(a).' },
'en': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Recordings', success: '🔥 Supreme Bypass Activated! Welcome.' },
'es': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Grabaciones', success: '🔥 ¡Bypass Supremo Activado! Bienvenido(a).' },
'de': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Aufnahmen', success: '🔥 Supreme Bypass Aktiviert! Willkommen.' },
'it': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Registrazioni', success: '🔥 Supreme Bypass Attivato! Benvenuto/a.' },
'fr': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Enregistrements', success: '🔥 Supreme Bypass Activé ! Bienvenue.' },
'zh': { btnOpen: 'Chaturbetter.com', vodsBtn: '录像', success: '🔥 Supreme Bypass 已激活!欢迎。' },
'zh-TW': { btnOpen: 'Chaturbetter.com', vodsBtn: '錄像', success: '🔥 Supreme Bypass 已啟動!歡迎。' },
'ja': { btnOpen: 'Chaturbetter.com', vodsBtn: '録画', success: '🔥 Supreme Bypass 有効!ようこそ。' },
'ko': { btnOpen: 'Chaturbetter.com', vodsBtn: '녹화', success: '🔥 Supreme Bypass 활성화! 환영합니다.' },
'pl': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Nagrania', success: '🔥 Supreme Bypass Aktywowany! Witaj.' },
'ar': { btnOpen: 'Chaturbetter.com', vodsBtn: 'تسجيلات', success: '🔥 تم تفعيل Supreme Bypass! أهلاً بك.' },
'bn': { btnOpen: 'Chaturbetter.com', vodsBtn: 'রেকর্ডিং', success: '🔥 Supreme Bypass সক্রিয়! স্বাগতম।' },
'ru': { btnOpen: 'Chaturbetter.com', vodsBtn: 'Записи', success: '🔥 Supreme Bypass Активирован! Добро пожаловать.' }
};
const langCode = (() => {
const l = (navigator.language || 'en').toLowerCase();
if (l === 'zh-tw' || l === 'zh-hk') return 'zh-TW';
return l.split('-')[0];
})();
const t = i18n[langCode] || i18n['en'];
Object.defineProperty(window, 'hide_entrance_terms', {
get: () => true,
set: () => { },
configurable: true
});
const _origJSONParse = JSON.parse;
JSON.parse = function (text, reviver) {
const result = _origJSONParse.apply(this, arguments);
if (result && typeof result === 'object' && 'user_age_gated' in result) {
result.user_age_gated = false;
}
return result;
};
const _origClassListAdd = DOMTokenList.prototype.add;
DOMTokenList.prototype.add = function (...tokens) {
const filtered = tokens.filter(cls => cls !== 'entrance-terms--shown');
if (filtered.length) _origClassListAdd.apply(this, filtered);
};
const style = document.createElement('style');
style.textContent = `
#age_gate_overlay {
position: fixed !important; left: -10000px !important; z-index: -9999 !important; pointer-events: none !important; backdrop-filter: none !important;
}
body, html {
overflow: auto !important;
}
.E1sMEyeDAES6Yh6Ouo3m, .MobileBroadcastMediaThumbnail__Image__Unopened, [class*="blur"], img, video, canvas {
filter: none !important; backdrop-filter: none !important; -webkit-filter: none !important; -webkit-backdrop-filter: none !important;
}
#cb-bypass-floating-btn {
position: fixed; bottom: 18px; right: 18px;
background: #000000;
color: #ffffff !important; padding: 8px 14px 8px 10px; border-radius: 10px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;
font-weight: 600; font-size: 12px; cursor: pointer; z-index: 2147483647;
box-shadow: 0 0 0 1px rgba(255,255,255,0.12), 0 4px 16px rgba(0,0,0,0.5);
border: none;
transition: background 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
text-decoration: none !important; display: flex; align-items: center; gap: 7px;
letter-spacing: -0.01em;
}
#cb-bypass-floating-btn:hover {
background: #1a1a1a;
transform: translateY(-2px);
box-shadow: 0 0 0 1px rgba(255,255,255,0.18), 0 6px 20px rgba(0,0,0,0.6);
}
#cb-bypass-floating-btn svg {
width: 16px; height: 16px; flex-shrink: 0; display: block;
}
#cb-bypass-floating-btn span {
display: block; line-height: 1;
}
.ad, .vote-banner, #ad_unit, .ad-unit, .ad-container, .ad-wrapper,
[id^="ad_"], [id^="google_ads_"], [id^="div-gpt-ad"],
[class*="ad-slot"], [class*="ads-container"], [class*="banner-ad"],
iframe[src*="doubleclick"], iframe[src*="googlesyndication"],
iframe[src*="adnxs"], iframe[src*="adsafeprotected"] {
display: none !important;
}
#cb-room-vods-btn:hover {
background: #333 !important; text-decoration: underline !important;
}
`;
(document.head || document.documentElement).appendChild(style);
const createFloatingButton = () => {
const _h = location.hostname;
if (!_h.includes('chaturbate.com') && _h === 'chaturbetter.com') return;
if (document.getElementById('cb-bypass-floating-btn')) return;
const btn = document.createElement('a');
btn.id = 'cb-bypass-floating-btn';
btn.href = 'https://chaturbetter.com';
btn.target = '_blank';
btn.rel = 'noopener noreferrer';
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('viewBox', '0 0 128 128');
svg.setAttribute('fill', 'white');
svg.setAttribute('width', '22');
svg.setAttribute('height', '22');
svg.setAttribute('aria-hidden', 'true');
const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
path.setAttribute('d', 'm108.81 119.29-1.49-0.014c-1.099-0.011-2.343-0.022-3.616-0.133-21.683-2.021-38.972-21.035-41.124-45.208l3.984-0.355c1.98 22.251 17.751 39.739 37.498 41.58 0.591 0.051 1.196 0.078 1.789 0.094 0.935-3.298 1.534-6.477 1.829-9.673 0.815-8.953-0.606-17.876-4.111-25.804l3.658-1.617c3.779 8.548 5.313 18.155 4.437 27.786-0.363 3.938-1.152 7.836-2.414 11.92zm-89.613 0-0.44-1.423c-1.262-4.084-2.052-7.983-2.414-11.92-2.58-28.317 15.86-53.255 41.105-55.593 1.226-0.124 2.465-0.134 3.627-0.134h1.467l0.44 1.4c1.245 3.957 2.06 7.97 2.424 11.929 2.581 28.302-15.854 53.239-41.094 55.594-1.286 0.111-2.53 0.123-3.628 0.134zm40.396-65.056c-0.593 0.015-1.179 0.043-1.758 0.102-23.069 2.136-39.887 25.125-37.508 51.247 0.293 3.195 0.894 6.373 1.828 9.671a30.332 30.332 0 0 0 1.802-0.095c23.036-2.148 39.85-25.138 37.469-51.246a53.021 53.021 0 0 0-1.833-9.679zm40.856-35.305h4v22.396h-4zm-19.222 10.034h4v29.396h-4zm11.578 19.114h28.738v4h-28.738zm-17.888 16.443h34.973v4h-34.973zm48.09-43.315 2.629 3.015-59.693 52.05-2.628-3.015zm-41.861 59.469c-1.277 0-2.573-0.06-3.851-0.179a41.287 41.287 0 0 1-13.365-3.567l-1.026-0.468-0.131-1.12a57.426 57.426 0 0 1-0.176-11.787c2.424-26.504 22.909-47.265 46.635-47.265a41.356 41.356 0 0 1 17.217 3.744l1.028 0.47 0.128 1.124c0.464 4.088 0.521 7.944 0.177 11.791-2.425 26.501-22.91 47.257-46.636 47.257zm-14.52-6.93a37.284 37.284 0 0 0 14.519 2.93c21.68 0 40.415-19.159 42.653-43.618 0.288-3.214 0.272-6.444-0.05-9.841a37.358 37.358 0 0 0-14.516-2.929c-21.68 0-40.414 19.164-42.652 43.628a53.14 53.14 0 0 0 0.046 9.83zm-4.545-37.208c-3.693-10.321-10.508-18.996-19.188-24.429l2.122-3.391c9.439 5.908 16.837 15.309 20.832 26.473zm-15.218 44.137h-2e-3c-23.726-1e-3 -44.211-20.757-46.636-47.253-0.346-3.851-0.288-7.708 0.175-11.794l0.127-1.124 1.029-0.47a41.364 41.364 0 0 1 17.22-3.744c23.727 0 44.209 20.76 46.632 47.262a57.28 57.28 0 0 1-0.174 11.788l-0.13 1.12-1.026 0.468a41.259 41.259 0 0 1-13.37 3.568 41.536 41.536 0 0 1-3.845 0.179zm-42.607-57.457c-0.321 3.395-0.336 6.626-0.047 9.844 2.238 24.454 20.974 43.612 42.652 43.613h2e-3a37.257 37.257 0 0 0 14.519-2.931c0.318-3.325 0.333-6.626 0.042-9.83-2.236-24.462-20.969-43.625-42.648-43.625a37.353 37.353 0 0 0-14.52 2.929zm61.669 13.32-3.766-1.347c3.992-11.162 11.39-20.563 20.833-26.473l2.121 3.391c-8.684 5.434-15.498 14.11-19.188 24.429z');
svg.appendChild(path);
const label = document.createElement('span');
label.textContent = t.btnOpen;
btn.appendChild(svg);
btn.appendChild(label);
document.body.appendChild(btn);
};
const AFF_EXPIRES = 'expires=Sun, 1 Jan 9999 00:00:00 UTC';
const AFF_MAX_AGE = 'max-age=253402300800';
const AFF_KEY = 'eJxtUEsKwyAQvYrMxk0CfkoXnqDXSI2W0gZSnUIh5O7xDQnZdPd+M85zIaag6FE+hjpFcZqF/m5swbm8wMeUh++boRRwgCFnwHhPzKlAkVEnc/U5HjkBzrhrb3zvjDI2WB8uXp47Y7XEA2Y5adFN0kFp3SndggcU8GefxKYZrpwPXs8xGM420CpB2yvBak2g7E2gsGxpfwJSZMVK6wYyH0gT';
function injectAffCookies() {
document.cookie = `affkey=; expires=Thu, 01 Jan 1970 00:00:00 UTC; max-age=0; path=/`;
document.cookie = `affkey=; expires=Thu, 01 Jan 1970 00:00:00 UTC; max-age=0; path=/; domain=.chaturbate.com`;
document.cookie = `agreeterms=1; ${AFF_EXPIRES}; ${AFF_MAX_AGE}; path=/`;
document.cookie = `agreeterms=1; ${AFF_EXPIRES}; ${AFF_MAX_AGE}; path=/; domain=.chaturbate.com`;
document.cookie = `fromaffiliate=1; ${AFF_EXPIRES}; ${AFF_MAX_AGE}; path=/`;
document.cookie = `fromaffiliate=1; ${AFF_EXPIRES}; ${AFF_MAX_AGE}; path=/; domain=.chaturbate.com`;
document.cookie = `affkey="${AFF_KEY}"; ${AFF_EXPIRES}; ${AFF_MAX_AGE}; path=/`;
document.cookie = `affkey="${AFF_KEY}"; ${AFF_EXPIRES}; ${AFF_MAX_AGE}; path=/; domain=.chaturbate.com`;
}
function hasCorrectAffkey() {
return document.cookie.includes(`affkey="${AFF_KEY}"`) ||
document.cookie.includes(`affkey=${AFF_KEY}`);
}
if (!hasCorrectAffkey()) injectAffCookies();
let _affGuardBypass = false;
(function guardAffkeyCookie() {
const descriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');
if (!descriptor || !descriptor.set) return;
const origSetter = descriptor.set;
Object.defineProperty(document, 'cookie', {
get: descriptor.get,
set(val) {
if (!_affGuardBypass &&
typeof val === 'string' &&
/^affkey\s*=/.test(val) &&
!val.includes(AFF_KEY.slice(0, 20))) {
return;
}
return origSetter.call(this, val);
},
configurable: true
});
})();
function reInjectIfNeeded() {
if (!hasCorrectAffkey()) {
_affGuardBypass = true;
injectAffCookies();
_affGuardBypass = false;
}
}
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'visible') reInjectIfNeeded();
});
function hookRegisterClicks() {
document.addEventListener('click', function (e) {
let el = e.target;
while (el && el.tagName) {
if (el.tagName === 'A' && el.href) {
const href = el.href;
if (href.includes('/accounts/register/') ||
href.includes('join_overlay=1') ||
href.includes('join_overlay=true') ||
href.includes('/in/?') ||
href.includes('/accounts/login/')) {
reInjectIfNeeded();
break;
}
}
if ((el.tagName === 'BUTTON' || el.tagName === 'INPUT') && el.type === 'submit') {
const form = el.closest('form');
if (form && (form.action || '').includes('/accounts/register/')) {
reInjectIfNeeded();
break;
}
}
el = el.parentElement;
}
}, true);
}
const unblurImage = (img) => {
const url = img.src;
if (url && url.includes('thumb.live.mmcdn.com') && !url.includes('/minifwap/')) {
try {
const filename = new URL(url).pathname.split('/').pop();
img.src = `https://thumb.live.mmcdn.com/minifwap/${filename}`;
img.removeAttribute('srcset');
img.removeAttribute('data-src');
} catch (e) { }
}
};
const unblurImages = () => document.querySelectorAll('img').forEach(unblurImage);
function isRoomPage() {
if (!location.hostname.includes('chaturbate.com')) return false;
const path = location.pathname;
if (/^\/(p|api|auth|accounts|affiliates|tour|static|in|directory|tag|messages|followed_channels|search|featured|support|broadcast_now|privacy|terms|contact|about|sitemap)\//.test(path)) return false;
return /^\/[a-z0-9_-]+\/?$/i.test(path);
}
function addVodsButton() {
if (!isRoomPage()) return;
if (document.getElementById('cb-room-vods-btn')) return;
const container =
document.querySelector('[data-testid="room-tab-bar"] [data-paction="BroadcasterFeedback"]') ||
document.querySelector('[data-paction="BroadcasterFeedback"]') ||
document.querySelector('[data-testid="room-tab-bar"]') ||
(() => {
const followBtn = document.querySelector('[data-paction="Follow"], [data-paction="FanClub"], [data-paction="Favourite"]');
return followBtn ? followBtn.parentElement : null;
})();
if (!container) return;
const username = location.pathname.split('/').filter(Boolean)[0];
if (!username) return;
const btn = document.createElement('div');
btn.id = 'cb-room-vods-btn';
btn.innerHTML = `${t.vodsBtn.toUpperCase()}`;
const baseStyle = 'height:15px;width:auto;position:relative;overflow:hidden;display:inline;font-family:UbuntuMedium,Helvetica,Arial,sans-serif;font-size:12px;padding:3px 8px 2px;top:-4px;float:right;border-radius:3px;cursor:pointer;margin-right:0px;line-height:1.4;text-decoration:none;background:#444;color:#fff;border:1px solid #333;';
btn.style.cssText = baseStyle;
btn.addEventListener('mouseenter', () => { btn.style.background = '#333'; });
btn.addEventListener('mouseleave', () => { btn.style.background = '#444'; });
btn.addEventListener('click', () => {
window.open(`https://recu.to/performer/${username}?ref=0ZT8WP6J`, '_blank');
});
container.prepend(btn);
}
const observer = new MutationObserver((mutations) => {
addVodsButton();
for (const mutation of mutations) {
if (mutation.type === 'childList') {
mutation.addedNodes.forEach(node => {
if (node.nodeType !== 1) return;
if (node.tagName === 'IMG') {
unblurImage(node);
} else if (node.querySelectorAll) {
node.querySelectorAll('img').forEach(unblurImage);
}
});
} else if (mutation.type === 'attributes' && mutation.target.tagName === 'IMG') {
unblurImage(mutation.target);
}
}
});
const init = () => {
document.body.classList.remove('entrance-terms--shown');
JSON.parse = _origJSONParse;
const next = new URLSearchParams(window.location.search).get('next');
if (next && /^\/(?!\/)/.test(next)) {
history.pushState({}, '', next);
window.dispatchEvent(new PopStateEvent('popstate', { state: {} }));
}
hookRegisterClicks();
createFloatingButton();
addVodsButton();
unblurImages();
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['src']
});
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();