I've been living and breathing ScriptNode for a month now, day in, day out. I used it here and there over the past few months but it was for small networks and modulators, usually no more than 10 nodes.
It's ridiculously easy to get most DSP prototypes working in Scriptnode. If you add Faust to the mix, it really is a superweapon ready for the future. Global cables as well as external slots make it easy to communicate the data out to the UI.
I'm currently working with massive, interconnected networks with lots of parameters. I think I loaded every node at least once.
For some context: I have a decent amount of experience using Unreal Engine Blueprint and writing complex animation blueprints and state machines in Unreal (putting together designer-friendly AAA-level non-replicated locomotion systems and character blueprints up until UE5.2).
I've been vocal about ScriptNode lately in various threads and have posted numerous bug reports as well. I figured collecting my feedback in this thread will make it easier to discuss.
Issues
There's a number of issues lurking, many of which have been only made apparent in my attempts to scale this thing to megacity-levels (200+ nodes and counting).
Unique IDs
The biggest design flaw in ScriptNode is that connections are tied to IDs, which are user-facing and user-editable, and the repercussions of messing with this are not audible until you reload the network (e.g. close and re-open HISE).
I've elaborated on this here. https://forum.hise.audio/topic/9835/scriptnode-prevent-renaming-a-node-id-when-attempting-to-use-one-that-already-exists
The magnitude of this issue is most apparent when trying to copy/paste nodes which have active connections (it's impossible): https://github.com/christophhart/HISE/issues/546
Suggestions:
- unique IDs for nodes in the back, just a name property for the front. Notes spawn with the default name property without the number, like they currently do.
- if a name of the node is changed from the default name, hovering the node name should show the original node name (the factory path property from right click)
Navigation
I haven't found a way to navigate around a network freely other than with a mouse or a touch pad. It becomes problematic when you want to plug a, say, peak node into whatever parameter of another node two screens away. If you don't have an MX Master, which has a vertical and a horizontal scroll wheel, or a similar peripheral, and the network is too big even for zooming out, your only choice is to exit HISE, edit the XML and reload the project.
Suggestions:
- double clicking on an output pin or parameter enters plug mode: you can now freely scroll by clicking on the scroll sliders or using two fingers on a touchpad
- be able to use arrow keys to scroll the screen instead of jump around node selection
- moving the mouse while holding the drag pin to the edge of the screen scrolls the screen, like in a CRPG/Strategy/MOBA game.
Labeling
When working on a big anything, keeping things organised is paramount. Node comments in a vertical layout are fine. But if you switch to a horizontal layout, they now unnecessarily add to the width by staying on the side, when they could be moved to the top or bottom.
https://forum.hise.audio/topic/9816/put-node-comments-above-below-nodes-when-the-container-is-laid-out-horizontally
Also, once the ID issue is sorted out and the name property becomes just a name, right clicking a node should automatically enable the editing of the node property field so you can immediately type a desired name.
Connection Clarity
Once things get bigger than your screen, and as they grow, it becomes ridiculously hard to keep track of connections.
This has been briefly touched on here https://forum.hise.audio/topic/9819/scriptnode-highlight-incoming-cable-on-hover-when-cables-are-hidden but there's still a long way to go.
- If you right click a source (parameter or output pin), a target will be displayed
- If you right click a target, a source will be displayed only if it's a parameter, not if it's a node (e.g. peak)
- After the feature in the link above was added, the source will now be displayed on hover if you hover a target, but still nothing if you right click it
- There's no mention of the source or target's parent nodes
- The names are direct node IDs, which ties in to the ID issue mentioned above, so you're discouraged from changing the node names, in fear of accidentally ending up with two nodes that share the same name/ID
- If you collapse a node, connections to any of its parameters or child nodes disappear both visually and in the right-click connections tab for the source parameter
Suggestions:
- The new feature that shows a source should always be on
- Remove the tooltip when hovering a parameter which just repeats the visible node ID and parameter ID, that just obscures the new source tooltip
- Show full target hierarchy both on hover and on right click menus as outlined here https://forum.hise.audio/post/81634
- Fix missing source connections from node outputs when right clicking parameters
- Show cables running to and from collapsed nodes; show source/target node names in the connection list
- Have a way to click on a node name in the connection list in parameter properties that will move the viewport to that node
Wishlist
Here are the things that I find missing at the moment.
Logic operators and Clamping
Basic < > = operators, as well as unscaled input clamping. Discussed here. https://forum.hise.audio/topic/9844/scriptnode-add-to-control-logic_op/6
Variables
Having variables in scriptnode that can be saved or read. Here's an example from Unreal's Blueprint: https://youtu.be/oKGJECvQJA8?t=88
Suggestion:
- variable creation window, maybe like the parameter toolbar; variable needs an identifier and a default value
- get node (dropdown menu that lets you select the variable to get, output pin)
- set node (dropdown menu that lets you select the variable to set, parameter for writing, writes on change)
The get node avoids the need for a cable mess since you can write to a variable with set, and then just load as many get nodes as needed.
Wrapping Nodes into External Files
Just like you can wrap nodes into a chain, and like you can move selected code into an external file, you should be able to move the nodes to an external file, which will then be available in the Project tab in Add Node, automatically replace the moved nodes and connections. Because DspNetworks need defined parameters if you need input, perhaps this moving into external files should only be possible for chain nodes, as you can add Parameters to it.
Cable Outputs for Embedded Project Nodes
If you create a network, it can always be added as a node to any other network from the Project tab of the Add Node window. Any parameters of the main container are also visible here.
It would be great to also have output pins for any (scaled or unscaled) peak node from within the network, with usual text ("Drag to Modulation Target") being replaced with the name of the peak node. This is the equivalent of adding outputs to a function in Unreal Blueprint; whenever you add that function to any blueprint, it has the configured input/output pins. Scriptnode currently has inputs (parameters), but not outputs like this.
Extended Expr Nodes
Math and Cable.expr nodes are great, I just wish they had more inputs for algos that need more than one input but are small enough that they don't warrant a SNEX file, which limits visibility
SNEX Docs
I gather SNEX is the place for any complex algorithms because it supports variables and is blazing fast, but at this point I have no clue how to get a sound out of it; the examples in the docs either don't compile or crash HISE.