15.09.2026, 19:36
15.09.2026, 19:40
Side note: the initial processing of the script will take quite a while, but the processing should be okay.
I'll also look into using SVP or rife instead of mv for the interpolation. (probably tomorrow)
I'll also look into using SVP or rife instead of mv for the interpolation. (probably tomorrow)
16.09.2026, 19:40
using:
RIFE is used for the interpolation.
Just noticed I forgot to upload the updated filldrops.py I used.
=> uploaded a new dev which includes it.
Cu Selur
Code:
# Separate branch used only to calculate properties.
stats = core.std.PlaneStats(clip, plane=0)
def set_interp_flag(n, f):
f = f.copy()
use = False
if 0 < n < clip.num_frames - 1:
cur = f.props["PlaneStatsAverage"]
prev = stats.get_frame(n - 1).props["PlaneStatsAverage"]
nxt = stats.get_frame(n + 1).props["PlaneStatsAverage"]
use = cur > prev and cur > nxt
f.props["_UseInterp"] = int(use)
return f
# Input = original frames, prop source = stats
flagged = core.std.ModifyFrame(clip, stats, set_interp_flag)
org = flagged
import filldrops
core.std.LoadPlugin(path="%FILTERPATH%/FrameFilter/RIFE/librife.dll")
clip = filldrops.ReplaceFlagged(flagged, method="rife")Just noticed I forgot to upload the updated filldrops.py I used.
=> uploaded a new dev which includes it.
Cu Selur
17.09.2026, 13:23
Thanks Selur.
Been a hectic week. Will have a look over the weekend.
Been a hectic week. Will have a look over the weekend.
17.09.2026, 20:03
Uploaded a new dev with a reworked "filldrops.ReplaceFlagged" which should be a lot faster. 
so using:
inside the custom section is way more usable. 
Remember to also add Denoiser->QTGMC.
(Maybe I'll add some ui elements for this into the Hybrid next week.)
Cu Selur

so using:
Code:
# Separate branch used only to calculate properties.
stats = core.std.PlaneStats(clip, plane=0)
# Calculate which frames need replacing
# A frame is marked for replacement if its average luma is higher than the previous and below the next.
# This way one frame flashes should get detected.
def set_interp_flag(n, f):
f = f.copy()
use = False
if 0 < n < clip.num_frames - 1:
cur = f.props["PlaneStatsAverage"]
prev = stats.get_frame(n - 1).props["PlaneStatsAverage"]
nxt = stats.get_frame(n + 1).props["PlaneStatsAverage"]
use = cur > prev and cur > nxt
f.props["_UseInterp"] = int(use)
return f
# Input = original frames, prop source = stats
flagged = core.std.ModifyFrame(clip, stats, set_interp_flag)
# do the actual replacement of the flagged frames
import filldrops
clip = filldrops.ReplaceFlagged(flagged, method="mv")
Remember to also add Denoiser->QTGMC.
(Maybe I'll add some ui elements for this into the Hybrid next week.)
Cu Selur
17.09.2026, 21:34
That would be great. I've always preferred UI instead of coding. That would help a lot.
18.09.2026, 20:09
Uploaded a new dev with ui support for this.
I rewrote it a bit to make it more generic and added it under "Filtering->Vapoursynth->Frame->Stabilize->FixFlicker".
Try:
If you have different sources you might have to adjust the FixFlicker values used. (use Vapoursynth Preview with debug enabled)
If you notice interpolation artifacts in the replaced frames, try a different interpolation method.
Cu Selur
I rewrote it a bit to make it more generic and added it under "Filtering->Vapoursynth->Frame->Stabilize->FixFlicker".
Try:
- loading your clip into Hybrid
- setting "Filtering->(De-)Interlace/Telecine->Overwrite scan type to" to 'field-shifted'
- enable "Filtering->Vapoursynth->Denoise->QTGMC" and select "Input type" 2
- enable "Filtering->Vapoursynth->Frame->Stabilize->FixFlicker" and set "max. flash length" to 2 and "min. luma diff." to 0.01 (these values seem to work fine for the segments I know)
- go to "Filtering->Vapoursynth->Misc->Filter Order/Queue" and move QTGMCFilter above FixFlicker.
If you have different sources you might have to adjust the FixFlicker values used. (use Vapoursynth Preview with debug enabled)
If you notice interpolation artifacts in the replaced frames, try a different interpolation method.
Cu Selur
19.09.2026, 20:07
Do I keep artifacts and small de-flicker settings I had previously, or do I just go with what's in your last post ?
19.09.2026, 20:14
You should not need them, but use the Vapoursynth Preview to decide.
You can additionally use other filters&co depending on your preferences.
Cu Selur
You can additionally use other filters&co depending on your preferences.
Cu Selur
20.09.2026, 14:59
Getting the following error when opening Hybrid. The new dev version.
https://ibb.co/7dkzNN4z
However, program opens nonetheless. Busy with a new clip now.
I uploaded two files here
https://drive.google.com/drive/folders/1...drive_link
recording.avi - untouched
recording_applied_filters.avi - as the name says.
De-interlaced nicely, but flickering remains.
https://ibb.co/7dkzNN4z
However, program opens nonetheless. Busy with a new clip now.
I uploaded two files here
https://drive.google.com/drive/folders/1...drive_link
recording.avi - untouched
recording_applied_filters.avi - as the name says.
De-interlaced nicely, but flickering remains.