
The XDA piece on the one shader that made a whole ROM library look right again is the truth every retro player runs into eventually. A pixel-perfect 4K upscale of Super Mario World looks wrong. The sprites were drawn for a phosphor grid that bled colors into each other on purpose. Turn on a good CRT shader and the same ROM suddenly reads the way it did on a 1993 Trinitron. This roundup covers the best desktop apps for CRT shaders on emulators in 2026, based on what we ran across a Windows 11 workstation, a Fedora 40 machine, and an M2 MacBook Air.
Every app here supports either a native CRT shader chain or a first-class port of the Libretro slang shader collection.
What to look for in a CRT shader host
- Shader language support. Slang shaders (the Libretro spec) are the modern default and cover the most complete CRT set. GLSL shaders work but are less portable. HLSL is Windows-only.
- Overlay vs baked. Some tools apply the shader inside the emulator. ShaderGlass and Reshade sit on top of any renderer. Overlay tools work with emulators that do not ship shaders themselves.
- Real-time preset switching. The CRT preset that flatters SNES sprites is not the same one that suits NES or arcade games. Being able to swap presets per system without restarting matters.
- HDR handling. On an OLED, HDR-aware CRT shaders (crt-guest-advanced-hdr, crt-royale-hdr) give you the phosphor pop CRTs actually had.
- Integer scaling. Most CRT shaders assume integer-scaled output; fractional scaling ruins the mask pattern.
- Performance. crt-royale at 4K needs a real GPU. Cheaper shaders like crt-geom or crt-easymode run on integrated graphics.
Quick comparison table
| App | Best for | Platforms | Shader system | Standout |
|---|---|---|---|---|
| RetroArch | Every system in one shell | Win / macOS / Linux | Slang, GLSL, Cg | Full Libretro shader library |
| ShaderGlass | Any emulator or app | Win only | Custom + Libretro ports | Works on windows the emulator does not |
| Mesen | NES / SNES / GB accuracy | Win / macOS / Linux | HLSL + built-in NTSC | Native NES NTSC filter |
| Duckstation | PS1 with modern shaders | Win / macOS / Linux | Slang | PS1-specific CRT presets |
| MAME | Arcade authenticity | Win / macOS / Linux | HLSL / GLSL | Purpose-built arcade phosphor model |
| Snes9x | SNES on modest hardware | Win / macOS / Linux | GLSL | Fast, well-supported CRT presets |
| MelonDS | Nintendo DS / DSi | Win / macOS / Linux | GLSL | Handles DS’s LCD-not-CRT quirk correctly |
The apps
1. RetroArch — Best for shader coverage across every system
RetroArch hosts the Libretro slang shader library, which is where most CRT shader development actually happens now. The presets folder alone has 200-plus entries: crt-royale, crt-guest-advanced, crt-hyllian, crt-easymode, crt-lottes, crt-consumer, and per-console tuned variants. Load a core (Nestopia for NES, Snes9x for SNES, Beetle PSX for PS1), then apply a per-system shader preset and save it. From then on, every ROM of that system comes up with the right treatment.
Where it falls short: The first-time shader menu is a maze. Some presets need parameter tuning to look right at your resolution. HDR shader chain requires a Vulkan or D3D12 driver.
Pricing:
- Free: Fully free, open source (GPLv3).
- Paid: None.
Platforms: Windows, macOS, Linux, plus Steam Deck, Android, iOS.
Download: retroarch.com · Steam
Bottom line: The reference implementation. If you touch two or more systems, this is the shader host.
2. ShaderGlass — Best overlay for emulators that do not ship shaders
ShaderGlass is a Windows-only overlay that runs the Libretro slang shader library on top of any window. Point it at Dolphin, Cemu, PPSSPP, or a browser tab and the CRT shader applies to whatever renders inside that window. It is the answer for emulators that do not ship their own shader system and the answer for capture-card layouts where you want the CRT look on top of a live source.
Where it falls short: Windows only. Adds one frame of latency. Some HDR shaders do not composite cleanly on top of D3D11 games.
Pricing:
- Free: Fully free (GPLv3).
- Paid: None.
Platforms: Windows 10 and 11 only.
Download: ShaderGlass on GitHub
Bottom line: The tool that lets you bring CRT shaders to an emulator that never got them.
3. Mesen — Best for NES and SNES with authentic NTSC
Mesen is the accuracy-first NES, SNES, GB/GBC, and PC Engine emulator. Its built-in NTSC filter models the actual composite signal path, which is closer to what a period TV did than any generic CRT preset. Add its HLSL shader chain for scanlines and shadow-mask overlay on top and you get a look that many players consider the best available for these systems.
Where it falls short: No slang shader support; you are on HLSL and GLSL only. Older CRT shaders written for Cg do not port cleanly. UI is Windows-first.
Pricing:
- Free: Fully free (GPLv3).
- Paid: None.
Platforms: Windows, macOS, Linux.
Download: Mesen on GitHub
Bottom line: The best NES and SNES image on desktop, especially if you are picky about NTSC artifacts.
4. Duckstation — Best for PS1 with modern CRT presets
Duckstation ships the slang shader system natively and includes PS1-specific CRT presets in the default install. The presets model the way PS1 output actually behaved through a composite cable, which matters for games designed around dithering that only reads correctly through a low-pass filter.
Where it falls short: PS1 only. HDR presets are still experimental in some builds. The default upscaling can fight the shader unless you set integer scale on.
Pricing:
- Free: Fully free (open source under a permissive license).
- Paid: None.
Platforms: Windows, macOS, Linux, Android.
Download: Duckstation on GitHub
Bottom line: The PS1 emulator that treats CRT rendering as a first-class feature.
5. MAME — Best for arcade authenticity
MAME models specific arcade PCBs and specific arcade monitors. Its built-in HLSL and GLSL shader chain is purpose-built for the CRTs those games ran on, including per-driver notes on which type of tube each cabinet used. If you care that Robotron 2084 looks like it did on a Wells-Gardner K7000, MAME is the answer.
Where it falls short: MAME is not a friendly emulator to configure. Shader tuning is per-INI. Default UI is intimidating.
Pricing:
- Free: Fully free (GPLv2).
- Paid: None.
Platforms: Windows, macOS, Linux.
Download: mamedev.org
Bottom line: Non-negotiable for arcade preservation. Overkill for anything else.
6. Snes9x — Best SNES CRT rendering on modest hardware
Snes9x carries a GLSL shader system that runs the popular CRT presets at 4K on an integrated GPU. If you are on a laptop or an older desktop, crt-easymode-halation in Snes9x costs less than the same shader in RetroArch’s shader chain.
Where it falls short: SNES only. Fewer preset variants than RetroArch. HDR chain absent.
Pricing:
- Free: Fully free (custom permissive license).
- Paid: None.
Platforms: Windows, macOS, Linux, plus a maintained Snes9x EX+ on Android.
Download: snes9x.com
Bottom line: The right SNES emulator when RetroArch’s overhead is too much.
7. MelonDS — Best DS/DSi shader handling
MelonDS is a reminder that not every retro system was CRT. The DS’s dual LCDs need a different treatment: subpixel grid, backlight bleed, and slight ghosting. MelonDS’s shader options handle that quirk instead of forcing a CRT scanline pattern onto an LCD-native game. It also runs the Libretro slang chain if you actually want a scanline overlay for a specific title.
Where it falls short: DS and DSi only. Slower than Drastic on the same hardware, though more accurate.
Pricing:
- Free: Fully free (GPLv3).
- Paid: None.
Platforms: Windows, macOS, Linux.
Download: melonds.kuribo64.net
Bottom line: The DS emulator that treats the console’s actual screen physics with respect.
How to pick the right one
- If you play three or more systems, install RetroArch and set up per-system slang shader presets once.
- If your emulator does not ship shaders and you are on Windows, drop ShaderGlass on top of it.
- If you play NES or SNES and want the most authentic NTSC signal, use Mesen.
- If you play PS1, install Duckstation and turn on its built-in CRT preset.
- If you preserve arcade games, use MAME. Everything else is a compromise on those cabinets.
- If you play SNES and your hardware is modest, use Snes9x instead of the RetroArch chain.
- If you play DS or DSi, use MelonDS and do not force a CRT preset on LCD-native games.
Skip shader mania if you play modern games on a modern display. CRT shaders were designed to correct what upscaled retro pixels lost. New games do not need them.
FAQ
What is the best CRT shader for pixel art games?
crt-royale is the most complete simulation, but it needs a mid-range GPU at 4K. crt-guest-advanced is close and cheaper to run. crt-easymode-halation is the lightweight default that still looks correct.
Do I need a 4K monitor for CRT shaders?
No, but 1440p is the minimum where scanlines and shadow-mask patterns render correctly. At 1080p, most CRT shaders produce visible moiré or lose the mask pattern entirely.
Can I use CRT shaders on the Steam Deck?
Yes. RetroArch on Steam Deck runs the full slang shader library. crt-easymode-halation runs comfortably; crt-royale is too heavy for the Deck’s GPU at native output.
Does an OLED display look different with a CRT shader?
Yes, and usually better. OLED blacks let the shadow-mask pattern read the way it does on a real CRT. HDR-aware CRT shaders (crt-guest-advanced-hdr) push phosphor highlights to real HDR peak brightness for the first time.
Are these apps legal?
The emulator apps and the shaders are all legal. Whether the ROMs you load are legal depends on your local law and how you acquired them.
Which CRT shader looks best for arcade games?
Use MAME with its built-in HLSL chain. It targets the specific tubes used in each cabinet. For a generic arcade preset in RetroArch, crt-consumer or crt-royale-kurozumi both work.