IMGLAB YouTube Immersive — User Guide
User Guide & Help Center

Pure YouTube.
Video Only.

Complete walkthrough — from install to advanced features. Auto theater mode, forced 4K, zoom to fill, video rotation, and built-in screenshot capture. Everything you need to know.

4K
AUTO QUALITY
3
PLAYER BUTTONS
3
KEY SHORTCUTS
0
SIGN-UP NEEDED
1 Getting Started

Install in 60 Seconds

IMGLAB YouTube Immersive is a Chrome extension that works exclusively on YouTube. Install it once and every YouTube video automatically becomes a distraction-free experience.

01
Add to Chrome from the Web Store

Click Add to Chrome — Free on the product page. Chrome prompts 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 your Chrome toolbar and pin IMGLAB YouTube Immersive so it’s always accessible.
02
Open any YouTube video

Navigate to any youtube.com/watch?v=... page. The extension activates automatically — no button to press. Within one second you’ll see: theater mode engaged, the navbar slides up, and the extension icon badge shows the active quality (e.g. 4K).

💡 You don’t need to click anything or configure anything for first use. Immersive mode is on by default and all defaults are set to sensible values.
03
Hover over the player to see the new buttons

Three new buttons are injected into YouTube’s player controls (right side): 📷 Screenshot, ↗↙ Zoom to Fill, and ↺ Rotate. They sit to the left of the existing controls. Hover the player to reveal them — they behave like native YouTube buttons.

💡 All three buttons can be independently shown or hidden from the Shortcuts tab in the popup.
04
Open the popup to configure

Click the IMGLAB ▶ icon in your toolbar to open the popup. Two tabs — Settings and Shortcuts — give you full control. All changes apply immediately to the active tab. No page refresh needed.

⚠️ The popup only shows full controls when you’re on a YouTube watch page. On other pages it shows “Navigate to a YouTube video” — this is normal.
🔄
Updating the extension: Update from chrome://extensions/ → Update, or via the Chrome Web Store. All saved settings and preferences are preserved across updates.
2 First Use

What Happens Automatically

On every YouTube watch page, the extension activates with zero user interaction. Here’s exactly what it does and in what order.

1
Theater mode is enforced

The extension calls YouTube’s own theater mode button click (same as pressing T) if the player isn’t already in theater mode. It waits for the video’s readyState ≥ 1 before doing so — never fires on a blank player. YouTube’s SPA navigation is handled via yt-navigate-finish, so every video in a playlist or subscription feed triggers the check correctly.

2
CSS is injected to hide distractions

Depending on your settings, the extension hides: the navbar (slides up, returns when you move the mouse to the top), live chat with full column collapse (no black gap), endscreen cards, and comments & sidebar. YouTube’s ambient glow (ytd-cinematics) is always killed — pure black background around the video, no color bleed.

3
4K quality is requested

The MAIN-world script (player.js) receives a quality request via CustomEvent. It waits 800ms for the player API to populate available quality levels, then calls setPlaybackQualityRange(), verifies 300ms later that it was applied, and retries once if not. The extension icon badge updates to reflect the active quality.

4
Player buttons are injected

Screenshot, Zoom, and Rotate buttons are injected into .ytp-right-controls. Because YouTube rebuilds this element during theater mode entry, ad transitions, and fullscreen changes, the extension uses a 4-retry strategy: 500 / 1500 / 3000 / 5000ms. A MutationObserver on document.body also watches for the element being rebuilt and re-injects immediately.

5
Navigation popups are suppressed

For 8 seconds after navigation, YouTube recommendation and upsell popups (tp-yt-paper-dialog, ytd-mealbar-promo-renderer) inside ytd-popup-container are hidden. Only these specific elements are targeted — the container itself is never touched, so IMGLAB’s own screenshot toasts and other overlays are unaffected.

⚠️
Immersive mode is on by default. If you want to temporarily disable everything — to read comments, see recommendations, or just check something — press N (session-only toggle) or use the master toggle in the popup. N key changes don’t save to storage; the popup toggle does.
3 Settings Tab

