Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - Kotmin/VideoDefaults: Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin · GitHub
Skip to content

Repository files navigation

VideoDefaults

Firefox WebExtension that preserves default video playback settings.

MVP: Applies a configurable default playback speed (default 2.0) to YouTube videos. Provides a popup with preset buttons (1x, 1.5x, 2x) and a custom speed input. Respects manual speed changes on the current page without overriding them.

Keyboard Shortcuts

Press Ctrl+A, then a command key (tmux-style prefix — outside that window every native YouTube shortcut still works):

ChordAction
Ctrl+AoOpen jump overlay (labels clickable elements)
Ctrl+ApOpen queue overlay (add a video to the Up Next queue)
Ctrl+AShift+POpen playlist picker for the current video (fuzzy-search, multi-add, create new) — watch page, and Shorts on a best-effort basis, requires being logged in
Ctrl+AyGo home
Ctrl+AvSet speed to preset 1 (default 1x)
Ctrl+AbSet speed to preset 2 (default 1.5x)
Ctrl+AnSet speed to preset 3 (default 2x)
Ctrl+AhToggle auto-apply default speed on video load

The prefix defaults to Cmd+A on macOS and Ctrl+A on Windows/Linux, fully overridable.

Full reference: docs/keyboard-quickstart.md.

Customizing keybindings and speeds

Edit src/core/shortcuts.config.json to change the prefix key, any chord binding, or the three preset speed values. Speed values must fall within the allowed range (0.254.0), but only use values YouTube itself will actually honor for your account — e.g. speeds above 2x are a YouTube Premium feature, so a non-Premium account silently caps at 2x regardless of what's configured here. Respect the platform's own limits when picking a value. Details: docs/specs/keyboard-shortcuts.md.

Browser Support

Active development on dev branch.

BrowserStatusListing
🦊 Firefox (AMO)Publishedaddons.mozilla.org/.../videodefaults
🌐 Chrome (Web Store)Publishedchromewebstore.google.com/.../videodefaults
🟦 EdgeUnofficial*chromewebstore.google.com/.../videodefaults
🧭 ArcUnofficial*chromewebstore.google.com/.../videodefaults

* Not yet submitted to Edge Add-ons or Arc's own store. Both are Chromium-based and can install the Chrome Web Store listing above instead. Edge requires enabling "Allow extensions from other stores" in edge://extensions first; Arc installs directly, no extra setting needed.

Requirements

  • Firefox Desktop (Manifest V3)
  • No external runtime dependencies

Development

npm install # install dev tooling (not shipped in extension)
npm test# run unit tests (requires scripts/test.sh — available at Milestone 5)
npm run check # syntax check + manifest validation

Repository Structure

apps/shared/ Browser-agnostic extension source (content/popup scripts, assets)
apps/firefox-extension/ Firefox edition (manifest; src/assets/lib generated by sync script)
apps/chrome-extension/ Chrome edition (manifest; src/assets/lib generated by sync script)
apps/edge-extension/ Edge edition (manifest; src/assets/lib generated by sync script)
src/ Shared core logic and adapters
tests/ Unit tests and HTML fixtures
tools/ Dev and CI tooling (packager, compatibility watcher)
scripts/ Shell helpers and git hooks
docs/ ADRs, specs, compliance, and release notes

Build any edition with bash scripts/package-extension.sh <firefox|chrome|edge>-extension.

Branch Model

  • dev — active development
  • main — release only; updated via rebase from dev

Contributing

See CONTRIBUTING.md.

Support

This project is free. If you'd like to support it: Buy Me a Coffee

License

MIT

About

Multi-browser plugin, smooth your video browsing experience. Set video spped - and persist that setting (optional). Additional keyboard shortcuts for YouTube. If you get value out of it, there's an entirely optional Buy Me a Coffee ☕ https://buymeacoffee.com/kotmin

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages