New CRT shader from Guest + CRT Guest Advanced updates

I guess you now know what your next upgrade should be. How long now have you been complaining about these similar issues on these forums?

I know everyone’s situation is different so not everyone is in a position to just replace any piece of hardware at any point in time but if you do love this hobby and would like to spend more time enjoying then start to do some research as to what displays might be able to fit in your budget, either now or future and see how best you can get to that point.

I have a TV that can’t do all shaders properly too. It sucks. I probably won’t sell it because it’s a 3D TV and those are probably rare these days, right?

If you can sell yours then get something to replace it that will bring you joy instead of frustration. I think that that might be the best solution.

1 Like

I know, but my economic situation doesn’t let me do that as of now, i had to return my 4k set and stay with this one due to some constraints i had sometime ago, i literally started to think if this magenta rows were a problem over the mask some days ago

1 Like

If you set the parameter Color Temperature % to -100, then it should exactly hit the color temperature of the NTSC-J standard (9300K).

If you want an older US based NTSC standard, then set LUT Colors to 4.0 and leave color temps at default.

Edit: Good alternative is also to select the last profile under CRT Profile: EBU | P22 | SMPTE-C | Philips | Trin.. It’s “calibrated” to have a nice cool colors look, just like NTSC-J.


Thanks, works perfectly. Just one other thing: I’m torn between scanline types 1 and 2. What do you think is better suited for the steam deck?

1 Like

Type 2 has better consistency with thinner scanlines, you might want it for aperture masks. Type 1 is better for slotmask and shadowmask setups.

There are also very nice possibilities with scanline types -1 and 0 if you crank up Smart Sharpen Scanlines. Great for slotmask and shadowmask setups.


New Release Version (2024-02-29-r1):

Notable changes:

  • Mask Zoom Sharpen feature improvement.
  • Magic Glow Alternate mode (2.0) added. It’s now quite more safe to crank up very wide magic glow.
  • Current presets aren’t affected (@sonkun…).
  • Edit: small tweak

Download link:


I’m a bit confused by my results and wonder if it’s because of my width and height parameters. The game is outputting at 1280x800 in a 4:3 aspect ratio, and I set the width and height to 640 and 480 respectively. Is that correct? Once again I’m using the Reshade port so idk if the same methods apply.

1 Like

You can run the specific game in mega bezel, for example, where you can read (yellow text) the specific game resolution. If it’s a Retroarch supported retro game, of course.

For best scanline experience, the input resolution should exactly match the game’s “original” resolution.

With 640x480 input resolution, usually interlacing mode is triggered, so no regular scanlines. It can give good results, but still depends on which game you are playing.

You can also troubleshoot the ReShade port issues in this specific thread:

1 Like

So I gave the new alternate magic glow a quick spin, I’m not quite sure what to make of it yet. My question to you is is the main purpose of it us just to be able to crank out more glow? What exactly makes it different from cranking out more glow with regular magic glow?

1 Like

It depends on the specific use case. If you use it as a wide effect (and using other means for mask mitigation), then it’s a nicer effect regarding the old one.

If you use it for mask mitigation, then you might want re-tweak most of the glow settings, since it works differently.

Folks who just quickly switch from regular glow to magic glow might not care too much.

TL;DR: it’s relatively better as a wide effect.

I’m presenting a ntsc preset, if someone wants to give it a try:

TNTC = "4.000000"
cust_fringing = "0.000000"
ntsc_fields = "1.000000"
ntsc_gamma = "1.749999"
ntsc_taps = "20.000000"
ntsc_cscale = "1.999999"
ntsc_falloff = "0.500000"
ntsc_sharp = "-6.000000"
DEBLUR = "3.500000"
GAMMA_INPUT = "2.200000"
gamma_out = "2.150000"
m_glow = "2.000000"
m_glow_cutoff = "0.080000"
m_glow_low = "1.000000"
m_glow_high = "3.000002"
m_glow_mask = "0.450000"
SIGMA_H = "1.500000"
SIGMA_V = "1.400001"
FINE_BLOOM = "3.000000"
SIZEHB = "4.000000"
SIGMA_HB = "0.800000"
SIZEVB = "4.000000"
SIGMA_VB = "0.700000"
glow = "0.400000"
mask_bloom = "-0.150000"
halation = "-0.250000"
hmask1 = "0.150000"
gamma_c = "1.300000"
clips = "0.200000"
gsl = "-1.000000"
scanline1 = "4.500000"
scanline2 = "7.000000"
beam_min = "2.299999"
beam_max = "0.900000"
tds = "1.000000"
scans = "1.500000"
scan_falloff = "0.350000"
scangamma = "2.600000"
IOS = "2.000000"
shadowMask = "12.000000"
maskstr = "1.000000"
maskboost = "1.400000"
mask_zoom = "-3.000000"
mzoom_sh = "0.500000"
mshift = "0.500000"
mask_layout = "1.000000"
mask_gamma = "1.800001"
smoothmask = "1.000000"

