GVF · Ultimate Video Enhancer

HUD Reference

Complete documentation for all four overlay panels — Main, Grading, Settings and Scopes — with controls, shortcuts, and parameter ranges.

Main HUD  H
Grading HUD  G
Settings HUD  I
Scopes HUD  S
What is this?

GVF — Ultimate Video Enhancer

A Tampermonkey / Greasemonkey userscript that intercepts every HTML5 <video> element on any website and applies real-time visual post-processing — no browser extension, no server, no installation beyond the script itself. Works on YouTube, Twitch, Netflix, Disney+, Crunchyroll, and any other site that uses a standard HTML5 video player.

How it works

GVF wraps each video in a processing pipeline and renders the enhanced output as a transparent overlay sitting directly on top of the original player. The video itself is never modified — all effects are applied in real time as each frame is drawn. The pipeline switches automatically between two modes: WebGL2 (GPU) for full GLSL shader support, and SVG filters as a universal fallback.

Render Pipeline

In GPU mode, a WebGL2 Ping-Pong FBO chain processes all active GLSL filters on a single context — each filter reads from the previous FBO and writes to the next. Frame timing uses requestVideoFrameCallback (rVFC) where available, with a requestAnimationFrame fallback. GLSL render rate is configurable: 24 fps (Light), 30 fps (Normal), or 60 fps (Turbo).

Four Custom Filter Types
WebGL / GLSL Shaders Canvas 2D Overlays SVG Filters Web Audio Filters

Users can write and install custom filters in any of these four types via the built-in code editor. Filters can be shared via the associated PHP website and installed with one click.

Profiles & LUTs

All settings are saved in named User Profiles that can be switched with a single key press. Profiles store every slider value, active filters, render mode, and LUT selection. 3D LUT support accepts tiled PNG and .cube files — fitted to a 4×5 matrix via least-squares regression for zero-overhead GPU application.

DRM & Browser Compatibility

GVF auto-detects Widevine-protected content via the encrypted event and video.mediaKeys. On DRM streams, WebGL canvas readback is blocked — the script falls back gracefully to SVG mode. On Edge + Widevine L1 with hardware compositing, all GPU filters are silently disabled to prevent black screens.

Chrome Firefox Edge Safari (limited)
Installation

Install Tampermonkey (Chrome / Edge) or Greasemonkey (Firefox), then install the script from Greasy Fork. The script matches *://*/* — it activates on every page automatically and attaches to any <video> element it finds, including those added dynamically after page load via MutationObserver.

Greasy Fork →
01

Main HUD H

Top-level controls for look presets and the six primary image-science sliders. Always visible when the HUD is shown. Positioned top-left of the video.

Live Preview
B
D
O
V
P
A
User
GPU
SL
+1.00
SR
+0.50
BL
−1.20
WL
+0.20
DN
0.00
HDR
0.00
Width: auto · Position: top-left of video
Preset Buttons
ButtonFunction
BBase — enable/disable all GVF processing
DDark Moody — cinematic low-key look
OTeal & Orange — Hollywood color contrast
VVibrant Saturation — boosted chroma
PHDR push — lifts highlights & tone
AAuto — AI white-balance correction
Render Badge

Shows active render pipeline next to the profile name. GPU = WebGL2 · SVG = SVG filter stack. Switch via the Settings HUD.

Sliders — Primary Image Science
ParamRangeSnapDescription
SL −2 … +2 0 Shadow Lift — raises or lowers dark tones; controls black-point lift and shadow separation.
SR −2 … +2 0 Shadow Roll — shapes the shadow-to-midtone transition curve; affects film-like roll-off.
BL −2 … +2 0 Black Level — crushes or opens the absolute black point; use negatively for deep blacks.
WL −2 … +2 0 White Level — clips or extends the white ceiling; controls highlight roll-off on bright areas.
DN −1.5 … +1.5 0 Depth / Denoise — edge-aware smoothing or depth enhancement. Firefox: disabled
HDR −1 … +2 0 HDR tone-mapping strength — tonemap operator applied to the full frame. 0 = bypass.
All six sliders snap to 0 within half a step — makes it easy to return to neutral without typing a value.
02

Grading HUD G

Fine-grained color grading with 11 tonal controls, per-channel RGB gain (0–255), color-blind simulation, LUT profile selector, and the custom filter manager.

Live Preview
Grading (G) & RGB Gain (0–255)
Contrast
0.0
Black Level
0.0
White Level
0.0
Highlights
0.0
Shadows
0.0
Saturation
0.0
Vibrance
0.0
Sharpen
0.0
Gamma
0.0
Grain (Banding)
0.0
Hue Correction
0.0
R Gain (0-255)
128
G Gain (0-255)
128
B Gain (0-255)
128
Color Blind
None
LUT
None
+
SVG/WebGL Codes
⬡ Manage
0/0
Width: 340px · Scrollable · Position: below Main HUD
Tonal Controls — range −10 … +10
ControlDescription
ContrastS-curve contrast around midtone pivot
Black LevelAbsolute black crush / lift
White LevelWhite ceiling / clip point
HighlightsSelective highlight roll-off
ShadowsSelective shadow detail recovery
SaturationGlobal chroma multiplier
VibranceSkin-safe smart saturation
SharpenLuma-masked edge sharpening (LumaSharpen)
GammaMid-grey gamma power curve
Grain (Banding)Film grain / dithering to break banding
Hue CorrectionGlobal hue rotation in HSL space
RGB Gain Channels

