[{"data":1,"prerenderedAt":30},["ShallowReactive",2],{"note-audio-layouts-and-how-the-host-judges-the-fit-en":3},{"slug":4,"order":5,"title":6,"summary":7,"measured":8,"topic":9,"toc":10,"html":29},"audio-layouts-and-how-the-host-judges-the-fit",120,"\"Audio layouts: every port a plugin declares, and how the host judges the fit\"","The host used to admit a mono or stereo main pair and refuse everything else, which left out 84 of 975 LV2 plugins that mod-host hosts. Now the library describes every audio port a plugin declares, and whoever runs the plugin judges whether it can carry that layout, refusing by name rather than folding a layout down.","The LV2 plugins installed on one Fedora 44 machine (975), October 2026; the design of omx-clap-core's audio layouts.","core",[11,14,17,20,23,26],{"id":12,"title":13},"the-gap","The gap",{"id":15,"title":16},"the-decision","The decision",{"id":18,"title":19},"what-the-survey-found","What the survey found",{"id":21,"title":22},"why-these-rules","Why these rules",{"id":24,"title":25},"where-the-rules-are","Where the rules are",{"id":27,"title":28},"how-it-is-proven","How it is proven","\u003Ch2 id=\"the-gap\">The gap\u003C\u002Fh2>\n\u003Cp>The host admitted one main input and one main output of the same width, mono or stereo, plus up to eight auxiliary inputs\nand outputs of one or two channels, and refused everything else. Of the 975 LV2 plugins installed on one machine, that\nrefused 84 that mod-host hosts:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>51 with inputs beyond the main pair: side chains, mixers, meters, matrix mixers and patchbays, up to 64 inputs;\u003C\u002Fli>\n\u003Cli>33 whose main pair differs in width, or whose outputs are more than the pair: mono reverbs with a stereo tail, crossovers\nwith band outputs, a 34-output instrument.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>A CLAP plugin with a surround or ambisonic main port was refused the same way, and the host never read the extensions that\ndescribe such ports or offer other layouts.\u003C\u002Fp>\n\u003Ch2 id=\"the-decision\">The decision\u003C\u002Fh2>\n\u003Cp>Every layout a plugin declares is supported:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>inputs beyond the main one are auxiliary inputs, silent until something binds them;\u003C\u002Fli>\n\u003Cli>a main port of any width is carried where the carrier has that many channels;\u003C\u002Fli>\n\u003Cli>a layout the carrier cannot carry is refused with a named code, never silently and never folded down;\u003C\u002Fli>\n\u003Cli>a mono output on a stereo strip is carried to both sides, as a mono input is.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>What keeps this small is one principle: \u003Cstrong>the library describes, the carrier judges.\u003C\u002Fstrong> The host library and the LV2 adapter\nadmit any audio layout within declared limits and describe it completely: every port, its channels, its kind, its channel\nmap. Whoever runs the plugin on a lane of a given width reads that description and decides what it can carry. The console's\nnative lane is two channels wide and refuses a wider main port, as before; omx-clap-host under JACK can carry any width as\nports.\u003C\u002Fp>\n\u003Ch2 id=\"what-the-survey-found\">What the survey found\u003C\u002Fh2>\n\u003Cp>The shapes behind the 84, and the reading that admits each:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>A declared main group plus other ports.\u003C\u002Fstrong> Side-chain compressors, multichannel mixers, A\u002FB testers, oscilloscopes and\nspectrum analysers, true-stereo reverbs and crossovers declare which port group is the main one; every other port is\nauxiliary.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Groups, but no main group.\u003C\u002Fstrong> The first group in port order is taken as the main port: a plugin with two mono groups gets\none as main and the other as auxiliary.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No groups at all, more than two ports.\u003C\u002Fstrong> When the other side's main port is exactly as wide, the side is one main port\nof that width: surround meters, matrix mixers, multichannel loudness meters, N-to-N patchbays. Otherwise the first two\nports are the main pair and the rest are mono auxiliary ports: crossfaders with two pairs, three-input compressors, an\nencoder with extra centre and surround inputs.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Mono in, stereo out.\u003C\u002Fstrong> Thirteen true-stereo reverbs and six splitters have main ports of different widths; their two\noutputs are the main pair, which is also what mod-host presents.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The limits come from what the survey measured, plus a margin: a port of up to 64 channels, and up to 64 auxiliary ports per\nside (a 64-channel patchbay, a 24-channel loudness meter, an instrument with 34 outputs, a sampler with 98 outputs as 49\nstereo groups). No installed plugin declared a surround or ambisonic group; those are exercised by test fixtures.\u003C\u002Fp>\n\u003Ch2 id=\"why-these-rules\">Why these rules\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Deterministic from what the plugin says.\u003C\u002Fstrong> The rules never guess a layout the plugin did not declare. A plugin that means\na wider main declares a port group.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Nothing folded down.\u003C\u002Fstrong> A 5.1 plugin heard as its first two channels would be a silent loss; it is refused by name\ninstead, where the carrier cannot take six channels.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Nothing changes for what worked.\u003C\u002Fstrong> A mono or stereo plugin on a stereo lane behaves as before, bit for bit, and the JACK\nport names of the main pair stay as they were.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Ambisonics without a declared normalisation.\u003C\u002Fstrong> LV2 port groups state no normalisation, so a full-order ambisonic group is\npresented as ACN ordering with SN3D normalisation, the AmbiX convention, and the description says it is assumed.\nMixed-order groups, which a CLAP ambisonic port cannot express, are carried as discrete channels.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Alternative layouts are asked for, not imposed.\u003C\u002Fstrong> A plugin that offers other layouts can be asked, before activation, for\nthe one the carrier has (a reverb offering mono-in and stereo-in takes the strip's); a plugin that cannot keeps its declared\nlayout, and the carrier judges that.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Layout changes are not answered by a restart.\u003C\u002Fstrong> A plugin that rescans its ports is reported once; the carrier describes\nit again while inactive and activates it again.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"where-the-rules-are\">Where the rules are\u003C\u002Fh2>\n\u003Cp>The rules themselves (which ports are main and which auxiliary, the LV2 group types and their channel maps, the CLAP\nextensions read, the JACK port names, the limits and the refusal codes) are in \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFreeMixer\u002Fomx-clap-core\u002Fblob\u002Fmain\u002Fdoc\u002Freference.md\">the host library's reference\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"how-it-is-proven\">How it is proven\u003C\u002Fh2>\n\u003Cp>Test fixtures, LV2 and CLAP, one per shape: a main group with two stereo auxiliary groups, two mono groups without a main,\nungrouped 4 to 4 and 4 to 2, mono in with a stereo main output, a main pair with three band outputs, 5.1, first-order and\nmixed-order ambisonics, a 64-port side and a 65-port one, plugins with alternative layouts. Each asserts the description and\na value through the ports. Sabotaged, the tests go red: restoring the equal-width refusal turns the mono-in, stereo-out\nplugins red, and dropping the auxiliary binding turns the side-chain test red. Every mono and stereo plugin stays\nbit-identical through the adapter.\u003C\u002Fp>\n",1793954995893]