> ## Documentation Index
> Fetch the complete documentation index at: https://xrlive.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# JSON Schema

> Structure of the JSON file generated by xRLive for each visual

xRLive generates a JSON file for each visual at `ProjectSaveDir/Save/`. The file is created and managed dynamically by the system — you do not need to create or seed it manually.

<Note>
  All values in the file are stored as strings, including numbers and booleans.
</Note>

***

## Key naming

Each key in the JSON corresponds to the **Name** field of a control as declared in `UICategories`. The match is exact — same casing, same spaces. If a control is named `Horizontal move`, its key in the JSON is `"Horizontal move"`.

***

## Control schemas

### Dropdown

```json theme={null}
"Control Name": "Selected Option"
```

The value is the string of the currently selected option.

***

### Checkbox

```json theme={null}
"Control Name": "true"
```

The value is `"true"` or `"false"` as a string.

***

### Text Input

```json theme={null}
"Control Name": "Text content"
```

The value is the current content of the text field.

***

### Slider

**Manual mode**

```json theme={null}
"Control Name": "0.00"
```

The value is the current slider position as a float string.

**Audio Reactive mode**

When audio reactive is active, the control is serialized as an object:

```json theme={null}
"Control Name": {
  "Reactive": "true",
  "SliderScale": "0.3",
  "BeatType": "Bass",
  "MinValue": "0.0",
  "MaxValue": "1.0"
}
```

| Key           | Description                                                                 |
| ------------- | --------------------------------------------------------------------------- |
| `Reactive`    | Whether audio reactive mode is currently active (`"true"` / `"false"`).     |
| `SliderScale` | The signal multiplier configured for this slider.                           |
| `BeatType`    | The frequency band the slider reacts to (e.g. `"Bass"`, `"Mid"`, `"High"`). |
| `MinValue`    | Lower bound of the audio reactive range.                                    |
| `MaxValue`    | Upper bound of the audio reactive range.                                    |

***

### Color Picker

**Manual mode**

The color is serialized as an object with individual HSVA channel values:

```json theme={null}
"Control Name": {
  "Hue": "0.0",
  "Saturation": "1.0",
  "Value": "1.0",
  "Alpha": "1.0"
}
```

**Audio Reactive mode**

Each channel can be reactive independently. A reactive channel is serialized as an object; a non-reactive channel remains a plain string:

```json theme={null}
"Control Name": {
  "Hue": {
    "Reactive": "true",
    "SliderScale": "0.3",
    "BeatType": "Bass",
    "MinValue": "0.1",
    "MaxValue": "1.0"
  },
  "Saturation": {
    "Reactive": "true",
    "SliderScale": "0.3",
    "BeatType": "Bass",
    "MinValue": "0.1",
    "MaxValue": "1.0"
  },
  "Value": {
    "Reactive": "true",
    "SliderScale": "0.3",
    "BeatType": "Bass",
    "MinValue": "0.1",
    "MaxValue": "1.0"
  },
  "Alpha": "1.0"
}
```

***

## Camera fields

Two fields at the end of the file store the camera state:

```json theme={null}
"Camera Position": "X=0.000 Y=0.000 Z=92.000",
"Camera Rotation": "P=0.000000 Y=0.000000 R=0.000000"
```

| Key               | Description                                                                        |
| ----------------- | ---------------------------------------------------------------------------------- |
| `Camera Position` | World position of the camera in Unreal Engine vector format (`X Y Z`).             |
| `Camera Rotation` | Camera orientation in Unreal Engine rotator format (`P` Pitch, `Y` Yaw, `R` Roll). |
