Categories

  • Let's discuss the latest AI tech and how it influences your life as a HISE developer.

    18 Topics
    242 Posts
    dannytaurusD

    @David-Healey Give it a try and let us know.

  • General questions and announcements about HISE

    8k Topics
    75k Posts
    observantsoundO

    @ustk I'm indeed still on the latest stable release...
    I read it as 4.10 instead of 4.1 so I was convinced I was on the latest version.
    I'll compile from the latest develop branch instead and try again.

    So what state is the mod matrix actually in?
    Do some things work but others don't?
    I'd just like to know what to look out for, if the documentation isn't super up to date.

    What are PRs?

  • Scripting related questions and answers

    2k Topics
    17k Posts
    ChazroxC

    @lalalandsynth You have to adjust the size of the knob so that the shadow has space not to be clipped. You can make the component any size you want once your in HISE. If its clipping in the designer for sure it will clip in HISE. Just a small caveat aswell, because of the different ways that webbrowsers and HISE handles shadows is a little bit different so that part is as accurate as I can get it but the glow radius is actually a bit stronger when compiled. But like I said, the way to do this is resize the knob shape.

  • To share HiseSnippets, Interface Elements, GUI, UI/UX, Panel LAF etc..

    197 Topics
    2k Posts
    jadgJ

    Here is a video where you can see better the visual details:
    Fully customized pseudo backlit interface via LAF

  • All about ScriptNode DSP nodes, patches, SNEX and recipes.

    373 Topics
    2k Posts
    resonantR

    @pgroslou Even the Lite models of the previous version, which consume less CPU, don't work; only the standard models work.

    Hopefully, the A2 NAM (which has two versions depending on CPU usage) will be integrated without any problems.

  • A subforum for discussing Faust development within HISE

    116 Topics
    951 Posts
    David HealeyD

    @Sawatakashi said in Which version of faust works fine for HISE?:

    it crashed after i loaded a faust scriptnode.

    A blank node or are you copying in a script?

  • If you need a certain feature, post it here.
    629 Topics
    5k Posts
    dannytaurusD

    Any interest in decoupling the resetPhase and resetFade functions for the LFO's ignoreNoteOn boolean?

    I'm using ignoreNoteOn in my UI to mean "LFO Retrigger" but with retrigger off, the LFO Fade knob no longer has any effect.

    Looked into the code and I see they're both ignored when ignoreNoteOn is true - which is fair enough of course, the param name is literally Ignore Note On.

    But it feels weird to me that we can't have "don't retrigger the LFO on note one" at the same time as "do respect the Fade time".

    The code change wouldn't be huge but the backwards compatibility situation might be bad.

    Or could we add two extra params, like resetPhaseOnNoteOn and resetFadeOnNoteOn, where the existing ignoreNoteOn overrides them both. Would that keep back-compat alive?

  • Develop better software through collaboration and shared knowledge. Not just about coding β€”> covering the entire journey, from development to launching and promoting plugins or software.

    176 Topics
    1k Posts
    dannytaurusD

    Just dropping this here because I know I'll be looking for this info at some point in the future πŸ˜‚

    HISE > Tools > Show SVG to Path Converter

    Base64 Path

    What it is: Just the geometry - the raw path outline. HISE parses the SVG's path data, serializes it as JUCE binary path data (Path::writePathToStream), and Base64-encodes that. No compression. What it drops: All styling. Colours, fills, strokes, gradients, multiple shapes - gone. You get single monochrome outline. Best for: UI icons and shapes you want to recolour yourself, LAF buttons, anytime you control the fill. Smaller and simpler. How you use it: const var iconData = "...."; // pasted output var p = Content.createPath(); p.loadFromData(iconData); // in a paint routine: g.fillPath(p, area); // you pick the colour

    Base64 SVG

    What it is: The entire SVG document (the XML text) ZSTD-compressed, then Base64-encoded. What it drops: Nothing. It preserves everything - multiple paths, fill/stroke colours, gradients, groups, transforms. Best for: Multi-colour logos, splash graphics, pre-designed artwork you want rendered exactly as drawn. How you use it: const var svgData = "...."; // pasted output var svg = Content.createSVG(svgData); // in a paint routine: g.drawSVG(svg, area, 1.0); // renders with its own colours/styling

    Which to choose

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ Base64 Path β”‚ Base64 SVG β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Preserves colours/styling β”‚ No β”‚ Yes β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Multiple shapes/groups β”‚ Flattened to one outline β”‚ Kept intact β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ You recolour it in script β”‚ Yes (you must) β”‚ No (uses embedded colours) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Size β”‚ Smaller, uncompressed β”‚ Larger source, but ZSTD-compressed β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Loads via β”‚ Content.createPath + loadFromData β”‚ Content.createSVG + g.drawSVG β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Rule of thumb: if it's a single-colour icon you want to tint from the script (e.g. active/inactive states), use Base64 Path. If it's a designed, multi-colour graphic that should look exactly like the artwork, use Base64 SVG.

  • If you encounter any bug, post it here.
    2k Topics
    13k Posts
    griffinboyG
    Hardcoded Master FX parameter modslots can force c++ Third-party node parameters to max

    *I used ChatGPT to help format this bug report so that it's written clearly and thoroughly.
    I apologize for the "Ai aesthetic" residue that leaves behind.

    Branch: I'm on the latest HISE develop branch, pulled and compiled today
    OS: Windows 11
    Juce: I'm using Juce 6 (version: 6.1.3)
    Project flags:

    NUM_HARDCODED_FX_MODS=8 NUM_HARDCODED_POLY_FX_MODS=8 Summary

    I think there is a bug in the hardcoded Master FX "parameter-modslot" path.
    I didn't want to post a report until I was sure it wasn't my own mistake, but I've been reading the Hise source all day and testing different C+ nodes and in the end I concluded this might be a bug:

    If a third-party node exposes a parameter modslot with ConnectionMode::Parameter , loading that node into a hardcoded Master FX forces the modslot parameter values to get set to the top of their ranges (and stuck there).

    This is not a small issue. For DSP nodes it completely breaks effects, and means you can't use any c++ nodes that have modslots inside monophonic hardcoded master FX.

    I like almost all of my c++ nodes to have modslots so that they can work easily with hise modulation and the matrix modulator. This bug means I have to make modslot and non-modslot versions of every effect, so that I can load the modslot version into poly contexts and the non-modslot one into mono contexts. And then for the mono nodes I have to use a different modulation scheme. Messy.
    (unless I'm misunderstanding something).

    How I found it

    I was testing a compiled third-party DSP node.

    The same node behaved normally in a ScriptFX context, but in a hardcoded Master FX it produced broken / glitchy / extremely wrong output.

    When I removed these project flags and rebuilt, the hardcoded Master FX version started behaving normally again:

    NUM_HARDCODED_FX_MODS=8 NUM_HARDCODED_POLY_FX_MODS=8

    So the issue appears to be tied to hardcoded FX modslots.

    Disabling those flags is not a usable workaround for me, because then hardcoded modslots would be unavailable project-wide.

    Minimal test

    I made four tiny diagnostic third-party nodes.

    Each node has one parameter:

    Parameter_name: ProbeValue Range: 0.0 to 1.0 Default: 0.25

    Each node outputs a tone whose gain follows ProbeValue.

    Expected result: quiet tone.
    Bug result if the parameter is forced to max: much louder tone.

    Each node exposes the same parameter slot:

    modulation::ConnectionInfo slot; slot.connectedParameterIndex = ProbeValueParameter; slot.connectionMode = modulation::ConnectionMode::Parameter; slot.modulationMode = modulation::ParameterMode::ScaleAdd;

    I tested four variants:

    Griffin_ModSlotProbe_NoHandle Griffin_ModSlotProbe_WithHandle Griffin_ModSlotProbe_FrameHandle Griffin_ModSlotProbe_ModNodeHandle

    These check whether adding the following details would fix or change the behavior:

    no handleModulation() function defined handleModulation(double&) { return 0; } block processing forwarded through processFrame() from process() isModNode() == true (yeah, I know that's not going to do anything) Result

    In hardcoded Master FX:

    NoHandle left loud, right silent WithHandle left loud, right silent FrameHandle left loud, right silent ModNodeHandle left loud, right silent

    The left channel becoming loud proves ProbeValue was driven from 0.25 to 1.0.
    And the right channel staying silent means handleModulation(double&) callback was not called.

    Expected behaviour

    Ideally, a hardcoded Master FX parameter modslot should not push a node parameter to its maximum value simply because the slot exists.

    If no meaningful modulation value is active, the parameter should keep its current/default value, or the slot should not be treated as connected until there is an actual usable modulation connection.

    Current behaviour

    Currently, with hardcoded FX modslots enabled, a third-party C++ node exposing ConnectionMode::Parameter can get seemingly spammed with max-range parameter values during rendering / stuck at max value (moving the parameter doesn't unstick us, the parameters are stuck to max).

    Why this matters

    I'm assuming that HISE nodes are intended to be modular.
    If that's true, then a node that is poly-capable, or a node that exposes modslots, should be able to function in a mono hardcoded Master FX context too.

    This is also inconvenient for my shipped products. A HISE user can load one of my nodes into HISE and get broken DSP because the hardcoded Master FX modulation path corrupts parameter values.

    The result of all this is that ConnectionMode::Parameter becomes unsafe for third-party hardcoded Master FX products.

    Suspected source bug

    The Hise algorithm seems to do something like this:

    HardcodedMasterFX::applyEffect() -> extraMods.processChunkedWithModulation(rd) -> ExtraModulatorRuntimeTargetSource::handleModulation(...) -> ModChainWithBuffer::getOneModulationValue(startSample) -> rd.handleModulation(pIndex, mv) -> parameter range convertFrom0to1(mv) -> p->callback.call(value)

    The important part is in the hardcoded Master FX context, with no active voice state, getOneModulationValue() can return an inactive/default modulation value of 1.0f.

    That normalized 1.0 is then converted through the parameter range, so the node receives the parameter maximum.

    Request

    Could the hardcoded Master FX parameter-modslot path be changed so inactive / unconnected / not-yet-valid modulation does not force parameter-mode slots to max?

    post script: a similar / related bug exists in the Hise synth group, I will write a report on that after a bit more investigation.

    Christoph, Thanks for all your hard work🫑

  • Post your example snippets that you want to add to the official HISE snippet database here. We'll revise it, upload it to the repo and delete the post when finished.

    23 Topics
    140 Posts
    CasmatC

    @Christoph-Hart yeah, here's what I could come up with!

    The model occasionally thought you could add child panels directly to viewports. It didn't properly cast/convert the raw result of vpt.get("scrollBarThickness") for calculations. It hallucinated a scroll event listener/callback for viewports. I needed to prompt it specifically to use a 30Hz timer loop for position updates instead. It had the most trouble with local, reg, and const. Especially in long generations with multi level functions, it tried standard JS var/let scoping, leading to long runs of compilation errors. I mainly used Google's Gemini 3.1 Pro via Antigravity, but I also tested Claude Opus/Sonnet 4.6. The Anthropic models had a couple fewer issues, making sense if the MCP server is currently tailored to their behavior.

    I had checked out the viewport's multicolumn mode. I built this as a ScriptPanel recycler to have high LAF control over individual buttons and icons for a custom preset browser. I wouldn't be able to get the same component styling flexibility with multicolumn mode.

    I'll try out the LSP server! I've been following HISE's ai journey and can't wait to see what's next! Being a dev who uses AI to assist in most my work nowadays, it'll make HISE development much much faster and accessible lol. Love the forum, but I dream for the days where I'll ask Claude to explain why my function call is wrong and @David-Healey can enjoy his vacation instead! 😁

    The MCP server in antigravity is amazing, but there's a couple things HISE struggles with against AI.

    Absolute positioning is a bottleneck. Is there anyway to expose JUCE's FlexBox/Grid to hisescript? It would be life changing. If the model can just write relative values, it wouldn't have to guess pixel coordinates anymore. Can't wait for scriptnode to work with MCP. Having models build scriptnode networks from text/json, or piggybacking faust, will make that rodeo a lot simpler.

    I can envision HISE's future as a sidecar rendering engine alongside your everyday IDE, which wil be where the actual code writing/editing and prompting happens. Having HISE run in a headless like manner to compile the plugin, fix errors, and run tests would have massive potential. The LSP and MCP server are great starts for this.

  • Everything related to the documentation (corrections, additions etc.) can be posted here
    71 Topics
    481 Posts
    Christoph HartC

    @username1234 this is a thing that I vibecoded last week - itβ€˜s super fresh but yes once that is tested a bit it will definitely be recommended as the preferred way of getting hise setup for development. Just be a bit more patient my friend.

  • Collection of Blog Entries

    83 Topics
    790 Posts
    David HealeyD

    @resonant It's optional, HISE will fallback to a less efficient algorithm that's all.

  • The nerdy place for discussing the C++ framework
    188 Topics
    1k Posts
    ChazroxC

    @griffinboy 195?! Release the kraken! haha πŸ”₯ πŸ”₯

15

Online

2.4k

Users

13.8k

Topics

120.5k

Posts