Track archive xml : anyone can decrypt where the kontakt instrument nki name hide in the xml?

Hello, it’s a bit of an odd question, I am working on a script to generate cubase xml track archives, and I would love to be able to generate xml files from scratch that load a kontakt instance with the correct .nki patch loaded.

I have looked everywhere in the xml, and the nki name or it’s file path is hidden in some blob id, all I could do is load empty kontakt tracks with the correct name articulation map

Hi,

Send me two XML files with two different *.nki included and write me the names of the *.nki. I will find them.

You can send the XML files as DM.

Hi,

I will send the result (shorten version) also here, if anyone is interested…

The *.nki name is not visible in the XML file directly.

list "track"
└ MInstrumentTrackEvent
  └ MInstrumentTrack  (name="Track Device")
    └ member "DeviceAttributes"
      └ member "Synth Slot"
        └ member "Plugin"          ← Kontakt 8, "css violins 1"
          └ <bin name="audioComponent">   2,097,113 bytes

So it lives in the track’s Synth Slot / Device settings, exactly where I expect the instrument to be stored — under MInstrumentTrack → DeviceAttributes → Synth Slot → Plugin. That’s track configuration, not the recorded MIDI.

What I confirmed while checking:

  • That audioComponent bin is the only populated binary for the Kontakt slot. Its companion editController bin is present but empty (0 bytes), and there are no other large bins anywhere near the track. So all of the Kontakt state — including whatever .nki reference exists — is inside that single blob.
  • The same holds for track 2: MInstrumentTrack → … → Synth Slot → Plugin → audioComponent at byte 5,220,962 (2.03 MB), Kontakt 8, “css violins 2”.
  • The plain XML around the slot (RuntimeID, Plugin Name, GUID, etc.) carries no .nki path — only the display name “css violins 1/2” and “Kontakt 8”.

The .nki identity sits inside that audioComponent blob, and the blob is compressed (entropy 7.999/8.0). There’s no separate, smaller plaintext .nki path stored alongside the slot settings — Cubase just hands Kontakt a binary state chunk and stores it whole. That’s why nothing readable like a filename or path turns up anywhere in the file.

I tried to resolve the big audioComponent blob. What the parse shows — identical in both tracks:

  • A small header tree of ~21 tiny DSIN/hsin chunks at the top = the NKS sound-info metadata.
  • One single compressed leaf chunk carrying the entire embedded instrument: track 1 = 2,095,525 bytes starting at offset 1250; track 2 = 2,031,252 bytes at the same offset. Entropy 7.999 bits/byte — fully compressed.
  • A tiny footer chunk at the end.

So the .nki for each track is that one big compressed leaf inside the audioComponent chunk. There is no .nki / .ncw / .nkm / .nkr string anywhere in either blob (literal count 0/0/0/0, across ASCII, UTF-16, reversed, and all XOR keys). The only readable text is the NKS sound-info — New (default) and the metadata keys \@color, \@soundtype, \@tempo, \@verl, \@verm, \@visib, \@devicetypeflags. The instruments are named only by the Cubase track names and the articulation set baked into the MIDI side (Con Sord, Legato, Short SW, VelXFade, Vib Ctrl, Port Vol, Volume).