A VR rhythm workout game built with Godot Engine using OpenXR. Play Beat Saber and PowerBeatsVR maps on Quest, SteamVR, and other OpenXR runtimes.
Features
- VR gameplay using OpenXR (Quest native, SteamVR, and other runtimes)
- Workout This game is intended to make you workouy, mechanics based on PowerBeatsVR ones. You hit balls, and not slash them like in beatsaber.
- Beat Saber compatibility - plays custom maps from BeatSaver
- PowerBeatsVR map format - converts and plays PowerBeatsVR levels
- Offline-first - no internet required after install
- Pre-shipped songs - Unity and Monody included in official builds
- Loads PowerBeatsVR playlists - Supports loading of a playlist in the format used in PowerBeatsVR.
Download
Official builds are published to GitHub Releases.
Windows
- Download
Windows.zipfrom the latest release - Extract to a folder
- Run
TempoVR.exe
Linux
- Download
Linux.zipfrom the latest release - Extract and run the executable
- Note: Copy
libopenxr_loader.so.1from your distribution to the game folder if needed
Meta Quest
- Download
Android-Quest.zipfrom the latest release - Extract the APK
- Sideload via ADB:
adb install -r TempoVR.apk(or use Quest's file manager)
Pre-shipped Songs
Official builds include the following songs (ExpertPlus difficulty):
| Song | Artist | Mapper | BeatSaver |
|---|---|---|---|
| Unity | TheFatRat | Timeweaver | a908 |
| Monody (ft. Laura Brehm) | TheFatRat | Timeweaver | a907 |
You can add more songs by downloading maps from BeatSaver and placing them in the Levels folder next to the executable.
Creating a Release
To publish a new version:
git tag v1.0.0 git push origin v1.0.0
CI will build for all platforms and attach the artifacts to the GitHub Release.
Community
Join our Discord for support and discussion.
Developer Setup
Prerequisites
- Godot 4.6+ (standard version, not .NET)
- Python 3 (for level patching script)
- curl, unzip (for dependency download)
Quick Start
-
Clone the repository:
git clone https://github.com/guysoft/TempoVRWorkout.git cd TempoVRWorkout -
Download dependencies and pre-shipped levels:
-
Open the project in Godot:
godot --path src --editor
-
Run
GameManager.tscnto play
Non-VR Development Mode
To run without a VR headset for debugging:
- Open
src/scripts/GameVariables.gd - Set
ENABLE_VRtofalse
Building
Automated Builds (CI/CD)
The project uses GitHub Actions to automatically build for:
- Windows (release)
- Linux (release)
- Android Quest (debug APK)
Builds are triggered on:
- Push to
main,develop,ci-workflow, orworkoutbranches - Pull requests to
mainorworkout - Git tags starting with
v(creates a GitHub Release with all platform artifacts)
See .github/workflows/build-on-push.yml for details.
Manual Export
- Open the project in Godot
- Go to Project > Export
- Select a preset (Windows, Linux, or Android Quest)
- Click Export Project
For Android Quest builds, you need:
- JDK 17
- Android SDK with build-tools 34.0.0 and NDK 23.2.8568313
Known Issues
Linux
For Linux builds, copy libopenxr_loader.so.1 from your distribution to the game folder.
Credits
Developers:
- Rainer Weston
- Guy Sheffer
Pre-shipped Music:
- TheFatRat - Unity, Monody (mapped by Timeweaver)
- jennissary (joey): BeatSaver #19614