Custom RetroArch CRT Shader Presets for Sega Saturn
I’ve been playing around with RetroArch shader stacks for Sega Saturn games recently, trying to dial in a nostalgic, warm CRT effect that still looks clean and readable on modern screens.
Here are three presets I’ve been enjoying:
🎀 Tokimeki Puzzledama – Soft & Warm Look
This preset focuses on a clean CRT feel with soft halation, subtle bloom, and slightly boosted color.
COLOR_BOOST = "1.05"
GAMMA_INPUT = "2.4"
GAMMA_OUTPUT = "2.2"
🌀 Tokimeki Puzzledama – Curved CRT Glass
Same base as the soft preset above, but adds curvature using ewa_curvature.slang
to simulate the slight bend of old CRT glass.
Perfect if you want that arcadey 90s screen feel without going overboard.
🦇 Akumajo Dracula X – Darker Gothic Look
This one pulls the brightness down just a touch for a more moody, gothic presentation—perfect for Dracula X.
COLOR_BOOST = "1.08"
GAMMA_INPUT = "2.4"
GAMMA_OUTPUT = "2.1"
A bit more contrast, a bit more drama. Looks great in candlelight 🌒
📂 Shader Stack Base
All three use crt-easymode-halation as the core shader stack:
linearize.slang
blur_horiz.slang
blur_vert.slang
threshold.slang
crt-easymode-halation.slang
The second one (curved) adds ewa_curvature.slang
on top at the end, after everything else is applied.
To install, make sure your Retroarch installation is using the vulkan video driver, these will not work otherwise! Put them in the shaders directory, under slangp in their own directory. Technically, you can put them wherever you want, just make sure to edit the paths accordingly!
I hope you can enjoy them as well. They work quite nicely with the Steam Deck.
I will put them here below :
tokimeki-warm-flat.slangp
shaders = "5"
shader0 = "../crt/shaders/crt-easymode-halation/linearize.slang"
filter_linear0 = "false"
srgb_framebuffer0 = "true"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
alias0 = "ORIG_LINEARIZED"
shader1 = "../crt/shaders/crt-easymode-halation/blur_horiz.slang"
filter_linear1 = "false"
srgb_framebuffer1 = "true"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "../crt/shaders/crt-easymode-halation/blur_vert.slang"
filter_linear2 = "false"
srgb_framebuffer2 = "true"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
alias2 = "HALATION_BLUR"
shader3 = "../crt/shaders/crt-easymode-halation/threshold.slang"
filter_linear3 = "false"
srgb_framebuffer3 = "true"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "../crt/shaders/crt-easymode-halation/crt-easymode-halation.slang"
filter_linear4 = "true"
scale_type4 = "viewport"
parameters = "COLOR_BOOST;GAMMA_INPUT;GAMMA_OUTPUT"
COLOR_BOOST = "1.05"
GAMMA_INPUT = "2.4"
GAMMA_OUTPUT = "2.2"
tokimeki-warm-curved.slangp
shaders = "6"
shader0 = "../crt/shaders/crt-easymode-halation/linearize.slang"
filter_linear0 = "false"
srgb_framebuffer0 = "true"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
alias0 = "ORIG_LINEARIZED"
shader1 = "../crt/shaders/crt-easymode-halation/blur_horiz.slang"
filter_linear1 = "false"
srgb_framebuffer1 = "true"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "../crt/shaders/crt-easymode-halation/blur_vert.slang"
filter_linear2 = "false"
srgb_framebuffer2 = "true"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
alias2 = "HALATION_BLUR"
shader3 = "../crt/shaders/crt-easymode-halation/threshold.slang"
filter_linear3 = "false"
srgb_framebuffer3 = "true"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "../crt/shaders/crt-easymode-halation/crt-easymode-halation.slang"
filter_linear4 = "true"
scale_type4 = "viewport"
shader5 = "../anti-aliasing/shaders/ewa_curvature.slang"
filter_linear5 = "true"
scale_type_x5 = "viewport"
scale_x5 = "1.000000"
scale_type_y5 = "viewport"
scale_y5 = "1.000000"
parameters = "COLOR_BOOST;GAMMA_INPUT;GAMMA_OUTPUT"
COLOR_BOOST = "1.05"
GAMMA_INPUT = "2.4"
GAMMA_OUTPUT = "2.2"
castlevania-goth.slangp
shaders = "5"
shader0 = "../crt/shaders/crt-easymode-halation/linearize.slang"
filter_linear0 = "false"
srgb_framebuffer0 = "true"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
alias0 = "ORIG_LINEARIZED"
shader1 = "../crt/shaders/crt-easymode-halation/blur_horiz.slang"
filter_linear1 = "false"
srgb_framebuffer1 = "true"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "../crt/shaders/crt-easymode-halation/blur_vert.slang"
filter_linear2 = "false"
srgb_framebuffer2 = "true"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
alias2 = "HALATION_BLUR"
shader3 = "../crt/shaders/crt-easymode-halation/threshold.slang"
filter_linear3 = "false"
srgb_framebuffer3 = "true"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "../crt/shaders/crt-easymode-halation/crt-easymode-halation.slang"
filter_linear4 = "true"
scale_type4 = "viewport"
parameters = "COLOR_BOOST;GAMMA_INPUT;GAMMA_OUTPUT"
COLOR_BOOST = "1.08"
GAMMA_INPUT = "2.4"
GAMMA_OUTPUT = "2.1"