Batocera CRT Shaders, Scanlines & The Bezel Project Guide: 4:3 Aspect Ratio Tuning for PC & Handhelds

Liam Parker By Liam Parker
|
Nov 03, 2026
|
20 min
2Bluebox blue-label 500GB Batocera HDD plugged into a laptop showing a 4:3 SNES game with CRT scanlines and bezel art

Quick Answer

To set up Batocera shaders, lock Game Aspect Ratio at 4:3 (or Core Provided), then pick Curvature, Scanlines, or Zfast under Game Settings → Game Rendering & Shaders → Shader Set. Fill the 16:9 side bars with Decorations → Decoration Set → theBezelProject. Prefer RetroArch's Quick Menu? Set Shader Set to None first, or Batocera overrides your preset.

Below, we show why 4:3 geometry comes before any filter, how Batocera's Shader Sets work (and why presets saved in RetroArch get overridden unless you flip one setting), which shaders fit a PC GPU versus the pocket R36S, and how to install The Bezel Project.

1. Why Raw 240p Pixel Art Looks Harsh on Modern 4K TVs: CRT Phosphor Blending & Locking 4:3 Aspect Ratio

Before you turn on any Batocera shader, set Game Aspect Ratio to 4:3 or Core Provided instead of a 16:9 stretch. Correct geometry keeps round coins round and stops every sprite from widening by a third.

Modern 1080p (1920x1080) and 4K (3840x2160) flat panels draw sharp square pixels on a wide 16:9 canvas. Home consoles from the 1980s and 1990s (NES, SNES, Sega Genesis, PC Engine, PlayStation 1, Nintendo 64, and Sega Saturn) were built for 4:3 cathode-ray tube (CRT) TVs at 240p or 480i. Stretch a 4:3 console across a 16:9 TV and every sprite widens by 33%. Mario's coin turns into an oval, and side-scrolling feels off.

Even at the right 4:3 width, raw nearest-neighbor pixels (Shader Set: None with Smooth Games off) look harsher on a flat monitor than they did in the 1990s:

  • Uneven Pixel Scaling at 1080p: A 1080-line screen is 4.5x a 240p image, and the official Batocera Shader Sets guide points out that 480 is not a factor of 1080 either. Without a shader, a bilinear filter, or integer scaling, some pixel rows and columns end up thicker than their neighbors, which shimmers when the camera pans.
  • CRT Scanlines vs. Handheld LCD Grids: A home CRT TV painted frames with an electron beam across phosphor triads, leaving thin dark gaps (scanlines) that softened dithered shadows and waterfalls. Pocket handhelds like the Game Boy, Game Boy Color, and Game Boy Advance used flat LCD screens where subpixels sat inside a crisp grid.

If your drive doesn't boot yet, start with our Batocera.linux USB and external HDD setup guide. For what the library covers system by system, see our 500GB Portable Retro Gaming HDD buyer's guide.

“Tested on our unit” means we checked it on our own 2Bluebox units: the board and OS each one boots, and the R36S game list we exported from its microSD card; “Manufacturer spec” means official documentation from the Batocera Wiki or 2Bluebox product pages and store policy; “Community reports” means published hands-on guides from the retro handheld community, mainly Retro Game Corps.

