I did Magpie port https://github.com/Blinue/Magpie/issues/860#issuecomment-6492990428 of it, but similar to [JobimaCRT_guest_advancedV8 vs crt-guest-advanced-ntsc] case in reshade, I will focus on update JobimaCRT_guest_advancedV8 in the future
Amazing, everytime I return you somehow outdo your last update. That ntsc de-dithering booster + ntsc filtering combo is the new highlight for me and I wasted no time putting it to work. Once again Iâm able to get composite to look just a bit more cleaner and sharper, hereâs some rgb screenies followed by new composite screenies:
Iâll never get tired of seeing all the dithering effects get blended while maintaining a clean sharp image. Nice update.
New Release Version (2026-11-03-r1):
Notable changes:
- Nice De-Dither Booster Fidelity improvement (NTSC, PAL).
- Update: Old âHi-Resâ sampling behaviour option added. Upgrades the chroma freq. option.
Download Link:
https://mega.nz/file/YwQX1RjK#stVhWKu5JVtYh3-uDq7zlGvrWyzIu91vk7201U3KEGE
Caught this right on time letâs test this out right away shall we.
The Chroma Frequency setting works wonderfully! A fantastic addition.
I would suggest that a similar setting for luma resolution autoscaling may also have merit, whether that means an option to restore the old behavior, or something new.
On a different note, as of crt-guest-advanced-2026-10-29 and crt-guest-advanced-2026-11-02, iâm noticing substantial color desaturation along with a new hazy looking horizontal chroma artifacting issue in 480 line material, most easily seen with Horizontal Filtering Resolution 0.5, Chroma Frequency 2.0, and NTSC Filter (Resolution) Scaling set to 4.0. This becomes less noticeable as the NTSC Filter (Resolution) Scaling is reduced.
Based on dissection of the changes, this is related to changes made to this section of ntsc-pass2:
if(phase < 2.5)
{
one_x.y = one_x.y/params.ntsc_cscale;
vec3 dx = vec3(one_x.x, one_x.y, 0.0);
float mit = 1.0;
float iloop = params.ntsc_taps;
iloop = max(iloop, 8.0); mit = 1.0 + 0.04*pow(smothstep(16.0, 8.0, iloop), 0.5);
vec3 dx1 = dx; dx.x*=mit;
int loopstart = int(32.0 - iloop);
int j = loopstart;
for (i = loopstart; i < 32; i++)
{
offset = float(i-loopstart); dx1.xy = (offset - iloop)*dx.xy;
j = i - loopstart;
sums = fetch_offset(dx1);
tmp = vec3(luma_filter_2_phase[i], chroma_filter_2_phase[j].xx);
wsum = wsum + tmp;
signal += sums * tmp;
}
j = int(iloop);
tmp = vec3(luma_filter_2_phase[TAPS_2_phase], chroma_filter_2_phase[j], chroma_filter_2_phase[j]);
wsum = wsum + wsum + tmp;
signal += texture(Source, vTexCoord).xyz * tmp;
signal = signal / wsum;
}
else
{
one_x.y = one_x.y/params.ntsc_cscale1;
vec3 dx = vec3(one_x.x, one_x.y, 0.0);
float mit = 1.0;
float iloop = min(params.ntsc_taps, TAPS_3_phase);
if (params.ntsc_phase > 3.5) { iloop = max(iloop, 8.0); mit = 1.0 + 0.04*pow(smothstep(16.0, 8.0, iloop), 0.5); }
vec3 dx1 = dx; dx.x*=mit;
int loopstart = int(32.0 - iloop);
for (i = loopstart; i < 32; i++)
{
offset = float(i-loopstart); dx1.xy = (offset - iloop)*dx.xy;
sums = fetch_offset(dx1);
tmp = vec3(luma_filter_3_phase[i], chroma_filter_3_phase[i].xx);
wsum = wsum + tmp;
signal += sums * tmp;
}
tmp = vec3(luma_filter_3_phase[TAPS_2_phase], chroma_filter_3_phase[TAPS_2_phase], chroma_filter_3_phase[TAPS_2_phase]);
wsum = wsum + wsum + tmp;
signal += texture(Source, vTexCoord).xyz * tmp;
signal = signal / wsum;
}
old behavior
new behavior
Hey!
Yes, if you take a look, then there is substantial color bleed in the second screenshot. New versions consider and default the lower chroma bandwidth of NTSC. In this specific test scenario you can try to reduce color bleed by increasing the appropriate parameter, reduce number of TAPS or even use the âEdge Colorsâ option. The way itâs implemented color bleed doesnât get reduced with increased input resolutions or NTSC Filter (Resolution) Scaling automatically like before.
Edit: i updated the ntsc shaders above. Chroma Frequency: Default : Pixel Count was upgraded so sampling range is also affected, very similar to old behaviour.
I noticed that the max number of TAPS is now 32 instead of 48 and Chroma Bleeding (2 Phase) can now be maxed out at 5 instead of 4, was that intentional? I apologize if I missed it in the patch notes.
Hey there!
Chroma sampling was improved in recent versions, now âinverse chroma bleedingâ works as intended, so an user doesnât need more taps, itâs enough to reduce the chroma (2-phase) value below 1.0 and it works out. Plus new sampling offsets were rearranged, so increased chroma bleeding has a bit reduced effect with high resolution content, hence the parameter range increase. Everything is planned and deliberate, no worries. 
Now 24 TAPS are quite sufficient for any content, luma sampling needs even less, but i still kept the default chroma looks with low-res (224p, 240pâŚ) content. 32 TAPS are maybe needed beyond and included 720(p or i) resolutions.
Awesome! Thank you 
hi, first of all thanks for your work. are there any particular settings i should change if im using this shader with hdr?
Hey! Most important are brightness settings, which involve a proper selection of the mask and mask strength. There are more settings for fine tuning though.
Dear @guest.r, if I may have some of your time and patience, I have many more questions, some being more technical/in-depth, regarding the NTSC shader!
I have a Legion 5 15IRX10 Type 83LY with a 100% DCI-P3 1600p WQXGA OLED EDO EF10QBC64.C panel, 500 nits SDR and 1015 nits HDR. The laptop came with X-Rite Color Assistant with a preconfigured DCI-P3 profile and multiple other profiles to choose from. Attached below are screenshots of the exact color values used by the preconfigured âDefaultâ profile which I always use, as well as separate DCI-P3 and P3 profiles (disregard the Luminance value).
I use Retroarch Windowcast (started using it for HDR support but use it for regular SDR too), and sometimes Shaderglass, my first question is what what should I set these values to when using Crt-Guest-Advanced-NTSC:
Display Gamut: DCI or P3, and if using HDR, should I select Rec.2020, or DCI?
CRT Profile: EBU, SMPTE-C or Trin.?
LUT Colors: NTSC-J or NTSC 1953?
I want to emulate the way CRTs were in Japan, I read they had a blue tint and used NTSC-J, so first thing I thought was setting CRT Profile to Trin. (LUT Color is set to NTSC-J by default if I am not mistaken) but I am not too sure, especially about the gamut setting. And if I wanted to emulate the Sony KV-27S42 Composite (Japan version), which of these would I need to choose?
As for CRT Masks, to emulate the Sony KV-27S42, would Mask 5 (or 7) or 6 be more âaccurateâ on my panel?
Thanks in advance 











