Converting Kontakt Instruments to Gorilla Engine
A complete guide to porting your existing sample-based instruments to VST/AU/AAX with Gorilla Engine.
Overview
Native Instrument's Kontakt is an industry-standard platform. Many developers want to import their existing instruments into Gorilla Engine to create standalone VST/AU/AAX plugins. This guide covers the conversion process.
Exporting Data
Option A: NI Creator Tools (Lua Script)
Use the provided Kontakt ToGE.lua script within NI Creator Tools.
- Load instrument in Kontakt.
- Run the Lua script in Creator Tools.
- Copy the output to a text file.
- Save the text document with the location and filename specified at the end of the copied text – this ensures the relative paths to the sample files are correct.
- Save as
.instand load in Gorilla Editor.
Important: Clear the text output before exporting another instrument.
Exportable Parameters
| Group | Zone | Sample |
|---|---|---|
|
|
|
Option B: Chickensys Translator
Convert NKI files up to Kontakt version 4.0 format using Chickensys Translator, which Gorilla Editor can import directly. This method preserves more parameters like Pan and Keytracking.
Additional Exportable Parameters
| Group | Zone |
|---|---|
|
|
Scripts
Script text can be copied from Kontakt's Script Editor and pasted in Gorilla Editor's Script Module or saved in a text file which can be automatically reloaded by Gorilla Editor when it is updated.
While Gorilla Engine uses its own script language, many features and functions of Kontakt scripting are also understood, so it is possible to re-use major parts of an existing Kontakt instrument's script.
Note that some functions work differently between Kontakt and Gorilla Editor, so for example while there is no way to load individual convolution impulses using the instrument script, there is a way to switch between multiple impulses. Anything relating to the UI layout and colors of a Kontakt instrument will have no effect in Gorilla Editor because UI layout is handled separately.
Key Differences
- Replace
set_engine_par()withset_module_param()because module and parameter locations differ from Kontakt. - Replace
get_engine_par()withget_module_param(). make_persistent()is not used. Properties are saved automatically.
About the Persistence function
The make_persistent function is not used in Gorilla Engine. When an instrument is loaded the script "on init" callback is executed, then any property values ("UI controls" in Kontakt) that were saved with the instrument are set.
Your instrument's state should be represented fully by its exposed properties. For example, don't have one property for selecting a group to edit and another property for adjusting that group's release time. This is because recalling the values of those two properties will not set the values in all the groups. It is however possible to save array data from scripts into "data file" modules in the instrument.
Not Currently Implemented
- UI layout and appearance (handled via JS)
- Floating point (real value) math
- "on listener" callbacks at regular beat/time intervals (use "trigger_new_event" instead)
- MIDI File writing and some reading functions
- Getting keyboard colors/settings
- Loading effects/filters via script (use "set_effect_order" instead)
- Multi-script for controlling multiple instruments
Supported Parameters
- Groups & Zones
- Sample Maps
- Root Keys
- Velocity Ranges
- Volume & Pan
- Loop Points
Manual Re-creation
These elements cannot be automatically exported and must be rebuilt in Gorilla Editor:
- Modulation Routing
- Insert Effects
- Send Effects
- Filters
- UI Layout (JavaScript)
Obsolete Kontakt Functions & Constants
The following script functions and constants (as of Kontakt 6.4) are Kontakt specific. They will have no effect in Gorilla Engine. The numbers in the brackets indicate the recommended equivalent in GorillaScript.
Everything related to UI appearance or interaction can be done using our JavaScript based UI layer. In Gorilla Engine files like e.g., IRs, MIDI files, arrays are build into the instrument itself using Gorilla Editor. If required it is possible to load files via JavaScript and insert their content into instruments. Communication with Creator Tools do not translate to Gorilla Engine and Kontakt multiscript is currently unsupported.
[1] Use get_module_param() instead
[2] Use set_module_param()
[3] Set defines in instrument module
[4] Use on_midi_drag
[5] Use get_module_param(), find_module_param()
[6] Use on new_event
[7] Use prop_stepped
[8] Implement in the UI instead
[9] Set PROP_SET_BY
[10] Read PROP_MAX
“Native Instruments” and “KONTAKT” are trademarks of Native Instruments GmbH.
UJAM’s Gorilla Engine is neither affiliated with nor endorsed by Native Instruments.