IMGLAB Video Speed Control — User Guide
User Guide & Help Center

Control Every Video
At Any Speed

Complete walkthrough — from install to advanced shortcuts. A draggable overlay on every video, 13 remappable keyboard shortcuts, per-site speed memory, and full YouTube SPA support.

SITES SUPPORTED
13
KEYBOARD SHORTCUTS
0.1×
SPEED STEP
0
SIGN-UP REQUIRED
1 Getting Started

Install in 60 Seconds

IMGLAB Video Speed Control is a Chrome extension. Follow these steps and you’ll have a speed controller on every video in under a minute.

01
Add to Chrome from the Web Store

Click Add to Chrome — Free on the product page. Chrome will prompt for confirmation — click Add extension. The IMGLAB icon ⚡ appears in your Chrome toolbar. No sign-up, no account, no payment required.

💡 If the toolbar icon isn’t visible, click the puzzle piece 🧩 in the Chrome toolbar and pin IMGLAB Video Speed Control so it’s always accessible.
02
Open any page with a video

Navigate to YouTube, a lecture site, a news site, or any page with an HTML5 <video> element. The speed overlay appears automatically in the top-left corner of each qualifying video. No configuration needed for first use.

💡 The overlay shows [ − ] [ 1.50 ] [ + ] [ × ] by default. The speed number in the middle is your current playback rate.
03
Press C to speed up, X to slow down

Your very first action: make sure the page has focus (click anywhere outside a text input), then press C. The overlay updates from 1.50 to 1.75. Press X to go back down. The speed badge on the extension icon updates in real time.

💡 Speed shortcuts work in capture-phase mode — they fire even on sites that try to intercept keyboard events, as long as you’re not typing in a form field.
04
Open the popup to configure

Click the IMGLAB icon ⚡ in your toolbar. The Settings tab opens by default. Here you configure preferred speed, step size, min/max limits, cycle speeds, and controller opacity. The Shortcuts tab lets you remap every key. Changes apply instantly — no page refresh needed.