Three independent per-channel multipliers, range 0–255, neutral at 128. Applied after all tonal grading. Accent-color tracks the channel color in the slider.

Color Blind Filter
None Protanopia Deuteranopia Tritanomaly

SVG feColorMatrix simulation. Applied on top of all grading — useful for accessibility testing.

LUT Profile + SVG/WebGL Codes

Select a loaded 3D LUT (PNG tiled or .cube), grouped by category. The + button opens the LUT Manager. Below that, SVG/WebGL Codes opens the custom filter code manager — showing active/total count. Disabled in Firefox

03

Settings HUD I

Export/import all settings as JSON, with screenshot and video recording capture, profile management, GLSL render-mode control, and debug tools.

Live Preview
Settings (I) Export/Import JSON
Refresh
Save
Select All
Export .json
Import .json
Reset to defaults
⬇ Load Example
Screenshot
Record
⚙️ Config
🐞 Debug: OFF
Tip: paste JSON here → Save
GLSL Mode:
Normal (30 fps)
Width: 420px · Position: below Grading HUD
JSON Textarea

Shows full settings as formatted JSON. Edits trigger a 450ms auto-save debounce — valid JSON is applied immediately to the active profile without pressing Save. Dirty state tracked with data-dirty.

Button Reference
ButtonAction
RefreshRe-reads current settings into the textarea
SaveApplies textarea JSON to active profile immediately
Select AllSelects all textarea text for quick copy
Export .jsonDownloads timestamped gvf-settings_YYYY-MM-DD.json
Import .jsonOpens file picker, applies JSON on load
Reset to defaultsRestores all settings to factory defaults
⬇ Load ExampleFetches example profile from GitHub and applies it
ScreenshotCaptures current frame with filters baked. Firefox: disabled
RecordStarts/stops MediaRecorder on processed canvas. Firefox: disabled
⚙️ ConfigOpens User Profile Manager overlay
🐞 DebugToggles verbose console logging + debug dot indicator
GLSL Mode Selector
Light — 24 fps Normal — 30 fps Turbo — 60 fps

Controls the WebGL render loop target FPS. Switching is live — no restart required. Does not affect video playback quality or actual video FPS. Stored as gvf_glsl_mode.

04

Scopes HUD S

Live video analysis: 16-bucket luma histogram, per-channel RGB histograms, average saturation meter, and a Y/RGB/Sat footer summary. Updates every ~100 ms via a 160×90 canvas sample.

