Package: beatsaver-manager
Beat Saber Custom Level and Playlist ManagerCommand Line Interface to install, remove and update custom Beat Saber levels
using theBeatSaverAPI.InstallationInstall via pip like any other Python package:pip install beatsaver-managerAlternatively use pipxpipx install beatsaver-managerCommand Line Interface (CLI)bsdl [-h] [--beatsaber <dir>] [--log-level <level>] <command> ...The command line interface provides the main entry pointbsdl. It has two
arguments that can be specified. They are also available for all other commands
the application provides.The--beatsaberargument specifies the installation directory of the Beat
Saber game, e.g.: "C:\Program Files (x86)\Steam\steamapps\common\Beat Saber"If the argument isn't set the application tries to read the value from the
environment variableBEATSABER. If neither the environment variable nor the
command line argument are set running the application will result in an error.ConfigurationTo avoid having to always specify the Beat Saber installation directory when
calling the application it is advisable to set the environment variable$BEATSABERto contain the path to the Beat Saber installation.However, the--beatsaberargument takes precedence over the value in the
environment variable. If the argument is set, the value from the environment
variable is not used. This makes it easy to manage multiple Beat Saber
installations (e.g. Steam and Oculus).The following commands can be used to set that environment variable to the
given example location value. To use the command for a different path replace
the filepath part with the one you want. Make sure the path is surrounded by
quotation marks " ". On Windows a correctly formatted path to a folder can be
copied by holding Shift while right-clicking a folder and selecting the option
"Copy as Path".Set Steam DirectoryExample Location:C:\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\CustomLevels[System.Environment]::SetEnvironmentVariable("BEATSABER_TEST", "C:\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\CustomLevels", [System.EnvironmentVariableTarget]::User)Set Oculus DirectoryExample Location:C:\Program Files\Oculus\Software\Software\hyperbolic-magnetism-beat-saber\Beat Saber_Data\CustomLevels[System.Environment]::SetEnvironmentVariable("BEATSABER", "C:\Program Files\Oculus\Software\Software\hyperbolic-magnetism-beat-saber\Beat Saber_Data\CustomLevels", [System.EnvironmentVariableTarget]::User)Managing Playlistsusage: bsdl bpl [-h] <command> ...

positional arguments:
  <command>
    install   install playlist and download missing songs
              (use '-h' option for details)
    list      list all locally installed playlists
              (use '-h' option for details)
    rm        remove a playlist and all its unique songs
              (use '-h' option for details)
    upgrade   install newer version of all outdated local playlists
              (use '-h' option for details)
    sync      list all installed custom levels not in a playlist
              (behaves like 'lvl sync') (use '-h' option for details)Installing Playlistsbsdl bpl install [-h] [--keys] [--files] [-f] playlist [playlist ...]This command installs one or more playlists which can be referenced by either
