I’m releasing my WebGL CRT Shader as open source.
It creates a CRT/vintage TV effect so could be used in games, emulators, apps, demos, visuals, etc.
As a WebGL shader, it runs on the device’s hardware GPU in the browser and renders to a <canvas> (or offscreen canvas). I currently use it with Three.js, and the demo below uses just a 2D canvas.
It’s optimised to run well on low power devices as far back as iPhone XS, though I’m certain it can be optimised even further. PRs welcome! The easiest optimisation would be removing processing of unused parameters.
Is it scientifically correct? Hell no. Does it look good? Yes. Does it give you the feels? Absolutely.
github.com/gingerbeardman/webgl-crt-shader/
History
It began as a shader for Love2D at the beginning of 2025 (here’s a gist of that one) and by the end of 2025 I had ported it to GLSL for a personal work-in-progress web game.
Live Demo
Reach for the sliders!
(You can scroll the demo horizontally on mobile)
^ Screenshot is Pico-8 classic Worm Nom Nom by Tic Tac Toad (kometbomb + iLKke) 🌸🍏🎩🐛💩
Originally published: 2026-01-04
--
Found this helpful? Consider buying me a coffee.
--
Comments: Twitter , Bluesky , Mastodon