Skip to content
Quest Beat Saber song and mod loader and manager, running on the Quest itself.
JavaScript C# TypeScript HTML Java CSS
Branch: master
Clone or download
emulamer Merge pull request #63 from emulamer/bs12
Upgrade process, version tracking, etc. in place
Latest commit 09a009a Jul 27, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE Update issue templates Jul 19, 2019
.idea updated gitignore and removed cs changes Jun 23, 2019
BeatOn Upgrade process, version tracking, etc. in place Jul 28, 2019
BeatOnWrapperTV added wrapper apk to the repo Jul 5, 2019
InstallerHelper Upgrade process, version tracking, etc. in place Jul 28, 2019
InstallerHelperInterop Upgrade process, version tracking, etc. in place Jul 28, 2019
QuestomAssets @ 115347b Upgrade process, version tracking, etc. in place Jul 28, 2019
SyncSaberService @ 9a8c3b4 sync working, several bugs fixed, URL entry Jul 23, 2019
androidxmldotnet @ 0b3b542 Upgrade process, version tracking, etc. in place Jul 28, 2019
beatsaber-hook @ 4b1f6af cancel download, fix beastsaber sync count Jul 21, 2019
frontend Upgrade process, version tracking, etc. in place Jul 28, 2019
.gitignore added wrapper apk to the repo Jul 5, 2019
.gitmodules Upgrade process, version tracking, etc. in place Jul 28, 2019
BeatOn.ai Fixed several things, reworked downloads. Mods maybe working now. Jun 29, 2019
BeatOn.sln Syncing basics in place. Thanks Zingabopp! Jul 17, 2019
BeatOnSquare.png Fixed several things, reworked downloads. Mods maybe working now. Jun 29, 2019
BeatOn_Dark.ai Fixed several things, reworked downloads. Mods maybe working now. Jun 29, 2019
ExtraDiffsIcon.png wip Jul 10, 2019
LICENSE Initial code commit Jun 15, 2019
Lightshow.png wip Jul 10, 2019
Quest 2019-07-10 19-53-15.mp4 Bunch of bug fixes reported in the field, added color change. Jul 13, 2019
README.md Not the best code I've written architecturally, but it was quick to g… Jun 28, 2019
bskey fixed base path issue in index.html breaking sub routes Jul 1, 2019

README.md

Beat On!

Quest Beat Saber song and mod loader and manager, running on the Quest itself.

General idea

From a workflow standpoint, I hope to be able to accomplish something like this:

  • Using SideQuest (or manually, if user is a barbarian), sideload the Beat On app to the quest from a computer.

  • Opening Beat On for the first time:

    1. You'll see a prompt something to the effect of "It looks like Beat Saber is installed, but it hasn't been unlocked for mods yet. Do you want to get your beat on?"

    2. Saying yes, you'll get some kind of screen telling you what to expect up front, and a "go do it" button

    3. You'll get a progress/status bar, and eventually you'll be prompted to uninstall Beat Saber

    4. After uninstalling, progress/status will continue until you get another prompt to install the modded Beat Saber

    5. After installing, it'll detect that it's ready for mods

  • After it's prepped for mods, Beat On will open to some sort of dashboard containing the things it can do:

    • Custom songs

    • Manage custom playlists

    • Custom sabers

    • Other settings? (Custom colors, text overrides, etc.)

    • ...anything else found to be moddable one way or the other, maybe a "other mods" for things that can be resource patched in things like custom sabers, custom songs, colors, text, etc.

    • Hopefully leaving it up to somebody with good UI sense how this should be organized

    • Be able to download songs from bsaber or somewhere and add them to playlists in Beat Saber

    • Be able download other mods from wherever and add them to Beat Saber

    • Have various recovery options in case things go wrong

      • If mod install is interrupted

      • Repair if assets become corrupted somehow

      • Detect and re-mod if Beat Saber has upgraded, and Beat On can handle the new version without an update (or maybe some way of handling version definitions that can be downloaded on the fly when only parameters need changing and not code?)

    • TBD...

