@Ben-Catman Thank you very much! I’m really glad you found it useful. Hope it helps save time in your HISE workflow 
Posts
-
RE: Auto-Generate 128-Frame Knob Filmstrips for HISEposted in Presets / Scripts / Ideas
-
Auto-Generate 128-Frame Knob Filmstrips for HISEposted in Presets / Scripts / Ideas
Hi everyone,
I’d like to share a Python script that saves a lot of time when creating knob filmstrips for HISE.
Instead of rotating a knob image manually frame by frame, this script:
Takes one knob image
Automatically detects the visible (non-transparent) area
Crops and centers it perfectly
Rotates it smoothly
Exports a 128-frame sprite sheet (no jitter, no wobble)Features
- True center rotation (no shaking)
- list itemAutomatic alpha-based cropping
- list item 128 frames (super smooth)
- list item Vertical or horizontal filmstrip
- list item Ready to use in HISE
- list item Huge time saver
Requirements :
pip install pillow numpyFull Python Code :
️from PIL import Image import numpy as np import os # === Settings === image_path = "PATH/TO/KNOB.png" output_image = "PATH/TO/KNOB_128fps.png" num_frames = 128 start_angle = 150 end_angle = -150 orientation = "vertical" # "vertical" or "horizontal" # === Load image === img = Image.open(image_path).convert("RGBA") w, h = img.size # === Detect non-transparent area === alpha = np.array(img.split()[-1]) ys, xs = np.nonzero(alpha > 0) x_min, x_max = xs.min(), xs.max() y_min, y_max = ys.min(), ys.max() # === Crop to real knob area === img = img.crop((x_min, y_min, x_max, y_max)) w, h = img.size # === Make square canvas for perfect rotation === side = max(w, h) square = Image.new("RGBA", (side, side), (0, 0, 0, 0)) offset = ((side - w) // 2, (side - h) // 2) square.paste(img, offset) img = square w = h = side # === Lock rotation center === cx, cy = w / 2, h / 2 print(f"Rotation center locked at ({cx}, {cy})") # === Create sprite sheet === if orientation == "horizontal": sprite = Image.new("RGBA", (w * num_frames, h), (0, 0, 0, 0)) else: sprite = Image.new("RGBA", (w, h * num_frames), (0, 0, 0, 0)) # === Generate frames === for i in range(num_frames): angle = start_angle + (end_angle - start_angle) * (i / (num_frames - 1)) rotated = img.rotate(angle, resample=Image.BICUBIC, center=(cx, cy)) if orientation == "horizontal": sprite.paste(rotated, (i * w, 0)) else: sprite.paste(rotated, (0, i * h)) sprite.save(output_image) print(f"Sprite generated successfully: {output_image}")Save the file with this name :
️generate_knob_sprite.pyMake sure the file extension is .py and not .txt.
Open Command Prompt / PowerShell & Run the script
️python .\generate_knob_sprite.pyGood luck
-
RE: Unable to Move UI Knob Directly — Only via Macro 1posted in General Questions
@David-Healey It worked! Thank you from the bottom of my heart for all your efforts, and thanks once again.

