Skip to content

Instantly share code, notes, and snippets.

@msanders
Last active May 18, 2024 05:16
Show Gist options
  • Save msanders/ee774a1e4867911bb70ec7389bdbc9e8 to your computer and use it in GitHub Desktop.
Save msanders/ee774a1e4867911bb70ec7389bdbc9e8 to your computer and use it in GitHub Desktop.
Userscript: YouTube usability improvements

Userscript: YouTube usability improvements

Short userscript that disables frequently mistyped shortcuts (e.g. 0-9 number keybindings) and auto-looping on shorts.

Also available on GreasyFork.

Installation

To install, open the raw link and follow the prompt on the Userscripts, Violentmonkey, or Greasemonkey extension modal. Alternatively, you can create a new JavaScript item on the extension page and copy/paste the script. On iOS, go to the same link and tap the puzzle icon in the address bar and then the “Userscripts” menu item.

Screenshot 2023-09-06

Also see

Alternative/supplementary Redirector rule for short auto-looping:

  • Example URL: https://www.youtube.com/shorts/example
  • Include pattern: ^https?://(?:www\.)?youtube\.com/shorts/([\w-]+.*)$
  • Redirect to: https://www.youtube.com/watch?v=$1
  • Pattern type: Regular Expression
  • Description: Use default video player for YouTube shorts

License

This is made available under the terms of the MIT license. For a copy, see https://opensource.org/licenses/MIT.

// ==UserScript==
// @name YouTube Usability
// @description Disable frequently mistyped shortcuts (e.g. 0-9 number keys) and auto-looping on shorts.
// @license MIT
// @icon https://m.youtube.com/static/apple-touch-icon-114x114-precomposed.png
// @namespace michaelsande.rs
// @version 2024.05.17
// @match https://www.youtube.com/*
// @match https://m.youtube.com/*
// @run-at document-start
// @downloadURL https://gist.githubusercontent.com/msanders/ee774a1e4867911bb70ec7389bdbc9e8/raw/youtube-ux.user.js
// @updateURL https://gist.githubusercontent.com/msanders/ee774a1e4867911bb70ec7389bdbc9e8/raw/youtube-ux.user.js
// ==/UserScript==
// Tested on Firefox Greasemonkey and Violentmonkey, and Safari Userscripts.
(() => {
"use strict";
const IS_MOBILE = document.location.hostname.startsWith("m.");
const beforeLoad = () => {
const ALLOWED_MODIFIER_KEYS = ["Alt", "Control", "Meta", "OS"];
const DISABLED_KEYS = new Set([
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"k",
"j",
"l",
"Home",
"End",
]);
window.addEventListener(
"keydown",
event => {
if (
DISABLED_KEYS.has(event.key) &&
!ALLOWED_MODIFIER_KEYS.some(event.getModifierState.bind(event)) &&
!event.isComposing
) {
event.stopImmediatePropagation();
}
},
true
);
window.addEventListener("load", afterLoad);
};
const afterLoad = () => {
const container = document.getElementById(
IS_MOBILE ? "player-shorts-container" : "page-manager"
);
if (container !== null) {
const disableShortLooping = () => {
container
.querySelector(IS_MOBILE ? "video" : "#shorts-player video")
?.removeAttribute("loop");
};
disableShortLooping();
// Shorts video element gets inserted dynamically by YouTube when
// navigating, so can't be used as target.
new MutationObserver(disableShortLooping).observe(container, {
attributeFilter: ["loop"],
childList: true,
subtree: true,
});
}
};
beforeLoad();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment