<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Using custom preset system - as in the actual presets themselves, not a browser]]></title><description><![CDATA[<p dir="auto">I'm deep into making my own browser and tag system and the issue of not being able to update .preset files on the fly like you can a json is forcing me to have a second 'tag' file for each preset (in order to maximise flexibility - I know I can have a main json for tags etc but this doesn't work if users share presets etc).</p>
<p dir="auto">So I'm thinking of bypassing the Hise Engine.saveUserPreset(presetFile); etc completely and rolling my own.</p>
<p dir="auto">What are the potential issues that anyone can think of?!! Before I go down this rabbit hole!!!</p>
<p dir="auto">Not having access to saveInPreset is one I can think of, but perhaps just not including the non save in preset components in the preset files might be enough...</p>
]]></description><link>https://forum.hise.audio/topic/14377/using-custom-preset-system-as-in-the-actual-presets-themselves-not-a-browser</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 07:52:29 GMT</lastBuildDate><atom:link href="https://forum.hise.audio/topic/14377.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Feb 2026 15:16:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 03 Mar 2026 14:51:58 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/1">@Christoph-Hart</a></p>
<p dir="auto">It's like this ..... I have an external arppegiator triggering my synth... I click my left/right arrows to change preset.... and because I use a custom data model, I have to tap into the pre/post callbacks.... so here's what I get:</p>
<p dir="auto">synth notes triggering.... click the arrow....<br />
Interface: preLoadCallback triggered - no synth notes triggering when this is running<br />
Interface: onPresetLoad triggered  - no synth notes triggering when this is running<br />
Once the onPresetLoad method is finished, a midi note does sneak through into the synth....</p>
<p dir="auto">Then this callback fires:<br />
Interface: postLoadCallback triggered<br />
This kills the previous notes, and triggers the new ones.....</p>
<p dir="auto">Here is my full loadGlobalPreset method:</p>
<pre><code>inline function loadGlobalPreset(obj) {
        local samplemaps = obj.samplemaps;
        local wavetables = obj.wavetables;
        local params = obj.parameters;
        local fxSelections = obj.fxSelections;
        local fxChainOrder = obj.fxChainOrder;

        lastLoadParams = params;

        // Restore samplemaps
        UISoundSelector.syncSamplerMenu(1, samplemaps[0]);
        UISoundSelector.syncSamplerMenu(2, samplemaps[1]);
        UISoundSelector.syncSamplerMenu(3, samplemaps[2]);

        // Restore wavetables
        UISoundSelector.syncSynthMenu(1, wavetables[0]);
        UISoundSelector.syncSynthMenu(2, wavetables[1]);
        UISoundSelector.syncSynthMenu(3, wavetables[2]);

        // Update all UI parameters - except the ones that are not tagged as saveInPreset
        UserPresetHandler.updateSaveInPresetComponents(params);

        // TODO: Restore custom samples

        // Fix-up FX menus by stable id, but only when they differ
        if (isDefined(fxSelections)) {
            for (i = 0; i &lt; fxSelections.length; i++) {
                local sel = fxSelections[i];
                if (!isDefined(sel) || !isDefined(sel.id)) continue;

                local targetId = (isDefined(sel.idName) &amp;&amp; sel.idName != "") ? sel.idName : "empty";

                local menu = Content.getComponent(sel.id);
                if (!isDefined(menu)) continue;

                // what saveInPreset restored (by index)
                local currentId = UIEffectDropDownMenu.getIdForIndex(menu.getValue());
                if (currentId == undefined) currentId = "empty";

                // only fire callback if mismatch
                if (currentId != targetId)
                    UIEffectDropDownMenu.setMenuToId(sel.id, targetId, true);
            }
        }

        // Restore FX chain ordering (pageKey -&gt; [4 slots])
        if (isDefined(fxChainOrder)) {
            for (k in fxOrderKeys) {
                local key = fxOrderKeys[k];
                local saved = fxChainOrder[key];

                // expect an array of length 4 with unique 0..3
                if (!isDefined(saved) || saved.length != 4) continue;

                UIEffectReordering.pageOrder[key] = saved;          // update UI state
                UIEffectReordering.applyVisualOrder(key);           // move panels
                PluginEffectReorder.apply(key, saved);              // set DSP chain
            }
        }

        // Update all UI parameters - except the ones that are not tagged as saveInPreset
        //UserPresetHandler.updateSaveInPresetComponents(params);
    }
