Some VST3 FX plugins on Windows claim to have 0 inputs and outputs?

Why do some VST3 FX plugins on Windows look like they have 0 audio inputs and 0 audio outputs?

I use PluginDirectoryScanner to scan the plugin’s info into KnownPluginList.
Then I use KnownPluginList::getTypes() to get PluginDescription list.

What PluginDescription::createXml() reports is the following:

      <PLUGIN name="ValhallaVintageVerb" format="VST3" category="Fx|Reverb"
              manufacturer="Valhalla DSP, LLC" version="4.0.5" file="C:\Program Files\Common Files\VST3\ValhallaVintageVerb.vst3"
              uniqueId="a4a502f5" isInstrument="0" fileTime="18e3e1aa770" infoUpdateTime="18ef561a695"
              numInputs="0" numOutputs="0" isShell="0" hasARAExtension="0"
              uid="1f695837"/>

Both numInputs and numOutputs is 0.

What is going on here? That’s a plugin from a reputable developer and for some reason scanning the plugin claims it has no inputs and no outputs? How to fix this scanning issue?

Anyone have any information regarding this topic?

I have the same issue on macOs with this plugin:

<PLUGIN name="The God Particle" format="VST3" category="Fx" manufacturer="Cradle"
        version="1.2.4" file="/Library/Audio/Plug-Ins/VST3/Cradle The God Particle.vst3"
        uniqueId="cda9ab08" isInstrument="0" fileTime="1907d33a518" infoUpdateTime="1920a1a75da"
        numInputs="0" numOutputs="0" isShell="0" hasARAExtension="0"
        uid="feac59a"/>

This is actually quite normal and to my understanding - totally valid. I see it in many commercial plugins that I have.

Some plugins have a dynamic set of ins and outs and would just respond to the host with available layout and then maybe negotiate a compatible layout with the host.

For example - a plugin might report 2 ins 2 outs, but would be OK with 0 ins and 2 outs, and all those options just can’t be expressed in the static JSON file.

So if the FX plugin claims to have 0 inputs and outputs, I can just assume it will be OK with 2 ins/outs when I actually start using it?

Kinda, you would need to use the buses API to see what the plugin can and can’t do. Most (all?) would be OK with 2 outputs but there are a few that won’t except more than 0 inputs.

A way that generally works for me is:

    auto ins = jlimit(0, 2, plugin.getMainBusNumInputChannels());
    auto outs = jlimit(0, 2, plugin.getMainBusNumOutputChannels());

    plugin.setPlayConfigDetails(ins, outs, sr, blockSize);

Then if the plugin does something like support only 1 input and one output, I make sure the buffer passed to it later is matching, but that only works for my use case, and might not work for yours.

2 Likes