in a lounge layout, join a table with camera on and mic off, then run this bookmarklet
javascript: (function() { fetch('https://gist.githubusercontent.com/keevie/fc059dfe3f56e1cd908f4a57f2d0af82/raw/87fc0d0346819cb7caf17e8f8456b630cb740157/fake-people.json').then(res => res.json()) .then(friendImageArray => { function shuffle(array) { let currentIndex = array.length, randomIndex; while (currentIndex != 0) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex--; [array[currentIndex], array[randomIndex]] = [ array[randomIndex], array[currentIndex]]; } return array; } friendImageUrls = shuffle(friendImageArray).slice(-5); friendNames = [ 'Zachary Simms', 'Claire Gibson', 'Jasmine Ginnish', 'Vilho Rintala', 'Martin Isdahl', ]; streamContainer = document.querySelector('vk-call').shadowRoot.querySelector('.VideoCall_Streams'); for (const i of Array(4).keys()) { streamContainer.appendChild(streamContainer.children[0].cloneNode(true)); } let streamWidth = streamContainer.children[0].getBoundingClientRect().width / 2; streamContainer.style = `--video-stream-min-size: ${streamWidth}px`; for (const v of streamContainer.querySelectorAll('video')) { friendImageUrls.push(v.src = friendImageUrls.shift()); v.outerHTML = v.outerHTML.replace('video', 'img'); } for (const el of streamContainer.querySelectorAll('.StreamProfile_Name')) { el.innerText = friendNames.shift(); } let myTable = [...document.querySelectorAll('.table')] .find(t => t.innerHTML.match(/(you)/)); for (const p of myTable.querySelectorAll('.participant')) { p.style.backgroundImage = `url(${friendImageUrls.shift()})`; p.style.backgroundSize = 'cover'; p.style.backgroundPosition = 'center'; p.innerHTML = ''; }; }); })()
Populate a stage audience
To add this as a bookmarklet, make a bookmark with any title, and put the following as the url:
javascript:let audienceCount = prompt('audience size'); document.querySelector('vk-call').vueComponent.configure({ dummyPeersCount: audienceCount }); setTimeout(() => { for (const img of document.querySelector('vk-call').shadowRoot.querySelectorAll('img[src^="/avatar"]')) { img.src = `https://randomuser.me/api/portraits/${Math.random() > 0.5 ? 'men' : 'women'}/${Math.random() * 100 | 0}.jpg`; }},1000);void(0);
Put a person on stage
bookmarklet:
javascript:const speakerImageUrl='https://kingfisher-file-uploads-prod.s3.amazonaws.com/4%2F499118%2F4906306215360126%2Fimage.jpeg';const speakerName='Margie Nelson';const video = document.querySelector('vk-call').shadowRoot.querySelector('.VideoCall_Stage video');video.pause();video.setAttribute('src', speakerImageUrl);video.outerHTML=video.outerHTML.replace('video','img');document.querySelector('vk-call').shadowRoot.querySelector('.StreamProfile_Name').innerText=speakerName;void(0);
Fill out event lobby
bookmarklet:
javascript:for (const p of document.querySelectorAll('.participant.is-empty, .lobby-attendee')) { p.style.backgroundImage = `url(https://randomuser.me/api/portraits/${Math.random() > 0.5 ? 'men' : 'women'}/${Math.random() * 100 | 0}.jpg`; p.style.backgroundSize = 'cover'; };let stage = document.querySelector('.minimal-stage .title.muted'); stage.innerHTML = ''; for (const i of Array(2).keys()) { stagePerson = new Image; stagePerson.style.margin = '4px'; stagePerson.src = `https://randomuser.me/api/portraits/${Math.random() > 0.5 ? 'men' : 'women'}/${Math.random() * 100 | 0}.jpg`; stage.appendChild(stagePerson); }; stage.style.opacity = 1; stage.nextElementSibling && stage.nextElementSibling.remove();void(0);
Table friends
Go to a table, turn off your mic, and turn on your video
bookmarklet
javascript:let friendImageUrls = [ 'https://kingfisher-file-uploads-prod.s3.amazonaws.com/4%2F499118%2F4906306215360126%2Fimage.jpeg', 'https://kingfisher-file-uploads-prod.s3.amazonaws.com/5%2F499118%2F8745175034683414%2Fimage.jpeg', 'https://kingfisher-file-uploads-prod.s3.amazonaws.com/5%2F499118%2F6223098080115820%2Fimage.jpeg', 'https://kingfisher-file-uploads-prod.s3.amazonaws.com/5%2F499118%2F3741642030769182%2Fimage.jpeg', 'https://kingfisher-file-uploads-prod.s3.amazonaws.com/5%2F499118%2F2135866651177586%2Fimage.jpeg', ]; let friendNames = [ 'Zachary Simms', 'Claire Gibson', 'Jasmine Ginnish', 'Vilho Rintala', 'Martin Isdahl', ]; let streamContainer = document.querySelector('vk-call').shadowRoot.querySelector('.VideoCall_Streams'); for (const i of Array(4).keys()) { streamContainer.appendChild(streamContainer.children[0].cloneNode(true)); }; let streamWidth = streamContainer.children[0].getBoundingClientRect().width / 2; streamContainer.style = `--video-stream-min-size: ${streamWidth}px`; for (const v of streamContainer.querySelectorAll('video')) { friendImageUrls.push(v.src = friendImageUrls.shift()); v.outerHTML = v.outerHTML.replace('video', 'img'); } for (const el of streamContainer.querySelectorAll('.StreamProfile_Name')) { el.innerText = friendNames.shift(); } let myTable = [...document.querySelectorAll('.table')].find(t => t.innerHTML.match(/\(you\)/)); for (const p of myTable.querySelectorAll('.participant')) { p.style.backgroundImage = `url(${friendImageUrls.shift()})`; p.style.backgroundSize = 'cover'; p.style.backgroundPosition = 'center'; p.innerHTML = ''; };void(0);