It's a Saturday afternoon, and you have the hankering to play a classic game from your childhood - Super Mario 64! You boot up the game on your PC and notice the characters look a little too "angular" for your nostalgia causing the experience lack some of the character from days gone by. No problem, I'll just switch on some classic anime instead! Oh, well the colors aren't as vibrant and it's missing that "glow"...
Wouldn't it be nice to view retro media in the format it was designed to be played/viewed in? Wouldn't it be nice to make your very nice 4k monitor wildly antiquated? Wouldn't it be nice for you monitor to still have scanlines and static to further distort your view?
Well me too! Enter - SeeRT!
I've been in my "better practice an agentic workflow within development to stay up with the times" arc, so this project was prompted probably 90% using Claude, me only tweaking a few things here and there and running a few commands when Claude seemed to get stuck.
A Windows CRT monitor overlay that applies a real-time shader filter over any window or monitor. The filter runs in a transparent, click-through DirectComposition overlay — the target application sees no performance impact and requires no modification.
| Before | After |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
(P.S. I didn't want to boot my emulator for this, but thanks to "packattack04082" on youtube for the gameplay I got my screenshots from!)
Shader pipeline (RetroArch-inspired, gamma-correct)
- Barrel/pincushion distortion with zoom compensation
- Gaussian beam scanlines with luminance-dependent spread
- Shadow mask — aperture grille, shadow mask dots, and slot mask patterns (anti-aliased)
- Phosphor bloom and diffusion
- RGB convergence error (chromatic aberration)
- Vignette, hum bar, flicker, and TV static
- Phosphor tint (R/G/B) for monochrome terminal looks
- Colour grading — brightness, contrast, saturation
Overlay
- Captures any window or monitor via Windows Graphics Capture
- Click-through when settings panel is closed; receives input when open
- Multi-monitor: add secondary overlays to additional monitors
- Custom CRT cursor rendered inside the shader (barrel-distorted with the image)
- Shake mouse to reveal cursor and settings toggle button
- System tray icon
Settings
- ImGui settings panel with multiple UI themes
- 11 built-in presets + save/load/reorder user presets
- Settings persist to
%APPDATA%\SeeRT Overlay\settings.json - Audio loopback capture (optional)
| Preset | Character |
|---|---|
| Default | Balanced starting point |
| Early 2000s Laptop | Subtle, LCD-era hint of CRT |
| Arcade | Bold cabinet look — heavy scanlines, strong mask |
| Green Phosphor | P31 monochrome terminal |
| Amber Phosphor | P3 amber/orange terminal |
| Heavy CRT | Degraded 1980s boxy TV |
| crt-geom | Classic RetroArch reference implementation |
| crt-lottes | Tim Lottes' shader — crisp, fine slot mask |
| Sony PVM | Professional reference monitor, minimal artifacts |
| Trinitron | Flat aperture-grille tube, SNES/PS1 era |
| NTSC Composite | Degraded consumer signal with convergence error |
- Windows 10 or later
- Visual Studio 2022+ Build Tools with the Desktop development with C++ workload
- Windows SDK 10.0.26100+
- vcpkg installed and available (e.g.
C:/vcpkg)
-
Clone the repo and open a terminal in the project root.
-
If vcpkg is not at
C:/vcpkg, editCMakePresets.jsonand updatetoolchainFileto point to your vcpkg installation. -
Configure and build:
cmake --preset default cmake --build --preset default
-
The executable is at
build/bin/Release/SeeRT Overlay.exe. Shader.csofiles and font assets are copied next to it automatically.
Dependencies (imgui, nlohmann-json) are installed automatically from vcpkg.json during the configure step — no manual vcpkg install needed.
| Layer | Technology |
|---|---|
| Language | C++20 |
| Renderer | Direct3D 11 |
| Shaders | HLSL 5.0 (compiled via fxc.exe) |
| Screen capture | Windows Graphics Capture (C++/WinRT) |
| UI | Dear ImGui |
| Composition | DirectComposition |
| JSON | nlohmann/json |
| Package manager | vcpkg (manifest mode) |