-
RE: Unable to Move UI Knob Directly — Only via Macro 1posted in General Questions
@David-Healey
Thanks for the suggestion, but when I assign Macro 1 in the property editor, the UI knob still doesn’t move.
Also, the Macro itself only goes from 0 to 6 instead of 0–127 because in the property editor I set Max = 6, Min = 0, and 7 steps (FPS), so the macro and knob ranges don’t match the full 0–127 range expected for a macro control in HISEAlso, I have another knob in the UI that is set to 128 FPS, but I set Step Size = 1, Max = 6 and Min = 0 for it. It does rotate, but the steps and angles aren’t accurate — the increments feel uneven and the knob doesn’t feel precise when turning, likely because the UI control range doesn’t line up with the macro’s expected 0–127 range.
Lastly, I don’t want to use HISE Script for this because the DSP part doesn’t work for me or seems broken — it still fails even after building the latest HISE Dev version. I’m avoiding scripting because I can’t get the DSP network working reliably,
-
Unable to Move UI Knob Directly — Only via Macro 1posted in General Questions
Hi everyone,
I created a knob in the UI and linked it to script FX1, specifically to a hseq knob inside the script that is connected to an SVF EQ node. Then I linked Macro 1 to the knob in the interface, and it works well — it jumps between frequencies in 6 steps, similar to a Stepped Frequency Knob.
However, the knob in the UI interface appears faded compared to the other normal knobs, and I can’t move it directly — it only moves through Macro 1, like in the video.
️
Also, I don’t want to write code because I don’t understand C++ or Java.
My question:
Why can’t I move the knob in the interface directly?Thanks in advance for any help!

-
RE: HISE develop build does not show Git commit hash after building specific commit (VS2022)posted in General Questions
@David-Healey I thought they were the same thing, I’ll give it a try.
-
RE: HISE develop build does not show Git commit hash after building specific commit (VS2022)posted in General Questions
I rebuilt HISE after properly cloning the repository using:
git clone https://github.com/christophhart/HISE.git
cd HISE
git checkout 3c36e36c0c27adf97be22206fdebf87ec9c7eeb0After rebuilding, the commit hash (short form: 3c36e36c) does appear in the About HISE window,
as shown in the screenshot, but it disappears shortly after.So the commit hash is detected initially, then it vanishes from the About window.

-
RE: HISE develop build does not show Git commit hash after building specific commit (VS2022)posted in General Questions
@the-red_1 I ran
git log -1in the source folder and got:fatal: not a git repository (or any of the parent directories): .git

-
HISE develop build does not show Git commit hash after building specific commit (VS2022)posted in General Questions
Hello everyone,
I’m facing a confusing issue with HISE develop build and I hope someone can clarify it.
I cloned HISE from GitHub at this specific commit:3c36e36c0c27adf97be22206fdebf87ec9c7eeb0Then I built the standalone app successfully using Visual Studio 2022 (x64, Release).
The generated executable is located here:D:\HISE-3c36e36c0c27adf97be22206fdebf87ec9c7eeb0\projects\standalone\Builds\VisualStudio2022\x64\Release\App\HISE.exeThe build finishes without errors, and HISE.exe runs normally.
However, when I open Help → About HISE, I see:
Version: 4.1.0
Git commit hash: “current hash…” (not showing the actual commit)
Clicking Show commit on GitHub does not point to my commit
So it looks like the executable was built correctly, but it does not embed or display the Git commit hash, even though I built directly from a specific commit.
My questions:
Is this expected behavior when building HISE from source?
Is there an extra step required to embed the Git commit hash into the build?
Could this be related to building outside a Git environment or missing Git metadata during build?
Is the executable actually using the correct commit internally, even if it doesn’t show it in “About HISE”?I’ve attached screenshots of:

