RetroArch Overlays and Bezels: How to Add TV Frame and CRT Effects
I want to add a TV bezel or a CRT-style frame around my RetroArch games so they look like they are being played on an old television. I have seen screenshots where people have a dark decorative border with scan lines and the game window in the center. How do I enable overlays and bezels in RetroArch? I have found the overlay settings menu but I am not sure which files to download or how to configure the display so the bezel is correctly sized and the game is not stretched.
Solutions
Solution 1
RetroArch supports two visual customization systems: Overlays (PNG images with transparency that sit on top of the game — used for bezels and touchscreen buttons) and Shaders (GPU filters that modify the rendering — used for CRT scanlines, pixel smoothing, and upscaling). For bezels, you use the Overlay system. For CRT effects, you use Shaders (see S3).
Step 1 — Download overlay packs via Online Updater:
- In RetroArch, go to Main Menu → Online Updater → Download Overlays.
- This downloads a
overlaysfolder with hundreds of bezels (NES, SNES, Genesis, GBA shell, arcade cabinet art, and more) into your RetroArch data directory.
Step 2 — Enable an overlay:
- Go to Settings → On-Screen Display → On-Screen Overlay.
- Turn Display Overlay ON.
- Set Overlay Preset: tap the field and navigate to the overlays folder (e.g.,
overlays/borders/). Pick any.cfgfile — this is the overlay definition. - Set Overlay Opacity to 1.00 (fully visible).
Step 3 — Match your viewport to the bezel opening:
- Most bezels are designed for a 4:3 aspect ratio game window. Go to Settings → Video → Scaling → Aspect Ratio and set it to 4:3.
- Enable Integer Scale OFF (so the viewport fills the bezel opening exactly).
- The result: your game appears inside the bezel's screen cutout, with decorative art filling the rest of the display.
Save the overlay setting per-core or per-game: in the RetroArch menu → Quick Menu → Overrides → Save Core Override. This applies the bezel automatically whenever you launch that core.
Solution 2
The Mega Bezel Reflection Shader pack (by HyperspaceMadness, available on GitHub) combines bezels and CRT shaders into a single system — the bezel artwork, curvature, scanlines, bloom, and reflections are all generated by one shader preset. It looks dramatically better than a plain PNG overlay but requires a decent GPU.
Install Mega Bezel:
- Download the latest Mega Bezel release from github.com/HyperspaceMadness/Mega_Bezel_Shader_Repo → Releases → download the zip.
- Extract it into RetroArch's shaders folder:
RetroArch/shaders/. You should now have ashaders/Mega_Bezel_Community/subfolder. - In RetroArch, go to Quick Menu → Shaders → Load Shader Preset.
- Navigate to
Mega_Bezel_Community/and pick a preset file (.slangpor.glslp). Start with MBZ__1__ADV.slangp (Advanced — good quality/performance balance). - Apply and save: Quick Menu → Shaders → Save Shader Preset.
Performance note: Mega Bezel is GPU-intensive. On integrated graphics or weak GPUs, use the MBZ__3__STD-SCREEN-ONLY.slangp preset (lighter CRT only, no bezel art). On a discrete GPU (GTX 1060 / RX 580 or better), the full Advanced preset runs smoothly.
Solution 3
If you want CRT scanlines and phosphor glow without a decorative bezel frame, use a standalone shader preset. These run on any GPU and give a classic tube-TV look.
Step 1 — Update your shaders: Online Updater → Update GLSL Shaders (or Slang Shaders if your driver supports Vulkan/D3D). This adds hundreds of shader presets to RetroArch/shaders/.
Recommended presets by hardware strength:
- Low-end PC / handheld:
shaders/crt/crt-pi.glslp— lightweight scanline filter designed for Raspberry Pi; fast on any hardware. - Mid-range:
shaders/crt/crt-geom.glslp— adds curvature, dot mask, and vignette; classic look with modest GPU cost. - High-end:
shaders/crt/crt-royale.slangp— the most accurate CRT simulation (shadow mask, aperture grille, bloom, phosphor persistence); requires a dedicated GPU at 1080p+.
Apply a shader: Quick Menu → Shaders → Load Shader Preset → navigate to the .glslp/.slangp file → Apply Changes. Save with Save Core Preset to apply automatically for that system.
Integer scale for pixel-perfect look: Settings → Video → Scaling → Integer Scale ON. With integer scaling and a CRT shader, each original pixel maps to exactly N×N display pixels — the cleanest base for any scanline filter.
Solution 4
Overlay not visible at all:
- Confirm Settings → On-Screen Display → On-Screen Overlay → Display Overlay = ON.
- Check Overlay Opacity is not 0.00 — set it to 1.00.
- Some video drivers (D3D12, Vulkan) may need Video → Threaded Video = ON for the overlay to composite correctly. If you are on OpenGL and the overlay is invisible, try switching to a different overlay
.cfg— some .cfg files target a specific resolution and fail silently on mismatches.
Bezel not lining up / game not inside the cutout:
- The bezel's screen cutout is designed for a specific aspect ratio. Confirm Settings → Video → Scaling → Aspect Ratio = 4:3 for SNES/NES/PS1 content, or Custom if the bezel specifies dimensions in its
.cfg. - Turn off Integer Scale if the game viewport is too small to fill the cutout.
- Some bezels include a
.cfgfile that sets viewport coordinates — open the.cfgin a text editor to read thecustom_viewport_width/_height/_x/_yvalues and confirm they match your screen resolution.
Overlay shows but disappears when the game starts: this is a per-core override issue. The active core may have a saved override that sets Display Overlay = OFF. Go to Quick Menu → Overrides → Remove Core Override, then re-enable and re-save the overlay setting.
Touchscreen overlay buttons overlap with the bezel: bezels and touchscreen button overlays are both overlay files — you can only load one at a time. Choose: use the bezel for TV/monitor display, or the button overlay for mobile/touchscreen use. Switch via Settings → On-Screen Overlay → Overlay Preset.
Comments (0)
Sign in to_leave_comment