Remix file format
The .rhre3
file format is a standard compressed ZIP file. You can open
it with programs such as 7zip.
All JSON fields are non-null unless otherwise specified. Not all RHRE3
remix.json
files are directly backwards compatible.
music.bin
The music.bin
file is present only if the remix has music. It is a
copy of the original music file in the same format it was originally.
Textures
You may see several hexadecimal.png
entries. These
are the textures used in the remix. They are referred to in remix.json
.
They are always PNG files.
remix.json
The remix.json
file has all the remix data in it.
It is a top-level object with the following fields:
Field Name | Field Type | Optional? | Description |
---|---|---|---|
version |
string | N | The version this remix was saved in. |
databaseVersion |
integer | N | The SFX Database used in this remix. |
playbackStart |
double | Optional, defaults to 0.0. | Where the playback start marker is, in beats. |
musicStartSec |
double | Optional, defaults to 0.0. | Where the music start marker is, in seconds. |
trackCount |
integer | Optional, defaults to 5 if not present. Non-null. | The number of tracks available. Usually ranges from 1 to 10. Can be greater than 10. Values less than zero are coerced to 1. |
isAutosave |
boolean | Optional, defaults to false. | Whether this remix is an autosave. Autosaves are not autosaved. |
midiInstruments |
integer | Optional, defaults to 0. | The number of midi instruments that were in the original midi. This is only used for the Glee Club visualization. Positive values only. |
musicData |
music data object (see below) | N | The music data object. See its table below. |
textures |
array of strings | Optional and nullable, defaults to null | If not null, contains a list of hexadecimal hashes referring to the textures in the containing rhre3 file. |
entities |
array of entity objects (see below) | N | Contains the entities used in the remix. |
trackers |
trackers object (see below) | N | Contains the trackers (tempo changes and music volume changes) used in the remix. |
timeSignatures |
array of time signatures (see below) | N | Contains the time signatures used in the remix. |
musicData
object fields:
Field Name | Field Type | Optional? | Description |
---|---|---|---|
present |
boolean | N | Whether or not music is present. |
filename |
string | Only present if the present field is true . |
The original file name of the music. |
extension |
string | Only present if the present field is true . |
The file extension/type of the music. This is used to determine how to decode the music.bin file. |
trackers
object
The trackers
object has two object fields, tempos
and musicVolumes
.
Both objects only have their own trackers
array of either tempo changes or music volume changes, respectively.
Tempo Change object fields
Field Name | Field Type | Optional? | Description |
---|---|---|---|
beat |
double | N | The beat this tracker is on. |
seconds |
double | Technically optional, always provided by RHRE3. If not present, it is calculated on-the-fly. | The seconds this tracker is on. RHRE3 provides, but does not use this value (it is calculated on-the-fly). |
bpm |
double | N | The BPM (beats per minute) that this tempo change switches to. |
swingRatio |
integer | Optional, defaults to 50. | The swing ratio of this tempo change. Example: A value of 60 means the first "beat" is lengthened to a 60/40 ratio, giving a swing effect. |
swingDivision |
double | Optional, defaults to 1.0. | The swing "note". 1.0 indicates 8th note swing, and 0.5 indicates 16th note swing. The formula 8 / division gives you the Xth note (8th, 16th, 32nd, etc.). |
Music Volume Change object fields
Field Name | Field Type | Optional? | Description |
---|---|---|---|
beat |
double | N | The beat this tracker starts on. |
width |
double | Optional, defaults to 0.0. | The width of the tracker. Can be zero, but not negative. |
volume |
integer | N | The volume in percentage points. Coerced to 0-200. |
timeSignatures
object fields
Field Name | Field Type | Optional? | Description |
---|---|---|---|
beat |
integer | N | The beat this time signature is on. |
divisions |
integer | Optional, defaults to 4. | The X in X/Y time signatures. |
measure |
integer | Optional (calculated on-the-fly in RHRE). | The measure this time signature is on. |
beatUnit |
integer | Optional, defaults to 4. | The Y in X/Y time signature. Typically a power of two. |
Entity object fields
Entity objects can have varying fields depending on the type of entity.
Field Name | Field Type | Optional? | Description |
---|---|---|---|
type |
string | N | The type of entity. This is always model . |
`beat | double | N | The beat where this entity starts (left face). |
track |
integer | N | The position on the track where this entity sits (bottom face). 0 is the bottom-most track. |
width |
double | N | The width of the entity in beats. |
height |
integer | N | The height of the entity in track segments. |
datamodel |
string | Always present when type is model , which is always true. |
The database ID of this entity. |
semitone |
integer | Optional, defaults to 0. | The number of semitones to pitch this entity up or down. If the entity cannot be repitched at all, this has no effect. If the entity is a shake entity (datamodel is special_shakeEntity ), this controls the shake intensity (2^(semitone / 12) ). |
volume |
integer | Optional, defaults to 100. | The number of percentage points of volume that this entity should be played back at. Always between 0-300 in RHRE3. |
texHash |
string | Optional. Can be null. Appears only when datamodel is special_textureEntity , |
The texture hash that this texture entity refers to. If null or not present, it indicates that this texture entity has no texture yet. |
subtitle |
string | Only present if datamodel is a subtitle entity, specifically special_subtitleEntity , special_songTitleEntity , and special_songArtistEntity . |
The subtitle text for this subtitle entity. If not present, defaults to "<failed to read text> ". |
Example:
{
"version": "v3.13.0",
"databaseVersion": 61,
"playbackStart": 0.0,
"musicStartSec": -0.07472682,
"trackCount": 5,
"isAutosave": false,
"midiInstruments": 0,
"musicData": {
"present": true,
"filename": "Hi_Louis_-_Scatman_John.mp3",
"extension": "mp3"
},
"textures": [
"36187c46ebffc0a52ce7f83efc50ad062939f423"
],
"entities": [
{
"type": "model",
"beat": -0.625,
"track": -1,
"width": 3.125,
"height": 1,
"datamodel": "special_textureEntity",
"texHash": "36187c46ebffc0a52ce7f83efc50ad062939f423"
},
{
"type": "model",
"beat": 0.0,
"track": 0,
"width": 1.875,
"height": 1,
"datamodel": "special_subtitleEntity",
"subtitle": "Ski-bop po-dee"
},
{
"type": "model",
"beat": 2.0,
"track": 0,
"width": 2.0,
"height": 1,
"datamodel": "spaceDanceEn_andpose1"
}
],
"trackers": {
"tempos": {
"trackers": [
{
"beat": 0.0,
"seconds": 0.0,
"bpm": 115.0,
"swingRatio": 50,
"swingDivision": 1.0
}
]
},
"musicVolumes": {
"trackers": [
{
"beat": 0.0,
"width": 0.0,
"volume": 100
}
]
}
},
"timeSignatures": [
{
"beat": 0,
"divisions": 4,
"measure": 1
}
]
}