their BeatSaver key, the full BeatSaver URL or a path to an already downloaded
bplist file from Beat Saver.During installation all songs in that playlist that are not already installed
are downloaded and installed from Beat Saver.If a referenced playlist is already installed this specific playlist is skipped
unless the-f, --forceargument is set. Be aware that this argument applies
to ALL playlists that are referenced.Install a playlist via URLbsdl bpl install https://beatsaver.com/playlists/1710The above command will install the playlistRammsteinand
download all its songs that aren't already installed. The Beat Saber
installation directory is read from the environment variable. If it isn't set
the application will not run. If the playlist is already installed it won't be
downloaded again.Install a playlist via BeatSaver Keybsdl --beatsaber "C:\Beat Saber" bpl install --keys 2218The above command will install the playlistCyberpunk 2077and download all its songs that aren't already installed. The Beat Saber
installation directory is given as "C:\Beat Saber". If that directory doesn't
exist or is write-protected the application will not run. If the playlist is
already installed it won't be downloaded again.Install a playlist via local filebsdl bpl install --files "~/Downloads/BeatSaver - Sabaton.bplist"Assume you have downloaded the playlistSabatonto the default
Windows Downloads directory without changing the filename. The above command
will install the playlist  and download all its songs that aren't already
installed. The Beat Saber installation directory is read from the environment
variable. If it isn't set the application will not run. If one of the files
does not contain valid BeatSaver Playlist data the playlist is skipped. If
the playlist is already installed it won't be downloaded again.Forcefully install a playlist that is already installedbsdl bpl install -f https://beatsaver.com/playlists/1710bsdl bpl install --force https://beatsaver.com/playlists/1710Both above commands are equivalent and behave exactly the same as the one
described in Example 1. The only difference being that the playlist and all
songs not already installed are always downloaded overwriting any potential
existing playlist file.Listing Installed Playlistsbsdl bpl list [-h] [--outdated]Display all installed playlistsbsdl bpl listThe above command will display a table containing the title and Beat Saver key
of all installed playlists. The Beat Saber installation directory is read from
the environment variable. If it isn't set the application will not run. If no
levels are installed nothing is displayed unless the log is set to debug level.Display all installed playlists and check if they're outdatedbsdl bpl list --outdatedThe above command behaves like the one in Example 1 but every playlist is
compared to its corresponding version on BeatSaver. A third column is added to
the table which will contain an "x" if the versions are different. This means
the application considers it to be outdated andupgradable.Removing Installed Playlistsbsdl bpl rm [-h] [--keep-songs] [--files] playlist [playlist ...]This command removes one or more installed playlists which can be referenced by
either their BeatSaver key or the path to the bplist file. By default this also
removes all songs of a playlist unless that song is part of another playlist.
If the option--keep-songsis set no songs will be removed. Be aware that
this option applies to ALL referenced playlists.Remove a playlist via keybsdl bpl rm 1710The above command will remove the playlistRammsteinand all
songs that are unique to it. The Beat Saber installation directory is read from
the environment variable. If it isn't set the application will not run.Remove a playlist via filepathbsdl bpl rm --files "C:\Program Files (x86)\Steam\steamapps\common\Beat Saber\Playlists\beatsaver-2218.bplist"The above command will remove the playlistCyberpunk 2077and
all songs that are unique to it. The Beat Saber installation directory is read
from the environment variable. If it isn't set the application will not run.Remove a playlist keeping all the songsbsdl bpl rm --keep-songs 1710The above command will remove the playlistRammsteinbut will
not remove its songs. The Beat Saber installation directory is read from the
environment variable. If it isn't set the application will not run.Synchronizing Playlists and Levelsbsdl bpl sync [-h] [--remove]This command will display all installed levels that are not part in a playlist.
If the option--removeis set, all of those levels will be removed.This command behaves exactly likebsdl lvl syncList all songs that aren't in a playlistbsdl bpl syncThe above command will log all installed levels that aren't referenced as a
song in any installed playlist. The Beat Saber installation directory is read
from the environment variable. If it isn't set the application will not run.List all songs that aren't in a playlist and delete thembsdl bpl sync --removeThe above command will log and remove all installed levels that aren't
referenced as a song in any installed playlist. The Beat Saber installation
directory is read from the environment variable. If it isn't set the
application will not run.Upgrading Installed Playlistsbsdl bpl upgrade [-h] [--remove-songs] [--bpl <key> [<key> ...]]This command determines all installed playlists and checks whether there is a
difference between the installed version and the one found on BeatSaver. If the--remove-songsoption is set . Using the--bploption
makes it possible to reference installed playlists by their BeatSaver key. If
that option is checked only the referenced playlists are upgraded.Upgrade a specific playlistbsdl bpl upgrade --bpl 1072The above command will check if there is a difference between the installed
version of the playlistSabatonand the one found on BeatSaver.
If the playlist is not installed nothing is done. The Beat Saber installation
directory is read from the environment variable. If it isn't set the
application will not run.Upgrade all outdated playlistsbsdl bpl upgradeThe above command will determine all installed playlists and check whether
there is a difference between the installed version and the one found on
BeatSaver. The Beat Saber installation directory is read from the environment
variable. If it isn't set the application will not run.Upgrade all outdated playlists and remove their songsbsdl bpl upgrade --remove-songsThe above command will determine all installed playlists and check whether
there is a difference between the installed version and the one found on
BeatSaver. All songs that are no longer in the playlist are removed unless they
are part of a another playlist. The Beat Saber installation directory is read
from the environment variable. If it isn't set the application will not run.Managing Custom Levelsusage: bsdl lvl [-h] <command> ...

