Think Meet The Fuckers wasn’t scripted.
i dont, but ive just done some digging, i dont think cyberpunk has a script as i cant see one on here or IVDB, but meet the fuckers part 2 seems to be on IVDB
Cyberpunk has been scripted and was available when SLR had VRBangers on their site. The script was removed together with the video when VRBangers delisted all of their content on SLR. The paid script post here was delisted since the video was removed from SLR.
Aww fuck. VRConk just removed downloads, too! Can confirm a TamperMonkey right click allower & maian’s console command works just fine. ![]()
Browser’s LibreWolf.
Sorry, so does that mean the cyberpunk script is completely gone off the web? I’m also trying to find it without luck.
if your talking about Lexi Lore VRConk video
https://discuss.eroscripts.com/t/vrconk-com-cyberpunk-lucy-a-porn-parody-starring-lexi-lore/120648
its here and the MEGA link is still working too.
No, the Sindal Xie & Sif Blvck one.
oh, I’d almost forgotten about that one. So when SLR announced they’d stop doing business with VRBanger/Conk a lot of people panic-download content and that’s one of the scripts that I downloaded. Problem is I think its against site rules to share scripts that weren’t made by you so if the creator would give permission or share it himself, thin it would be fine,
When asked, the scripters I’ve seen have said they wish they could release/resell them, but it’s owned by SLR, and SLR can’t/won’t sell it.
The scripters probably can’t say “Go ahead and share it”, legally, even if they might wish they could.
They updated their site and killed the firefox extension that fix it… ![]()
Yes they did update the UI which breaks the extension, but the data still exists. We just need to update our code to add a button to the new UI, I think.
FYI You can still get to the download links for your session by opening the chrome developer console and pasting in this code (this is mostly from the plugin source code):
const token = document.cookie.match('(?:^|; )atoken=([^;]+)')[1];
const videoId = window.location.pathname.match('^/video/([^/]+)')[1];
var downloads = null;
fetch(`https://content.${window.location.hostname}/api/content/v1/videos/${videoId}`, {
headers: {
'Authorization': 'Bearer ' + token
}
}).then(resp => {
if (!resp.ok)
throw new Error('HTTP error: ' + resp.status);
return resp.json();
}).then(resp => {
if (resp.status.code !== 1)
throw new Error(resp.status.message);
downloads = resp.data.item.downLoadVideoListForFront;
console.log(JSON.stringify(downloads))
});
I know I’m kind of late to this discussion however its the first discussion that talks about this topic when I look up “VRBANGERS Download” so I thought I’d share my method of downloading videos here so you don’t have to worry about going through the PlayA app and instead directly download it from the website instead. This method works with any embedded videos so can be used for other websites or anytime you don’t have the ability to directly download something.
The first thing you are going to want to do is Inspect Element for the page. Now I suspect they now about this because they disabled the ability to right click on the page however usually (depending on your browser the methods vary) you can go to the top right and click More Tools > Developer Tools.
From there you can navigate to the network tab and any traffic running through the website on the network will be shown so you will get a lot of garbage however once you start playing the video in the quality you wish to download it in you can then search through (newest items will be at the bottom, can vary depending on browser) for an item listed as media with the title of the video. Ex:

