def filterchain() -> Union[vs.VideoNode, Tuple[vs.VideoNode, ...]]: """Main VapourSynth filterchain""" import EoEfunc as eoe import lvsfunc as lvf import vardefunc as vdf from ccd import ccd from finedehalo import fine_dehalo from vsutil import depth, get_y src, ep = JP_BD.clip_cut, JP_EP.clip_cut ep_ext = ep[0] * 16 + ep # F**K THIS STUDIO HOLY SHIT src = lvf.rfs(src, ep_ext, [(811, 859)]) src = depth(src, 16) # This noise can burn in hell. denoise_pre = get_y(src.dfttest.DFTTest(sigma=1.0)) denoise_ret = core.retinex.MSRCP(denoise_pre, sigma=[50, 200, 350], upper_thr=0.005) denoise_mask = flt.detail_mask(denoise_ret, sigma=2.0, lines_brz=3000).rgvs.RemoveGrain(4) denoise_pre = core.dfttest.DFTTest(src, sigma=4.0) denoise_smd = eoe.dn.CMDegrain(src, tr=5, thSAD=275, freq_merge=True, prefilter=denoise_pre) denoise_masked = core.std.MaskedMerge(denoise_smd, src, denoise_mask) denoise_uv = ccd(denoise_masked, threshold=6) decs = vdf.noise.decsiz(denoise_uv, sigmaS=8, min_in=200 << 8, max_in=235 << 8) # F**K THIS SHOW'S LINEART HOLY SHIT baa = lvf.aa.based_aa(decs.std.Transpose(), str(shader_file), gamma=120) baa = lvf.aa.based_aa(baa.std.Transpose(), str(shader_file), gamma=120) sraa = lvf.sraa(decs, rfactor=1.4) clmp_aa = lvf.aa.clamp_aa(decs, baa, sraa, strength=1.65) # AAing introduces some haloing (zzzzzz) restr_edges = fine_dehalo(clmp_aa, decs) restr_dark = core.std.Expr([clmp_aa, restr_edges], "x y min") deband = core.average.Mean([ flt.masked_f3kdb(restr_dark, rad=17, thr=[28, 20], grain=[12, 8]), flt.masked_f3kdb(restr_dark, rad=21, thr=[36, 32], grain=[24, 12]), flt.masked_placebo(restr_dark, rad=6.5, thr=2.5, itr=2, grain=4) ]) grain = vdf.noise.Graigasm( thrs=[x << 8 for x in (32, 80, 128, 176)], strengths=[(0.25, 0.0), (0.20, 0.0), (0.15, 0.0), (0.0, 0.0)], sizes=(1.20, 1.15, 1.10, 1), sharps=(80, 70, 60, 50), grainers=[ vdf.noise.AddGrain(seed=69420, constant=True), vdf.noise.AddGrain(seed=69420, constant=False), vdf.noise.AddGrain(seed=69420, constant=False) ]).graining(deband) return grain
def filterchain() -> Union[vs.VideoNode, Tuple[vs.VideoNode, ...]]: """Main filterchain""" import lvsfunc as lvf import vardefunc as vdf from vsutil import depth, split, join from finedehalo import fine_dehalo src = JP_BD.clip_cut src = depth(src, 16) src = core.resize.Bicubic(src, chromaloc_in=1, chromaloc=0) debl = lvf.deblock.vsdpir(src, strength=1, i444=True) debl = depth(debl, 16) decs = vdf.noise.decsiz(debl, sigmaS=8, min_in=200 << 8, max_in=235 << 8) planes = split(decs) planes[2] = fine_dehalo(planes[2], rx=2, ry=2, brightstr=0.9, darkstr=0) cdehalo = join(planes) dehalo = lvf.dehalo.bidehalo(cdehalo, sigmaS=1.5, sigmaS_final=1) baa = lvf.aa.based_aa(dehalo, str(shader_file)) sraa = lvf.sraa(dehalo, rfactor=1.65) clmp = lvf.aa.clamp_aa(dehalo, baa, sraa, strength=1.3) deband = flt.masked_f3kdb(clmp, thr=[32, 24]) grain = vdf.noise.Graigasm( # Mostly stolen from Varde tbh thrs=[x << 8 for x in (32, 80, 128, 176)], strengths=[(0.25, 0.0), (0.2, 0.0), (0.15, 0.0), (0.0, 0.0)], sizes=(1.15, 1.1, 1.05, 1), sharps=(65, 50, 40, 40), grainers=[ vdf.noise.AddGrain(seed=69420, constant=True), vdf.noise.AddGrain(seed=69420, constant=False), vdf.noise.AddGrain(seed=69420, constant=False) ]).graining(deband) return grain
def filterchain() -> Union[vs.VideoNode, Tuple[vs.VideoNode, ...]]: """Main VapourSynth filterchain""" import EoEfunc as eoe import lvsfunc as lvf import vardefunc as vdf from ccd import ccd from finedehalo import fine_dehalo from vsutil import depth, get_y, insert_clip src = JP_BD.clip_cut src_c = src src_ncop, src_nced = JP_NCOP.clip_cut, JP_NCED.clip_cut b = core.std.BlankClip(src, length=1) # OP/ED stack comps to check if they line up if opstart is not False: op_scomp = lvf.scomp(src[opstart:opstart+src_ncop.num_frames-1]+b, src_ncop[:-op_offset]+b) \ .text.Text('src', 7).text.Text('op', 9) if edstart is not False: ed_scomp = lvf.scomp(src[edstart:edstart+src_nced.num_frames-1]+b, src_nced[:-ed_offset]+b) \ .text.Text('src', 7).text.Text('ed', 9) # Splicing in NCs and diff'ing back the credits if opstart is not False: src = insert_clip(src, src_ncop[:-op_offset], opstart) src = lvf.rfs(src, src_c, [(opstart + 811, opstart + 859)]) if edstart is not False: src = insert_clip(src, src_nced[:-ed_offset], edstart) den_src, den_ncs = map(partial(core.dfttest.DFTTest, sigma=10), [src_c, src]) den_src, den_ncs = depth(den_src, 32), depth(den_ncs, 32) diff = core.std.MakeDiff(den_src, den_ncs).dfttest.DFTTest(sigma=50.0) # For some reason there's noise from previous credits remaining? Removing that here diff_brz = vdf.misc.merge_chroma(diff.std.Binarize(0.03), diff) diff = core.std.Expr([diff, diff_brz], "x y min") src = depth(src, 16) # This noise can burn in hell. denoise_pre = get_y(src.dfttest.DFTTest(sigma=1.0)) denoise_ret = core.retinex.MSRCP(denoise_pre, sigma=[50, 200, 350], upper_thr=0.005) denoise_mask = flt.detail_mask(denoise_ret, sigma=2.0, lines_brz=3000).rgvs.RemoveGrain(4) denoise_pre = core.dfttest.DFTTest(src, sigma=4.0) denoise_smd = eoe.dn.CMDegrain(src, tr=5, thSAD=275, freq_merge=True, prefilter=denoise_pre) denoise_masked = core.std.MaskedMerge(denoise_smd, src, denoise_mask) denoise_uv = ccd(denoise_masked, threshold=6) decs = vdf.noise.decsiz(denoise_uv, sigmaS=8, min_in=200 << 8, max_in=235 << 8) # F**K THIS SHOW'S LINEART HOLY SHIT baa = lvf.aa.based_aa(decs.std.Transpose(), str(shader_file), gamma=120) baa = lvf.aa.based_aa(baa.std.Transpose(), str(shader_file), gamma=120) sraa = lvf.sraa(decs, rfactor=1.4) clmp_aa = lvf.aa.clamp_aa(decs, baa, sraa, strength=1.65) # AAing introduces some haloing (zzzzzz) restr_edges = fine_dehalo(clmp_aa, decs) restr_dark = core.std.Expr([clmp_aa, restr_edges], "x y min") # Masking credits at the end if there's no NCED get_max = core.std.Expr([restr_dark, decs], "x y max") if opstart is False: restr_dark = lvf.rfs(restr_dark, get_max, [(None, 3500)]) if edstart is False: restr_dark = lvf.rfs(restr_dark, get_max, [(-5000, None)]) deband = core.average.Mean([ flt.masked_f3kdb(restr_dark, rad=17, thr=[28, 20], grain=[12, 8]), flt.masked_f3kdb(restr_dark, rad=21, thr=[36, 32], grain=[24, 12]), flt.masked_placebo(restr_dark, rad=6.5, thr=2.5, itr=2, grain=4) ]) grain = vdf.noise.Graigasm(thrs=[x << 8 for x in (32, 80, 128, 176)], strengths=[(0.25, 0.0), (0.20, 0.0), (0.15, 0.0), (0.0, 0.0)], sizes=(1.20, 1.15, 1.10, 1), sharps=(80, 70, 60, 50), grainers=[ vdf.noise.AddGrain(seed=69420, constant=True), vdf.noise.AddGrain(seed=69420, constant=False), vdf.noise.AddGrain(seed=69420, constant=False) ]).graining(deband) merge_creds = core.std.MergeDiff(depth(grain, 32), diff) return merge_creds
def filterchain() -> Union[vs.VideoNode, Tuple[vs.VideoNode, ...]]: """Main VapourSynth filterchain""" import EoEfunc as eoe import lvsfunc as lvf import vardefunc as vdf from ccd import ccd from finedehalo import fine_dehalo from vsutil import depth, get_y src = JP_BD.clip_cut src = depth(src, 16) # This noise can burn in hell. denoise_pre = get_y(src.dfttest.DFTTest(sigma=1.0)) denoise_ret = core.retinex.MSRCP(denoise_pre, sigma=[50, 200, 350], upper_thr=0.005) denoise_mask = flt.detail_mask(denoise_ret, sigma=2.0, lines_brz=3000).rgvs.RemoveGrain(4) denoise_pre = core.dfttest.DFTTest(src, sigma=4.0) denoise_smd = eoe.dn.CMDegrain(src, tr=5, thSAD=275, freq_merge=True, prefilter=denoise_pre) denoise_masked = core.std.MaskedMerge(denoise_smd, src, denoise_mask) denoise_uv = ccd(denoise_masked, threshold=6) decs = vdf.noise.decsiz(denoise_uv, sigmaS=8, min_in=200 << 8, max_in=235 << 8) # F**K THIS SHOW'S LINEART HOLY SHIT baa = lvf.aa.based_aa(decs.std.Transpose(), str(shader_file), gamma=120) baa = lvf.aa.based_aa(baa.std.Transpose(), str(shader_file), gamma=120) sraa = lvf.sraa(decs, rfactor=1.4) clmp_aa = lvf.aa.clamp_aa(decs, baa, sraa, strength=1.65) # AAing introduces some haloing (zzzzzz) restr_edges = fine_dehalo(clmp_aa, decs) restr_dark = core.std.Expr([clmp_aa, restr_edges], "x y min") deband = core.average.Mean([ flt.masked_f3kdb(restr_dark, rad=17, thr=[28, 20], grain=[12, 8]), flt.masked_f3kdb(restr_dark, rad=21, thr=[36, 32], grain=[24, 12]), flt.masked_placebo(restr_dark, rad=6.5, thr=2.5, itr=2, grain=4) ]) grain = vdf.noise.Graigasm( thrs=[x << 8 for x in (32, 80, 128, 176)], strengths=[(0.25, 0.0), (0.20, 0.0), (0.15, 0.0), (0.0, 0.0)], sizes=(1.20, 1.15, 1.10, 1), sharps=(80, 70, 60, 50), grainers=[ vdf.noise.AddGrain(seed=69420, constant=True), vdf.noise.AddGrain(seed=69420, constant=False), vdf.noise.AddGrain(seed=69420, constant=False) ]).graining(deband) # Masking credits at the end get_max = core.std.Expr([grain, decs], "x y max") sq_mask = [ lvf.mask.BoundingBox((782, 603), (507, 389)), lvf.mask.BoundingBox((0, 957), (1920, 123)), lvf.mask.BoundingBox((1139, 835), (478, 142)) ] sqmask = core.std.BlankClip(get_y(src)) for sq in sq_mask: mask = sq.get_mask(src).std.BoxBlur(hpasses=20, vpasses=20) sqmask = core.std.Expr([mask, sqmask], "x y +") max_masked = core.std.MaskedMerge(get_max, grain, sqmask) max_ed = lvf.rfs(grain, max_masked, (5467, None)) return max_ed
def do_filter(): """Vapoursynth filtering""" def _single_rate_aa(clip): nnargs = dict(nsize=0, nns=2, qual=1) eeargs = dict(alpha=0.2, beta=0.4, gamma=250, nrad=3, mdis=20) clip = core.eedi3m.EEDI3(clip, 0, 0, 0, sclip=core.nnedi3.nnedi3( clip, 0, 0, 0, **nnargs), **eeargs).std.Transpose() clip = core.eedi3m.EEDI3(clip, 0, 0, 0, sclip=core.nnedi3.nnedi3( clip, 0, 0, 0, **nnargs), **eeargs).std.Transpose() return clip # Fun part / Cutting src_funi, src_wkn = [depth(c, 16) for c in CLIPS_SRC] src_funi, src_wkn = src_funi[744:], src_wkn[0] + src_wkn # Dehardsubbing # comp = lvf.comparison.stack_compare(src_funi, src_wkn, height=540, make_diff=True) src = core.std.MaskedMerge(src_wkn, src_funi, kgf.hardsubmask(src_wkn, src_funi)) hardsub_rem = core.std.MaskedMerge( src, src_funi, kgf.hardsubmask_fades(src, src_funi, 8, 2000)) src = lvf.rfs(src, hardsub_rem, [(3368, 3451)]) # Regular filterchain op, ed, eyec = (1200, 3356), (18989, 19108), (31888, 34046) opstart = op[0] denoise = CoolDegrain(src, tr=1, thsad=36, blksize=8, overlap=4, plane=4) h = 846 w = get_w(h) b, c = vdf.get_bicubic_params('mitchell') luma = get_y(denoise) descale = core.descale.Debicubic(depth(luma, 32), w, h, b, c) upscale = vdf.fsrcnnx_upscale(depth(descale, 16), descale.height * 2, "Shaders/FSRCNNX_x2_56-16-4-1.glsl", core.resize.Point) sraa = _single_rate_aa(upscale) rescaled = core.resize.Bicubic(sraa, src.width, src.height, filter_param_a=0, filter_param_b=0) dering = core.std.MaskedMerge( rescaled, core.bilateral.Gaussian(rescaled, 0.3), hvf.HQDeringmod(rescaled, incedge=True, show=True)) rescaled = lvf.rfs(rescaled, dering, [(opstart, opstart + 498)]) merged = vdf.merge_chroma(rescaled, src) out = merged dehalo = fine_dehalo(out, rx=2.2, darkstr=0, brightstr=1, contra=True, useMtEdge=True) out = dehalo cred_m = vdf.drm(src, h, b=b, c=c, mthr=80, mode='ellipse') credit = lvf.rfs(out, core.std.MaskedMerge(out, src, cred_m), [op]) credit = lvf.rfs(credit, src, [eyec, ed]) out = credit thr = 7000 line_mask = gf.EdgeDetect( out, 'FDOG').std.Median().std.Expr(f'x {thr} < x x 3 * ?') deband = dbs.f3kpf(out, 17, 36, 36) deband_b = dbs.f3kbilateral(out, 20, 64, 64) deband = lvf.rfs(deband, deband_b, [(14775, 14846)]) deband = core.std.MaskedMerge(deband, out, line_mask) out = deband dedimm = gf.Tweak(out, sat=1.1, cont=1.1) dedimm = lvf.rfs(out, dedimm, [(12957, 13061)]) out = dedimm grain = core.grain.Add(out, 0.1) out = grain return depth(out, 10)