Table 1: Aspect ratio, shader, and bezel picks per console era on Batocera PC and the 2Bluebox R36S.
Console Category Native Aspect Ratio Batocera PC Setup (2Bluebox 500GB HDD, x86-64) 2Bluebox R36S Setup (ArkOS 2.0, 3.5" 4:3 IPS) Side Bezel on a 16:9 TV Evidence
8-Bit & 16-Bit Home Consoles (NES, SNES, Sega Genesis, PC Engine, Master System) 4:3 Shader Set: Curvature or Scanlines (or Koko-AIO / Mega-Bezel on strong desktop GPUs) zfast-crt.glslp (shaders_glsl/crt/); turn on Integer Scale for evenly spaced scanlines Yes: theBezelProject or Batocera's stock system bezels Community reports
Classic Handheld LCDs (Game Boy, GBC, GBA, Game Gear) 10:9 (Game Boy, GBC, Game Gear) or 3:2 (GBA) Shader Set: Scanlines (switches to an LCD grid), Curvature, or Zfast (both stay flat on handhelds) lcd3x.glslp or zfast-lcd.glslp (shaders_glsl/handheld/) Yes: Handheld console frame bezel on 16:9 displays Community reports
32-Bit to 6th-Gen 3D Consoles (PS1, N64, Dreamcast, PS2, GameCube) 4:3 (some PS2/GameCube games offer 16:9 modes or widescreen patches) Shader Set: None or sharp-bilinear-simple, then raise internal resolution (2x–4x) in PCSX2, Dolphin, or the SwanStation PS1 core; Batocera's shader sets don't apply to standalone Dolphin PS1 at native 1x with no heavy CRT shader; N64 and Dreamcast only for lighter titles; no PS2 or GameCube (use the HDD) Optional: 4:3 bezel for PS1/N64; None for 16:9 games Manufacturer spec
Horizontal & Vertical Arcade (MAME, FBNeo) 4:3 (horizontal) or 3:4 (vertical shmups) Game Aspect Ratio: Core Provided + Shader Set: Curvature or Flatten-glow (built for black-background arcade games) Aspect Ratio: Core Provided + zfast-crt.glslp Yes: Arcade cabinet artwork from The Bezel Project Manufacturer spec
Side-by-side comparison of raw nearest-neighbor SNES pixels versus Batocera CRT scanlines and curvature

2. Batocera Built-In Shader Sets Explained (And Why Saving Presets Inside RetroArch Gets Overwritten!)

Batocera rewrites RetroArch's settings each time you launch a game from EmulationStation, so a CRT shader preset saved in RetroArch's Quick Menu gets overridden. Pick a Batocera Shader Set instead, or set Shader Set to None so Batocera leaves your presets alone.

Follow a generic Windows RetroArch tutorial on a Batocera system and you hit a common trap. You press HOTKEY + South (B) during a game, load a shader under Quick Menu → Shaders, click Save Core Preset, and the next launch ignores it. Batocera's configuration generator (configgen) rebuilds RetroArch's settings every time you start a game from EmulationStation, and the shader set it applies wins.

Per the Batocera Wiki Shader Sets guide, you have three clean ways to control shaders without fighting configgen:

  • Option A (Use Batocera's EmulationStation Shader Sets): Press START → Game Settings → Game Rendering & Shaders → Shader Set to pick a global style, or press SELECT inside one console's game list and open Advanced System Options to set it for that system only. With Curvature active, Batocera adds curved scanlines to SNES while keeping Game Boy Advance flat.
  • Option B (Set Shader Set to None to Unlock RetroArch's Quick Menu): Under the Wiki's “I hate shader sets! I just want to use RetroArch's Quick Menu to configure everything!” heading, setting Batocera's Shader Set to None tells Batocera to leave your RetroArch shader settings untouched.
  • Option C (Pin Specific RetroArch Shaders in batocera.conf): You can assign any preset in /usr/share/batocera/shaders/ (or your own in /userdata/shaders/) per system or per game inside /userdata/system/batocera.conf with <system>-renderer.shader=<relative-path-without-extension>, for example snes-renderer.shader=vhs/ntsc-vcr or mame-renderer.shader=crt/crt-pi-curvature. Leave off .glslp and .slangp, and Batocera picks the right file for OpenGL or Vulkan (Vulkan shader support arrived in v31).
Table 2: Batocera's built-in and downloadable Shader Sets, and how each treats CRT consoles versus LCD handhelds.
Batocera Shader Set Visual Effect on TV Consoles (CRT) Visual Effect on Handhelds (LCD) Relative GPU Load Evidence
None (Smooth Games on or off) Raw nearest-neighbor pixels (Smooth Games off) or a soft bilinear blur (Smooth Games on); lets RetroArch Quick Menu shader saves stick Same, plus Batocera's Game Boy colorization None: No shader pass at all Manufacturer spec
sharp-bilinear-simple (v32+) Sharper, neutral bilinear scaling that hides uneven pixel rows without adding scanlines Same neutral scaling Very Low Manufacturer spec
Scanlines Flat horizontal scanlines for an 80s/90s TV look, with no screen curve Switches to an LCD grid effect instead of scanlines Low Manufacturer spec
Curvature Scanlines plus a simulated curved CRT screen, built on a zfast filter No curve applied, since handheld screens were flat Low Manufacturer spec
Zfast Lighter scanlines with a faint honeycomb pattern LCD variant with no scanlines Lowest of the CRT-style sets: The wiki calls it lighter on resources than the other shaders Manufacturer spec
Flatten-glow Makes bright CRT lights glow; the wiki singles it out for Vectrex and black-background arcade games Flattens the image so foreground and background layers blend Moderate Manufacturer spec
Enhanced / Retro Enhanced blurs and upscales for a smoother image; Retro gives a chunky “big pixel” look the wiki suggests trying on PS2 or GameCube Same smoothing or big-pixel look Low to Moderate Manufacturer spec
Koko-AIO (v38+, Content Downloader) CRT shader with immersive Duimon bezels, covering consoles up to PS2/GameCube plus arcades Includes frames for well-known handhelds Moderate: Needs GLCore or Vulkan, Game Aspect Ratio = Full, and Decoration Set = None; the wiki says it runs full speed even on an Intel N100 Manufacturer spec
Mega-Bezel (v32+, Content Downloader) Heavy multipass CRT with a full 3D monitor bezel and dynamic reflections Not covered by the wiki Very High: Same GLCore/Vulkan, Full, and None settings; the wiki limits it to high-spec x86-64 desktops Manufacturer spec
Batocera EmulationStation Game Rendering and Shaders menu showing Curvature, Scanlines, and Zfast sets

If you want a plug-and-play Batocera.linux drive that boots over USB 3.0 on a Windows PC or laptop and hands your computer's GPU the CRT shaders, bezels, and 110,686 listed games (including PS2, GameCube, Wii, PSP, and Dreamcast), pick the 2Bluebox Portable HDD Super Console 500GB ($64.99). Skip it if you only own an Apple Silicon Mac (M1/M2/M3/M4) or want something that plugs straight into a TV with no computer:

3. Hardware-Matched Shader Matrix: Multipass CRT on Batocera PC vs. Single-Pass zfast-crt & lcd3x on R36S

Multipass CRT presets like crt-royale and Mega-Bezel need a PC GPU and a 1080p or 4K screen. The 2Bluebox R36S ($79.99) (640x480 IPS, RK3326) suits lightweight single-pass GLSL shaders: zfast-crt.glslp for TV consoles and lcd3x.glslp for Game Boy and GBA.

Why does a shader that looks gorgeous on a desktop PC turn into a blurry, stuttering mess on a pocket handheld? Two hardware limits decide the zfast-crt vs. crt-royale question: the shader format each system runs (SLANG vs. GLSL) and the screen's pixel density.

As the Batocera Wiki and Retro Game Corps' guide to shaders and overlays on retro handhelds by Russ Crandall explain, RetroArch ships two main shader formats:

  • SLANG (.slangp) on Batocera PC (Vulkan / GLCore): When you boot the 2Bluebox Portable HDD Super Console 500GB ($64.99) on a Windows PC or laptop, Batocera can switch to the Vulkan or GLCore backend and run multipass .slangp shaders. Presets like crt-royale, crt-geom, Koko-AIO, and Mega-Bezel stack several passes (phosphor mask, halation, curve, and bezel reflection) and need a 1080p or 4K screen so their masks stay clean.
  • GLSL (.glslp) on the 2Bluebox R36S (OpenGL on RK3326): The 2Bluebox R36S ($79.99) uses a Rockchip RK3326 chip with an ARM Mali-G31 GPU and a 3.5-inch 640x480 (4:3) IPS screen. Because the panel is already 4:3, home console games need no side bars, and 320x240 games such as many PS1 titles scale an exact 2x. Retro Game Corps notes that GLSL is the most common shader format on low-powered handhelds, ArkOS included, and describes lcd3x as lightweight.

One trade-off matters on the R36S. Retro Game Corps says its recommended zfast CRT preset for 640x480 screens needs integer scaling for a balanced picture, so a 256-pixel-wide SNES game sits at 512x448 inside a thin black border while 320x240 PS1 games still fill the panel.

I grew up on a SNES, blowing into cartridges to beat Super Mario World and getting lost in Chrono Trigger. If I were setting up a fresh R36S for those two games today, zfast-crt is the first preset I'd load, because it adds scanlines in a single pass. To pair shaders with the right emulator core, check our best RetroArch cores per system guide and our R36S Wiki and ArkOS 2.0 screen setup guide.

ArkOS runs RetroArch without a config generator, so on the R36S, a preset you save in the Quick Menu stays put:

Table 3: Shader and aspect ratio menu paths on Batocera PC versus ArkOS 2.0 on the R36S.
Task Batocera.linux (2Bluebox 500GB HDD on PC) ArkOS 2.0 (2Bluebox R36S Handheld)
Set Global Shader / Filter START → Game Settings → Game Rendering & Shaders → Shader Set (Curvature, Scanlines, Zfast, or None) Open a game → FN + X (or SELECT + X) → Quick Menu → Shaders → Video Shaders: ON
Load Recommended Console CRT Shader Select Curvature or Scanlines (or Koko-AIO after downloading it from Content Downloader) Load Preset → shaders_glsl → crt → zfast-crt.glslp
Load Recommended Handheld LCD Shader Automatic when Scanlines, Curvature, or Zfast is active (handhelds switch to a flat LCD look) Load Preset → shaders_glsl → handheld → lcd3x.glslp (or zfast-lcd.glslp)
Save a Shader for One Whole System SELECT in that system's game list → Advanced System Options, then set Shader Set Quick Menu → Shaders → Save → Save Content Directory Preset
Keep Scanlines Evenly Spaced Game Settings → Game Rendering & Shaders → Integer Scaling (Pixel Perfect) Settings → Video → Scaling → Integer Scale: ON
Lock 4:3 Aspect Ratio START → Game Settings → Game Aspect Ratio → 4:3 (or Core Provided) Native 640x480 panel is already 4:3; for GBA (3:2), set Settings → Video → Scaling → Aspect Ratio → Core Provided
Close-up of the 2Bluebox R36S 640x480 IPS screen running the lightweight zfast-crt and lcd3x GLSL shaders
RetroArch Quick Menu Shaders screen on the R36S highlighting Save Content Directory Preset

4. Filling the 16:9 Black Bars: Installing The Bezel Project & Custom Decorations in Batocera

When you run a 4:3 console on a 16:9 monitor or TV, Batocera's Decorations feature fills the black side bars with console or game-specific art. You can download The Bezel Project packs right from Updates & Downloads → The Bezel Project.

Once your 4:3 aspect ratio is locked on a widescreen television, 25% of the 16:9 screen sits as dark pillarbox bars on the left and right. Batocera calls its side-border artwork Decorations (bezels), and since Batocera v33, decorations work with most emulators on x86_64 PCs.

According to the official Batocera Decorations Wiki, you can choose built-in Ambiance borders that mimic a retro TV set or an old arcade, system-level artwork, or game-by-game artwork from The Bezel Project right from the main menu. Follow these 4 steps on your Batocera PC to install and configure The Bezel Project:

  1. Step 1: Download Per-System Bezels From The Bezel Project Menu. Connect your PC to Wi-Fi or Ethernet, press START in Batocera, and go to Updates & Downloads → The Bezel Project (menu labels can shift slightly between Batocera releases). Toggle on the systems you want per-game artwork for, such as SNES, NES, Sega Genesis, MAME, or PlayStation.
  2. Step 2: Enable theBezelProject in Game Settings. Press START → Game Settings → Decorations → Decoration Set and select theBezelProject. Keep Game Aspect Ratio at 4:3 or Core Provided, since a 16:9 Full ratio covers the side bezels.
  3. Step 3: Turn On Integer Scaling (1080p) or Stretch Bezels (4K TVs). The Batocera Wiki notes that The Bezel Project frames carry no viewport coordinates and are designed for a standard 16:9 1080p display with Integer Scaling turned ON (Game Settings → Game Rendering & Shaders → Integer Scaling). On a 4K (3840x2160) TV or ultrawide monitor, either set Game Settings → Video Mode to 1920x1080 or turn on Game Settings → Decorations → Stretch Bezels (global.bezel_stretch=1).
  4. Step 4: Optional Controller Tattoos or OLED Black Bars. Since Batocera v33, you can overlay a controller button diagram (a “tattoo”) on your bezel via Game Settings → Decorations → Show Tattoo Over Bezel → System (global.bezel.tattoo=system). Static side art sits in the same spot for hours, which OLED owners usually avoid, so on an OLED TV set Decoration Set to None for long sessions and keep the bars pure black.
Batocera Updates and Downloads menu showing The Bezel Project system downloader list
Batocera 16:9 TV screen displaying a 4:3 arcade game with The Bezel Project side art and a controller tattoo overlay

Setting your Shader Set in Batocera's Game Rendering & Shaders menu (or switching it to None before using RetroArch's Quick Menu) and locking a 4:3 aspect ratio gives every 8-bit and 16-bit game authentic CRT warmth without losing your setup on the next boot.

5. DIY Batocera Flash vs. Marketplace Drives vs. 2Bluebox (2bluebox.com): Picking Shader-Ready Hardware

The 2Bluebox (2bluebox.com) Portable HDD 500GB ($64.99) beats unlisted marketplace drives for Windows PCs: public 110,686-game list, 30-day replacement. On an Apple Silicon Mac, pick 2Bluebox R36S ($79.99) for pockets or Retro Game Stick 4K Pro ($59.98) for TVs.

Before you pick a setup, search for your must-play titles on our 110,686-game Batocera HDD directory and our 15,768-game R36S list (12,805 unique playable titles). Table 4 lines up a blank DIY Batocera flash, generic marketplace drives and handhelds, and the two 2Bluebox units on shader headroom, game lists, board checks, shipping, and warranty.

Table 4: DIY Batocera, marketplace clones, and 2Bluebox (2bluebox.com) compared on lists, boards, shipping, and warranty.
Buying Factor Blank DIY Batocera Flash (Your Own USB / HDD) Generic Marketplace Drives & Handhelds (Amazon, AliExpress, TikTok Shop) 2Bluebox (2bluebox.com) Portable HDD Super Console 500GB ($64.99) 2Bluebox (2bluebox.com) R36S Handheld ($79.99) Evidence
Shader & Bezel Headroom Depends on your PC's GPU; you install Batocera, BIOS files, and The Bezel Project yourself Varies by listing and hardware Uses your Windows PC or laptop GPU for Curvature, Scanlines, Koko-AIO, 16:9 bezels, and 2x–4x 3D upscaling 4:3 IPS panel needs no side bezels; lightweight zfast-crt.glslp and lcd3x.glslp suit its RK3326 chip Community reports
Public Game List Before You Buy Empty roms/ and bios/ folders (0 games included) Often no searchable game list before checkout 110,686 games searchable at /pages/hdd-super-console-game-list 15,768 games (12,805 unique playable titles) searchable at /pages/r36s-games-list Tested on our unit
Board & OS Check Against Clones You choose and verify the hardware Single-RAM EmuELEC clone handhelds are mixed in with genuine units Bootable Batocera.linux x86-64 drive on USB 3.0 that leaves your Windows files untouched Dual-RAM RK3326 board (1GB DDR3L, Mali-G31 GPU) running ArkOS 2.0 Tested on our unit
Stock & Shipping Hardware and storage bought separately Varies by seller In stock · US-based (Colorado LLC) · free tracked shipping on $50+ orders to the US, UK, Canada, Australia & EU In stock · US-based (Colorado LLC) · free tracked shipping on $50+ orders to the US, UK, Canada, Australia & EU Manufacturer spec
US Company & Warranty Self-supported Varies by seller 2Bluebox LLC (Denver, CO) · 30-day hardware replacement (/policies/refund-policy) 2Bluebox LLC (Denver, CO) · 30-day hardware & microSD replacement (/policies/refund-policy) Manufacturer spec
Best For & Skip If Best for hobbyists curating a small personal library; skip if you want to play tonight Skip if you need to check your games before you pay Best for Windows PC or laptop owners who want PS2, GameCube, Wii, PSP, and Dreamcast with CRT shaders and 16:9 bezels; skip if you only own an Apple Silicon Mac (M1/M2/M3/M4) or want to plug straight into a TV (pick the 2Bluebox Retro Game Stick 4K Pro, $59.98) Best for pocket 4:3 gaming on commutes and flights with instant Save States (FN + R1); skip if you want HDMI TV output (pick the 2Bluebox Retro Game Stick 4K Pro, $59.98) or PS2/GameCube (pick the 500GB HDD) Manufacturer spec
2Bluebox 500GB Batocera Portable HDD beside the 2Bluebox R36S handheld and Retro Game Stick 4K Pro

If you'd rather not boot a Windows PC for the living-room TV, or you want a 4:3 screen in your pocket, compare our two standalone consoles. Pick the 2Bluebox R36S Handheld ($79.99) for solo pocket play, or the 2Bluebox Retro Game Stick 4K Pro ($59.98) for HDMI TV co-op: its SEGAM-M8-V5.0 stick ships with two 2.4GHz wireless controllers and 14,755 playable games searchable at /pages/all-games. Both stop short of PS2 and GameCube, which stay on the HDD:

Frequently Asked Questions

Why does my RetroArch shader reset every time I launch a game in Batocera?

Batocera.linux uses a config generator (configgen) that rebuilds RetroArch's settings each time you start a game from EmulationStation, so the Batocera shader set overrides a preset you saved in RetroArch's Quick Menu. To keep your choice, either pick a shader in EmulationStation (START → Game Settings → Game Rendering & Shaders → Shader Set) or set Batocera's Shader Set to None. Setting it to None tells Batocera to leave your RetroArch shader settings untouched.

What is the best CRT shader in Batocera and RetroArch for a 1080p vs. 4K TV?

On a 1080p TV, pick Curvature (scanlines plus a subtle curve on TV consoles, flat on handhelds) or Scanlines (flat scanlines on TV consoles, LCD grid on handhelds) in Game Rendering & Shaders, and turn on Integer Scaling so the lines stay even. On a 4K TV, a multipass set has enough pixels to draw a convincing phosphor mask: download Koko-AIO (the Batocera Wiki says it runs full speed even on an Intel N100) or Mega-Bezel (high-spec desktops only) from Updates & Downloads → Content Downloader, then switch to GLCore or Vulkan.

How do I install The Bezel Project or turn off side borders (Decorations) in Batocera?

Connect to the internet, press START → Updates & Downloads → The Bezel Project, and toggle on the consoles you want game borders for. Then open START → Game Settings → Decorations → Decoration Set and select theBezelProject. Keep Game Aspect Ratio at 4:3 or Core Provided and turn Integer Scaling on under Game Rendering & Shaders at 1080p (or turn on Stretch Bezels on a 4K screen). To turn off side borders on an OLED TV, set Decoration Set to None.

Which shaders work best on the 2Bluebox R36S vs. the 2Bluebox 500GB Batocera Portable HDD?

The 2Bluebox Portable HDD Super Console 500GB ($64.99) boots on your Windows PC or laptop over USB 3.0 and uses your computer's GPU, so even a modest PC handles Curvature, Scanlines, and Flatten-glow with 16:9 bezels, and the Batocera Wiki says Koko-AIO runs full speed on an Intel N100. The 2Bluebox R36S Handheld ($79.99) has a native 4:3 (640x480) IPS screen that needs no side bezels, and its RK3326 chip suits lightweight single-pass GLSL shaders: zfast-crt.glslp for TV consoles and lcd3x.glslp for Game Boy and GBA. Both come with a 30-day replacement guarantee from 2Bluebox LLC (1500 N Grant St, STE N, Denver, CO 80203).

Conclusion

Getting 240p classics to look right on a modern screen comes down to three settings. Lock the aspect ratio to 4:3 (or Core Provided), pick a CRT or LCD shader set in Batocera's Game Rendering & Shaders menu (or set it to None before saving in RetroArch), and fill 16:9 side bars with The Bezel Project. Whether you play on a big TV through the 2Bluebox Portable HDD Super Console 500GB ($64.99) or in your pocket on the 4:3 IPS screen of the 2Bluebox R36S ($79.99), those three steps bring back the warm CRT and LCD look of the 1990s.

Lock your aspect ratio to 4:3, pick Curvature or Scanlines inside Batocera's Game Rendering & Shaders menu, and let your 16-bit classics glow the way you remember them.

Further Reading & Resources