This documentation is under construction.

Space export/import

Jam Pad allows you to export a space including all of its clips and other data to a folder of your choice. The reverse, importing from a folder, is also possible.

Export format

You don’t need to understand anything in this section if you simply want to export or import spaces!

This section is intended for …​

  • …​ power users who want to modify their spaces in a text editor.

  • …​ developers who want to build an import/export function for their own software.

Folder structure

A space export is a folder with the following structure:

Example
hello/
├── assets/                             (1)
│   ├── YSBSZJJZCGD68JDB969J4SDFAC.m4a  (2)
│   ├── RS48WGQ5FZE6EZ7V1S16NJXFEW.mp3
├── hello.space.jampad.json             (3)
1 The folder containing all space assets
2 The actual assets, for example, clip media files
3 A JSON file that contains a snapshot of all the other data in this space (markers, playlists, sheets, …​)

The JSON file

JSON is a widely used data exchange format. Unlike CSV, it can easily represent nested structures, which is important because Jam Pad spaces can get quite complex.

Let’s look at an example:

Example space export file
{
  "$schema": "https://jampad.app/schemas/space.jampad.schema.json",
  "space": {
    "name": "Nature and music"
  },
  "customFieldsForClips": [
    {
      "id": "tonalQuality",
      "hidden": false,
      "name": "Tonal quality",
      "description": "Tonal quality of a musical piece, that is, *major* or *minor*. If you need more variety, consider adding a *Scales/modes* field.",
      "position": 31,
      "showInListView": true,
      "showInAdvancedFilter": false,
      "type": "tonalQuality"
    },
    {
      "id": "moods",
      "hidden": false,
      "name": "Mood",
      "description": "Associate a clip or marker with moods or emotions, such as \"Happy\" or \"Sad\"",
      "position": 600,
      "showInListView": true,
      "showInAdvancedFilter": false,
      "type": "items",
      "itemTypeId": "moods"
    },
    {
      "id": "tonalCenter",
      "hidden": false,
      "name": "Tonal center",
      "description": "Tonal center (or root note) of a musical piece, for example D♭. Together with the *Tonal quality* field, it makes up the key of a musical piece.",
      "position": 30,
      "showInListView": true,
      "showInAdvancedFilter": false,
      "type": "note"
    }
  ],
  "customFieldsForMarkers": [
    {
      "id": "019951f6-fa46-7b80-b4c8-54801c12a8b0",
      "hidden": false,
      "name": "Sound source",
      "position": 1000,
      "showInListView": true,
      "showInAdvancedFilter": false,
      "type": "item",
      "itemTypeId": "019951f6-fa45-7c09-a569-22d90f660df3"
    },
    {
      "id": "rating",
      "hidden": false,
      "name": "Rating",
      "icon": "starRate",
      "description": "Each user can give their own 1–5 rating.",
      "position": 10,
      "showInListView": true,
      "showInAdvancedFilter": true,
      "type": "perUserRating"
    }
  ],
  "customItemTypes": [
    {
      "id": "019951f6-fa45-7c09-a569-22d90f660df3",
      "hidden": false,
      "name": "Sound source",
      "nameIsPath": false
    },
    {
      "id": "moods",
      "hidden": false,
      "name": "Moods",
      "nameIsPath": false
    }
  ],
  "customItems": {
    "moods": [
      {
        "id": "019951f4-f46f-7693-b179-99734860774c",
        "authorId": 0,
        "hidden": false,
        "name": "Rigid",
        "customColor": [
          23,
          190,
          207
        ]
      },
      {
        "id": "019951f4-bfd2-7fe8-a227-ddd6e19c29e5",
        "authorId": 0,
        "hidden": false,
        "name": "Dreamy",
        "customColor": [
          148,
          103,
          189
        ]
      }
    ],
    "019951f6-fa45-7c09-a569-22d90f660df3": [
      {
        "id": "019951f9-1ed2-714f-be12-163b97bf1b22",
        "authorId": 0,
        "hidden": false,
        "name": "Stones",
        "customColor": [
          188,
          189,
          34
        ]
      },
      {
        "id": "019951f7-1514-7dfc-9c79-e5c7ec9b761c",
        "authorId": 0,
        "hidden": false,
        "name": "Cricket",
        "customColor": [
          255,
          127,
          14
        ]
      }
    ]
  },
  "clips": [
    {
      "id": "019951ef-467e-7e21-9141-7a2d32bbeb7a",
      "authorId": 0,
      "hidden": false,
      "title": "Distance",
      "customData": {
        "moods": {
          "019951f4-bfd2-7fe8-a227-ddd6e19c29e5": null
        },
        "tonalQuality": "min",
        "tonalCenter": "B♭"
      },
      "versions": [
        {
          "filePath": "assets/8E4CN8JX590DTMPA5MFM76HGC4.mp3",
          "authorId": 0,
          "origin": "imported",
          "importedOrigin": {
            "installationId": "01991a04-8640-7820-b3bf-3da3754cf705",
            "importId": "019951ae-4098-7ddf-822c-a22ebd3246e0",
            "baseFolderHash": "5A6JFGW2HZ3SB3E6KTCCW42RR8",
            "baseFolderName": "docs",
            "contentSize": 11903690,
            "path": "Distance.mp3",
            "contentHash": "8E4CN8JX590DTMPA5MFM76HGC4",
            "format": "mp3Cbr"
          }
        }
      ],
      "comments": []
    },
    {
      "id": "019951ef-2c7b-7a6d-b5cc-4afc4ec2f08c",
      "authorId": 0,
      "hidden": false,
      "title": "Siquijor Hill",
      "customData": {},
      "versions": [
        {
          "filePath": "assets/7SA8JQ5SRM97H2XC4075TWRRG4.m4a",
          "authorId": 0,
          "origin": "imported",
          "importedOrigin": {
            "installationId": "01991a04-8640-7820-b3bf-3da3754cf705",
            "importId": "019951ae-4098-7ddf-822c-a22ebd3246e0",
            "baseFolderHash": "5A6JFGW2HZ3SB3E6KTCCW42RR8",
            "baseFolderName": "docs",
            "contentSize": 15265350,
            "path": "230212-142536-siquijor-hill.wav",
            "contentHash": "4JRKZ1T9SPS035M0KZ36SRHXEG",
            "format": "wav"
          }
        }
      ],
      "comments": []
    },
    {
      "id": "019951ef-5d9a-7a48-bbb9-23d7d9c5f4fc",
      "authorId": 0,
      "hidden": false,
      "title": "Rügen Sea",
      "customData": {},
      "versions": [
        {
          "filePath": "assets/TT9Q3E82VZN64VY1YP0CF76AR4.m4a",
          "authorId": 0,
          "origin": "imported",
          "importedOrigin": {
            "installationId": "01991a04-8640-7820-b3bf-3da3754cf705",
            "importId": "019951eb-b050-7b1f-961e-c669e7657e70",
            "baseFolderHash": "5A6JFGW2HZ3SB3E6KTCCW42RR8",
            "baseFolderName": "docs",
            "contentSize": 22040702,
            "path": "ruegen.WAV",
            "contentHash": "D4GPJ595FT4EVB56M1H99NC76C",
            "format": "wav"
          }
        }
      ],
      "comments": []
    }
  ],
  "markers": [
    {
      "id": "019951e3-c263-7d6e-96ab-0acdc0511c1b",
      "authorId": 0,
      "hidden": false,
      "clipVersionId": "019951ef-2c7b-7a6d-b5cc-4afc4ec2f08c/1",
      "name": "Loud cricket",
      "start": 254634,
      "length": 15000,
      "createdAt": 1758015504995,
      "comments": [
        {
          "id": "019951f1-724d-74b6-9245-104e6fb00b68",
          "hidden": false,
          "authorId": 0,
          "createdAt": 1758016401997,
          "content": "What an awesome cricket sound!"
        }
      ],
      "customData": {
        "rating": {
          "0": 4
        },
        "019951f6-fa46-7b80-b4c8-54801c12a8b0": "019951f7-1514-7dfc-9c79-e5c7ec9b761c"
      }
    },
    {
      "id": "019951f8-317b-7f96-a3ea-652e7e9bf8d0",
      "authorId": 0,
      "hidden": false,
      "clipVersionId": "019951ef-5d9a-7a48-bbb9-23d7d9c5f4fc/1",
      "name": "Knocking stones",
      "start": 36123,
      "length": 15000,
      "createdAt": 1758016844155,
      "comments": [],
      "customData": {
        "019951f6-fa46-7b80-b4c8-54801c12a8b0": "019951f9-1ed2-714f-be12-163b97bf1b22"
      }
    },
    {
      "id": "019951e4-22aa-78e2-a8e8-4a36823d63aa",
      "authorId": 0,
      "hidden": false,
      "clipVersionId": "019951ef-467e-7e21-9141-7a2d32bbeb7a/1",
      "name": "Drop & Flute",
      "start": 98404,
      "length": 15000,
      "createdAt": 1758015529643,
      "comments": [],
      "customData": {}
    },
    {
      "id": "019951e5-2158-7455-9435-5e9dfbe83a6f",
      "authorId": 0,
      "hidden": false,
      "clipVersionId": "019951ef-467e-7e21-9141-7a2d32bbeb7a/1",
      "name": "Distorted",
      "start": 153909,
      "length": 15000,
      "createdAt": 1758015594840,
      "comments": [],
      "customData": {
        "rating": {
          "0": 2
        }
      }
    }
  ],
  "playlists": [
    {
      "id": "019951ef-58e7-707a-8a8c-ac511b84a591",
      "hidden": false,
      "authorId": 0,
      "createdAt": 1758016264423,
      "name": "Nature",
      "entries": [
        "/marker/019951e4-22aa-78e2-a8e8-4a36823d63aa#6DHP",
        "/marker/019951e3-c263-7d6e-96ab-0acdc0511c1b#PA5X",
        "/clip/019951ef-2c7b-7a6d-b5cc-4afc4ec2f08c#TYCX"
      ]
    }
  ],
  "sheets": [
    {
      "id": "home",
      "authorId": 0,
      "hidden": false,
      "title": "Home",
      "content": {
        "type": "doc",
        "content": [
          {
            "type": "paragraph",
            "content": [
              {
                "type": "text",
                "text": "This space is all about nature. Field recordings mixed with music deeply connected to the natural world."
              }
            ]
          },
          {
            "type": "heading",
            "attrs": {
              "id": "0HPS",
              "level": 2
            },
            "content": [
              {
                "type": "text",
                "text": "Some examples"
              }
            ]
          },
          {
            "type": "bulletList",
            "content": [
              {
                "type": "listItem",
                "content": [
                  {
                    "type": "paragraph",
                    "content": [
                      {
                        "type": "jam",
                        "attrs": {
                          "id": "EYPX",
                          "href": "/marker/019951f8-317b-7f96-a3ea-652e7e9bf8d0"
                        }
                      }
                    ]
                  }
                ]
              },
              {
                "type": "listItem",
                "content": [
                  {
                    "type": "paragraph",
                    "content": [
                      {
                        "type": "jam",
                        "attrs": {
                          "id": "85VB",
                          "href": "/clip/019951ef-5d9a-7a48-bbb9-23d7d9c5f4fc"
                        }
                      }
                    ]
                  }
                ]
              },
              {
                "type": "listItem",
                "content": [
                  {
                    "type": "paragraph",
                    "content": [
                      {
                        "type": "jam",
                        "attrs": {
                          "id": "337W",
                          "href": "/clip/019951ef-467e-7e21-9141-7a2d32bbeb7a"
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ],
  "clipPlayEvents": [
    {
      "timestamp": 1764241281000,
      "clipVersionId": "019951ef-2c7b-7a6d-b5cc-4afc4ec2f08c/1",
      "start": 0,
      "length": 7804
    },
    {
      "timestamp": 1764241286000,
      "clipVersionId": "019951ef-5d9a-7a48-bbb9-23d7d9c5f4fc/1",
      "start": 0,
      "length": 4404
    }
  ]
}

The structure of space export files is specified in this JSON Schema file. JSON schema files are made for machines, so they are not very readable. However, you can use a JSON Schema Viewer to read it like a specification:

Export/import vs. Backup/restore