Popup — Settings Tab Walkthrough

Click the ▶ extension icon to open the popup. The Settings tab opens by default. Four cards group related settings clearly.

IMGLAB YouTube Immersive — Settings tab
Settings tab — default view
🎬
IMMERSIVE — Enable immersive mode

The master toggle for the entire extension’s active state on the current tab. When OFF: theater mode exits (restoring any pre-immersive state), all hidden elements reappear, and the ambient glow returns. When toggled back ON: everything re-activates immediately. This setting is saved to storage — it persists across sessions and page navigations.

The status dot in the popup header (grey/green) reflects whether immersive is currently active on the open YouTube tab — not just the saved setting. A green dot means it’s active right now.
📺
QUALITY — Auto HD + Preferred quality

The Auto HD toggle controls whether quality is forced at all. The label updates dynamically — if your preferred quality is 4K it shows “Auto 4K”, FHD shows “Auto FHD”, and so on.

The Preferred quality dropdown sets the target: Highest (8K), 4K, 1440p, 1080p, 720p, 480p, 360p. Default is 4K (2160p). The extension picks the best available match — if the video doesn’t have 4K, it selects the next best available quality below your preference.

Why 4K as default, not highest? 4K on a 1440p monitor gives better sharpness than native 1440p due to higher bitrate. 8K only makes sense on very high-end hardware.
🙈
HIDE — Live chat / Endscreen cards / Comments & sidebar

Each toggle hides a specific part of the YouTube watch page. All three default to ON. Changes apply immediately — no navigation needed.

Live chat — fully collapses the chat column (no black gap). Targets YouTube’s actual layout container that holds 402px even when chat is empty.
Endscreen cards — hides the overlapping recommendation cards that appear in the final 15–20 seconds.
Comments & sidebar — hides the description, comments section, and the recommendations sidebar below the player.

🔍
ZOOM TO FILL — Aspect ratio + Fine tune

The aspect ratio pill group selects the zoom preset: Off / 16:9 / 21:9 / 4:3. The selected pill lights up in red. Changing the preset applies immediately to the video.

The Fine tune row lets you adjust zoom ±0.1 per click. The scale label (e.g. ×1.00) shows the current fine zoom. Double-click the label to reset fine tune back to ×1.00 without changing the AR preset.

The Zoom card also stays in sync with the player button — if you scroll the player button while the popup is open, the popup updates within 500ms via polling.
4 Shortcuts Tab

Popup — Shortcuts Tab Walkthrough

The Shortcuts tab handles settings you configure once — player button visibility, screenshot behaviour, and keyboard bindings.

IMGLAB YouTube Immersive — Shortcuts tab
Shortcuts tab — all three cards
🎮
PLAYER BUTTONS — Show zoom / rotate / screenshot

Three toggles independently control whether each button appears in YouTube’s player controls. All three default to ON. Turning one off removes it from the player immediately — useful if you never use rotation and want a cleaner controls bar.

These buttons are injected to the left of YouTube’s own controls (autonav, subtitles, settings, theater, fullscreen).

If a button disappears after a YouTube update or ad transition, give it 5 seconds — the 4-retry injection system will restore it automatically.
📷
SCREENSHOT — Apply rotation / Apply zoom crop

Apply rotation to screenshot — when ON, screenshots respect the current rotation angle. A 90° rotation produces a portrait JPEG with the canvas rotated accordingly. When OFF, screenshots always save in the video’s native landscape orientation regardless of display rotation.

Apply zoom crop to screenshot — when ON, the screenshot is cropped to match exactly what the player is showing. When the video is zoomed 21:9, the top and bottom letterbox bars are cropped out. Crop is calculated per-axis — the full-resolution axis is always preserved.

Both settings default to ON. Turn them off if you want raw uncropped screenshots at the video’s full native resolution regardless of the current zoom or rotation display.
⌨️
KEYBINDINGS — Toggle immersive / Rotate video / Screenshot