</code></pre>
<p dir="auto">It is doing quite a lot... and ultimately what happens is when I switch a preset, I get one voice that sounds one way... and then another voice that sounds completely different... like a voice is being allowed to be triggered before the preset is fully loaded.</p>
<p dir="auto">It seems to be something related to my effect menus and/or effect re-ordering.</p>
<p dir="auto">It is hard to explain. Might have to make a video. But any immediate thoughts??</p>
]]></description><link>https://forum.hise.audio/post/118464</link><guid isPermaLink="true">https://forum.hise.audio/post/118464</guid><dc:creator><![CDATA[Orvillain]]></dc:creator><pubDate>Tue, 03 Mar 2026 14:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 16:21:03 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/3500">@Orvillain</a> said in <a href="/post/117716">Using custom preset system - as in the actual presets themselves, not a browser</a>:</p>
<blockquote>
<p dir="auto">Why do you want to do this?</p>
</blockquote>
<p dir="auto">Because it kills voices and I want to silently update some metadata like tags and author for presets.</p>
<p dir="auto">But.... your method seems to be working!!!   I feel like I'm going to have to remove certain characters in case it messes up the preset code....</p>
]]></description><link>https://forum.hise.audio/post/117717</link><guid isPermaLink="true">https://forum.hise.audio/post/117717</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Wed, 11 Feb 2026 16:21:03 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 15:04:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> said in <a href="/post/117667">Using custom preset system - as in the actual presets themselves, not a browser</a>:</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a>  ok got it working.  Is it possible to update the .preset file without using <code>Engine.saveUserPreset</code> ?</p>
</blockquote>
<p dir="auto">Why do you want to do this?</p>
<p dir="auto">I'm doing this when I save my custom fx chain format:</p>
<pre><code>inline function saveFXChainPreset() {
        FileSystem.browse(FileSystem.getFolder(FileSystem.UserPresets), true, "*.fxchain", function (f) {
            if (!isDefined(f) || f == 0) return;

            PluginSharedData.presetMode = "FXChain";

            // Get the data object directly from our custom save logic
            var data = PluginUserPresetHandling.onPresetSave();
            f.writeObject(data);
        });
    }
