KODA

Kontakt KODA

Four steps from a Kontakt instrument to a KODA one. Runs in your browser; nothing is uploaded.

01

Export from Kontakt

Run the export script inside Kontakt. It copies the samples out and writes the XML for the next stage.

Download the export scripts and keep the three files together.

Download the export scripts
  1. Open Options > Developer and tick Developer Options.
  2. Load the instrument and click its wrench button.
  3. Main menu > Run Lua script... (F11), and pick koda_kontakt_export.lua.
  4. Wait a few seconds, then press Ctrl+F11 (Cmd+F11 on macOS) to run it again.
    Why twice, and how do I know it worked?

    Kontakt shows nothing when a Lua script runs, so the script writes koda_export.log next to itself. Read that. The first run puts a small KSP probe into a spare slot of the instrument to read its modulators, envelopes and release-trigger flags; the second run picks up that report.

  1. If the instrument uses .ncw samples, re-save it uncompressed: Files > Save as..., Save Mode Patch + Samples, untick Compress Samples.
    Why?

    Creator Tools cannot decode .ncw, so the samples have to be plain before the script copies them. For a whole library, Kontakt's Batch Re-Save does the same job in one pass.

  2. Open Creator Tools > Preferences and tick Enable Write and Execute Permissions.
  3. Select the instrument in the dropdown at the top and press the down arrow (Pull).
  4. Run koda_kontakt_export.lua.
    What Creator Tools cannot read

    The instrument's script slots, so the KSP for stage three has to be pasted by hand. Round-robin and crossfade settings are not gathered either. Kontakt 7 or later reads all of it; see the reference.

  1. Find the new library folder at Imports/<library>/, next to the script. Keep it whole.
    What is in it?
    Imports/<library>/
      library.lbmd                     the library manifest
      instruments/                     empty for now. The .kd will go here
      samples/<sub>/<file>             every sample, copied in
      import/<instrument>.xml          the handoff to stage two
      import/<instrument>.ksp/         the KSP of the five script slots, for stage three
      import/export.log                this run's log

    Sample paths in the XML are relative to the XML itself, so the whole folder can be zipped, moved or sent to another machine and still convert. Move the folder, never the XML on its own.

    import/ is the handoff and nothing else. Once the .kd is in instruments/, delete it: KODA never reads it.

02

Convert the XML

Choose the XML from Imports/<library>/import/. Check the structure it proposes, then download the .kd.

What can I change before downloading?
  • Drag any row onto another to re-nest it. The up and down arrows do the same.
  • Set round robin on a variation or an articulation: cycling or random, one child per note.
  • Turn release triggers on or off per group.
  • Generate keyswitches, one key per articulation.
  • Fold mic positions into signals, so one set of groups carries every mic.
  • Route buses to the main out or straight to a host output.
  • Save the plan and load it for the next instrument from the same library.
03

Rebuild the GUI

optional

Only if the instrument has a performance view. Choose the KSP from import/<instrument>.ksp/ and the Resources/pictures folder beside the instrument. Check the preview, then download the bundle.

What comes out, and what if I used Creator Tools?

A .kdui layout, the sprite strips it uses, a KodaScript with every control wired to a Parameter, and a report of what needed a hand. Creator Tools cannot read script slots, and protected scripts are never copied; in either case, paste the script below. An older export may also hold slot6.txt to slot8.txt: those are Kontakt's own system scripts, not yours, and the page ignores them.

Or paste the KSP
04

Finish in KODA

  1. Put the .kd in the library's instruments/ folder.
  2. Drag the library folder onto KODA's Browse page. Play.

If you rebuilt the GUI

  1. Unzip the UI bundle into the library folder, next to instruments/.
  2. In KODA, open the instrument and find the INSTRUMENT INFO panel (SETUP page, Instrument focus). Drag ui/<name>.kdui onto the GUI SCRIPT row.
    INSTRUMENT INFO
    Name14 / 50
    Description
    Library folder
    Inst. script[no script] .kdscriptdrop <name>.kdscript here
    GUI script[no layout] .kduidrop <name>.kdui here
  3. Drag scripts/<name>.kdscript onto the INST. SCRIPT row of the same panel.
    What still needs a hand?

    The report lists the controls that were approximated. Every // KSP: line in the script is Kontakt logic that did not translate on its own; the reference says what the script carries and what it leaves to you.

  4. Find the INSTRUMENT PARAMETERS module on the same page. Press Re-Sync, then Apply.
    INSTRUMENT PARAMETERS
    Filter Parameters... 0 PARAMETERS press first Re-Sync
    TypeNameMapHostMinMaxDefStepUnitCurrent
    ADD PARAMETER
    Why?

    The layout declares a Parameter for every control. Re-Sync reads them in and Apply creates them; until then the controls have nothing to drive.

