Ok given that in this case it is possible recover some colors from the original clip, it is possible to use the following strategy:
1) create a colored clip using DDColor only and Retinex, this provides a colorful clip but with a lot of color noise
2) create a second clip with the colors recovered from the original clip, this will provide a more stable even if less colored clip (in practice this clip will substitute DeOldify)
3) combine the 2 clip created previously to obtain a colored clip with stable colors
Code:
# Imports
import vapoursynth as vs
# getting Vapoursynth core
import sys
import os
core = vs.core
# Import scripts folder
scriptPath = 'D:/Programs/Hybrid/64bit/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
# loading plugins
core.std.LoadPlugin(path="D:/Programs/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/LSMASHSource.dll")
# Import scripts
import color
import vsdeoldify as havc
import validate
clip = core.lsmas.LWLibavSource(source="Crvena_Zvezda_Fiorentina_1966.mkv", format="YUV420P8", stream_index=0, cache=0, fpsnum=25, prefer_hw=0)
clip = clip[20:] # skip test color
clip = core.std.Crop(clip=clip, left=20, right=20, top=4, bottom=4)# cropping to 1240x952
# Resizing using bicubic spline
clip = core.resize.Spline36(clip, width=1280, height=960)
frame = clip.get_frame(0)
# setting color matrix to 709.
clip = core.std.SetFrameProps(clip, _Matrix=vs.MATRIX_BT709)
# setting color transfer (vs.TRANSFER_BT709), if it is not set.
if validate.transferIsInvalid(clip):
clip = core.std.SetFrameProps(clip=clip, _Transfer=vs.TRANSFER_BT709)
# setting color primaries info (to vs.PRIMARIES_BT709), if it is not set.
if validate.primariesIsInvalid(clip):
clip = core.std.SetFrameProps(clip=clip, _Primaries=vs.PRIMARIES_BT709)
# setting color range to TV (limited) range.
clip = core.std.SetFrameProps(clip=clip, _ColorRange=vs.RANGE_LIMITED)
# making sure frame rate is set to 25fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# making sure the detected scan type is set (detected: progressive)
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive
# adjusting color space from YUV420P8 to RGB24 for vsHAVC
clip = core.resize.Bicubic(clip=clip, format=vs.RGB24, matrix_in_s="709", range_in_s="limited", range_s="full")
# create first clip using HAVC
clip1 = havc.HAVC_main(clip=clip, Preset="fast", ColorModel="DDColor(Artistic)", ColorMap="red->brown", ColorTune="medium", BlackWhiteTune="light", BlackWhiteMode=0, BlackWhiteBlend=True, ColorFix='Retinex/Red', EnableDeepEx=False)
clip1 = havc.HAVC_tweak(clip1, hue=10.00, sat=1.20, cont=0.95, bright=0)
# create the second clip using ColorAdjust and Tweak
clip2 = havc.HAVC_ColorAdjust(clip, BlackWhiteTune="strong", BlackWhiteMode=5, BlackWhiteBlend="True", ReColor=False)
clip2 = havc.HAVC_tweak(clip2, hue = 20, sat = 3.5, bright = 0, cont = 1.0, gamma = 1.0)
clip2 = havc.HAVC_adjust_rgb(clip2, strength=0.5, factor=(0.8, 1.10,1))
clip2 = havc.HAVC_bw_tune(clip2)
# merge the clips created previously, its possible to change the method (2-5) and/or the weight (0.2-0.8) to change the final colors (as preferred)
clip = havc.HAVC_merge(clip1, clip2, method=3, weight=0.6)
clip = havc.HAVC_tweak(clip, sat = 1.05, cont = 0.95, hue = 5)
# adjusting output color from: YUV444PS to YUV420P10 for x265Model
clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, matrix_s="709", dither_type="error_diffusion")
# set output frame rate to 25fps (progressive)
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# output
clip.set_output()