Credits and Contributions

Libraries Used

Building BeatOn

  1. Make sure you have these things:
  • Visual Studio (I used VS 2019)

  • Xamarin stuff installed for Visual Studio

  • JDK (I used OpenJDK 8)

  • Android SDK (for 7.1 which I think is API 25, or maybe 9.0 which is 29. I'm not sure which it's actually using.)

  • Android NDK (I used android-ndk-r15c-windows-x86)

  • For building the front end, Node.js, npm and angular-cli

  • The JARs for the java projects are included, but if you want to build the Java helper lib it's an intellij project.

  1. git clone https://github.com/emulamer/BeatOn

  2. Do a git submodule update --init --recursive

  3. Open BeatOn.sln and build it.

Building the front end

(haven't tested all of these steps yet)

  1. go to the frontend directory

  2. npm install

  3. ng build --prod (this will dump the build output into the BeatOn project's assets\www folder.

  4. The output filenames change with a build, so you'll need to open the BeatOn project, remove the old files and add the new ones, then rebuild BeatOn

Debugging/developing the front end

  1. Run BeatOn on the Quest, either debug through VS or start the app on the quest. Make sure the quest doesn't go to sleep or the app will pause.

  2. With the app running on the quest, edit the appSettings.ts file in the front end and change the "DEV_API_ENDPOINT" variable to "http://:50000" and set DEV_WS_ENDPOINT to null (it'll be pulled from the web server automatically)

  3. run ng serve and the page should be available at http://localhost:4200

  4. I think I don't have things configured right for the built in server, sub-routes don't load, so after a page refresh you'll have to go back to the root URL.

Testing in an emulator

Some parts of Beat On will only work on a Quest, e.g. the initial setup/mod process. The post-setup workflows will mostly work on the emulator with the assets modification, web host, etc. To set up your emulator:

  • You'll need the asset files from the /assets/bin/Data/ folder out of the extracted Beat Saber APK from the quest (version 1.1.0 at the moment)

  • Pick an android TV device profile, I've tested with the 720p one. I also bumped the ram to 2GB, internal storage to a GB and the SD card size to 4GB just to avoid running out of space.

  • To save yourself headache, make sure your xamarin/emulator stuff is using the same version of ADB that you're running from the command line or they'll keep killing each other.

  • After the emulator is up, make an /sdcard/BeatOnData folder, and push the assets from the APK out of /assets/bin/Data/** to /sdcard/BeatOnData/BeatSaberAssets/

This is what my batch file for resetting the emulator looks like (kills any processes, clears data, uninstalls the app, pushes up fresh data):

adb shell am force-stop com.emulamer.beaton
adb shell am force-stop com.emulamer.beatonservice
adb -s emulator-5554 shell rm -rf /sdcard/BeatOnData
adb -s emulator-5554 shell mkdir /sdcard/BeatOnData
adb -s emulator-5554 shell mkdir /sdcard/BeatOnData/CustomSongs
adb -s emulator-5554 push <path to extracted APK>\assets\bin\Data /sdcard/BeatOnData/BeatSaberAssets
adb uninstall com.emulamer.beaton
  • Change the solution configuration in visual studio to "Emulator Debug". This skips most of the "is the mod installed" checks and loads directly into the main UI.

  • If you want to debug the front end from the dev machine:

    • Since the emulators don't allow direct network connections, you need to have ADB forward ports from your local machine, e.g.:
adb forward tcp:51000 tcp:50000
adb forward tcp:51001 tcp:50001
  • Edit the appSettings.ts file to point towards the forwarded ports, e.g. set the DEV_API_ENDPOINT variable to "http://localhost:51000" and set DEV_WS_ENDPOINT to "ws://localhost:51001"
You can’t perform that action at this time.