import vapoursynth as vs from tanteidan_common import (PrettyConfig, PrettySource, antialias, deband, denoise, finalize, regrain, stupid_op_scenefilter, wd_scenefilter) from yt_common.automation import SelfRunner from yt_common.denoise import bm3d from yt_common.source import waka_replace from typing import List, Optional from lvsfunc.dehardsub import HardsubSign, HardsubSignFade, HardsubMask, bounded_dehardsub from lvsfunc.misc import replace_ranges from lvsfunc.types import Range import os core = vs.core EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) CONFIG: PrettyConfig = PrettyConfig(EPNUM) SOURCE: PrettySource = PrettySource(CONFIG) OP: Optional[int] = 0 WELCOMING_DAYS: Optional[int] = None WAKA_REPLACE: List[List[Range]] = [ [(31864, 32650)], [], ] TITLECARDS: List[Range] = [ (2609, 2704), (5174, 5221), (5738, 5773), (5774, 5809), (6920, 6967), (9209, 9256), (10223, 10270), (11375, 11434), (11627, 11674), (12806, 12853), (14649, 14732), (16431, 16478), (19516, 19563), (24622, 24669), (25618, 25665), (27691, 27738), (29957, 30004), ] SIGNS_RU: List[HardsubMask] = [ HardsubSignFade(TITLECARDS + [ (2158, 2298), (31751, 31863), (5666, 5683), (5684, 5701), (5702, 5737), (6722, 6763), (6764, 6811), (10715, 10757), (12026, 12115), (12566, 12631), (12632, 12683), (20821, 20919), (20920, 21039), ]), HardsubSign([ (2327, 2608), ]), ] AA_STRONGER: List[Range] = [ (15231, 15338), # this fucking plant what the hell ] AA_STRONG: List[Range] = [ ] AA_WEAK: List[Range] = [ (13814, 14518), ] AA_NONE: List[Range] = TITLECARDS + [ # chapter 2 title cards are insanely detailed (20821, 21039), ] STUPID_DENOISE: List[Range] = [ (11435, 11626), (12026, 12115), ] def filter_basic() -> vs.VideoNode: wakas, ref = SOURCE.source() wakas = [w[0] + w for w in wakas] waka = wakas[0] waka, wakas = waka_replace(waka, wakas[1:], WAKA_REPLACE) src = bounded_dehardsub(waka, ref, SIGNS_RU, wakas) src.set_output(1) return src def filter() -> vs.VideoNode: src = filter_basic() den = denoise(src) deb = deband(den) deb = replace_ranges(deb, bm3d(src, sigma=4, radius=1), STUPID_DENOISE) aa = antialias(deb, stronger=AA_STRONGER, strong=AA_STRONG, weak=AA_WEAK, noaa=AA_NONE) scenefilter = stupid_op_scenefilter(aa, deb, OP) if WELCOMING_DAYS is not None: scenefilter = wd_scenefilter(aa, deb, WELCOMING_DAYS) grain = regrain(scenefilter) final = finalize(grain) final.set_output() return final if __name__ == "__main__": SelfRunner(CONFIG, filter, filter_basic) else: filter()