Support numeric (atom:Float) LV2 patch properties - #563
Draft
diamondsea11 wants to merge 1 commit into
Draft
Conversation
Plugins that expose parameters as lv2:Parameter patch properties with an rdfs:range of atom:Float are currently rejected: FindWritablePathProperties only accepts atom:Path and atom:String, and anything else sets unsupportedPatchProperty, which hides the plugin. Read the usual lv2:minimum / lv2:maximum / lv2:default, the lv2:portProperty flags (logarithmic, integer, enumeration, toggled) and lv2:scalePoint / rdf:value from the parameter description, serialize them with the property, and render them in the web UI with the same PluginControl used for ordinary control ports. rdfs:label is now read as well; it was serialized but never populated. Values are read and written with the existing getPatchProperty / setPatchProperty / monitorPatchProperty calls, so no protocol change is needed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
diamondsea11
pushed a commit
to diamondsea11/pipedal
that referenced
this pull request
Aug 6, 2026
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft — one topic extracted from my fork, as discussed by email. Not build-tested against your CI yet; the TypeScript side type-checks clean (
tsc -b --force).Problem
Lv2PluginInfo::FindWritablePathPropertiesaccepts apatch:writablelv2:Parameteronly when itsrdfs:rangeisatom:Pathoratom:String. Anything else setsunsupportedPatchProperty = true, which removes the plugin from the plugin list entirely (with the one hard-coded exception forurn:brummer:neuralrack).Several plugins put ordinary numeric knobs on patch properties instead of control ports — the Dusk Audio series is the case I ran into. They're not "unsupportable" in the sense that JUCE plugins are; they simply have no renderer.
Change
rdfs:range atom:Floatas a supported patch property (an empty branch alongside the existingatom:Stringone, so it no longer tripsunsupportedPatchProperty).Lv2PatchPropertyInfonow also readslv2:minimum,lv2:maximum,lv2:default, thelv2:portPropertyflags (logarithmic,integer,enumeration,toggled) andlv2:scalePoint/rdf:value, plusrdfs:label— which was already in the JSON map and in the TypeScript class but was never populated on the C++ side.writable,readableandindexare added to the JSON map for the same reason:Lv2PatchPropertyInfo.deserialize()inLv2Plugin.tsxalready reads them.PatchPropertyControl.tsxrenders one property using the existingPluginControl, driven byLv2PatchPropertyInfo.toUiControl(). It usesgetPatchProperty/setPatchProperty/monitorPatchPropertyas they already exist, so there is no protocol change.PluginControlViewappends the writable numeric properties (inlv2:indexorder) after the control ports and before the file properties.Scope notes
lv2:minimum/maximumgive a plain 0..1 range, matching what LV2 says about parameters without a stated range.ModGuiHost. Resolving MOD-GUImod-port-symbolreferences to patch properties is a separate topic and a much larger diff; I've kept it out.Let me know if you'd prefer the range/scale-point parsing factored differently, or the rendering to live somewhere other than
PluginControlView.