Please show off what crt shaders can do!

I think if we’re trying to emulate a limited range display on a full-range display, clamping those ranges is at least valid (i.e., not incorrect), to get things like the intentional black crush outside of the map on FF6 example. I also think the black crush on survival horror games was expected, if not preferred, as the games that included calibration settings would typically have you set it until grays were crushed, and setting it too high would often reveal critters just standing around in the shadows, etc. (that is, easy mode cheating :P)


Yeah, I was gonna say, maybe it’s intentional in a game like RE. But I don’t want to speculate much further, unless someone with a CRT and real hardware can confirm. Perhaps I’d do well to ask in another thread.

1 Like

What if we should really be outputting full range to whatever display, including CRT and the display’s limitations will take care of limiting what needs to be limiting?


Well, I’m not sure. Here’s the RE test screen with just TV Levels enabled, no other shaders. Everything up to the red line should be visible.

1 Like

If you do that then you get crushed blacks and clipped whites. Setting it to limited range before it gets to the display will allow all the detail to be displayed.

The TV-out tweaks setting is really just a convenience thing, since the exact same thing can be accomplished using the graphics card settings.

New thread to talk about shader wildcards


Just showing off some gorgeous graphics from some classics.

Tap on image then zoom in for best viewing. Desktop users, right click then Open in New Tab, then press F11 for FullScreen. Non 4K users, zoom in until it looks correct.

CyberLab_SNES_Composite_Slot_Mask_IV_OLED_NTSC + CFRS_Mega_TV.slangp

Potential Spoiler Alert

CyberLab_Turbo_Duo_Shadow_Mask_IV_OLED_II_for_CyberLab_Blargg_Video_Filter.slangp + Blargg_NTSC_Turbo_Duo_SNES_S-Video_CyberLab_Special_Edition.filt


Good morning. I have been following the forum for a while and what you share and each one better, it is very difficult to decide, jeje. Regarding yours, Hari-82, how could I increase the color? Increase saturation, in other words. About touching the parameters of the shaders I have no idea. Sorry for my english from google translate

1 Like

Hi! after you load the preset you can go to:

Quick menu -> Shaders -> Shaders Parameters

in there you can increase Saturation parameter. there are actually 2 of them because I used more the 1 shader to do my preset, anyway try to increse the second you encounter little by little then you can save you preset in.

Quick menu -> Shaders -> Save

Or if you want you can manually modify parameters opening the preset file as a txt file and change

ia_saturation or wp_saturation

That last preset is still work in progress this is the last one

Colors a a little more vidid maybe start from this one