</code></pre>
<p dir="auto">the key being setup a file reference, and then call f.writeObject(blahblah) on it.</p>
]]></description><link>https://forum.hise.audio/post/117716</link><guid isPermaLink="true">https://forum.hise.audio/post/117716</guid><dc:creator><![CDATA[Orvillain]]></dc:creator><pubDate>Wed, 11 Feb 2026 15:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 12:23:24 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/12">@David-Healey</a> I tried in during my testing and even if I could make it work, the parsing of an array that contains strings is bad bad bad. You need to rework the result to remove the escape char and other things.<br />
This might just be normal, but then what about rewriting it back? Might work, might be risky, this I'm not sure until further testing it</p>
]]></description><link>https://forum.hise.audio/post/117708</link><guid isPermaLink="true">https://forum.hise.audio/post/117708</guid><dc:creator><![CDATA[ustk]]></dc:creator><pubDate>Wed, 11 Feb 2026 12:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 12:18:44 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> These two</p>
<p dir="auto"><img src="/assets/uploads/files/1770812322545-45560452-a98c-43ef-b1fc-6123cf2a9e08-image.png" alt="45560452-a98c-43ef-b1fc-6123cf2a9e08-image.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.hise.audio/post/117706</link><guid isPermaLink="true">https://forum.hise.audio/post/117706</guid><dc:creator><![CDATA[David Healey]]></dc:creator><pubDate>Wed, 11 Feb 2026 12:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 11:16:11 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/12">@David-Healey</a> don't know anything about it</p>
]]></description><link>https://forum.hise.audio/post/117702</link><guid isPermaLink="true">https://forum.hise.audio/post/117702</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Wed, 11 Feb 2026 11:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 10:59:16 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> what about with HISE's xml parser?</p>
]]></description><link>https://forum.hise.audio/post/117700</link><guid isPermaLink="true">https://forum.hise.audio/post/117700</guid><dc:creator><![CDATA[David Healey]]></dc:creator><pubDate>Wed, 11 Feb 2026 10:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Wed, 11 Feb 2026 09:27:35 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a> I think it's too risky.  One mistake in a preset file and it doesn't load.</p>
]]></description><link>https://forum.hise.audio/post/117697</link><guid isPermaLink="true">https://forum.hise.audio/post/117697</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Wed, 11 Feb 2026 09:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 10 Feb 2026 22:57:08 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> Yeah that's where the biggest job resides.<br />
might doable with some XML parsing, and save as XML but the object might live as strings that are difficult to read/write. I won't be able to make tests within the next days so...</p>
]]></description><link>https://forum.hise.audio/post/117682</link><guid isPermaLink="true">https://forum.hise.audio/post/117682</guid><dc:creator><![CDATA[ustk]]></dc:creator><pubDate>Tue, 10 Feb 2026 22:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 10 Feb 2026 17:31:22 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a>  ok got it working.  Is it possible to update the .preset file without using <code>Engine.saveUserPreset</code> ?</p>
]]></description><link>https://forum.hise.audio/post/117667</link><guid isPermaLink="true">https://forum.hise.audio/post/117667</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Tue, 10 Feb 2026 17:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 10 Feb 2026 15:56:57 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a> said in <a href="/post/117664">Using custom preset system - as in the actual presets themselves, not a browser</a>:</p>
<blockquote>
<p dir="auto">that's what I do a lot in the things I've worked on</p>
</blockquote>
<p dir="auto">of course <img src="https://forum.hise.audio/assets/plugins/nodebb-plugin-emoji/emoji/android/1f606.png?v=fba14f4754a" class="not-responsive emoji emoji-android emoji--laughing" style="height:23px;width:auto;vertical-align:middle" title=":laughing:" alt="😆" />  Ok I'm obviously passing the data in wrong.  Will take another look...</p>
]]></description><link>https://forum.hise.audio/post/117666</link><guid isPermaLink="true">https://forum.hise.audio/post/117666</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Tue, 10 Feb 2026 15:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 10 Feb 2026 14:53:36 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> said in <a href="/post/117657">Using custom preset system - as in the actual presets themselves, not a browser</a>:</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a> clever - but possibly running through all the presets every time you load a new preset is going to take a while....  I'd need to cache them somehow.</p>
</blockquote>
<p dir="auto">No, only at init when for checking if new presets are present</p>
<blockquote>
<p dir="auto">How does saving panel data work?  Do you have to save the preset (bad for my use case)?  Does it auto update / write to the .preset file?</p>
</blockquote>
<p dir="auto">Yes true... but it should be possible to just write it in the preset dynamically without the need to save. but that would require some clever string handling, don't know if it's secure enough and/or doable, but that might worth a try...<br />
That might be where the already existing custom preset system is better...</p>
<blockquote>
<p dir="auto">Where is the data in the .preset file?!</p>
</blockquote>
<p dir="auto">Under the panel's value, like all other components</p>
<blockquote>
<p dir="auto">EDIT - Oh it's not persistant... doh <img src="https://forum.hise.audio/assets/plugins/nodebb-plugin-emoji/emoji/android/1f606.png?v=fba14f4754a" class="not-responsive emoji emoji-android emoji--laughing" style="height:23px;width:auto;vertical-align:middle" title=":laughing:" alt="😆" /></p>
</blockquote>
<p dir="auto">Yes it is if in the preset..., it's recalled like any other value, that's what I do a lot in the things I've worked on</p>
]]></description><link>https://forum.hise.audio/post/117664</link><guid isPermaLink="true">https://forum.hise.audio/post/117664</guid><dc:creator><![CDATA[ustk]]></dc:creator><pubDate>Tue, 10 Feb 2026 14:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 10 Feb 2026 13:55:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a> clever - but possibly running through all the presets every time you load a new preset is going to take a while....  I'd need to cache them somehow.</p>
<p dir="auto">How does saving panel data work?  Do you have to save the preset (bad for my use case)?  Does it auto update / write to the .preset file?  Where is the data in the .preset file?!</p>
<p dir="auto">EDIT - Oh it's not persistant... doh <img src="https://forum.hise.audio/assets/plugins/nodebb-plugin-emoji/emoji/android/1f606.png?v=fba14f4754a" class="not-responsive emoji emoji-android emoji--laughing" style="height:23px;width:auto;vertical-align:middle" title=":laughing:" alt="😆" /></p>
]]></description><link>https://forum.hise.audio/post/117657</link><guid isPermaLink="true">https://forum.hise.audio/post/117657</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Tue, 10 Feb 2026 13:55:12 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Tue, 10 Feb 2026 11:13:32 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/449">@ustk</a> Yep, indeed you can! the XML data you get from the module state call isn't pretty, but it does work. I think you'd do that if you had some module that did not have any UI controls, but you still wanted the preset to dictate its internal state when loading or saving.</p>
]]></description><link>https://forum.hise.audio/post/117641</link><guid isPermaLink="true">https://forum.hise.audio/post/117641</guid><dc:creator><![CDATA[Orvillain]]></dc:creator><pubDate>Tue, 10 Feb 2026 11:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 21:06:21 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/3500">@Orvillain</a> I'm not certain my brain gets all this so pardon me if it's not helping...<br />
But can't you do it the other way round, saving the module state with <code>addModuleStateToUserPreset</code> and then restore the UI components from it with <code>updateConnectedComponentsFromModuleState</code>?</p>
]]></description><link>https://forum.hise.audio/post/117634</link><guid isPermaLink="true">https://forum.hise.audio/post/117634</guid><dc:creator><![CDATA[ustk]]></dc:creator><pubDate>Mon, 09 Feb 2026 21:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 19:51:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/1">@Christoph-Hart</a> along these lines....</p>
<p dir="auto">Calling:<br />
updateSaveInPresetComponents(params) does indeed have the effect of setting any <strong>non specified parameters</strong> to their default value. This is not optimal for all use cases, for example my fx chain use case. Because what is happening is my synthesis generators are being reset to their default state, and the only way I can see how to avoid this is by iterating over all controls I do want to edit, and calling .setValue and then .changed() on them... which is actually quite slow it turns out.</p>
<p dir="auto">Could anything be done about this???</p>
]]></description><link>https://forum.hise.audio/post/117632</link><guid isPermaLink="true">https://forum.hise.audio/post/117632</guid><dc:creator><![CDATA[Orvillain]]></dc:creator><pubDate>Mon, 09 Feb 2026 19:51:20 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 19:22:34 GMT]]></title><description><![CDATA[<p dir="auto">We're covering a lot of this in this thread:<br />
<a href="https://forum.hise.audio/topic/13701/custom-browser-custom-preset-file-format/29">https://forum.hise.audio/topic/13701/custom-browser-custom-preset-file-format/29</a></p>
<p dir="auto">Basically, you've got this:</p>
<pre><code>namespace PluginUserPresetHandling {

    const UserPresetHandler = Engine.createUserPresetHandler();

    inline function onPresetSave() // this is your main preset save method
    {
        Console.print("onPresetSave triggered");
    }

    inline function onPresetLoad(obj) // this is your main preset load method
    {
        Console.print("onPresetLoad triggered");
    }

    inline function preLoadCallback() // things you want to happen before loading a preset happen here - looking for samples, looking for graphical assets, etc.
    {
        Console.print("preLoadCallback triggered");
    }

    inline function postLoadCallback() // things you want to happen after loading a preset happen here - updating preset name labels in your UI, triggering other UI updates, etc.
    {
        Console.print("postLoadCallback triggered");
    }

    inline function postSaveCallback() // things you want to happen after saving a preset happen here - copying samples to an external location, removing any dirty flags you might've setup in the UI layer, etc.
    {
        Console.print("postSaveCallback triggered");
    }


    inline function init() {
        UserPresetHandler.setUseCustomUserPresetModel(onPresetLoad, onPresetSave, false); // this line is essential
        UserPresetHandler.setPreCallback(preLoadCallback);
        UserPresetHandler.setPostCallback(postLoadCallback);
        UserPresetHandler.setPostSaveCallback(postSaveCallback);
    }
}