Last look

  1. Go to the PLAY tab and check the GUI. Every control should move, and the pictures should sit where Kontakt had them.
  2. Wire up any loose modulators. Each one the export found is created with no destinations: drag it onto the controls it should drive and set the depth there.
    Why are they loose?

    Kontakt does not let a script read what a modulator is wired to, or how strongly, so the export lists them and KODA creates them empty. Amp envelopes are not among them; those are already applied to their groups.

Reference

Compatibility

Kontakt 7+ runs the Lua script natively from the standalone app, and this is the recommended method.
Kontakt 6 cannot run Lua on its own and needs Creator Tools to execute the script.

Creator Tools gathers less, and cannot decode .ncw samples if your instrument uses those. Treat it as the fallback; Kontakt 7 or later saves you some tedium.

Player libraries not supported

Samples from copy-protected Player libraries cannot be decoded by any method. The script reports them rather than failing, and leaves the original path in place. If you do not have the rights to the samples, this lane will not move them.

 Kontakt built-in LuaCreator Tools
Kontakt versions7 and later6, 7, and 8 up to 8.9
Decodes .ncwYesNo
Internal round robin, group start optionsYesNo
Key and velocity crossfadesYesNo
Reads the script slots (for stage three)YesNo
Needs a separate appNoYes
What does not get converted
  • Effects and filters are not carried over. This is something we’ll work toward supporting over time. For now, there are too many variables to accommodate reliably.
  • KSP logic converts only as far as the view goes. Stage three rebuilds the performance view as a KODA layout and carries what the script did to that view as working code; the rest rides along as // KSP: comments for you to port in KodaScript.
  • Samples inside .nkx and .nkr monoliths keep their original path. Compressed .ncw inside a monolith is fine, which covers most libraries.
  • Sample rate is read from WAV, AIFF and FLAC headers only. Anything else is reported in the summary.
What the GUI script carries

Stage three runs the script’s on init, so knobs placed in loops or through stored ids land where Kontakt put them. Kontakt draws the wallpaper from the top of the instrument header, 68 px above the performance view; a KODA GUI starts at its top edge, so those rows are trimmed off the wallpaper for you. Controls Kontakt drew itself (no picture) are painted by the script in Kontakt’s stock look.

The script carries what the KSP did to the view as working code: every on ui_control callback, on persistence_changed and the functions they call are compiled with their conditions, loops and select blocks intact, so page switches, show/hide buttons, moves, picture swaps and value writes behave as they did in Kontakt. Each line of the original KSP sits above its KODA code as a // KSP: comment. A line KODA has no call for (engine parameters, string building, wait) stays a comment with the reason in braces; the report’s UI LOGIC table lists every callback, what it affects and what was kept, so the hand port against the Scripting Reference starts from a list.

Two things need a look in the report. Controls placed with move_control (grid units rather than pixels) and controls with no picture and no size use Kontakt’s defaults and are marked approximate. Waveforms, file selectors and wavetables have no KODA widget; a placeholder label marks where they were.

Troubleshooting

The script says no instrument is focused

In Kontakt, click the instrument's wrench so it is open for editing. In Creator Tools, press the down arrow to pull it into the Instrument Editor. A version mismatch between Kontakt and Creator Tools can also leave the pulled copy empty. Updating through Native Access should fix that.

Nothing happens at all

Run koda_kontakt_probe.lua the same way. It writes koda_probe.log beside itself listing what your host actually provides: the Lua version, whether file access exists, and what the instrument looks like from inside. That file usually names the cause on its own.

The instrument is silent after import

Check the export log for samples it could not read, copy or decode. Those keep their original path, so the instrument plays only while that file stays where it is. .ncw samples that were never decoded are the usual culprit.

Envelopes and modulation did not come through

They arrive on the second pass. If the log asked for Ctrl+F11 (Cmd+F11 on macOS) and it never ran, they are simply not in the file yet. If every script slot in the instrument is occupied or protected, the export still completes and the log says why the probe could not go in.

Found something this page does not cover? The community forum is the fastest way to get an answer, and tells us what to write down next.