// ==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(); } })();