A Beat Saber mod to automatically start/stop recording in OBS when you play a song.
- OBS
- Requires the OBS-Websocket OBS plugin.
- OBS v28 requires the OBS-Websocket 4.9.1-compat plugin
- OBS v27 requires the OBS-Websocket 4.9.1 plugin
- You should have something like this in OBS:
- If OBS is running on the same PC as Beat Saber, you would use
ws://127.0.0.1:4444
(default) as theServerAddress
inBeat Saber\UserData\OBSControl.json
.
- Requires the OBS-Websocket OBS plugin.
- Beat Saber
- Extract the release zip from the Releases page to your Beat Saber folder.
OBSControl.dll
should end up in yourBeat Saber\Plugins
folder. - You should see OBSControl in the Mod Settings menu if you installed it correctly.
- Extract the release zip from the Releases page to your Beat Saber folder.
Settings can be found in-game in the Mod Settings > OBSControl
menu.
- Enabled: Check to have OBSControl automatically start/stop recording.
- ServerAddress: The address of your OBS websocket server (in the form of
ws://ip:port
). This doesn't usually need to be changed. - ServerPassword: If you set a password in OBS Websocket, enter it here.
- LevelStartDelay: Amount of time in seconds to delay the start of the level. When the Play button is clicked, OBS will start recording for this amount of time before the level actually starts.
- RecordingStopDelay: Amount of time in seconds to wait after the end of a level before stopping the recording or switching to the End Scene.
- Scene Settings
- GameSceneName: Set the name of the OBS scene you want to use for gameplay footage, leave blank to disable scene switching.
- StartSceneName: Name of the OBS scene to use as an intro for your videos. You must have a valid GameSceneName set to use this option.
- StartSceneDuration: Amount of time in seconds to show the Start Scene before switching to the Game Scene.
- EndSceneName: Name of the OBS scene to use as an outro for your videos. This scene is shown after RecordingStopDelay has finished. You must have a valid GameSceneName set to use this option.
- EndSceneDuration: Amount of time in seconds to show the End Scene before stopping the recording.
- Advanced (Available only by editing
OBSControl.json
in yourBeat Saber\UserData
folder)- RecordingFileFormat: Defines how the file will be renamed after the recording stops.
- Substitution characters are prefixed with
?
- Optional groups are bounded by
<
>
- The group is only shown if one or more of the substitutions inside the group are not empty strings.
- Example: The format
VideoFile<_I_Got_A_?F>
will beVideoFile_I_Got_A_FC
if you get a full combo orVideoFile
if you don't.
- Example: The format
- The group is only shown if one or more of the substitutions inside the group are not empty strings.
- Optional parameters: Some substitutions can have additional parameters inside { }. For example, the format
?@{yyyyMMddHHmm}
would rename the file to202005050807.mkv
on 05/05/2020 8:07 AM.
- Substitution characters are prefixed with
- RecordingFileFormat: Defines how the file will be renamed after the recording stops.
Song Data:
Key | Substitution | Parameter(s) | Notes |
---|---|---|---|
B | BeatsPerMinute | BPM to two decimal places, ignoring trailing zeroes. | |
D | DifficultyName | Full name of the difficulty. | |
d | DifficultyShortName | Short name of the difficulty (i.e E+ instead of ExpertPlus ). |
|
A | LevelAuthorName | (int)Max Length | Name of the mapper. Example: ?A{10} to use up to 10 characters of the mapper name. |
a | SongAuthorName | (int)Max Length | Name of the song artist. Example: ?a{10} to use up to 10 characters of the artist name. |
@ | CurrentTime | (string)DateTimeFormat | Date/Time of the recording when stopped. Format Information, default is yyyyMMddHHmm |
I | LevelId | LevelId of the song. | |
J | NoteJumpSpeed | NJS to two decimal places, ignoring trailing 0s. | |
L | SongDurationLabeled | Duration of the song in minutes and seconds (i.e. 3m.25s for 3 min 25 sec). |
|
l | SongDurationNoLabels | Duration of the song in minutes and seconds with no labels (i.e. 3.25 for 3 min 25 sec). |
|
N | SongName | (int)Max Length | Name of the song. Example: ?N{10} to use up to 10 characters of the song name. |
n | SongSubName | (int)Max length | Subname of the song. Example: ?n{10} to use up to 10 characters of the song subname. |
Completion Results Data:
Key | Substitution | Parameter(s) | Notes |
---|---|---|---|
1 | FirstPlay | 1st if you haven't played the song according to Beat Saber's data. |
|
b | BadCutsCount | Number of bad cuts. | |
T | EndSongTimeLabeled | How far into the song you got in minutes and seconds (i.e. 3m.25s for 3 min 25 sec). |
|
t | EndSongTimeNoLabels | How far into the song you got in minutes and seconds with no labels (i.e. 3.25 for 3 min 25 sec). |
|
F | FullCombo | FC if you full combo'd the song. |
|
M | Modifiers | Enabled song modifiers, separated by _ (i.e. DA_FS for Disappearing Arrows and Faster Song). |
|
m | MissedCount | Number of notes missed. | |
G | GoodCutsCount | Number of good cuts. | |
E | LevelEndType | Has a value for any level end type (Cleared /Quit /Failed /Unknown ). |
|
e | LevelIncompleteType | Only has a value if the level was incomplete (Quit /Failed /Unknown ). |
|
C | MaxCombo | Max combo for the song. | |
S | RawScore | Score before any modifiers were applied. | |
s | ModifiedScore | Score after modifiers (your actual score). | |
R | Rank | Score rank (SSS /SS /S /A /B /C /D /E ). |
|
% | ScorePercent | Score percent to two decimal places. |