Each row shows the action, the current key badge, and a Reset button (hover to reveal). To change a shortcut: click the key badge — it turns red and shows “…”. Press any key or key+modifier combination. Press Escape to cancel without changing the current key.

Supported modifiers: Ctrl, Alt, Shift, or any combination. Example: Ctrl+Shift+S is a valid screenshot shortcut.

A hint at the bottom of the Shortcuts tab reminds you to click a key badge to start recording.

All Three Keyboard Shortcuts

ActionDefault KeySaves?Resets?
Toggle immersive mode N ⚡ Session only Per navigation
Rotate video 90° R ⚡ Session only Per navigation
Take screenshot P ✅ Persists
💡
Why N and R are session-only: If toggling immersive OFF saved to storage, then briefly disabling it to check comments would permanently disable it for all future videos. The popup toggle is the right way to change the persistent setting. The N key is for temporary toggles in the current session only.
5 Zoom to Fill

Zoom to Fill — Complete Guide

Zoom to Fill removes letterbox and pillarbox bars by scaling the video element to fill the player. It works in immersive mode and normal mode, and at any rotation angle.

🖱️
Player Button — Click and Scroll

Single click — toggles between Off and 21:9. The most common use: click to remove widescreen letterbox bars instantly.

Scroll up/down — fine-tunes the zoom ±0.05 per scroll step. Label switches to show the actual ratio (e.g. ×1.31) rather than the preset name.

Scroll back to ×1.00 — auto-resets to Off. You don’t need to click to deactivate.

🎚️
Popup Fine Tune

The popup offers ±0.1 step fine tune buttons and an AR preset selector. Double-click the scale label (e.g. ×1.00) to reset fine tune to ×1.00 without clearing the AR preset. The popup stays in sync with the player button — scrolling the player button while the popup is open updates the display within 500ms.

Aspect Ratio Presets

PresetScaleUse case
Off×1.00No zoom — native display with no cropping
16:9×1.00Same as Off but activates overflow:hidden for fine tune — use as a fine-tune anchor
21:9×1.3125Cinema widescreen — removes letterbox bars on films and premium content
4:3×1.3333Old TV / DVD / retro content — removes pillarbox bars on 4:3 sources
🔧
How the floor works: You can never zoom below ×1.00 total scale — that would add bars rather than remove them. However, the fine tune floor is calculated as 1.0 / AR_SCALES[currentAR], not a hardcoded 1.0. This means with 21:9 active (base ×1.31), fineZoom can technically be 0.76 because the total remains ×1.00. Without this, the minus button breaks completely whenever any AR preset is active.

Zoom + Rotation Together

When a rotation is active alongside zoom, both transforms are calculated in a single applyVideoTransform() call. At 90°/270°:

f
finalScale = rotationFillScale × zoomScale

Where rotationFillScale = Math.min(playerHeight / videoOffsetWidth, playerWidth / videoOffsetHeight). Both values are multiplied together before writing to video.style.scale. Two separate assignments would overwrite each other — this never happens.

6 Video Rotation

Video Rotation

Rotate any video 90° at a time. Useful for vertical phone recordings uploaded as landscape videos, or for reading text in rotated orientation.

🔄
R Key & ↺ Player Button

Press R to cycle: 0° → 90° → 180° → 270° → 0°. The ↺ button in the player controls does the same. Rotation state resets on every navigation — each new video starts at 0°. Scale recalculates automatically on window resize and when theater mode changes.

📐
Correct Scale Formula

At 90°/270° the video’s visual footprint swaps axes. The scale formula is:

scale = Math.min(playerH / video.offsetW, playerW / video.offsetH)

Using video.videoWidth/Height (native resolution) gives ~0.34× — a tiny video in the centre. Offset dimensions give the correct 1.71× that fills the player correctly.

⚠️
Rotation button disappeared? YouTube rebuilds .ytp-right-controls on theater mode changes, ad transitions, and fullscreen entry. The retry system (500 / 1500 / 3000 / 5000ms) will restore it within 5 seconds. If it doesn’t come back, toggle immersive off and on via the popup to force a re-injection.
7 Screenshot