From there you can right-click and open the video in a new tab where you can again right-click and save the video, to ensure you are correctly downloading the video you should see a pretty large video file saved to your PC.
Here is a reference video if you get stuck and is more so explaining the method I’m using. Hope this help!
How To Save A Video Embedded On A Website - Download Video From Website
Is there a way to play/download the video using heresphere? I don’t want to have to download the entire file every time I want to play it. Wish I knew they did this before I bought a subscription ffs.
Hello, Thank you for teaching me this. I have a question. so the video is offered in 8k but i cannot select higher than 4k. I am doing this from PC, and and just using my web browser. is it not letting me choose 8k because my screen does not support 8k? Thank you for your time!
This method worked for me on one of their other sites, VR Smash, instead of the command console way through Developer Tools mentioned earlier. Playing the video for a few seconds in a new tab shows the download option in the lower right. Then look for that default file “paid_8k.mp4” etc.
Orange Monkey Script für Chrome
Über einen kleinen Button auf der Seite (DOM-Injection / unten rechts) werden alle verfügbaren Versionen aufgelistet; über einen direkten Klick auf den Titel lässt sich die Datei speichern.
// ==UserScript==
// @name VRB Download UI (OM, DOM+NUXT Scan, sorted 8K→2K, doc-start safe)
// @namespace vrb
// @version 1.0.0
// @description UI-Button + Panel. Findet MP4/M3U8 via DOM, __NUXT__, optional API. Entkodiert & → &, sortiert 8K→2K. URL klickbar.
// @match *://vrbangers.com/*
// @match *://www.vrbangers.com/*
// @match *://*.vrbangers.com/*
// @run-at document-start
// @grant none
// ==/UserScript==
(function () {
'use strict';
// ---------- tiny utils ----------
const sleep = (ms) => new Promise(r => setTimeout(r, ms));
async function waitForHtml(){ for(let i=0;i<600;i++){ if(document.documentElement) return; await sleep(10);} }
async function waitForBody(){ for(let i=0;i<600;i++){ if(document.body) return; await sleep(10);} }
const $ = (sel, ctx=document) => ctx.querySelector(sel);
function injectCSS(css){
const s = document.createElement('style');
s.textContent = css;
document.documentElement.appendChild(s);
}
function decodeHTMLEntities(str){
if (!str || typeof str !== 'string') return str;
if (str.indexOf('&') === -1) return str;
const el = document.createElement('textarea');
el.innerHTML = str;
return el.value;
}
// ---------- page guard ----------
function isVideoPage(){ return /^\/video\/[^/]+/.test(location.pathname); }
// ---------- helpers (token/nuxt/labels) ----------
function getCookie(name){
const m = document.cookie.match(new RegExp('(?:^|; )' + name.replace(/[-[\]/{}()*+?.\\^$|]/g,'\\$&') + '=([^;]*)'));
return m ? decodeURIComponent(m[1]) : null;
}
function getNuxt(){ try { return window.__NUXT__ || undefined; } catch { return undefined; } }
function getToken(){
const cookieToken = getCookie('atoken') || getCookie('token');
const keys = ['atoken','token','auth._token.local','auth._token.default','x-auth-token'];
let ls = null; for (const k of keys) { const v = localStorage.getItem(k); if (v) { ls = v; break; } }
if (ls && /^Bearer\s+/i.test(ls)) ls = ls.replace(/^Bearer\s+/i,'');
const nuxt = getNuxt();
const nuxtToken = nuxt?.state?.auth?.token || (nuxt?.state?.auth?._token && nuxt.state.auth._token.replace(/^Bearer\s+/i,''));
return cookieToken || ls || nuxtToken || null;
}
function getVideoNumericId(){
const nuxt = getNuxt();
const id = nuxt?.state?.videos?.video?.id
|| nuxt?.state?.videos?.video?.videoId
|| nuxt?.state?.videos?.video?.mainVideo?.id
|| null;
return (typeof id === 'number' || /^[0-9]+$/.test(id || '')) ? String(id) : null;
}
function getVideoSlug(){
const parts = location.pathname.split('/').filter(Boolean);
return parts[1] || null;
}
function urlsFromNuxt(){
const nuxt = getNuxt();
const list = nuxt?.state?.videos?.video?.downLoadVideoListForFront
|| nuxt?.state?.videos?.video?.downloadVideoListForFront
|| null;
return Array.isArray(list) ? list : null;
}
function pickDownloadsShape(resp){
return resp?.data?.item?.downLoadVideoListForFront
|| resp?.data?.downLoadVideoListForFront
|| resp?.item?.downLoadVideoListForFront
|| resp?.downLoadVideoListForFront
|| null;
}
function isMediaURL(u){ return typeof u === 'string' && /^https?:\/\//i.test(u) && /(mp4|m3u8)(?:$|\?)/i.test(u); }
function basename(url){ try { return decodeURIComponent(new URL(url).pathname.split('/').pop()||'video'); } catch { return 'video'; } }
function hostNice(url){ try { return new URL(url).host; } catch { return ''; } }
function deriveLabel(url){
const f = basename(url);
const parts = [];
const QUAL = f.match(/(?:^|[_\-])(8K|7K|6K|5K|4K|3K|2K|[0-9]{3,4}p)(?:[_\-]|$)/i);
const FPS = f.match(/([0-9]{2,3})fps/i);
const FOV = f.match(/([0-9]{2,3}x[0-9]{2,3})/i);
if (QUAL) parts.push(QUAL[1].toUpperCase());
if (FPS) parts.push(FPS[1] + 'fps');
if (FOV) parts.push(FOV[1]);
const host = hostNice(url);
return (parts.join(' · ') || 'Video') + (host ? ` — ${host}` : '');
}
// ---- Qualität extrahieren (für Sortierung 8K → 2K, danach 4320p/2160p etc.) ----
function qualityScore(url){
const f = basename(url).toLowerCase();
const mk = f.match(/(^|[_-])(8k|7k|6k|5k|4k|3k|2k)([_-]|$)/i);
if (mk) {
const n = mk[2].toLowerCase().replace('k','');
const val = parseInt(n,10) * 1000; // 8k => 8000
return isNaN(val) ? 0 : val;
}
const mp = f.match(/([0-9]{3,4})p/); // z.B. 4320p, 2160p, 1440p
if (mp) {
const val = parseInt(mp[1], 10);
return isNaN(val) ? 0 : val;
}
return 0;
}
function hostScore(u){
const h = hostNice(u);
let s = 0;
if (/^mov\./i.test(h) || /(^|\.)mov\.vrbangers\.com$/i.test(h)) s -= 2; // bevorzugen
if (/\.m3u8/i.test(u)) s += 1; // mp4 bevorzugen
return s;
}
function uniqBy(arr, keyFn){ const s=new Set(), out=[]; for(const it of arr){ const k=keyFn(it); if(!s.has(k)){ s.add(k); out.push(it);} } return out; }
function sortLinks(list){
return [...list].sort((a,b)=>{
const qa = qualityScore(a.url), qb = qualityScore(b.url);
if (qb !== qa) return qb - qa; // 8K → 2K → 4320p → 2160p ...
const ha = hostScore(a.url), hb = hostScore(b.url);
if (ha !== hb) return ha - hb; // mov.* vor anderen, mp4 vor m3u8
return a.url.localeCompare(b.url);
});
}
function dedupeAndSort(list){
const filtered = list.filter(x => isMediaURL(x.url));
const uniq = uniqBy(filtered, x => x.url);
return sortLinks(uniq);
}
// ---------- DOM scan ----------
function collectFromDom(){
const out = [];
document.querySelectorAll('video[src], source[src]').forEach(el => {
const s = el.src;
if (isMediaURL(s)) out.push({ url: s, label: deriveLabel(s), source: 'DOM:media' });
const raw = el.getAttribute('src');
if (raw && raw !== s) {
const dec = decodeHTMLEntities(raw);
if (isMediaURL(dec)) out.push({ url: dec, label: deriveLabel(dec), source: 'DOM:media(attr)' });
}
});
document.querySelectorAll('a[href*=".mp4"], a[href*=".m3u8"]').forEach(a => {
const s = a.href;
if (isMediaURL(s)) out.push({ url: s, label: deriveLabel(s), source: 'DOM:a' });
const raw = a.getAttribute('href');
if (raw && raw !== s) {
const dec = decodeHTMLEntities(raw);
if (isMediaURL(dec)) out.push({ url: dec, label: deriveLabel(dec), source: 'DOM:a(attr)' });
}
});
document.querySelectorAll('[data-src],[data-url],[data-file],[data-href]').forEach(el => {
['data-src','data-url','data-file','data-href'].forEach(attr => {
const v = el.getAttribute(attr);
if (!v) return;
const dec = decodeHTMLEntities(v);
if (isMediaURL(dec)) out.push({ url: dec, label: deriveLabel(dec), source: 'DOM:data' });
});
});
return out;
}
// ---------- script text scan ----------
function scrapeUrlsFromScripts(){
const results = [];
for (const s of Array.from(document.scripts)){
const t = s.textContent || '';
if (!t) continue;
if (/(mp4|m3u8)/i.test(t)){
const re = /https?:\/\/[^\s"'\\)]+?(?:\.mp4|\.m3u8)(?:\?[^\s"'\\)]*)?/ig;
const m = t.match(re) || [];
for (let u of m) {
u = decodeHTMLEntities(u);
if (isMediaURL(u)) results.push({ url: u, label: deriveLabel(u), source: 'SCRIPT' });
}
}
}
return results;
}
// ---------- API (optional) ----------
async function fetchFromApi(){
const token = getToken();
const numericId = getVideoNumericId();
const slug = getVideoSlug();
if (!numericId && !slug) return [];
const host = location.hostname.replace(/^www\./,'');
const url = numericId
? `https://content.${host}/api/content/v1/videos/${numericId}`
: `https://content.${host}/api/content/v1/videos/${encodeURIComponent(slug)}`;
const headers = token ? { 'Authorization': `Bearer ${token}` } : {};
const resp = await fetch(url, { headers, credentials: 'include' });
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
const dl = pickDownloadsShape(data);
if (!Array.isArray(dl)) return [];
return dl.map(x => {
const u0 = (typeof x === 'string' ? x : (x?.url || x?.src || x?.file));
const u = decodeHTMLEntities(u0 || '');
return isMediaURL(u) ? { url: u, label: deriveLabel(u), source: 'API' } : null;
}).filter(Boolean);
}
// ---------- scan orchestration ----------
async function findVideoUrls(){
let found = [];
// DOM zuerst (hier stehen oft schon die finalen URLs)
found.push(...collectFromDom());
if (found.length) return dedupeAndSort(found);
// __NUXT__ sofort/kurz später
found.push(...mapList(urlsFromNuxt(), '__NUXT__'));
if (!found.length){ await sleep(400); found.push(...mapList(urlsFromNuxt(), '__NUXT__')); }
if (found.length) return dedupeAndSort(found);
// API versuchen
try {
const api = await fetchFromApi();
found.push(...api);
if (found.length) return dedupeAndSort(found);
} catch (e) {
console.warn('[VRB UI] API-Fallback:', e);
}
// Skript-Texte
found.push(...scrapeUrlsFromScripts());
return dedupeAndSort(found);
}
function mapList(arr, source){
if (!Array.isArray(arr)) return [];
return arr.map(x => {
const u = decodeHTMLEntities(typeof x === 'string' ? x : (x?.url || x?.src || x?.file));
return isMediaURL(u) ? { url: u, label: deriveLabel(u), source } : null;
}).filter(Boolean);
}
// ---------- UI ----------
function mountUI(){
injectCSS(`
#vrb-panel, #vrb-panel * {font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, "Helvetica Neue", Helvetica, sans-serif !important;}
#vrb-fab{ position:fixed; right:18px; bottom:18px; z-index:2147483647;
border:1px solid #2f3b5c; background:#0d142b; color:#e6e8ee;
padding:10px 14px; border-radius:999px; cursor:pointer; font:14px/1 system-ui,-apple-system,Segoe UI,Roboto,Arial;
box-shadow:0 10px 24px rgba(0,0,0,.35); }
#vrb-fab:hover{ background:#141d3a; }
#vrb-panel{ position:fixed; right:18px; bottom:70px; width:420px; max-width:92vw; z-index:2147483647;
background:#0b1020; color:#e6e8ee; border:1px solid #27314a; border-radius:12px; overflow:hidden;
box-shadow:0 12px 28px rgba(0,0,0,.4); display:none; }
#vrb-head{ display:flex; align-items:center; justify-content:space-between; gap:8px; padding:10px 12px; background:#0e1530; border-bottom:1px solid #27314a; }
#vrb-title{ font-weight:600; font-size:14px; }
#vrb-actions{ display:flex; gap:8px; align-items:center; }
.vrb-btn{ appearance:none; border:1px solid #3a4768; background:#121a36; color:#e6e8ee;
padding:6px 10px; border-radius:8px; cursor:pointer; font-size:12px; }
.vrb-btn:hover{ background:#1a2345; }
#vrb-body{ max-height:55vh; overflow:auto; padding:10px 12px; }
.vrb-empty{ opacity:.8; }
.vrb-row{ display:grid; grid-template-columns:1fr auto; gap:8px; align-items:center; padding:8px; border:1px solid #27314a; border-radius:10px; margin-bottom:8px; background:#0c1328; }
.vrb-meta{ font-size:12px; margin-bottom:4px; opacity:.9; }
.vrb-chip{ display:inline-block; padding:2px 6px; font-size:11px; border:1px solid #3a4768; border-radius:999px; margin-right:6px; background:#121a36; }
.vrb-url{ word-break:anywhere; font-size:12.5px; color:#9ec5ff; text-decoration:underline; }
.vrb-actions-row{ display:flex; gap:6px; }
.vrb-switch{ display:inline-flex; gap:6px; align-items:center; font-size:12px; opacity:.95; }
.vrb-switch input{ transform: translateY(1px); }
`);
const fab = document.createElement('button');
fab.id = 'vrb-fab';
fab.type = 'button';
fab.textContent = 'VRB Links';
document.documentElement.appendChild(fab);
const panel = document.createElement('div');
panel.id = 'vrb-panel';
panel.innerHTML = `
<div id="vrb-head">
<div id="vrb-title">Download-Links (sortiert: 8K → 2K)</div>
<div id="vrb-actions">
<label class="vrb-switch"><input id="vrb-auto" type="checkbox"> Auto-Scan</label>
<button id="vrb-copyall" class="vrb-btn">Alle kopieren</button>
<button id="vrb-rescan" class="vrb-btn">Neu scannen</button>
<button id="vrb-close" class="vrb-btn">Schließen</button>
</div>
</div>
<div id="vrb-body">
<div class="vrb-empty">Noch keine Links. Klicke <b>Neu scannen</b>.</div>
<div id="vrb-list"></div>
</div>
`;
document.documentElement.appendChild(panel);
const elList = $('#vrb-list', panel);
const elEmpty = $('.vrb-empty', panel);
const btnClose = $('#vrb-close', panel);
const btnRescan = $('#vrb-rescan', panel);
const btnCopyAll = $('#vrb-copyall', panel);
const chkAuto = $('#vrb-auto', panel);
chkAuto.checked = localStorage.getItem('vrb-auto') !== 'false';
chkAuto.addEventListener('change', ()=> localStorage.setItem('vrb-auto', String(chkAuto.checked)));
function togglePanel(show){ panel.style.display = show ? 'block' : 'none'; }
function renderLoading(){ elList.innerHTML=''; elEmpty.style.display='block'; elEmpty.textContent='Suche Links…'; }
function render(items){
elList.innerHTML='';
if (!items || !items.length){
elEmpty.style.display='block';
elEmpty.textContent='Keine Download-Links gefunden.';
return;
}
elEmpty.style.display='none';
for (const it of items){
const row = document.createElement('div'); row.className='vrb-row';
const left = document.createElement('div');
const meta = document.createElement('div'); meta.className='vrb-meta';
meta.innerHTML = `<span class="vrb-chip">${it.label||'Video'}</span><span class="vrb-chip">${it.source}</span>`;
// URL jetzt als klickbarer Link
const link = document.createElement('a');
link.className = 'vrb-url';
link.href = it.url;
link.target = '_blank';
link.rel = 'noopener noreferrer';
link.textContent = it.url;
left.appendChild(meta);
left.appendChild(link);
const right = document.createElement('div'); right.className='vrb-actions-row';
const openBtn = document.createElement('a'); openBtn.className='vrb-btn'; openBtn.textContent='Öffnen'; openBtn.href=it.url; openBtn.target='_blank'; openBtn.rel='noopener';
const dlBtn = document.createElement('a'); dlBtn.className='vrb-btn'; dlBtn.textContent='Download'; dlBtn.href=it.url; dlBtn.download=basename(it.url);
const copyBtn = document.createElement('button'); copyBtn.className='vrb-btn'; copyBtn.textContent='Kopieren';
copyBtn.addEventListener('click', async ()=>{
try { await navigator.clipboard.writeText(it.url); copyBtn.textContent='Kopiert ✓'; setTimeout(()=>copyBtn.textContent='Kopieren',1200); } catch {}
});
right.appendChild(openBtn);
right.appendChild(dlBtn);
right.appendChild(copyBtn);
row.appendChild(left);
row.appendChild(right);
elList.appendChild(row);
}
}
async function runScanAndRender(){
try { const items = await findVideoUrls(); render(items); }
catch (e){ console.error('[VRB UI] Scan-Fehler:', e); elEmpty.style.display='block'; elEmpty.textContent='Fehler beim Scannen. Siehe Konsole.'; }
}
fab.addEventListener('click', async ()=>{
const isOpen = panel.style.display === 'block';
togglePanel(!isOpen);
if (!isOpen){ renderLoading(); await runScanAndRender(); }
});
btnClose.addEventListener('click', ()=> togglePanel(false));
btnRescan.addEventListener('click', async ()=>{ renderLoading(); await runScanAndRender(); });
btnCopyAll.addEventListener('click', async ()=>{
const urls = Array.from(panel.querySelectorAll('.vrb-url')).map(n=>n.textContent.trim()).filter(Boolean);
if (!urls.length) return;
try { await navigator.clipboard.writeText(urls.join('\n')); btnCopyAll.textContent='Kopiert ✓'; setTimeout(()=>btnCopyAll.textContent='Alle kopieren',1200); } catch {}
});
// SPA/Nuxt-Routenwechsel → optional Auto-Scan
(function hookHistory(){
const fire = () => window.dispatchEvent(new Event('vrb-route'));
const _push = history.pushState; history.pushState = function(...a){ const r=_push.apply(this,a); fire(); return r; };
const _replace = history.replaceState; history.replaceState = function(...a){ const r=_replace.apply(this,a); fire(); return r; };
window.addEventListener('popstate', fire);
})();
let timer=null;
window.addEventListener('vrb-route', ()=>{
if (panel.style.display==='block' && chkAuto.checked){
clearTimeout(timer);
timer = setTimeout(()=>{ renderLoading(); runScanAndRender(); }, 1200);
}
});
}
// ---------- boot ----------
(async () => {
await waitForHtml();
await waitForBody();
if (!isVideoPage()) return; // UI nur auf /video/* zeigen
mountUI();
})();
})();
As of today, vrporn.com has joined the list of sad loser sites that limit downloads to 5K or less. So much for being patient w/r to VRBANGERS and VRConk content to appear there.
Worse than that - they’ve also limited streaming to 5K. That seems really foolish of them. Why would anyone choose to subscribe to their site knowing they’re paying the same but getting worse quality?
VRPorn was already behind SLR due to the lack of interactive scripts. Seems like they’re giving up on being competitive.
Tagchen,
also das einzige was ich hinkriege ist, dass er mir einen Trailer als Download angibt, allerdings kein ganzes Video. Was mache ich falsch?