⚠️ Click Save Settings after making any changes in the popup. Changes are not auto-saved — the button must be pressed to persist them.
🔄
Updating the extension: When a new version is released, update from the Chrome Web Store in the usual way (chrome://extensions/ → Update). Your saved settings and per-site speed memories are preserved automatically across updates.
2 On-Page Overlay

The On-Page Speed Controller

A compact [ − ] [ 1.50 ] [ + ] [ × ] overlay attaches automatically to every video. It lives inside a shadow DOM — completely isolated from the page’s own styles so it looks the same everywhere.

🎛️
Buttons — Minus, Speed, Plus, Close

[ − ] decreases speed by one step (default: −0.25×)
[ 1.50 ] shows current playback rate — drag to move the overlay, or double-click to toggle between 1× and your preferred speed
[ + ] increases speed by one step (default: +0.25×)
[ × ] hides the overlay. It stays hidden until you press H to show it again

🖱️
Drag to Reposition

Click and hold the speed number in the middle of the overlay and drag it anywhere on the video. The overlay remembers its position for the current session. Release anywhere — the position is preserved until you refresh the page or the video player changes.

👆
Double-Click Toggle

Double-click the speed number to toggle instantly between and your preferred speed (default: 1.5×). Useful when you want to slow down temporarily to catch a detail and then snap back to your normal watching speed. The same double-click toggle is also available on the popup’s speed badge.

🔍
Smart Attachment — No Thumbnails

The overlay only attaches to videos larger than 200 × 100 px. Tiny thumbnail previews, ad players, and decorative background videos are skipped. On YouTube specifically, the hover-preview video inside thumbnail cards is blocked by an additional ancestor element check (YTD-VIDEO-PREVIEW) — the size check alone is not reliable on large screens.

⚠️
Overlay not appearing on a video? Check that the video is at least 200 × 100 px in display size. If it’s a YouTube hover-thumbnail, this is intentional — the overlay doesn’t attach there. On other sites with unusual player layouts, the video may load after our scanner runs — the extension re-scans at +1s and +3s after page load to catch late-loading players.
4 Keyboard Shortcuts

All 13 Default Shortcuts

Every shortcut is remappable from the Shortcuts tab. Shortcuts use capture-phase interception — they fire before page-level key handlers, ensuring they work even on sites with heavy keyboard handling. Shortcuts never fire while you’re typing in an input, textarea, or contentEditable element.

ActionDefault KeyValueYouTube
Show / hide overlayH✅ Active
Decrease speedX−0.25×✅ Active
Increase speedC+0.25×✅ Active
Reset to 1×Z✅ Active
Preferred speedV1.5×✅ Active
Cycle speedsB✅ Active
Rewind 5s5s⬛ YT native
Advance 5s5s⬛ YT native
Pause / PlaySpace⬛ YT native
Frame backward,⬛ YT native
Frame forward.⬛ YT native
Volume up+0.1⬛ YT native
Volume down−0.1⬛ YT native
💡
⬛ YT native — On YouTube, these keys are intentionally passed through to YouTube’s own handlers. YouTube’s seek animation, +5s bubble, progress bar, frame stepping, and volume UI all continue working exactly as YouTube intended. See Section 5 for the full explanation of why this decision was made.

How Smart Key Handling Works (non-YouTube)

1
Space, Comma, Period — 80ms observe delay

On non-YouTube sites, these three keys use a brief observation window before acting. After the keydown fires, the extension waits 80ms and checks if the video’s paused state or currentTime changed by more than 0.05s. If it changed — the site handled the key — and the extension does nothing.

2
If the site didn’t handle it — we do

If nothing changed after 80ms, the extension fires its own action — pause/play for Space, frame-step for Comma/Period. This prevents double-firing on any site that has its own Space or frame-step handler, while still working correctly on sites that don’t handle those keys at all.

3
Frame stepping only works when paused

Comma (frame back) and Period (frame forward) only fire when the video is already paused. If the video is playing, these keys do nothing — the site’s normal comma/period handlers (if any) receive the event instead. Frame step size is 1/30s (≈ 33ms), assuming 30fps.

5 YouTube Handling

Smart YouTube Support

YouTube requires special handling for three distinct reasons. IMGLAB handles all three automatically — you don’t need to configure anything for YouTube to work correctly.

🔁
SPA Navigation — Overlay Re-Attachment

YouTube is a Single Page Application. When you click a video from a subscription page, YouTube does not remove and re-add the <video> element — it reuses the same element and moves it to a new parent container. Our MutationObserver never fires. IMGLAB listens for YouTube’s own yt-navigate-finish event, detects stale controllers (wrapper in wrong parent → invisible rect), re-attaches to the correct parent, and re-applies your saved speed.

🚦
Native Key Pass-Through — No Double-Fire

YouTube’s Space, arrow, comma, and period handlers take 80–100ms to execute. A “wait 80ms and check” approach fails because YouTube sometimes crosses the boundary on the slow side — causing both YouTube’s handler and ours to fire on the same keypress. Instead of a fragile timing race, IMGLAB simply skips these keys on YouTube entirely. YouTube’s seek animation, +5s bubble, progress bar, and frame stepping all work exactly as YouTube intended.

🖼️
Thumbnail Hover-Preview Guard

Hovering a YouTube thumbnail plays a short preview clip inside the card. IMGLAB prevents the overlay from attaching to these in two ways: a minimum size check (< 200 × 100px) and an ancestor tag check for YTD-VIDEO-PREVIEW. The size check alone is unreliable on large screens where the thumbnail card can exceed the threshold — the ancestor check is the definitive guard.

Live DOM Guard — Keys During Navigation

Between SPA navigations, before yt-navigate-finish fires, there’s a brief window where the controllers Map has stale entries. A document.contains(video) check in the keyboard handler prevents the stale state from calling e.preventDefault() on arrow keys during this transition window — YouTube’s seek always receives the event.

What does work on YouTube: Speed shortcuts H / X / C / Z / V / B are fully active on YouTube at all times. The overlay shows correctly, is draggable, and displays the current speed. Per-site speed memory saves your YouTube speed independently. The popup header ± buttons push speed to YouTube in real time.
6 Per-Site Speed Memory

Every Site Remembers Your Speed

When “Remember speed per site” is enabled (the default), each site you visit stores its last-used speed. The next time you open a video on that site, IMGLAB sets it to your saved speed automatically — no manual adjustment needed.

1
Storage key — hostname without www

Speeds are stored as { "hostname": speed } under the sitesSpeeds key in chrome.storage.sync. The hostname is normalised — www. is stripped and the string is lowercased. So www.youtube.com and youtube.com use the same key.

2
First visit — preferred speed

Sites you’ve never visited before start at your configured preferred speed (default: 1.5×). As soon as you change the speed, that value is saved for the hostname and will be restored on your next visit.

3
Re-apply on play

Some sites (including YouTube) reset playbackRate when a new video loads or auto-plays. IMGLAB listens for the play event and immediately re-applies the current speed if the site changed it — checking whether video.playbackRate differs from currentSpeed by more than 0.01.

4
Sync across devices

Speeds sync to all your Chrome profiles via chrome.storage.sync. If you set YouTube to 1.5× on your work laptop, opening YouTube on your home desktop will also start at 1.5×. Toggle “Remember speed per site” off in Settings to disable memory globally while keeping everything else.

💾
Popup shows current site speed: When you open the popup, the header speed badge displays the stored speed for the current active tab’s hostname — not a global setting. Changing it with the ± buttons immediately updates that site’s stored speed.
7 Limitations

Known Limitations

The limitations below are real and acknowledged. Most are caused by how browsers handle video DRM, how individual sites architect their video players, or by deliberate platform design decisions. We document each one honestly so you know exactly what to expect.
🔒
DRM-Protected Streams Reset Speed
Cannot be fixed

The extension sets video.playbackRate directly on the HTML5 video element. Sites with DRM-protected content (Netflix, Disney+, Amazon Prime Video) use proprietary player SDKs that intercept and reset the playback rate. Speed control may not persist on these platforms.

This is a platform-enforced restriction, not a bug. It cannot be worked around by any Chrome extension.
📐
Overlay Position on Some Sites
Occasional

The overlay wrapper uses position: absolute inside the video’s parent element. On sites where the video parent has unusual positioning context, overflow clipping, or CSS transforms, the overlay may appear offset or outside the visible video area.

Drag the overlay to a better position. The extension has been tested primarily on YouTube and standard HTML5 players. Report unusual sites via the support channels.
🌐
Non-Standard Video Players
Rare

The extension detects videos by scanning for native <video> HTML elements. Players built on WebGL, Flash-style objects, or fully custom rendering pipelines are not detected and will not receive an overlay or respond to speed shortcuts.

The vast majority of modern video sites use native <video> elements. If a specific site isn’t working, check the browser console for errors and report it.
⚠️
Frame-Rate Assumption (30fps)
Minor inaccuracy

Frame-by-frame navigation steps by 1/30s (≈ 33ms), assuming 30fps. For 24fps film content the step will skip slightly more than one frame. For 60fps content the step will land mid-frame. The HTML5 API does not expose the video’s actual frame rate.

For precise frame-by-frame work on 24fps content, use YouTube’s native comma/period frame stepping which uses the video’s actual frame rate metadata.
⏱️
Smart Key Delay on Non-YouTube
Occasional

Space, Comma, and Period use an 80ms observe delay on non-YouTube sites. If a site’s Space handler takes longer than 80ms, both the site’s handler and the extension may fire — causing double-pause. This was the original YouTube Space problem; the 80ms threshold works for most sites but not all.

If double-pause occurs on a specific non-YouTube site, remap Space to a different key in the Shortcuts tab to avoid the conflict entirely.
🔄
SPA Navigation on Non-YouTube Sites
Varies by site

The YouTube SPA fix uses YouTube’s own yt-navigate-finish event — a YouTube-specific signal. Other SPA sites (Vimeo, Twitch, etc.) may also reuse <video> elements without removing them, but we have no equivalent event to detect this. The overlay may be in the wrong position after navigation on those sites.

Refresh the page if the overlay appears misplaced after navigating within a non-YouTube SPA. We are investigating a generic solution.
8 Support

Support & Donations

FREE · OPEN · COMMUNITY-SUPPORTED

This Extension
Lives on Your Support

IMGLAB Video Speed Control is completely free — no ads, no data collection, no subscriptions. Every fix you’ve benefited from — YouTube SPA navigation, shadow DOM pointer events, smart key timing — took real debugging time. Your support funds all of it.

🔧 Keeping up with YouTube’s SPA changes, player updates, and Chrome API changes
Testing on Vimeo, Twitch, Udemy, and other major video platforms
🌱 Planned features: overlay button tooltips, visual speed-change flash, Firefox port
🐛 Investigating SPA navigation handling on non-YouTube sites

Whether this project continues to grow honestly depends on community support. If you watch videos faster, absorb lectures more efficiently, or navigate frame-by-frame with this tool — a one-time coffee is the best way to say “keep going.”

Troubleshooting
Overlay doesn’t appear on any video
Check that the video is at least 200 × 100 px. Try refreshing the page — the re-scan at +1s and +3s should catch most late-loading players. Also confirm the extension is enabled at chrome://extensions/.
Speed shortcuts don’t fire
Click somewhere on the page first to give it keyboard focus. If you’re typing in a search bar or comment box, shortcuts are intentionally suppressed. If still not working, check that the extension is not disabled on this site.
Overlay and speed missing after clicking a YouTube video
This is the YouTube SPA navigation case. The extension uses yt-navigate-finish to re-attach. If it’s still not working after a few seconds, refresh the page. Make sure you’re on v1.1.0 or later.
Space key double-pauses on a site
That site’s Space handler is slower than 80ms. Remap Space to a different key in the Shortcuts tab to avoid the race condition entirely.
Speed doesn’t stay set on Netflix / Disney+
These sites use DRM-protected streams whose player SDKs reset playbackRate. This cannot be fixed by any extension — it’s enforced by the platform.
Something else isn’t working
Send a message via Ko-fi or Buy Me a Coffee with the site URL and a description of the problem. User reports directly drive which issues get prioritised in future updates.