Brett Owers
← All Projects

Video Speed Controller

Archived

December 1, 2023

The most useful Chrome extension I ever made — right-click any <video> element to adjust playback speed. Before most video players had built-in speed controls, this extension made everything on the internet watchable at 2x. A full-circle return to Chrome extensions, and proof that the best tools solve your own daily friction.

Purpose

Built a Chrome extension that injects a right-click context menu on any HTML5 <video> element, letting you adjust playback speed (0.5x, 1x, 1.25x, 1.5x, 2x, 3x). Used it daily for 2-3 years on lectures, tutorials, meetings, and any video that moved too slowly. Most modern players have this built in now, but in its era, this was indispensable.

Stack

JavaScriptChrome Extension APImanifest.jsonContext MenusDOM

What I Learned

  • The implementation is elegantly simple: a content script that runs on every page, finds all <video> elements, and a background script that creates context menu items. When the user right-clicks and selects a speed, the extension sets video.playbackRate on the target element. The entire extension is maybe 50 lines of JavaScript. The value it delivered was disproportionate to the effort.
  • Chrome's contextMenus API lets extensions add items to the right-click menu with chrome.contextMenus.create(). You can scope them to specific element types — in this case, targeting only <video> elements so the speed options only appear when right-clicking a video. This is cleaner than injecting UI into every page.
  • The HTML5 video.playbackRate property is universally supported and works on any <video> element — YouTube, Vimeo, course platforms, self-hosted videos, embedded lectures. The browser does not care where the video comes from. PlaybackRate applies to all of them. This universality is what made the extension useful across every video site without site-specific code.
  • This extension coming full circle from Chrome Save Tabs (the first project in this blog) is poetic. The first project was a Chrome extension built before browsers supported tab saving. This one was a Chrome extension built before players supported speed control. Both solved timing problems — building the feature before the platform caught up. Both became obsolete when the platform absorbed the feature. The pattern: scratch your itch, use it until the platform catches up, move on.

Key Insights

  • The most useful tools solve friction you experience daily. Not monthly, not occasionally — daily. Video Speed Controller was useful because I watched educational content every single day and every single video was too slow at 1x. The friction was constant. The solution was immediate. Daily friction + simple solution = high-value tool.
  • Watching everything at 2x is a genuine productivity multiplier — a 1-hour lecture becomes 30 minutes, a 20-minute tutorial becomes 10. But it also changes how you evaluate content. At 2x, filler is unbearable, tangents are obvious, and good content feels tighter. Speed control is not just a time saver — it is a quality filter. If content does not survive 1.5x, it was padded.
  • Building tools for yourself is the most reliable path to building tools others want. You are your own most demanding user. You know every edge case because you hit them. You know the ideal UX because you designed it for your own workflow. Chrome Save Tabs, Video Speed Controller, the Haiku Detector, Bereshit — every tool built for personal use delivered more value than any tool built speculatively for an imagined user.
  • The obsolescence of this extension (most players now have speed controls) is not sad — it is the best possible outcome. You built something useful, used it for years, and the platform adopted the pattern. Your extension proved the demand. The platform served it at scale. This is how the ecosystem improves: individuals scratch itches, platforms notice, features become universal.
#Chrome-extension#JavaScript#video#playback-speed#productivity#browser#manifest.json#context-menu#tools#full-circle

This post was composed through a conversation between Brett Owers and Claude Code (Anthropic). The content reflects Brett's recollection of each project and the lessons drawn from it. Some details may be approximate or omitted — the purpose is to paint an honest picture of a software engineer's development over time, not to serve as a precise historical record.