</code></pre>
<p dir="auto">You can achieve a hell of a lot with this, without discarding the HISE preset system.</p>
<p dir="auto">For example, here is my onPresetSave method in my current project:</p>
<pre><code>    inline function onPresetSave() {
        Console.print("onPresetSave triggered");
        PluginSharedHelpers.forceAllOuterSlotsEnabled();

        if (PluginSharedData.presetMode == "Global") {
            return saveGlobalPreset();
        }
        if (PluginSharedData.presetMode == "FXChain") {
            return saveFXChain();
        }
    }
</code></pre>
<p dir="auto">In this way, I'm able to gate different save functions based on a master type, which means I can either write the HISE .preset file, or I can write a custom file using my own data model.</p>
<p dir="auto">My load one is this:<br />
inline function onPresetLoad(obj) {<br />
Console.print("onPresetLoad triggered");<br />
PluginSharedData.isRestoringPreset = true;</p>
<pre><code>    if (PluginSharedData.presetMode == "Global") {
        loadGlobalPreset(obj);
    }
    if (PluginSharedData.presetMode == "FXChain") {
        loadFXChain(obj);
    }

    PluginSharedData.isRestoringPreset = false;
}
</code></pre>
<p dir="auto">The loadFXchain method is this:</p>
<pre><code>inline function loadFXChain(obj) {
        if (!isDefined(obj)) return;

        Console.print("we are now attempting to load an fx chain");
        PluginSharedHelpers.forceAllOuterSlotsEnabled();

        local fxSelections = obj.fxSelections;
        local fxChainOrder = obj.fxChainOrder;
        local params = obj.parameters;

        // Set effect menus by stable id (this loads the networks)
        if (isDefined(fxSelections)) {
            for (i = 0; i &lt; fxSelections.length; i++) {
                local sel = fxSelections[i];
                if (!isDefined(sel) || !isDefined(sel.id)) continue;

                local idName = (isDefined(sel.idName) &amp;&amp; sel.idName != "") ? sel.idName : "empty";
                UIEffectDropDownMenu.setMenuToId(sel.id, idName, true); // fire callback
            }
        }

        // Restore FX parameters for the current fxchainScope, skipping selectors (already set)
        if (isDefined(params)) {
            for (i = 0; i &lt; params.length; i++) {
                local p = params[i];
                if (!isDefined(p) || !isDefined(p.id)) continue;
                if (!_isFxParam(p.id)) continue;
                if (p.id.contains("EffectSelector")) continue; // handled above

                local c = Content.getComponent(p.id);
                if (!isDefined(c)) continue;

                c.setValue(p.value);
                c.changed();
            }
        }
</code></pre>
<p dir="auto">And you can hopefully see, that what that is doing is skipping userPresetLoad altogether - and instead is manually iterating around whatever data exists in the file, finding the right UI component, and setting the value. This allows me to circumvent some of the HISE assumptions; namely that if a UI component is not specified when loading a user preset, it gets reset to the default value. Which is super no bueno.</p>
<p dir="auto">Bear in mind some of this stuff can be asynchronous. So I don't think you can always rely on the order of things.</p>
]]></description><link>https://forum.hise.audio/post/117631</link><guid isPermaLink="true">https://forum.hise.audio/post/117631</guid><dc:creator><![CDATA[Orvillain]]></dc:creator><pubDate>Mon, 09 Feb 2026 19:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 19:08:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> Oh in fact you don't even need to create a JSON file, all can be kept internally in a variable since the tag list is gathered at init...</p>
]]></description><link>https://forum.hise.audio/post/117630</link><guid isPermaLink="true">https://forum.hise.audio/post/117630</guid><dc:creator><![CDATA[ustk]]></dc:creator><pubDate>Mon, 09 Feb 2026 19:08:38 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 18:54:07 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> The stock preset system doesn't just recall parameters, it also stop/release the audio (or something like that) during loading time, and probably a bunch of other stuff you don't want to do without...</p>
<p dir="auto">An approach could be to store an object in a panel that contains what you need like tags.<br />
Then at init (or anytime you want really) you automatically create/update a unique JSON file that contains all the tags from all the available presets. So if a user shares a preset, this can be automated (or with a "collect tags from presets" button) and the local JSON file updates (as well as your preset browser which ever it is).</p>
]]></description><link>https://forum.hise.audio/post/117629</link><guid isPermaLink="true">https://forum.hise.audio/post/117629</guid><dc:creator><![CDATA[ustk]]></dc:creator><pubDate>Mon, 09 Feb 2026 18:54:07 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 18:20:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/1">@Christoph-Hart</a> ok, that's essentially what I'm doing.</p>
<p dir="auto">PS - did you see my latest email?</p>
]]></description><link>https://forum.hise.audio/post/117628</link><guid isPermaLink="true">https://forum.hise.audio/post/117628</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Mon, 09 Feb 2026 18:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 17:31:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> use a separate data system for metadata but rely on the user preset system to load the actual presets. If you start hacking around there you will open a can of worms.</p>
]]></description><link>https://forum.hise.audio/post/117626</link><guid isPermaLink="true">https://forum.hise.audio/post/117626</guid><dc:creator><![CDATA[Christoph Hart]]></dc:creator><pubDate>Mon, 09 Feb 2026 17:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 15:45:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/12">@David-Healey</a> for many many reasons</p>
]]></description><link>https://forum.hise.audio/post/117620</link><guid isPermaLink="true">https://forum.hise.audio/post/117620</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Mon, 09 Feb 2026 15:45:55 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 15:45:08 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/831">@DanH</a> why not use the built in preset tag system?</p>
]]></description><link>https://forum.hise.audio/post/117619</link><guid isPermaLink="true">https://forum.hise.audio/post/117619</guid><dc:creator><![CDATA[David Healey]]></dc:creator><pubDate>Mon, 09 Feb 2026 15:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to Using custom preset system - as in the actual presets themselves, not a browser on Mon, 09 Feb 2026 15:34:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="https://forum.hise.audio/uid/357">@dannytaurus</a> well it would be being able to write to a .preset file without calling Engine.saveUserPreset(presetFile); to enable users to add non-critical data like tags / text fields and update text arrays etc.  Maybe like a 'light' version of Engine.saveUserPreset(presetFile); which doesn't kill voices or reload sample maps etc....</p>
]]></description><link>https://forum.hise.audio/post/117618</link><guid isPermaLink="true">https://forum.hise.audio/post/117618</guid><dc:creator><![CDATA[DanH]]></dc:creator><pubDate>Mon, 09 Feb 2026 15:34:25 GMT</pubDate></item></channel></rss>