Live Preview
Scopes (S) live
Luma Y
RGB
R
G
B
Sat
0.34
Y: 0.42
RGB: 0.40
Sat: 0.34
Width: 280px · pointer-events: none · Position: top-left
Sections
SectionDescription
Luma Y 16-bucket brightness histogram sampled from the processed frame. Bars: #4CAF50, height 40px. Updates with 0.1s CSS transition.
RGB Three side-by-side 16-bucket histograms for R, G and B channels individually. Height 32px each. Color: R #ff5252 · G #52ff52 · B #5252ff
Sat Average saturation bar with linear-gradient(#ffd700 → #ff8c00). 0 = fully desaturated, 1 = maximum.
Avg footer Three read-only cells: average luma Y, average RGB brightness, and average saturation — formatted to 2 decimal places.
Sampling Architecture

A hidden 160×90 canvas is drawn from the primary video element and read back via getImageData(). The loop runs in a requestAnimationFrame at 10 fps (100ms interval). DRM-protected content causes a SecurityError on readback — scopes silently skip that frame.

Scopes are read-only — pointer-events: none. Clicking through to the video works normally even when Scopes is open.
05

Custom Filter Codes Modal

Full-featured manager for writing, enabling, reordering and hotkey-assigning custom SVG, GLSL, Canvas 2D and Audio filters. Opened via ⬡ Manage in the Grading HUD. Disabled in Firefox

Modal Preview
⬡ Custom Filter Codes (SVG / WebGL)
📚 Library
🔍 Search label, tags, category…
All
GLSL
2D
SVG
🎙
Cinematic Grade GLSL lut
🗑
Vignette Overlay SVG
⌨ Q
🗑
➕ Add new Custom Filter
Label (e.g. "Sobel Sketch")
⬡ WebGL/GLSL
void mainImage(out vec4 O, vec2 U) {
  O = texture(u_video, U/u_res);
}
Width: 560px · Draggable · Centered
Features
FeatureDescription
SearchFull-text search across label, tags, category and description
Type filter pillsFilter list to All / GLSL / 2D / SVG / Audio
Type togglesGlobal enable/disable per type — snapshots previously enabled filters so re-enabling restores them exactly
Tag cloudClickable tag pills appear dynamically from all loaded filter metadata
Drag to reorder⠿ handle — drag rows to set filter execution order in the pipeline
Hotkey ⌨Assign any key to toggle a filter on/off. Hotkey badge shown inline on the row
Edit ✏Opens inline editor: label, filter type dropdown, code textarea, tags, category, description, blend mode
Delete 🗑Removes filter permanently from storage
📚 LibraryOpens svg.ts3x.cc — the associated filter-sharing website for one-click installs
DRM bannerRed warning shown when the current domain is on the GLSL blacklist — GLSL rows are dimmed and disabled
Filter Types
GLSL — WebGL2 shader, GLSL ES 3.0 Canvas 2D — rAF loop, ctx API SVG — feColorMatrix / feTurbulence etc. Audio — Web Audio API + Speech
Filters are stored as JSON in GM storage (gvf_custom_svg_codes). Each entry carries: id, label, code, type, enabled, tags, category, description, blendMode, hotkey.
06

LUT Profile Manager

Upload, organize and apply 3D LUT files (tiled PNG or .cube). Groups with favorites support. Opened via the + button in the Grading HUD LUT row.

Modal Preview
🎨 LUT Profile Manager
🟠 Active LUT: Cinematic Warm
Group
All groups ▾
Add Group
Rename
Delete
⭐ Cinematic Warm
Active
🗑
Cool Shadows
Apply
🗑
📤 Upload PNG LUT
📤 Upload .cube
📦 Export ZIP
📥 Import ZIP
Width: 820px · Draggable · Centered
Features
FeatureDescription
Active LUT barAlways shows the currently applied LUT name at the top
GroupsOrganize profiles into named groups. Add / Rename / Delete. Special pseudo-group: ⭐ My Favorites
Group filterDropdown filters the profile list to a single group, Favorites, Ungrouped, or All
ApplySets the clicked profile as the active LUT — immediately applies to the video pipeline
Upload PNG LUTAccepts tiled PNG LUT (e.g. 512×512 = 64³). Fitted to a 4×5 affine matrix via least-squares
Upload .cubeParses standard Resolve/Nuke CUBE files. Supports DOMAIN_MIN/MAX and LUT_3D_SIZE
Export ZIPDownloads all LUT profiles as a ZIP of per-profile JSON files
Import ZIP/JSONRe-imports a previously exported ZIP or a single profile JSON
Favorites ⭐Star any profile to add it to the Favorites pseudo-group for fast access
LUT Fitting Algorithm

Both PNG and .cube files are sampled at an N³ grid (default 11³ = 1331 points), fitted to a 4×5 affine RGB matrix via least-squares regression, then stored as the matrix coefficients — no texture sampling at runtime, just a single matrix multiply per pixel.

07

User Profile Manager

Create, switch, rename, delete and import/export named settings profiles. Each profile stores every slider value, render mode, LUT selection and active filters. Opened via ⚙️ Config in the Settings HUD or cycled with F8.

Modal Preview
👤 User Profile Manager
🔵 Active profile: Cinematic
● Cinematic
Active
✏ Rename
🗑
Default
Switch
✏ Rename
🗑
New profile name…
+ Add
💾 Save current profile
📦 Export profiles (ZIP)
📥 Import profiles (ZIP/JSON)
Width: 820px · Draggable · Centered
Features
FeatureDescription
Active profile barAlways shows the currently loaded profile name with a blue indicator
SwitchLoads all settings from the selected profile immediately — sliders, render mode, LUT, filters
Rename ✏Inline rename of any profile without switching to it
Delete 🗑Removes profile permanently. Falls back to Default if active profile is deleted
+ AddCreates a new profile from the current settings state with the typed name
💾 Save currentExplicitly writes all current slider values into the active profile in GM storage
Export ZIPDownloads all profiles as a ZIP — one JSON file per profile, timestamped filename
Import ZIP/JSONAccepts a previously exported ZIP or single profile JSON. Merges into existing profiles
F8 cycleCycles to the next profile in order without opening the manager. Shift+F8 cycles backwards
What a profile stores
All HUD slider values Render mode (GPU/SVG) Active LUT profile Look toggles B/D/O/V/P/A Auto strength + lock WB All grading uniforms Color blind filter HUD visibility (not saved) Debug mode (not saved)
Auto-save happens on every slider change — the active profile is kept in sync automatically. The 💾 Save button is for explicit force-saves after manual JSON edits in the IO HUD.
08

Keyboard Shortcuts

All global hotkeys registered by GVF. Shortcuts use capture: true to intercept before the page.

HUD Visibility
HToggle Main HUD
GToggle Grading HUD
IToggle Settings HUD
SToggle Scopes HUD
Look Toggles
BToggle Base (enable/disable GVF)
DToggle Dark Moody
OToggle Teal & Orange
VToggle Vibrant Saturation
PToggle HDR push
AToggle Auto white-balance
System
Ctrl+Alt+SToggle Scopes HUD (long)
F8Cycle to next user profile
Ctrl+Alt+XSwitch render mode GPU ↔ SVG