Hey sure! 
Open your RetroArch folder, then the shaders folder.
Inside, create a text document and copy the preset I posted earlier.
Then rename this text document to “test.slangp” without the quotes.
Hey sure! 
Open your RetroArch folder, then the shaders folder.
Inside, create a text document and copy the preset I posted earlier.
Then rename this text document to “test.slangp” without the quotes.
Thanks, I will try to do replicate that when I’m off from work. I’m trying to get better at that so I can take down y’all’s values.
I guess it’s been a while and the last guest-advanced version is doing well without some issues.
Would like to ask @hunterk politely if he would merge the last version into the slang repository.
The download link:
https://mega.nz/file/QoI0wAoS#z53_-BJN5hw9QieusZzhjDAbeuYJqL4gCvBfsfnpFv4
As usual, it’s just copy-paste, no deprecated files etc…
Thanks!
sounds good, thanks for the heads-up.
I have the PR prepared here: https://github.com/libretro/slang-shaders/pull/880
Let me know if that looks good and I’ll merge it.
Thanks again. It looks fine, can be merged. Regards!
How do would you guys expect the new QD-OLED V-Stripe sub-pixel layout to display masks intended for the standard LCD RBG layout?

Miniled is turning to be better for this OLED is giving headaches over burnouts last i heard
is there a version for glsl, I want to try this in nintendo switch’s retroarch
Hi everyone! I’m sharing my custom preset for Mega Drive / Genesis and Sega CD based on crt-guest-advanced-pal.
The Goal: I wanted to achieve those specific authentic PAL colors.
Why no CRT Mask? A peak brightness of 300 nits and 1080 is not enough to use a proper CRT mask without making the image too dim and muddy.
Instead of heavy CRT (which often cause moiré or look too dark on 1080p), I focused on pure color accuracy and phosphor-like glow . The main goal was to achieve the “true” blue — no more eggplant Sonic!
Transparency and Anti-aliasing: Since I’m not using a mask, I relied on other techniques to handle pixel smoothing and transparency effects (like waterfalls and shadows). By balancing Bloom, Halation, and specific PAL-pass filtering , I achieved natural blending and “melted” pixels without the loss of brightness that comes with a traditional CRT grid.Uses pal-pass logic to get vivid PAL colors even on NTSC regions.
HDR Glow: Tuned for 1080p HDR10 (300 nits) . It uses Bloom and Halation to simulate the light energy of a real CRT without the intrusive scanlines. High contrast (5.0) and brightness boost to make the image “pop” like a high-end consumer TV.
Best(?) with PAL PAR, but versatile.
Important Setup Notes:
Note on Image Clarity: Screenshots look a bit blurry in static, but it’s much sharper and clearer in motion on a real screen.
shaders = "19"
shader0 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
alias0 = ""
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
filter_linear0 = "false"
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
scale_type_x0 = "source"
scale_x0 = "1.000000"
scale_type_y0 = "source"
scale_y0 = "1.000000"
shader1 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
alias1 = "StockPass"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
filter_linear1 = "false"
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
scale_type_x1 = "source"
scale_x1 = "1.000000"
scale_type_y1 = "source"
scale_y1 = "1.000000"
shader2 = "shaders_slang/crt/shaders/guest/advanced/afterglow0.slang"
alias2 = "AfterglowPass"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
filter_linear2 = "true"
float_framebuffer2 = "false"
srgb_framebuffer2 = "false"
scale_type_x2 = "source"
scale_x2 = "1.000000"
scale_type_y2 = "source"
scale_y2 = "1.000000"
shader3 = "shaders_slang/crt/shaders/guest/advanced/pre-shaders-afterglow.slang"
alias3 = "PrePass0"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
filter_linear3 = "true"
float_framebuffer3 = "false"
srgb_framebuffer3 = "false"
scale_type_x3 = "source"
scale_x3 = "1.000000"
scale_type_y3 = "source"
scale_y3 = "1.000000"
shader4 = "shaders_slang/crt/shaders/guest/advanced/interlace-ntsc.slang"
alias4 = "InterlacePass"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
filter_linear4 = "true"
float_framebuffer4 = "true"
srgb_framebuffer4 = "false"
scale_type_x4 = "source"
scale_x4 = "1.000000"
scale_type_y4 = "source"
scale_y4 = "1.000000"
shader5 = "shaders_slang/crt/shaders/guest/advanced/pal/pal-pass1.slang"
alias5 = "PalPass1"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "false"
filter_linear5 = "false"
float_framebuffer5 = "true"
srgb_framebuffer5 = "false"
scale_type_x5 = "source"
scale_x5 = "1.000000"
scale_type_y5 = "source"
scale_y5 = "1.000000"
shader6 = "shaders_slang/crt/shaders/guest/advanced/pal/pal-pass2.slang"
alias6 = "PalPass2"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "false"
filter_linear6 = "false"
float_framebuffer6 = "true"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "4.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/pal/pal-pass3.slang"
alias7 = "PalPass3"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
filter_linear7 = "true"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "0.500000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/advanced/custom-fast-sharpen-pal.slang"
alias8 = "NtscPass"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
filter_linear8 = "true"
float_framebuffer8 = "false"
srgb_framebuffer8 = "false"
scale_type_x8 = "source"
scale_x8 = "1.000000"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
alias9 = "PrePass"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "true"
filter_linear9 = "true"
float_framebuffer9 = "false"
srgb_framebuffer9 = "false"
scale_type_x9 = "source"
scale_x9 = "1.000000"
scale_type_y9 = "source"
scale_y9 = "1.000000"
shader10 = "shaders_slang/crt/shaders/guest/advanced/avg-lum-ntsc.slang"
alias10 = "AvgLumPass"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "true"
filter_linear10 = "true"
float_framebuffer10 = "false"
srgb_framebuffer10 = "false"
scale_type_x10 = "source"
scale_x10 = "1.000000"
scale_type_y10 = "source"
scale_y10 = "1.000000"
shader11 = "shaders_slang/crt/shaders/guest/advanced/linearize-ntsc-new.slang"
alias11 = "LinearizePass"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
filter_linear11 = "true"
float_framebuffer11 = "true"
srgb_framebuffer11 = "false"
scale_type_x11 = "source"
scale_x11 = "1.000000"
scale_type_y11 = "source"
scale_y11 = "1.000000"
shader12 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc-pass1.slang"
alias12 = "Pass1"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
filter_linear12 = "true"
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "viewport"
scale_x12 = "1.000000"
scale_type_y12 = "source"
scale_y12 = "1.000000"
shader13 = "shaders_slang/crt/shaders/guest/hd/gaussian_horizontal.slang"
alias13 = ""
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
filter_linear13 = "true"
float_framebuffer13 = "true"
srgb_framebuffer13 = "false"
scale_type_x13 = "absolute"
scale_x13 = "800"
scale_type_y13 = "source"
scale_y13 = "1.000000"
shader14 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
alias14 = "GlowPass"
wrap_mode14 = "clamp_to_border"
mipmap_input14 = "false"
filter_linear14 = "true"
float_framebuffer14 = "true"
srgb_framebuffer14 = "false"
scale_type_x14 = "absolute"
scale_x14 = "800"
scale_type_y14 = "absolute"
scale_y14 = "600"
shader15 = "shaders_slang/crt/shaders/guest/hd/bloom_horizontal.slang"
alias15 = ""
wrap_mode15 = "clamp_to_border"
mipmap_input15 = "false"
filter_linear15 = "true"
float_framebuffer15 = "true"
srgb_framebuffer15 = "false"
scale_type_x15 = "absolute"
scale_x15 = "800"
scale_type_y15 = "absolute"
scale_y15 = "600"
shader16 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
alias16 = "BloomPass"
wrap_mode16 = "clamp_to_border"
mipmap_input16 = "false"
filter_linear16 = "true"
float_framebuffer16 = "true"
srgb_framebuffer16 = "false"
scale_type_x16 = "absolute"
scale_x16 = "800"
scale_type_y16 = "absolute"
scale_y16 = "600"
shader17 = "shaders_slang/crt/shaders/guest/advanced/crt-guest-advanced-ntsc-pass2.slang"
alias17 = ""
wrap_mode17 = "clamp_to_border"
mipmap_input17 = "false"
filter_linear17 = "true"
float_framebuffer17 = "true"
srgb_framebuffer17 = "false"
scale_type_x17 = "viewport"
scale_x17 = "1.000000"
scale_type_y17 = "viewport"
scale_y17 = "1.000000"
shader18 = "shaders_slang/crt/shaders/guest/advanced/deconvergence-ntsc.slang"
alias18 = ""
wrap_mode18 = "clamp_to_border"
mipmap_input18 = "false"
filter_linear18 = "true"
float_framebuffer18 = "false"
srgb_framebuffer18 = "false"
scale_type_x18 = "viewport"
scale_x18 = "1.000000"
scale_type_y18 = "viewport"
scale_y18 = "1.000000"
PR = "0.000000"
PG = "0.000000"
PB = "0.000000"
AS = "0.000000"
agsat = "0.000000"
CP = "1.000000"
TNTC = "1.000000"
WP = "-10.000000"
wp_saturation = "1.150000"
pre_bb = "1.250000"
contr = "0.100000"
pre_gc = "0.850000"
sega_fix = "1.000000"
PAL_FILT = "4.000000"
SATURATION = "0.900000"
BRIGHTNESS = "0.950000"
CHROMAF = "1.000000"
GCORR = "1.050000"
pal_ring = "0.700000"
CDETAILS = "0.600000"
gamma_out = "2.100000"
HSHARPNESS = "2.000000"
SIGMA_HOR = "1.400000"
S_SHARP = "0.400000"
HSHARP = "0.600000"
MAXS = "0.080000"
bloom = "0.250000"
halation = "0.250000"
gamma_c = "0.750000"
brightboost = "1.600000"
brightboost1 = "1.050000"
maskstr = "0.350000"
mcut = "0.700000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_mipmap = "false"
SamplerLUT1_linear = "true"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_mipmap = "false"
SamplerLUT2_linear = "true"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_mipmap = "false"
SamplerLUT3_linear = "true"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_mipmap = "false"
SamplerLUT4_linear = "true"
SamplerLUT4_wrap_mode = "clamp_to_border"
Glsl Buffer handling is different from slang (pot vs. npot texture sizes) and with the slang version some related coding approaches are very intuitive without needing to solve some annoying issues.
So the glsl version was deprecated quite early, but you can use slang shaders with glcore, vulkan, dx11 and dx12 video drivers.
Currently you can use some other very nice (and also fast) glsl shaders if you need to.
Meanwhile i implemented a way to achieve a nice smooth image without much hassle. I guess i’ll make a new release version soon including a couple of new features.
New Release Version (2026-05-17-r1):
Notable changes:
Download link:
https://mega.nz/file/xhACWLIS#f6B5wuGLEFe9bZf_NNjJItjJNdUAkykj6ZZKRynyj7c
Potential feature suggestion: an “NTSC Connection” parameter with an RGB mode for the NTSC passes, similar to the “PAL Connection” parameter with SCART mode you have in the PAL passes.
Yes, i have been giving it a thought, but it would definitelly bring more enthropy into the existing settings. Currently the default settings are dissolving dithering with the RF/composite/SVIDEO recommendations, which also the users are used they do.
Good news is you can now (added in latest releases) use the NTSC Filtering Scaling parameter to do exactly the same thing as the PAL alternative.
Showing the difference between normal sampling and bloom sampling. To mention it, bloom sampling is also affected by bloom pass settings.
Normal pixel sampling:
Bloom pixel sampling:
New Release Version (2026-05-21-r1):
Notable changes:
Download link:
https://mega.nz/file/pl5S3KyC#ZJTUuwqYqSSoaRUGrVGX3Zo--2NZ8wkkpPFd4DcqglQ
Guest, how do I know if I properly updated your new version in RA? I looked in the folders and it doesn’t change the dates
You’ll get a quite new version if you update Slang Shaders through RA online updater. Folder dates don’t get an updated timestamp i guess, since the “originals” with same names already exist(ed).
To get the newest version from this thread just copy the crt-guest-advanced-2026-05-18-release1 folder’s content into the crt folder of shaders_slang.
Should work without problems on a PC, dunno about phones, steamdeck…i don’t use RA on them.
Roger that, Guest. Keep up the tremendous work as usual.