Manifest V3 · WebGL · local only

Flat frames in.
Graded frames out.

A real post-processing stack, not a filter with a nice name: bright pass, golden-angle bloom, radial light shafts, ACES tonemapping, black point, grade and unsharp mask. One pass, on your own GPU, with a handle you can drag.

Version
1.0.0
Presets
8
Live dials
8
Render passes
1
Export
ReShade .ini
Telemetry
none
A Chrome window on the live roblox.com with the RobloxShaders lab open from the toolbar, split between a raw and a graded frame
Aboveone screenshot, nothing composited: a real Chrome window on the live roblox.com, with the real lab open from the toolbar.
36bloom taps per pixel
26steps marched to the sun
1fragment shader
0bytes sent off device
01/ 05 The pipeline

Six stages, one fragment shader.

All of it happens in a single pass, which is why it holds a frame rate on a laptop. The same source runs in the popup, on this page, and in every render below.

01 — Bright pass

Keep the highlights

Pixels above the threshold are kept and squared, so highlights bloom and midtones stay where they are.

02 — Spiral bloom

36 taps, golden angle

An isotropic glow for a fraction of the cost of a separable blur, with no axis showing through.

03 — Light shafts

26 steps to the sun

Marched toward the sun position with 0.935 decay and tinted warm on the way out.

04 — ACES tonemap

The filmic curve

What keeps a blown-out sky from flattening into paper white when the exposure comes up.

05 — Grade

Exposure to temperature

Exposure, black point, contrast, saturation and a temperature tilt, applied in that order.

06 — Finish

Sharpen and settle

Unsharp mask, chromatic aberration, vignette and a grain dither to break up banding.

02/ 05 Live example

Scroll it, or drag it.

Not a video and not two exported images. On the left is a real, ungraded Roblox frame, exactly as it was sent to us. On the right are the same pixels after the shipped shader runs on your own GPU. The split follows the scroll until you take the handle.

RAWCINEMATIC real capture · ungraded
—

PRESET

DIALS

No WebGL on this machine? The canvas falls back to the raw frame and the label says so, rather than pretending the grade applied.

03/ 05 Images

Shaders running in Roblox itself.

Every frame in this section was captured in a real game by the people using this. Nothing here is a render of a scene we invented, and nothing has been touched up.

A Roblox scene with no shader applied
BEFOREno shader
A Roblox scene with shaders applied
AFTERbloom · reflections · grade
A beach scene in Roblox with shaders applied
Wet sand, soft horizon
A night city scene in Roblox with shaders applied
Night city, bloom on neon
A snowy scene in Roblox with shaders applied
Snow, reflected light
Presets

Eight looks, one real frame.

The ungraded capture above, pushed through each preset by the shader the extension ships. Vanilla is the frame itself, untouched, so you can see where the rest start from.

Vanilla preset
Vanillauntouched output
Clarity preset
Claritymicro-contrast, true hue
Cinematic preset
Cinematicteal-orange, soft shafts
Golden Hour preset
Golden Hourwarm scatter, deep sky
Lumen preset
Lumenvivid daylight, clean sky
Neon Drive preset
Neon Drivecold, bleeding, fringed
Arctic preset
Arcticcold, crisp, high detail
Noir preset
Noirmonochrome, hard falloff
Screens

The lab, straight from the running build.

The lab on the Cinematic preset
Cinematic
The lab on the Neon Drive preset
Neon Drive
The lab with the dials pushed off-preset
Off-preset
04/ 05 Download

Unzip, load unpacked, done.

Three minutes, no store listing, no account. The archive is the complete source: the shader you just dragged is the one in shader.js, readable end to end. Most of the weight is frame.js, the real capture the lab grades.

RobloxShaders 1.0.0

Manifest V3 · WebGL 1 · Chromium 102+
ZIP
RobloxShaders.zip
Download the archive

Keep the unzipped folder somewhere permanent. Chrome re-reads it on every launch, so deleting the folder uninstalls the extension.

Requirements
  • Chromium 102 or newer
  • WebGL enabled, which is the default
  • Permission to enable Developer mode
Contents
RobloxShaders/ ├─ manifest.json ├─ background.js ├─ shader.js ├─ frame.js the real capture the lab grades ├─ popup.html · popup.css · popup.js ├─ content.js · content.css ├─ welcome.html ├─ README.txt └─ icons/ 16 · 32 · 48 · 128
Step 01

Open the extensions manager

Type chrome://extensions in the address bar and press Enter. The same page sits behind the three-dot menu under Extensions → Manage extensions.

Step 02

Turn on Developer mode

The switch is in the top right corner. Flipping it reveals three buttons that were not there a moment ago: Load unpacked, Pack extension and Update.

Step 03

Click Load unpacked

Pick the folder that came out of the zip, the one that contains manifest.json — not the zip, and not a folder one level above it. Chrome reads the manifest and the card appears.

Step 04

The card appears

Chrome lists the extension with the id it generated for your copy and a link straight to the running service worker. Pin it from the puzzle icon, open the lab, pick a preset and press Apply to roblox.com. The grade is stored per device and survives a restart.

chrome://extensions
The Chrome extensions page 1
Developer mode switched on, revealing three new buttons 2
The Load unpacked button in the Chrome extensions toolbar 3
The RobloxShaders card on the Chrome extensions page, with its generated id and a link to the service worker
01 / 04
05/ 05 FAQ

The questions worth asking.

Is this a real shader or a CSS filter?
A real one. shader.js compiles a GLSL fragment shader and runs it on your GPU through WebGL: bright pass, a 36-tap golden-angle bloom, 26 marched light shafts, the ACES curve, black point, grade, unsharp mask, chromatic aberration, vignette and a grain dither. A CSS filter cannot bloom a highlight or march toward a sun position, because it has no access to neighbouring pixels.
Does it change the Roblox game client?
No. Nothing is injected into the game process, no files are patched and no DLL is loaded. The extension works on what the browser renders on roblox.com, and the lab in the popup grades frames it draws itself. If you were hoping for an in-client ReShade replacement, this is honestly not that.
Then what is the .ini export for?
Convenience. Once you have dialled in a look you like, .ini writes the same numbers in a ReShade-readable layout, so you can carry the grade over to a tool that does hook a client. It is a text file of your own settings, nothing more.
What will it cost me in frame rate?
One full-screen pass. On integrated graphics from the last few years that is a couple of milliseconds at 1080p; the lab above prints its own frame time so you can read the real number on your own machine rather than take mine. Turning bloom and shafts down is where most of the saving is, since those are the two loops.
Where are my settings stored?
In chrome.storage.local, a file in your own profile on your own disk. There is no account, no sync and no server in this project. Unzip the archive and search every file for fetch(: you will find none.
Will Roblox ban me for using it?
Changing how a page looks in your own browser is not something Roblox moderates, and this extension does not automate play, read the economy or touch the game client. It asks for storage, scripting and tabs, with host access limited to *://*.roblox.com/*, and Chrome enforces that limit rather than the extension's good intentions.
Can I build my own preset?
That is what the eight dials are. Move any one of them and the preset chip switches to Custom, which is saved like any other. PRESETS in shader.js is a plain object, so adding a named look of your own is a few lines and a reload.
Why unpacked instead of the Chrome Web Store?
Loading it unpacked means the code you run is the code you read: no build step, no minification and nothing between the zip and what executes. Store review would also add weeks to every change for an extension this small.