Last active
February 13, 2025 06:44
-
-
Save KorigamiK/5573cb9a5febba36a1c78c5272f3a2c1 to your computer and use it in GitHub Desktop.
set custom playback speed on youtube
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name CustomYTSpeed | |
// @version 0.4 | |
// @description Allows the user to set a custom playback speed on YouTube.com videos | |
// @match *://*.youtube.com/watch* | |
// @grant none | |
// ==/UserScript== | |
// deno-lint-ignore-file no-window | |
(function () { | |
"use strict"; | |
const playbackSpeedSettingsKey = "yt-player-playback-rate"; | |
function createUI() { | |
const uiContainer = document.createElement("div"); | |
uiContainer.style.position = "fixed"; | |
uiContainer.style.top = "10px"; | |
uiContainer.style.right = "10px"; | |
uiContainer.style.zIndex = 1000; | |
uiContainer.style.backgroundColor = "rgba(255, 255, 255, 0.9)"; | |
uiContainer.style.padding = "10px"; | |
uiContainer.style.border = "1px solid rgba(0, 0, 0, 0.5)"; | |
uiContainer.style.borderRadius = "5px"; | |
uiContainer.style.boxShadow = "0 2px 10px rgba(0, 0, 0, 0.2)"; | |
uiContainer.style.color = "rgba(0, 0, 0, 0.8)"; | |
const label = document.createElement("label"); | |
label.textContent = "Playback Speed: "; | |
uiContainer.appendChild(label); | |
const speedSelect = document.createElement("select"); | |
speedSelect.id = "playbackSpeedSelect"; | |
[0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3.0, 3.25, 3.5, 4.0].forEach( | |
(speed) => { | |
const option = document.createElement("option"); | |
option.value = speed; | |
option.textContent = speed + "x"; | |
speedSelect.appendChild(option); | |
}, | |
); | |
// Set the default value of the speed selector | |
const storedSettings = JSON.parse( | |
sessionStorage[playbackSpeedSettingsKey] || '{"data":"1"}', | |
); | |
speedSelect.value = storedSettings.data; | |
speedSelect.addEventListener("change", () => { | |
const selectedSpeed = parseFloat(speedSelect.value); | |
const playbackSpeedSettings = { | |
"data": selectedSpeed.toString(), | |
"creation": Date.now(), | |
}; | |
sessionStorage[playbackSpeedSettingsKey] = JSON.stringify( | |
playbackSpeedSettings, | |
); | |
applyPlaybackSpeed(); | |
}); | |
uiContainer.appendChild(speedSelect); | |
document.body.appendChild(uiContainer); | |
} | |
function applyPlaybackSpeed() { | |
const storedSettings = JSON.parse( | |
sessionStorage[playbackSpeedSettingsKey] || '{"data":"1"}', | |
); | |
const player = document.querySelector("video"); | |
if (player) { | |
player.playbackRate = parseFloat(storedSettings.data); | |
} | |
} | |
// Check if the current page is a video page | |
if (window.location.pathname.includes("/watch")) { | |
createUI(); | |
applyPlaybackSpeed(); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment