// ==UserScript== // @name Replace Kick Embed with Channel Page and Enable Theatre Mode // @namespace https://player.kick.com/ // @version 1.3 // @description Replaces Kick embed with a full channel page and enables theatre mode on Kick.com only when loaded as an embed replacement // @author nobody // @match *://player.kick.com/* // @match *://kick.com/* // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @license GPL-3.0-or-later // @downloadURL none // ==/UserScript== if (window.location.host.includes("player.kick.com")) { // Code for the embed page: Replace the Kick player with a full channel page const observer = new MutationObserver(() => { const playerContainer = document.querySelector(".video-container"); if (playerContainer) { // Extract channel information from the URL const channelUrl = window.location.href; console.log("Channel URL:", channelUrl); const channelId = channelUrl.split("/")[3]; // Assumes URL is like: https://player.kick.com/channel/{channelId} console.log("Channel ID:", channelId); // Create an iframe for the full Kick channel page const iframe = document.createElement("iframe"); iframe.src = `https://kick.com/${channelId}`; iframe.style.width = "100%"; iframe.style.height = "100vh"; // Full viewport height iframe.style.border = "none"; // Replace the embed with the full channel page playerContainer.innerHTML = ""; playerContainer.appendChild(iframe); // Stop observing and mark that we replaced the embed observer.disconnect(); GM_setValue("embedReplaced", true); } }); observer.observe(document.body, { subtree: true, childList: true, }); } else if (window.location.host.includes("kick.com")) { // Code for kick.com: Only run if the embed was replaced and the referrer indicates it came from player.kick.com const embedReplacedValue = GM_getValue("embedReplaced", false); if (embedReplacedValue && document.referrer.includes("player.kick.com")) { console.log("Embed replacement detected via referrer. Enabling theatre mode..."); const observer2 = new MutationObserver(() => { const el = document.querySelector('[data-sidebar]'); el.dataset.sidebar = 'false'; el.dataset.chat = 'false'; el.dataset.theatre = 'true'; GM_addStyle(` [data-sidebar] > .w-xvw { padding-top: unset !important; } #channel-content { display: none; } `); observer2.disconnect(); // Clear the flag so subsequent direct visits to kick.com don't trigger theatre mode GM_setValue("embedReplaced", false); }); observer2.observe(document.body, { subtree: true, childList: true, }); } }