shaders = "14"
feedback_pass = "0"
shader0 = "shaders_slang/misc/shaders/colorimetry.slang"
wrap_mode0 = "clamp_to_border"
mipmap_input0 = "false"
alias0 = ""
float_framebuffer0 = "false"
srgb_framebuffer0 = "false"
shader1 = "shaders_slang/misc/shaders/image-adjustment.slang"
wrap_mode1 = "clamp_to_border"
mipmap_input1 = "false"
alias1 = ""
float_framebuffer1 = "false"
srgb_framebuffer1 = "false"
shader2 = "shaders_slang/crt/shaders/guest/advanced/stock.slang"
filter_linear2 = "false"
wrap_mode2 = "clamp_to_border"
mipmap_input2 = "false"
alias2 = ""
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/stock.slang"
filter_linear3 = "false"
wrap_mode3 = "clamp_to_border"
mipmap_input3 = "false"
alias3 = "StockPass"
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/afterglow0.slang"
filter_linear4 = "false"
wrap_mode4 = "clamp_to_border"
mipmap_input4 = "false"
alias4 = "AfterglowPass"
float_framebuffer4 = "false"
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/pre-shaders-afterglow.slang"
filter_linear5 = "false"
wrap_mode5 = "clamp_to_border"
mipmap_input5 = "true"
alias5 = "PrePass"
float_framebuffer5 = "false"
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/avg-lum.slang"
filter_linear6 = "true"
wrap_mode6 = "clamp_to_border"
mipmap_input6 = "true"
alias6 = "AvgLumPass"
float_framebuffer6 = "false"
srgb_framebuffer6 = "false"
scale_type_x6 = "source"
scale_x6 = "1.000000"
scale_type_y6 = "source"
scale_y6 = "1.000000"
shader7 = "shaders_slang/crt/shaders/guest/advanced/linearize.slang"
filter_linear7 = "true"
wrap_mode7 = "clamp_to_border"
mipmap_input7 = "false"
alias7 = "LinearizePass"
float_framebuffer7 = "true"
srgb_framebuffer7 = "false"
scale_type_x7 = "source"
scale_x7 = "1.000000"
scale_type_y7 = "source"
scale_y7 = "1.000000"
shader8 = "shaders_slang/crt/shaders/guest/advanced/gaussian_horizontal.slang"
filter_linear8 = "true"
wrap_mode8 = "clamp_to_border"
mipmap_input8 = "false"
alias8 = ""
float_framebuffer8 = "true"
srgb_framebuffer8 = "false"
scale_type_x8 = "absolute"
scale_x8 = "800"
scale_type_y8 = "source"
scale_y8 = "1.000000"
shader9 = "shaders_slang/crt/shaders/guest/advanced/gaussian_vertical.slang"
filter_linear9 = "true"
wrap_mode9 = "clamp_to_border"
mipmap_input9 = "false"
alias9 = "GlowPass"
float_framebuffer9 = "true"
srgb_framebuffer9 = "false"
scale_type_x9 = "absolute"
scale_x9 = "800"
scale_type_y9 = "absolute"
scale_y9 = "600"
shader10 = "shaders_slang/crt/shaders/guest/advanced/bloom_horizontal.slang"
filter_linear10 = "true"
wrap_mode10 = "clamp_to_border"
mipmap_input10 = "false"
alias10 = ""
float_framebuffer10 = "true"
srgb_framebuffer10 = "false"
scale_type_x10 = "absolute"
scale_x10 = "800"
scale_type_y10 = "absolute"
scale_y10 = "600"
shader11 = "shaders_slang/crt/shaders/guest/advanced/bloom_vertical.slang"
filter_linear11 = "true"
wrap_mode11 = "clamp_to_border"
mipmap_input11 = "false"
alias11 = "BloomPass"
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.slang"
filter_linear12 = "true"
wrap_mode12 = "clamp_to_border"
mipmap_input12 = "false"
alias12 = ""
float_framebuffer12 = "true"
srgb_framebuffer12 = "false"
scale_type_x12 = "viewport"
scale_x12 = "1.000000"
scale_type_y12 = "viewport"
scale_y12 = "1.000000"
shader13 = "shaders_slang/crt/shaders/guest/advanced/deconvergence.slang"
filter_linear13 = "true"
wrap_mode13 = "clamp_to_border"
mipmap_input13 = "false"
alias13 = ""
float_framebuffer13 = "false"
srgb_framebuffer13 = "false"
scale_type_x13 = "viewport"
scale_x13 = "1.000000"
scale_type_y13 = "viewport"
scale_y13 = "1.000000"
color_mode = "2.000000"
white_point_d93 = "0.000000"
clipping_method = "2.000000"
ia_target_gamma = "2.600000"
ia_monitor_gamma = "2.400000"
ia_saturation = "0.999999"
ia_contrast = "1.000000"
ia_black_level = "0.020000"
ia_R = "0.950000"
ia_G = "0.950000"
ia_B = "1.050000"
AS = "0.300000"
sat = "0.450000"
CS = "1.000000"
CP = "1.000000"
WP = "25.000000"
wp_saturation = "0.799999"
pre_bb = "0.999999"
contr = "0.200000"
BP = "0.000000"
vigstr = "0.250000"
vigdef = "1.000001"
GAMMA_INPUT = "2.500000"
gamma_out = "2.200000"
interm = "4.000000"
m_glow = "1.000000"
m_glow_cutoff = "0.300000"
SIZEH = "7.000000"
SIGMA_H = "1.500000"
SIZEV = "7.000000"
SIGMA_V = "1.500000"
SIZEHB = "6.000000"
SIGMA_HB = "0.950000"
SIZEVB = "6.000000"
SIGMA_VB = "0.900000"
glow = "0.300000"
bloom = "0.250000"
mask_bloom = "0.300000"
bloom_dist = "0.300000"
halation = "0.075000"
brightboost = "1.450000"
scanline1 = "5.500000"
scanline2 = "6.000000"
scans = "0.600000"
h_sharp = "2.999999"
s_sharp = "0.600000"
warpX = "0.030000"
warpY = "0.040000"
csize = "0.050000"
bsize1 = "0.150000"
shadowMask = "7.000000"
maskstr = "0.800000"
maskboost = "1.500000"
mshift = "2.000000"
addnoised = "0.400000"
noiseresd = "1.000000"
textures = "SamplerLUT1;SamplerLUT2;SamplerLUT3;SamplerLUT4"
SamplerLUT1 = "shaders_slang/crt/shaders/guest/advanced/lut/trinitron-lut.png"
SamplerLUT1_wrap_mode = "clamp_to_border"
SamplerLUT1_mipmap = "false"
SamplerLUT2 = "shaders_slang/crt/shaders/guest/advanced/lut/inv-trinitron-lut.png"
SamplerLUT2_wrap_mode = "clamp_to_border"
SamplerLUT2_mipmap = "false"
SamplerLUT3 = "shaders_slang/crt/shaders/guest/advanced/lut/nec-lut.png"
SamplerLUT3_wrap_mode = "clamp_to_border"
SamplerLUT3_mipmap = "false"
SamplerLUT4 = "shaders_slang/crt/shaders/guest/advanced/lut/ntsc-lut.png"
SamplerLUT4_wrap_mode = "clamp_to_border"
SamplerLUT4_mipmap = "false"