Built-in Screenshot

Capture the exact frame you see — including the current rotation and zoom crop. Screenshots are saved as JPEG at 85% quality with a title and timestamp filename.

📷
P Key & Camera Button

Press P anywhere on the watch page or click the 📷 camera button in player controls. A toast notification appears at the bottom of the screen for 2 seconds confirming the save. Both trigger identically — same output, same filename.

🎞️
Full Native Resolution

The canvas draws at video.videoWidth × video.videoHeight — the stream’s actual pixels. A 4K video captures at 3840×2160 before any crop. The final file size depends on JPEG compression at 85% and how much of the frame is cropped by the zoom setting.

🔄
Rotation-Aware Output

With “Apply rotation” ON: the canvas dimensions swap for 90°/270° (portrait output). ctx.translate(cx, cy) → ctx.rotate(angle) → ctx.drawImage() is applied before saving. The output JPEG orientation matches exactly what you see on screen.

✂️
Per-Axis Zoom Crop

With “Apply zoom crop” ON: the visible fraction is calculated per-axis.

fracX = min(1.0, playerW / (videoOffsetW × zoom))

An axis with frac = 1.0 is fully visible — it is not cropped. Only the clipped axis shrinks. Example: 4:3 zoom on 854×480 saves as 640×480 (sides cropped, full height preserved) — not 641×360.

Filename Format

📁
My Video Title 4-32.jpg

Format: {video title} {minutes}-{seconds}.jpg. The title is pulled from YouTube’s own heading element (h1.ytd-watch-metadata). For videos over an hour, hours are prepended: 1-04-32.jpg. Windows-invalid characters in the title are replaced with underscores.

📸
Already using IMGLAB Video Screenshot? Both extensions coexist without conflict. They use different button classes and toast containers. The built-in screenshot here is a convenience feature — if you prefer Video Screenshot’s more advanced capture options (WebP, PNG, format selection), keep using that extension. Both can be active simultaneously.
8 Quality Badge

Quality Badge on the Extension Icon

The extension icon shows a gold badge with the current quality — so you never need to open the popup just to check what’s active. The badge is per-tab, meaning each YouTube tab can show a different quality independently.

MAX
Highest available
Preferred quality: 0 (auto-highest, incl. 8K)
8K
4320p
Preferred quality: 4320
4K
2160p — Default
Best quality/bandwidth balance
QHD
1440p
Great on 1440p native monitors
FHD
1080p
Full HD — reliable on any connection
OFF
Auto HD disabled
YouTube chooses quality
Why default to 4K and not highest? On a 1440p or 1080p monitor, 4K still delivers better quality than native resolution — YouTube encodes 4K at a significantly higher bitrate, and the downsampling produces noticeably sharper output. 8K is impractical on most hardware and provides no visible benefit on standard monitors while consuming far more bandwidth.
⚠️
Badge not updating? The badge is set by background.js (the service worker) when content.js sends a SET_BADGE message. If it stays blank or shows the wrong value, try navigating to the video again or reloading the page. The badge only updates after the quality request completes — typically 1–2 seconds after page load.
9 Limitations

Known Limitations

The limitations below are real and acknowledged. Most are caused by how YouTube architected its player, Chrome’s extension model, or deliberate YouTube design choices. Each is documented so you know exactly what to expect and why.
🔁
YouTube-Only
By design

This extension only works on youtube.com watch pages. It does not inject anything on other video sites — that’s what IMGLAB Video Speed Control and Video Screenshot are for. On non-watch YouTube pages (home, subscriptions, search), the popup shows “Navigate to a YouTube video”.

For speed control and screenshots on any video site, install the companion IMGLAB Video Speed Control and IMGLAB Video Screenshot extensions.
📺
Quality Not Always Achievable
Expected behaviour

If a video doesn’t have your preferred quality available (e.g. a 720p-max upload when you’ve set 4K), the extension picks the next best available quality below your preference. The badge will show the actual quality applied, not your preference.