Interesting. I’m currently satisfied with the magic glow settings I have at the moment but I’ll head into the lab anyway and play around with this. If I was to use this alternate magic glow I’ll probably try to aim for a similar look but with the added benefits this new version will add. I’ll see how things go.


Here is a nice Magic Glow 2.0 mask mitigation example (standard version):

m_glow = "2.000000"
m_glow_cutoff = "0.040000"
m_glow_low = "5.000001"
m_glow_high = "3.000002"
m_glow_dist = "2.499999"
m_glow_mask = "0.500000"
FINE_GLOW = "3.000000"
SIGMA_H = "1.000000"
SIGMA_V = "0.900000"
glow = "0.849999"
gamma_c = "1.350000"
clips = "0.300000"
scans = "1.000000"
shadowMask = "9.000000"
maskstr = "1.000000"
maskboost = "1.150000"
mask_zoom = "1.000000"
mzoom_sh = "0.400000"
mask_gamma = "1.350001"
slotmask = "1.000000"
slotmask1 = "1.000000"
deconrr = "0.750000"
deconrb = "-0.750000"
deconrry = "0.500000"
deconrby = "-0.500000"


The first thing I noticed with this new alternate magic glow is that even after cranking up other glow settings the glow doesn’t seem to “smother” the mask like before resulting in me being able to see the mask and scanlines a bit clearer.

Here’s my current rgb slotmask preset:

Here’s with new magic glow settings:

I like it. I’m still experimenting with it but I predict I’ll be putting together a new preset pack with this new magic glow.


Is there a way to load the Magic Glow feature into a shader that doesn’t currently use it?

If we can port it over to shaders that don’t use your version.

1 Like

First, thanks for liking magic glow. It’s really a versatile feature tbh.

Otoh it’s also integrated into the guest-advanced shaders in a way that doesn’t allow simple separation and extraction into a standalone version.

But, there are some really nice alternatives, which can be apended after a shader preset is loaded.

Dual filter:

Magic bloom:

I pointed to directories, which can be found into the shaders_slang folder, so you can give it some tries.


The more I look at it the more I’m definitely liking it more than the regular magic glow. I like that scanlines look more pronounced while still maintaining a high level of glow/brightness. You made your shader a bit more sexy with that feature there, almost feel like it was made just for me lol.

1 Like

I think I lost track of all the updates! :sweat_smile:

How far behind are the shaders from the online updater?

1 Like

It’s missing some features…but i’m still working on some things, like better mask mitigation.

Here is an example of some new options:


I recently acquired an HDR1000 4K display and had a chance to test some shaders. So far, guest-advanced is the easiest and nicest experience.

I had to make the following adjustments:

Peak Luminance: 1000 Paper White: 750 Contrast: 5.8x

With these settings I’m matching the brightness of the raw non-HDR image and it passes PLUGE and grey bars.

However, I’m noticing a green(?) tint to grey bars. Any idea where I should start? Can anyone else replicate this? These are the changes I’ve made:

#reference "shaders_slang/crt/crt-guest-advanced.slangp"
glow = "0.000000"
brightboost = "1.100000"
brightboost1 = "1.000000"
gsl = "2.000000"
scanline1 = "8.000000"
scanline2 = "10.000000"
beam_min = "1.000000"
h_sharp = "8.999977"
s_sharp = "0.000000"
shadowMask = "6.000000"
maskstr = "1.000000"
mcut = "1.000000"
masksize = "2.000000"
slotmask = "1.000000"
slotmask1 = "1.000000"
double_slot = "3.000000"

Couldn’t this be due to the display calibration?

Sure, I’ll give it a try when I get a chance. I’m definitely interested in seeing if I can get other shaders to look better using RetroArch’s HDR implementation.

Is this the same Mini LED you got recently?

Anyway, I tried your settings. What worked for me was Peak and Paperwhite Luminance at 630. 6.3 was the lowest I could set the contrast and still barely make out the second to last bar in the grey ramp test and also differentiate between the 2 brightest bars.

While 5.3 might work in a dark room, I kinda settled on 5.7 for now after testing in games. So it was in fact actually pretty simple to get CRT-Guest-Advanced looking great in HDR. All that was needed was a little impetus.

This is just a starting point, imagine what can be done now with all the tools that we have at our disposal?

Concerning this, I noticed that with Expand Colour Gamut On, everything looked slightly cooler and more saturated, while with it off, things looked slightly warmer with less saturation. Whites looked more neutral with it on to me. I didn’t notice any tinting that would cause me to loose any sleep over.

In order to further raise awareness of what we are trying to accomplish, please allow me to share my first configuration override.

CyberLab NESGuy CRT-Guest HDR Calibration.cfg

aspect_ratio_index = "0"
custom_viewport_height = "1344"
custom_viewport_width = "1536"
menu_framebuffer_opacity = "0.000000"
video_aspect_ratio = "1.243300"
video_frame_delay_auto = "true"
video_hdr_display_contrast = "5.699999"
video_hdr_enable = "true"
video_hdr_max_nits = "630.000000"
video_hdr_paper_white_nits = "630.000000"
video_scale_integer = "true"
video_scale_integer_overscale = "true"

Screenies or it didn’t happen