You can also try playing with the “scanline saturation” parameter as the saturation parameter can be a bit heavy-handed. Also the brightness boosts will affect saturation, as will the scanline bright/dark parameters. There’s a lot of crossover between all of the settings, just about everything has some effect on everything else.


Yes that’s what I wanted to say but decided to keep it less confusing! The process of tweaking (also the fun of it!) is kind of a balancing act between many variables.


Thank you both for your answers. I’ll try your new version (I already liked the previous one a lot), Hari-82, and I’ll also be attentive to your new presets, Nesguy.


If anyone has ever felt the need to print a screenshot while using a preset that has full mask and scanline strength, you might have noticed that it’s almost impossible to do so without some significant modification to the image or the preset.

This preset is one answer to that. It is also a modern alternative to my venerable RGB_SHARP/SMOOTH presets which aren’t the most realistic to me but still appear to be appreciated by many retro-gamers.

So without further ado, I present to you:


Tap on image then zoom in for best viewing. Desktop users, right click then Open in New Tab, then press F11 for FullScreen. Non 4K users, zoom in until it looks correct.


This is the thread for showing off right?

Tap on image then zoom in for best viewing. Desktop users, right click then Open in New Tab, then press F11 for FullScreen. Non 4K users, zoom in until it looks correct.




Just … wow, dude. That is incredible.

1 Like

Hello, new user here. I was just reading the conversation about the TV color levels from a few days ago and I wondered if it provides the accurate CRT color emulation when used with PCSX2. What I was thinking is that the PCSX2 outputs full RGB (if I am not mistaken; someone correct me if I’m wrong) just like the actual PS2, and what it means is that the PS2 sends full RGB signal to a limited RGB TV, therefore clipping some of the blacks, which is exactly what we would be doing with the tvout-tweaks applied on top of the PCSX2. Just throwing this idea in, so if someone could maybe confirm if I’m right or not, it would be really appreciated.

Well, I think we can close the book on TVOutTweak’s TV Color Levels parameter being accurate to real hardware on a CRT, at least using RGB:

This is in reference to bsnes’s gamma ramp, but TV Color Levels does something very similar in that exact same shot per my testing, so I think it’s safe to say that it’s not accurate to use when going for an RGB look. That said, the jury may still be out when it comes to NTSC composite or S-video. I have seen some pictures of FFVI taken using S-video where the colors of one particular dark border area don’t appear to be clipped out of existence:

However, TV Color Levels doesn’t completely eliminate those, either, just makes them much darker. So yeah, a bit more investigation may be in order for the purposes of NTSC color emulation.

Oh, and while we’re on the subject of NTSC colors, I have to say a lot of these screenshots, including the Lost Vikings and FFVI shots above, have VERY different colors to what you get out of an emulator. They’re not just more vibrant: blues in particular appear much more saturated. I can sort of approximate the colors using the NTSC LUT in Guest-Advanced, together with the Trinitron color profile, but it still falls a bit short, though the fact the NTSC LUT appears to be the closest might say something. It certainly looks nice, though:


Well, that makes sense. Now I’m wondering if PS2 actually outputs 16-235, in which case it would produce “correct” look on a 16-235 TV, without any crushed blacks. Which would make it look similar to PCSX2 without color levels adjustment, at least whan it comes to luma. Maybe a gamma adjustment could be applied to emulate CRT gamma curve and better black levels. Playing on a rather mediocre LCD, so I’m trying to achieve as accurate results as I can :joy:

Well done @RetroGames4K, @guest.r and @HyperspaceMadness et al!

It seems as though CRT Shaders (in the right hands) have finally passed the “Coke vs Pepsi” blind test!

This is somewhat of a milestone achievement!


As much as I love, use and enjoy shaders, the real test would be a real, in presence, live comparison. but I think the road is still very long… masks close up don`t say much about the whole image and general “effect” . Just my opinion!

1 Like