ACIDCAT . FILE FORMAT REFERENCE

Bitwig Anatomy

BtWg container.bwpreset . .bwclip
rev 2026.07
magic "BtWg"
endian big (meta)
container tagged + tree
sample 42 74 57 67

A Bitwig preset is not audio. It is an ASCII BtWg header, a big-endian self-describing metadata block, an opaque device tree, and, when "embed files" was on, a ZIP archive of the referenced assets. The same container backs .bwpreset, .bwclip, and .bwmodulator; everything below is field-verified against real Bitwig Studio 6.x files. Hover any field to light its exact bytes and read the decode; click a field with a + to open its table. Color marks kind (see the key).

file regions

Top to bottom, what a reader walks. The metadata a producer wants sits right behind the header; acidcat inspect (and inspect --pretty) decodes it and flags the embedded-asset zip.

BtWg header0x00 . drawn below

All ASCII: the 4-byte magic, ten format/version digits, then a run of hex digits. Careful with the family: .bwimpulse is not this container at all, it is a plain FLAC file.

magic"BtWg"
format/version10 ASCII digits; "0003000200" on Studio 6.x files
hex fieldASCII hex digits after the version chars; varies per file, left uninterpreted
extensions.bwpreset . .bwclip . .bwmodulator share this header; .bwimpulse is FLAC
tagged meta blockbig-endian . self-describing

A list of key/value entries, each one self-describing: a u32-BE length and that many ASCII key bytes, then a type byte (0x08 = string), a u32-BE value length, and the value bytes. One worked entry is drawn below: device_name = "Drum Machine". The keys, in order:

application_version_namewriting Bitwig version, e.g. "4.4"; branch alongside it
commentthe preset DESCRIPTION field as typed in the browser
creatorpreset author
device_categorye.g. Container . Reverb . Synth
device_creatordevice vendor, e.g. Bitwig
device_iduuid of the device the preset targets
device_namee.g. Drum Machine . Polysynth . Convolution
device_typenote_to_audio for instruments, audio_to_audio for FX
preset_categorybrowser category for the preset itself
referenced_*_idsdevice / modulator / module / packaged_file id lists: the dependency graph
revision_id / revision_noa sha plus a revision counter
tagsspace-separated, e.g. "digital harmonic slow soft"
type"application/bitwig-preset"
module / device treeafter the meta block . opaque

The Grid and device graph: a nested CONTENTS/MODULES/N/CONTENTS/... structure holding every module in the patch. acidcat v1 leaves it opaque; the meta block already carries what the browser needs.

nestingCONTENTS > MODULES > N > CONTENTS, recursively
module namese.g. Pitch Shifter . Stereo Split/Merge . All-pass Delay . Peak Limiter
per modulean optional description string alongside the parameters
embedded asset zip"embed files" on . PK 03 04

With "embed files" enabled, every referenced asset is packed into a DEFLATE ZIP embedded in the preset. Unzip it and the referenced files come back whole. acidcat inspect flags the archive when it is present.

magicPK 03 04, standard local-file header
compressionDEFLATE
contentssamples, impulses; .bwimpulse entries are FLAC and decode anywhere
microtuningMicro-pitch scales are stored native as per-note tags NOTE1..NOTE11 plus EDO_DIVISIONS / EDO_OCTAVES, not the original .scl file
related: wav bounces

Not this container, but from the same writer: audio bounced out of Bitwig carries its own tempo trail in the WAV.

BWBM + IBPMinside bounced .wav files
LIST/INFO IBPMtempo as an INFO tag
BWBM chunku32 version, then two f64: beats at 0x18, duration seconds at 0x20