This is correct behaviour. The quality badge on the icon always reflects what’s actually playing — check it after loading any video to confirm.
🎭
Player Buttons Temporarily Missing
Temporary

YouTube rebuilds .ytp-right-controls silently during theater entry, ad transitions, and fullscreen changes. There’s a brief window (up to 5 seconds) where the zoom, rotate, and screenshot buttons are absent while the retry system re-injects them.

Wait up to 5 seconds — the retry system fires at 500 / 1500 / 3000 / 5000ms. If buttons don’t return after 5s, toggle immersive off/on in the popup to force re-injection.
🔴
Theater Mode on Live Videos (Squeezeback)
Partial

YouTube live videos with chat open use a different layout (squeezeback). The extension handles this with #panels-full-bleed-container collapse, but some edge cases in the live/theater layout can result in a slightly narrower player on first load until the layout settles.

Toggle the “Hide live chat” setting off and on if the live player layout looks off. This forces a CSS refresh that corrects the layout.
🔧
YouTube DOM Changes Can Break Things
Ongoing maintenance

YouTube periodically changes its DOM structure, class names, and player API. Changes to .ytp-right-controls, #panels-full-bleed-container, or the quality API can break injection, layout fixes, or quality control without warning. These issues are fixed in extension updates.

Keep the extension updated. If something suddenly stops working after a YouTube update, check imglab.net for an updated version or report via support.
🖼️
Screenshot on Fullscreen
Minor

The screenshot toast notification may not be visible while in fullscreen because Chrome suppresses some DOM repaints inside fullscreen contexts. The screenshot file is still saved to your Downloads folder correctly — the toast is purely cosmetic.

Check your Downloads folder if you don’t see the toast. The file will be there with the correct title and timestamp filename.
10 Support

Support & Donations

FREE · YOUTUBE-ONLY · COMMUNITY-SUPPORTED

This Extension
Lives on Your Support

IMGLAB YouTube Immersive is completely free — no ads, no data collection, no subscriptions. Every fix you’ve benefited from — the live chat gap, per-axis crop math, the zoom-rotation unified transform — took real debugging time. Your support funds all of it.

🔧 Keeping up with YouTube’s frequent DOM changes and player API updates
New features: more zoom presets, additional player buttons, advanced screenshot options
🌱 Long-term: cross-browser support, IMGLAB Pro features with donation key system
🐛 Investigating and fixing YouTube layout changes as they are deployed

Whether this project continues to grow honestly depends on community support. If you’ve watched videos in peace, caught a screenshot at the perfect moment, or zoomed a widescreen film to fill your display — a one-time coffee is the best way to say “keep going.”

Troubleshooting
Immersive mode isn’t activating
Confirm the master toggle in Settings tab is ON. Check the status dot in the popup header — green means active. If grey while on a watch page, try reloading the tab.
Quality badge stays blank or wrong
The badge is set 1–2 seconds after page load when the quality applies. If it stays blank, check that the service worker is active: open chrome://extensions/, find IMGLAB, and click Service worker to inspect it.
Player buttons disappeared
YouTube rebuilt its controls container — normal after ads or theater changes. Wait up to 5 seconds for the retry system. If still missing, toggle immersive off and on via the popup to force re-injection.
Live chat hides but black gap remains
Toggle “Hide live chat” off then back on. If it persists, this is the #panels-full-bleed-container layout edge case — try reloading the live video page.
Screenshot saves as wrong dimensions
Confirm “Apply zoom crop” is ON in the Shortcuts tab. Check the Settings tab — the Zoom to Fill card should show the correct AR and fine zoom. If dimensions still seem wrong, note the exact input (video resolution, AR preset, fine zoom value) and report it.
Zoom resets when navigating videos
This is expected — zoom and rotation state are session-only per video. Only the AR preset and fine tune saved in storage persist. Navigate to a video and re-apply zoom from the player button or popup if needed.
Something else isn’t working
Send a message via Ko-fi or Buy Me a Coffee with the YouTube video URL and a description of the problem. Screenshots of the browser console (F12 → Console) are especially helpful.