positional arguments:
  <command>
    install   install a custom level locally
              (use '-h' option for details)
    list      list all installed custom levels
              (use '-h' option for details)
    rm        remove a custom level not in a playlist
              (use '-h' option for details)
    sync      list all installed custom levels not in a playlist
              (behaves like 'bpl sync') (use '-h' option for details)

options:
  -h, --help  show this help message and exit

--log-level argument defaults to 'info' and can also be set with
the environment variable $BSDL_LOG_LEVEL

--beatsaber argument defaults to environment variable $BEATSABER
If the variable is not set, the argument MUST be providedInstalling Custom Levelsbsdl lvl install [-h] [--keys] [-f] level [level ...]This command installs one or more levels which can be referenced by either
their BeatSaver key or the full BeatSaver URL.If a referenced level is already installed this specific playlist is skipped
unless the-f, --forceargument is set. Be aware that this argument applies
to ALL levels that are referenced.Install a Level via URLbsdl lvl install https://beatsaver.com/maps/7707The above command will install the levelLudwig Göransson - The Mandalorian Theme. If the level is already
installed it won't be downloaded again. The Beat Saber installation directory
is read from the environment variable. If it isn't set the application will not
run.Install a Level via BeatSaver Keybsdl lvl install --keys 5257The above command will install the levelBonfire - Knife Party.
If the level is already installed it won't be downloaded again. The Beat Saber
installation directory is read from the environment variable. If it isn't set
the application will not run.Forcefully install a level that is already installedbsdl lvl install -f https://beatsaver.com/maps/7707bsdl lvl install --force https://beatsaver.com/maps/7707The above commands are equivalent and behave like the one in Example 1. The
only difference being that the level is always downloaded overwriting any
potential existing version.Listing Installed Levelsbsdl lvl list [-h] [--check-playlists]Display all installed levelsbsdl lvl listThe above command will display a table containing the title and Beat Saver key
of all installed levels. The Beat Saber installation directory is read from the
environment variable. If it isn't set the application will not run. If no
levels are installed nothing is displayed unless the log is set to debug level.Display all installed levels and their playlist(s)bsdl lvl list --check-playlistsThe above command behaves like the one in Example 1 but a third column
containing the names of playlists that contain the song is added to the table.Removing Installed Levelsbsdl lvl rm [-h] [-f] [--files] level [level ...]This command removes one or more installed levels which can be referenced by
either their BeatSaver key or the path to the directory that contains the level
data. If a level is referenced as a song in any installed playlist the removal
is skipped unless the-f, --forceoption is set. Be aware that this option
applies to ALL referenced levels. A referenced level that is not installed is
also skipped.Remove a level via its BeatSaver keybsdl lvl rm 7707The above command will remove the levelLudwig Göransson - The Mandalorian Themeif it is installed and
not part of any playlist. The Beat Saber installation directory is read from
the environment variable. If it isn't set the application will not run.Remove a level via its directory pathbsdl lvl rm "C:\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\CustomLevels\5257 (Bonfire - Funrankable)"The above command will remove the levelBonfire - Knife Partyif
it is installed and not part of any playlist. The Beat Saber installation
directory is read from the environment variable. If it isn't set the
application will not run.Forcefully remove a level ignoring whether it's in a playlistbsdl lvl rm -f 7707bsdl lvl rm --force 7707The above commands are equivalent and behave like the one in Example 1. The
only difference being that the level is removed even if it is in a playlist.Synchronizing Levels and Playlistsbsdl lvl sync [-h] [--remove]This command will display all installed levels that are not part in a playlist.
If the option--removeis set, all of those levels will be removed.This command behaves exactly likebsdl bpl syncList all songs that aren't in a playlistbsdl lvl syncThe above command will log all installed levels that aren't referenced as a
song in any installed playlist. The Beat Saber installation directory is read
from the environment variable. If it isn't set the application will not run.List all songs that aren't in a playlist and delete thembsdl lvl sync --removeThe above command will log and remove all installed levels that aren't
referenced as a song in any installed playlist. The Beat Saber installation
directory is read from the environment variable. If it isn't set the
application will not run.Future ImprovementsSupport for BeatSaver One-Click installation.Encountered a Bug?Feel free toopen an issueif you encountered bugs or have other
ideas that aren't yet listed in thebacklog.