Hello,
I successfully installed Hybrid on my MacBook Pro M5, but I am unable to perform the video preview process. I have had issues with VSPipe, even though I installed it using brew.
Despite being unable to preview, I was able to start the rendering process because I did not select a model from the frame section. Could you assist me?
Assist you, how?
Is Vapoursynth added to the PATH like the README.txt stated?
Hybrid does come with all the Vapoursynt filters (Hybrid.app/Contents/MacOS/vsfilters) I could find.
I can't really say whether those filters work on m5, but I expect them to.
It also comes with the scripts Hybrid uses (Hybrid.app/Contents/MacOS/vsscripts).
Does the Vapoursynth Preview show an error, if it does what error?
Where is the debug output? (seems like you ignored the notice to read the sticky,.. [INFO] Infos needed to fix&reproduce bugs,..)
If you want to use Vapoursynth, make sure the Vapoursynth Preview works.
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
I am experiencing a similar issue to the original poster.
What Hybrid version did I use?
Hybrid version 2026.03.21.1 (64bit)
What is used operating system?
macOS Tahoe (26.4.1) on Apple Silicon M5.
What did happen? If an error message came up what did it exactly say?
My goal was to deinterlace a .mov video using QTGMC and output it in ProRes format without audio. When I tried to run the job, the process crashed immediately during the video encoding stage (video sub-job).
Set Video Handling to ProRes and disabled audio export.
Added to Queue and started the job.
The job crashes instantly.
Other:
I also noticed that the video preview in VapourSynth is not working (screenshot attached).
I am unsure what the correct 'official' path is that needs to be configured in the VapourSynth Editor settings to make it function correctly on this system.
Yesterday, 13:21 (This post was last modified: Yesterday, 14:08 by Selur.)
Hybrid uses and should come with vsViewer,...
The Vapoursynth script:
# Imports
import vapoursynth as vs
# getting Vapoursynth core
import sys
import os
core = vs.core
core.std.LoadAllPlugins('/Applications/Hybrid.app/Contents/MacOS/vsfilters')
# Import scripts folder
scriptPath = '/Applications/Hybrid.app/Contents/MacOS/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
# Import scripts
import qtgmc
import validate
# Source: '/Users/teemu/Desktop/belos.mov'
# Current color space: RGB24, bit depth: 8, resolution: 720x576, frame rate: 25fps, scanorder: top field first, yuv luminance scale: limited, matrix: 470bg, transfer: bt.709, primaries: bt.601 ntsc, format: prores
# Loading '/Users/teemu/Desktop/belos.mov' using BestSource
clip = core.bs.VideoSource(source="/Users/teemu/Desktop/belos.mov", cachepath="/var/folders/3y/0t3zllln2t14ts4_q2hfzl6w0000gn/T/belos_bestSource_SCRIPTID_:_", track=1)
frame = clip.get_frame(0)
# 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_BT470_BG), if it is not set.
if validate.primariesIsInvalid(clip):
clip = core.std.SetFrameProps(clip=clip, _Primaries=vs.PRIMARIES_BT470_BG)
# 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: top field first)
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_TOP) # scan type: top field first
# adjusting color space from RGB24 to YUV444P16 for vsQTGMC
clip = core.resize.Bicubic(clip=clip, format=vs.YUV444P16, matrix_s="470bg", range_in_s="full", range_s="limited", dither_type="error_diffusion") # additional resize to match target color sampling
# Deinterlacing using QTGMC
clip = qtgmc.QTGMC(clip, Preset="Fast", TFF=True, opencl=True) # new fps: 50
# Making sure content is preceived as frame based
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # scan type: progressive
clip = clip[::2] # selecting previously even frames, new fps: 25
# adjusting output color from YUV444P16 to YUV422P10 for ProResModel
clip = core.resize.Bicubic(clip=clip, format=vs.YUV422P10)
# set output frame rate to 25fps (progressive)
clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
# output
clip.set_output()
# script was created by Hybrid 2026.03.21.1
seems fine.
Ahhh,...
AttributeError: No attribute with the name nnedi3cl exists. Did you mistype a plugin namespace or forget to install a plugin?
ahh,... disable the GPU in QTGMC
I thought I bundled nnedi3cl with Hybrid.
/opt/homebrew/lib is the path vsViewer points to here,.
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
Thank you for your response. Could you please clarify exactly where the GPU setting should be disabled? I am unable to find this option under the Filtering -> (De-)Interlace/Telecine tab, for instance.
8 hours ago(This post was last modified: 8 hours ago by Selur.)
Sorry, forget that.
On MacOS the only nnedi variant available was nnnedi3cl, which is why GPU (in the QTGMC settings) is active, but disabled.
Hybrid does ship with it:
selur@Mac-mini-von-Georg ~ % cd Hybrid/Hybrid.app/Contents/MacOS/vsfilters/
selur@Mac-mini-von-Georg vsfilters % ls -lah
total 100256
drwxr-xr-x 57 selur staff 1,8K 21 März 14:42 .
drwxr-xr-x@ 42 selur staff 1,3K 9 Apr. 15:13 ..
-rwxr-xr-x@ 1 selur staff 17M 21 März 14:42 bestsource.dylib
drwxr-xr-x 7 selur staff 224B 15 Feb. 2025 GLSL
drwxr-xr-x 71 selur staff 2,2K 15 Feb. 2025 GLSL-Resizers
-rw-r--r--@ 1 selur staff 604K 21 März 14:42 libadaptivegrain_rs.dylib
-rwxr-xr-x@ 1 selur staff 51K 21 März 14:42 libaddgrain.dylib
-rwxr-xr-x@ 1 selur staff 85K 21 März 14:42 libaddnoise.dylib
-rwxr-xr-x@ 1 selur staff 83K 21 März 14:42 libawarpsharp2.dylib
-rwxr-xr-x@ 1 selur staff 67K 21 März 14:42 libbilateral.dylib
-rwxr-xr-x@ 1 selur staff 67K 21 März 14:42 libbwdif.dylib
-rwxr-xr-x@ 1 selur staff 51K 21 März 14:42 libcas.dylib
-rwxr-xr-x@ 1 selur staff 33K 21 März 14:42 libcnr2.dylib
-rwxr-xr-x@ 1 selur staff 81K 21 März 14:42 libcolorbars.dylib
-rwxr-xr-x@ 1 selur staff 102K 21 März 14:42 libctmf.dylib
-rwxr-xr-x@ 1 selur staff 70K 21 März 14:42 libcurve.dylib
-rwxr-xr-x@ 1 selur staff 1,3M 21 März 14:42 libdctfilter.dylib
-rwxr-xr-x@ 1 selur staff 52K 21 März 14:42 libdeblock.dylib
-rwxr-xr-x@ 1 selur staff 49K 21 März 14:42 libdecross.dylib
-rwxr-xr-x@ 1 selur staff 49K 21 März 14:42 libdedot.dylib
-rwxr-xr-x@ 1 selur staff 164K 21 März 14:42 libdegrainmedian.dylib
-rwxr-xr-x@ 1 selur staff 1,4M 21 März 14:42 libdfttest.dylib
-rwxr-xr-x@ 1 selur staff 120K 21 März 14:42 libeedi2.dylib
-rw-r--r-- 1 selur staff 370K 8 Feb. 2025 libEEDI3_static.a
-rwxr-xr-x@ 1 selur staff 106K 21 März 14:42 libeedi3m.dylib
-rwxr-xr-x@ 1 selur staff 1,5M 21 März 14:42 libfft3dfilter.dylib
-rwxr-xr-x@ 1 selur staff 33K 21 März 14:42 libfieldhint.dylib
-rwxr-xr-x@ 1 selur staff 49K 21 März 14:42 libfillborders.dylib
-rwxr-xr-x@ 1 selur staff 33K 21 März 14:42 libfluxsmooth.dylib
-rwxr-xr-x@ 1 selur staff 4,3M 21 März 14:42 libfmtconv.dylib
-rwxr-xr-x@ 1 selur staff 147K 21 März 14:42 libfrfun7.dylib
-rwxr-xr-x@ 1 selur staff 50K 21 März 14:42 libhistogram.dylib
-rwxr-xr-x@ 1 selur staff 33K 21 März 14:42 libhqdn3d.dylib
-rwxr-xr-x@ 1 selur staff 49K 21 März 14:42 libminideen.dylib
-rwxr-xr-x@ 1 selur staff 52K 21 März 14:42 libmiscfilters.dylib
-rwxr-xr-x@ 1 selur staff 50K 21 März 14:42 libmotionmask.dylib
-rwxr-xr-x@ 1 selur staff 50K 21 März 14:42 libmsmoosh.dylib
-rwxr-xr-x@ 1 selur staff 4,0M 21 März 14:42 libmvtools.dylib
-rwxr-xr-x@ 1 selur staff 88K 21 März 14:42 libnnedi3.dylib
-rwxr-xr-x@ 1 selur staff 56K 21 März 14:42 libnoisegen.dylib
-rwxr-xr-x@ 1 selur staff 108K 21 März 14:42 libqrcodesource.dylib
-rwxr-xr-x@ 1 selur staff 68K 21 März 14:42 libsangnom.dylib
-rwxr-xr-x@ 1 selur staff 33K 21 März 14:42 libssiq.dylib
-rwxr-xr-x@ 1 selur staff 115K 21 März 14:42 libtbilateral.dylib
-rwxr-xr-x@ 1 selur staff 106K 21 März 14:42 libtcanny.dylib
-rwxr-xr-x@ 1 selur staff 82K 21 März 14:42 libtcomb.dylib
-rwxr-xr-x@ 1 selur staff 68K 21 März 14:42 libtedgemask.dylib
-rwxr-xr-x@ 1 selur staff 50K 21 März 14:42 libtemporalmedian.dylib
-rwxr-xr-x@ 1 selur staff 380K 21 März 14:42 libtivtc.dylib
-rwxr-xr-x@ 1 selur staff 33K 21 März 14:42 libtonemap.dylib
-rwxr-xr-x@ 1 selur staff 68K 21 März 14:42 libttempsmooth.dylib
-rwxr-xr-x@ 1 selur staff 66K 21 März 14:42 libvivtc.dylib
-rwxr-xr-x@ 1 selur staff 1,4M 21 März 14:42 libvszip.dylib
-rwxr-xr-x@ 1 selur staff 1,4M 21 März 14:42 libzsmooth.dylib
drwxr-xr-x 78 selur staff 2,4K 24 Nov. 2024 models
-rw-r--r-- 1 selur staff 13M 15 Nov. 2024 nnedi3_weights.bin
-rwxr-xr-x@ 1 selur staff 134K 21 März 14:42 vscube.dylib
and it should be automatically used.
Not sure why it does not on your system, does work fine here:
# Imports
import sys
import os
import vapoursynth as vs
# getting Vapoursynth core
core = vs.core
core.std.LoadAllPlugins('/Users/selur/workspace/Hybrid/Hybrid.app/Contents/MacOS/vsfilters')
# Import scripts folder
scriptPath = '/Users/selur/workspace/Hybrid/Hybrid.app/Contents/MacOS/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
# Import scripts
import qtgmc
import validate
# Source: '/Users/selur/Desktop/Randy Hansen - Voodoo Chile.mp4'
# Current color space: YUV420P8, bit depth: 8, resolution: 1280x720, frame rate: 29.97fps, scanorder: top field first, yuv luminance scale: limited, matrix: 709, transfer: bt.709, primaries: bt.709, format: AVC
# Loading '/Users/selur/Desktop/Randy Hansen - Voodoo Chile.mp4' using BestSource
clip = core.bs.VideoSource(source="/Users/selur/Desktop/Randy Hansen - Voodoo Chile.mp4", cachepath="/Users/selur/tmp/Randy Hansen - Voodoo Chile_bestSource", track=0)
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.
prop_name = '_Range' if core.core_version.release_major >= 74 else '_ColorRange'
clip = core.std.SetFrameProps(clip=clip, **{prop_name: vs.RANGE_LIMITED})
# making sure frame rate is set to 29.97fps
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
# making sure the detected scan type is set (detected: top field first)
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_TOP) # scan type: top field first
# Deinterlacing using QTGMC
clip = qtgmc.QTGMC(clip, Preset="Fast", TFF=True) # new fps: 59.94
# Making sure content is preceived as frame based
clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # scan type: progressive
clip = clip[::2] # selecting previously even frames, new fps: 29.97
# output
clip.set_output()
I'm not at hoem today so, I can't test on my system atm. will try to do some testing tomorrow after work and report back.
Cu Selur
----
Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.