The About HISE windowThe Release\App folder containing HISE.exe
Any clarification would be greatly appreciated.
Thanks in advance
-
RE: Best practice for stepped frequency parameters in SVF EQposted in General Questions
@dannytaurus
Thanks for the suggestions and explanations.To be honest, I’m not fully sure about the specific branch or commit details — I haven’t worked with building HISE from source before, and I don’t want to take up too much of your time diving into that.
At this point I’m just trying to get the current functionality working, so I appreciate all the help and pointers, and thank you for your patience!
-
RE: Best practice for stepped frequency parameters in SVF EQposted in General Questions
@dannytaurus
I actually downloaded and built HISE directly from the GitHub source code, not from a prebuilt app.
So I’m running a source-built version.If there is a specific branch, commit, or build configuration required for
Synth.getEffect()to be exposed, please let me know and I can double-check or update my local build.
Thanks for your help.
-
RE: Best practice for stepped frequency parameters in SVF EQposted in General Questions
Thanks for the suggestion!
Just to clarify though:
Synth.getEffect() doesn’t seem to be available in my HISE version / scripting context.Using:
const EQ = Synth.getEffect("Script FX1");results in:
Unknown function 'getEffect'So while the stepped array + UI knob idea makes sense conceptually, the example as written doesn’t run here.
From what I understand, effects can’t be accessed directly via Synth.getEffect()
Please let me know if I’m missing something or if there’s an updated / supported way to reference FX modules.
Thanks again!
-
Best practice for stepped frequency parameters in SVF EQposted in General Questions
Hello everyone,
I’m trying to create a stepped frequency knob (like SSL / API EQs) for an SVF EQ in HISE.
What I want:
-
A knob that jumps between fixed frequencies only
-
For example : 3k → 5k → 7k → 9k → 11k → 14k → 16k Hz
-
No intermediate values
-
Works with SVF EQ frequency parameter
What I tried:
- Limiting the knob range and stepSize
- Linking via plugin parameters
My questions:
-
Is DSP Network (CableTable / Table) the intended solution ?
-
Is there a native way to do stepped parameters for EQ frequency ?
Thanks in advance!
-
-
RE: SNEX Distortion parameter not responding to ScriptFX knob connectionposted in General Questions
@ustk
Thanks for your help. I set the AllowCompilation flag in the DSP Network’s properties, compiled the network, and exported the DLL. The effect now works — but I’m still getting the prompt:
“You don’t need to wrap the root node. Just tick the AllowCompilation flag in the properties, save this network and export the DLL.”Do you know why the prompt keeps appearing even after I’ve done that?
I appreciate any guidance.
Thanks again!Best,

-
SNEX Distortion parameter not responding to ScriptFX knob connectionposted in General Questions
i’m working on a DSP project in HISE and I’ve run into a problem I’d like to ask your help with.

I have created a SNEX node (dsp_disto) in a “SNEX Shaper” block, with an internal parameter (knob) inside the SNEX node that works correctly — when I turn that knob, the distortion effect responds as intended.
However, I also created a GUI knob in script_fx1 (knob ID = “1”) and wired it to the SNEX node’s parameter (knob ID = “0”). The wiring shows up correctly in the connection graph, but when I turn the script-FX knob the effect does not respond — the SNEX knob works, but the external GUI knob does not trigger the processing change.I suspect the issue might be how the SNEX node is receiving the parameter from the external knob (perhaps through setParameter<0>(…) or other template method). I looked through the HISE forums (for example “Linking parameters to SNEX” discussion) and I saw there are subtle requirements for correctly binding external parameters to SNEX.
Would you be willing to take a look at the relevant parts of my SNEX code and wiring and perhaps point out what I might be missing? I can provide the SNEX code, screenshots of the wiring in HISE, and any additional details. I greatly appreciate any hints or suggestions you might have.
Many thanks in advance for your time and help — it would mean a lot.
SNEX CODE :
template struct dsp_disto
{
SNEX_NODE(dsp_disto);float parameter0 = 0.0f; float smoothedValue = 0.0f; float getSample(float input) { float drive = 1.0f + parameter0 * 19.0f; float x = input * drive; float y = Math.tanh(x); return y; } template <int P> void setParameter(double v) { if (P == 0) parameter0 = (float)v; } template <typename T> void process(T& data) { smoothedValue += (parameter0 - smoothedValue) * 0.01f; for (auto ch : data) { for (auto& s : data.toChannelData(ch)) s = getSample(s); } } template <typename T> void processFrame(T& data) { smoothedValue += (parameter0 - smoothedValue) * 0.01f; for (auto& s : data) s = getSample(s); } void reset() {} void prepare(PrepareSpecs ps) {} void setExternalData(const ExternalData& d, int index) {}};


