The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.

sPEAKer
Now with QUEUE CONTROL! โ Some guy had it aboard. Does it still work?
Date uploaded | 2 days ago |
Version | 1.9.2 |
Download link | onlystar-sPEAKer-1.9.2.zip |
Downloads | 3722 |
Dependency string | onlystar-sPEAKer-1.9.2 |
This mod requires the following mods to function

README
Sophisticated Pulse-Eloquent Acoustic Kymatologic Eidolon Reverberator
๐ถ ...or just sPEAKer
This is sPEAKer, my first ever mod!
Unlike the bugle, sPEAKer is an independent audio source. You can just press play and enjoy your music. Drop it, toss it around, audio will just not stop!
sPEAKer at the PEAK.
The main feature of this mod is that it works as a true portable speaker. Instead of playing 2D music for everyone, it leverages spatial audio to make it part of the immersive experience of PEAK.
It won't stop playing if you drop it.
Additionally, it supports MP3 and WAV out-of-the-box on top of your regular OGG files.
You can also download mixtapes from the Thunderstore or put together your own and share with friends, or even upload them too!
๐ฎ Controls & Features
Primary playback uses your regular interaction buttons, whatever they are. Controller compatible.
-
Primary: Play/Pause toggle
-
Secondary: Next Song
-
Scroll: Volume Up/Down
The following controls are not meant for Controllers. For rebinding, see "Keybinds" section.
-
Shift + Secondary: Previous Song
-
Ctrl + Secondary: Toggle Shuffle
-
Alt + Secondary: Cycle Loop modes
-
P: Activate Drone Mode
-
Ctrl + P: Activate Drone Recall
-
O: Dance Emote (when Drone Mode is active)
-
U: Bring up sPEAKer UI (queue system)
-
Local Volume Control: Is available via Pause Menu:
This slider only affects your own playback.
Manual Installation
- Install BepInEx for PEAK
- Install required dependencies
- PEAKLib.Items
- PEAKLib.Core
- SoftDependencyFix
- MonoDetour_BepInEx_5
- MonoDetour
- Place the mod files in your BepInEx plugins folder
- Launch PEAK
NOTE: Not all dependencies go into /plugins
. If you have issues, use a mod manager before asking for support.
Adding Music
After launching PEAK, your main music folder will be created:
.../plugins/onlystar-sPEAKer Music
You can place audio files directly in it, or you can use mixtapes.
๐ Introducing: Mixtapes
A mixtape is simply a folder containing your collection of audio files.
Just create a new folder inside your main music folder (onlystar-sPEAKer Music
) and drop your songs in it. The name of the folder will be used as the mixtape's name by default.
Optionally, you can also include a mixtape.json
file inside your mixtape folder:
{
"name": "Undertale Bosses",
"author": "onlystar"
}
This takes priority over default naming, and will be shown in-game when a song from your mixtape starts playing.
Yes, it's "Mixtape Name - Song Name"
๐ง "Mixtapes" in Thunderstore
Mixtapes are really easy to share and manage. Since release, the available catalogue of mixtapes in the Thunderstore has grown to over 200 submissions! Thank you all for the support! I even discovered some bangers by regularly checking what's being uploaded.
But because Thunderstore is now plagued by mixtapes, there's a new filter for them:
Just in case you wanna list them all or filter them out of your browsing.
Bundling a mixtape for Thunderstore 
If you want to upload your own mixtape as a mod to share with your friends, just put an empty sPEAKer.json
file in the same folder as your mixtape folder
.
You can follow the instructions for Manual Packaging as described here.
Your package should include manifest.json
, README.md
, a /plugins
folder and (hopefully) a 256x256 icon.png
.
Your manifest.json
should list sPEAKer as its dependency:
{
"name": "Demo_Mixtape",
"author": "onlystar",
"version_number": "1.0.0",
"website_url": "",
"description": "I'm a short description!",
"dependencies": [
"onlystar-sPEAKer-1.9.0" // add this line
]
}
This way, you can point your friends to your mixtape and their mod manager will install sPEAKer along with it.
Think carefully about the "name". Once uploaded, you can't change it.
The plugins
folder in your package should look something like this:
plugins/
โโโ sPEAKer.json
โโโ my mixtape/
โโโ a true hero.ogg
โโโ omega flowey.mp3
โโโ ...
โโโ mixtape.json
sPEAKer.json
is the way to tell sPEAKer that your uploaded mod includes a mixtape.
Even though MP3 and WAV are supported, it is highly recommended that you use OGG format. It's the fastest to load, smallest in size and you lose negligible quality. You can use a tool like Convertio or, if you're up for using scripts, check out the Wiki tab for the script I use for mass converting MP3s into OGGs.
Once your package is ready, ZIP it and upload it to Thunderstore. Remember to select "Mixtapes" in the Categories field.
๐ก TIP: Don't delete your original package!
Updating your Thunderstore mixtape
If you wanna add songs to an already published mixtape, add your songs to the original (uncompressed) package and bump the "version_number" up in your manifest.json
. DON'T change the "name" field, as it will create a new mixtape instead of updating the existing.
{
"name": "Demo_Mixtape",
"author": "onlystar",
"version_number": "1.0.1", // previously "1.0.0"
"website_url": "",
"description": "",
"dependencies": [
"onlystar-sPEAKer-1.9.0"
]
}
ZIP it once again, and reupload it.
Disclaimer: Make sure you have permission to upload the audio files your mixtape contains to Thunderstore.
More Features!
๐ชฝ Featuring: Drone Mode
Instead of having a dedicated slot, you can make sPEAKer engage Drone mode and it will follow you around!
๐ Drop it, press P
and you will be followed anywhere you go.
๐ If you happen to lose it, use Ctrl + P
to make it come back directly to you.
๐บ It can also Dance!
sPEAKer features 9 different dance motions / emotes.
Press O
when Drone Mode is activated to strike a move!
๐ You're in Control
Take your session in however direction you like.
When holding or being followed by sPEAKer, you can press U
to bring up the UI.
You can reorder songs by drag and dropping, or directly select one to play from.
Configuration Options ๐ช๐ง๐จ
These are options you can change before starting your game.
You can find them in BepInEx/config/onlystar.sPEAKer.cfg
or via your mod manager.
Key | Category | Description | Default Value |
---|---|---|---|
ExternalAudioFolderPath | ๐พ Audio Loading | Folder path where sPEAKer will mainly load mixtapes and external audio from. It's recommended to leave unchanged. | "..\onlystar-sPEAKer Music" |
LoadDemoSong | ๐พ Audio Loading | Include a demo song in your track list. | true |
ExtendedFormatSupport | ๐พ Audio Loading | Enables loading of MP3 and WAV files. May impact performance. | true |
StartupLoadingIndicator | ๐พ Audio Loading | Shows a loading text during game start. | true |
ShowTrackDuration | ๐ Playback | Shows every song's current time and length. | true |
DisplayMixtapeAuthor | ๐ Playback | Displays mixtape author during mixtape playback. | true |
ShuffleOnStart | ๐ Playback | Start with Shuffle enabled by default. Saves you a toggle if you only want shuffled playback. | false |
TurnOnAndPlay | ๐ Playback | Make sPEAKer start playing immediately after turning it on. | false |
SoundEffectsEnabled | ๐ Playback | Enables JBL sound effects. | true |
UseSpatialAudio | ๐ Playback | Enables proximity-based audio. If false, playback will sound globally instead of coming from the sPEAKer. | true |
SpawnAtGameStart | ๐ป Spawning | Automatically spawn a sPEAKer around the crash site when a game starts. | true |
SpawnWithF4 | ๐ป Spawning | Allows the host to spawn a sPEAKer in their hands when pressing F4. Only one sPEAKer may exist at a time. |
true |
RecallEnabled | ๐ป Spawning | Enables recalling existing sPEAKer when pressing F4. Only works if SpawnWithF4 is also enabled. Also, a sPEAKer can only be recalled if it's in the ground (not in a slot). |
true |
DebugMode | ๐ Logging | Enables custom verbose logging. If you want to report a bug, please include your BepInEx/LogOutput.log ! |
false |
โจ๏ธ Keybinds
To change keybinds more easily, I recommend using ModConfig mod. However, given how BepInEx loads configurations, you'll still need to restart your game before keybind changes take effect, at least for now.
The following keybinds are currently configurable:
Key | Description | Default Value |
---|---|---|
DroneToggle | Drone Mode toggle. | P |
RecallCommand | Hold this while pressing DroneToggle key to make sPEAKer "recall" to you instead of looking for people nearby. | Ctrl (so default usage is Ctrl + P) |
DanceEmote | Makes sPEAKer dance when Drone Mode is active. | O |
SpawnKey | Key to spawn a sPEAKer if the corresponding spawning option is enabled. | F4 |
QueueUIKey | Opens Queue UI. | U |
More keybinds are coming in future updates.
๐๏ธ Technical Notes
- For the best experience, everyone in the room should have the same tracks and mixtapes.
- In the current version, the host owns the tracklist canon, which means everyone must play the host's catalogue.
- If you are missing a song your host has, don't worry! Every song is hashed by its contents on load. Playback will resume as soon as they start playing something you do have.
- Large files (4MB+) and mp3/wav files can cause significant lag spikes when reading them. Because of this, loading was placed as soon as game awakes, so the lag spike happens when game is loading and not during gameplay.
- Shuffle randomizes your list every time you toggle it on, so you might get repeated songs if you toggle it more than once.
- Be aware of
ExternalAudioFolderPath
when moving your game to another folder, as it is generated only the first time the mod loads. If you're having trouble, deleteconfig/onlystar.sPEAKer.cfg
and it will find the correct path again (albeit losing your configs, if you changed any), UNLESS you installed sPEAKer through a shared profile. - When sPEAKer is installed through a profile code, it carries over its configurations too. This is intended Thunderstore behaviour, and unfortunately it breaks
ExternalAudioFolderPath
as the path will be from the original profile's machine. Each time the profile is updated with new mods, the configs will sync again, making it pointless to correct the configured path for your local machine. In other words, you cannot change any of your local configs in shared profiles. - If sPEAKer detects it has been installed through a shared profile, folder reading/creation will fallback to
plugins/onlystar-sPEAKer Music
permanently for that profile. This does not affect downloaded mixtapes (which is most likely the main source for music in shared profiles anyway).
Coming up next... ๐ฎ
- [2.0.0] YouTube Radio
- A long break from modding
Created by onlystar - Bringing music to the PEAK experience!
CHANGELOG
Changelog
[1.9.2]
- Added a Help page to the UI. (Sections: Getting Started, Keybinds and Queue Usage)
- Made it far easier for myself to add new UIs. Up next: Live Settings.
[1.9.1]
- Added Reset button to Queue UI. It restores the queue to its original order. There's no "undo", so it requires a long-press to prevent accidental resets.
[1.9.0] UI UPDATE
- Added Queue UI! Press
U
to toggle. - See what's playing, what's played and what's next. Drag and Drop to reorder or Pick a song directly!
- Queue UI can be toggled by anyone who is holding or is currently being followed by sPEAKer.
- NEW CONFIG: QueueUIKey. Yeah this time the new feature comes with its keybind configurable right away lol. Default:
U
- NEW CONFIG: UseSpatialAudio. If DISABLED, playback will sound globally instead of coming from sPEAKer. Default:
true
- Fixed an issue where some mixtapes were not recognized as such given how they were packaged, causing metadata issues. The audio master was adjusted to account for different styles of packaging and should reliably read most if not all of existing mixtapes now.
[1.8.8]
- NEW CONFIG: SpawnKey keybind. Default:
F4
- NEW CONFIG: SoundEffectsEnabled. Default:
true
[1.8.7]
- NEW CONFIG: DroneToggle keybind. Default:
P
- NEW CONFIG: RecallCommand keybind. Default:
LeftControl
(used with DroneToggle key) - NEW CONFIG: DanceEmote keybind. Default:
O
- Updated sPEAKer Wiki.
- Actually improved README (last time I only wrote it in the Changelog but didn't do it lol).
[1.8.6]
- NEW: Packaged mixtapes will now show their existing icon.png as mixtape art.
- Laid the foundation for upcoming playlist feature.
- Improved README.
[1.8.5]
- Hashes are now cached for a slight audio loading optimization.
- Drone search should now start following as soon as someone is within range.
- Fixed an issue where all dance moves had a small chance to become unselectable by the random picker.
[1.8.4]
- Added sound effects when sPEAKer is searching someone to follow and when it finds them.
- Added Drone Recall with
Ctrl + P
. Command sPEAKer to start following you no matter the distance. - As the host, you can no longer steal sPEAKer with
F4
while it's following someone else. Grabbing it manually is still fair game. - Similarly, you can't use Drone Recall if it's following someone else.
- Optimized late player sync.
[1.8.3]
- Fixed an issue where sPEAKer would just refuse to load.
[1.8.2]
- Added 9 DANCE Moves! Press
O
when in Drone Mode. - Removed unintended minimal volume hidden setting. You can now throw sPEAKer very far away and actually enjoy silence and find inner peace.
- Changed how audio falloff curve feels. This is a manually crafted effect, so any feedback from any audiophiles out there in the wild is greatly appreaciated.
- HUGE REFACTOR for [REDACTED]
[1.8.1]
- Instead of binding to a single player forever, Drone Mode will now try to follow the nearest player in a radius every time the mode is engaged.
- This, in turn, disabled the ability to throw it far away and have it come back to you. Don't worry, it will come back as a Recall ability soonโข.
- Added an indicator to show exact Drone search radius.
- Fixed an issue where if Drone sPEAKer was following someone and they died, it would follow them to the afterlife.
- Improved custom logging system.
[1.8.0] DRONE UPDATE
- Added DRONE MODE! Drop the sPEAKer and press
P
. - Fixed mixtape author incorrectly displaying as unknown.
[1.7.1]
- Added Sound Effect when reaching max Volume
- Added Sound Effect when entering [REDACTED]
- Fixed UI state issues when entering [REDACTED]
[1.7.0]
- NEW: Loop modes! Toggle with
Alt + Secondary
- NEW: Previous song! Use with
Shift + Secondary
- Netcode now correctly broadcasts most changes to playback state
- Updated README (it's updated every patch but just in case you only read the changelog :P)
[1.6.0]
- NEW CONFIG: StartupLoadingIndicator, enabled by default, to show an audio loading indicator at game boot. It lasts as long as the initial lag spike does.
- NEW CONFIG: DisplayMixtapeAuthor, enabled by default, to show the mixtape author during playback.
- Fixed an issue where audio loading would break when sPEAKer had been installed through a Thunderstore profile code.
- Fixed an issue where sPEAKer would sometimes spawn below ground level at the Shore.
[1.5.0]
- Added mixtape author below stamina bar.
- Added indicator when songs and mixtapes are loading.
- Fixed issue where in-game font would sometimes not load.
- Changed song hashing method. This should fix song-syncing issues some people were still having, but will introduce more lag while songs are loading.
- Optimized audio loading, albeit unnoticeable given the previous point.
[1.4.0]
- Added Local Volume control to pause menu.
[1.3.1]
- Optimized netcode handling.
- Fixed state inconsistencies when getting back to the airport or main-menuing.
- Fixed next song not starting automatically when sPEAKer is pocketed (I refactored an entire class for this ๐).
[1.3.0]
- Added Track Duration (enabled by default).
- Added new configs: ShuffleOnStart, TurnOnAndPlay, ShowTrackDuration.
[1.2.1]
- Disabled unfinished feature.
[1.2.0]
- Added Shuffle.
- Added clarification to add sPEAKer as a dependency to uploaded mixtapes.
- Fixed an issue where downloaded mixtapes sometimes would not load for non-hosts.
- Fixed an issue where netcode would sometimes generate a duplicate photon ID.
- Fixed volume step being too aggressive when using a controller.
- Fixed some localization texts for Spanish, Korean and Japanese.
- Removed Herobrine.
[1.1.5]
- Many optimizations for upcoming 1.2.0
- Removed Herobrine.
[1.1.4]
- Now sPEAKer looks for music on its own folder too (onlystar-sPEAKer), just in case.
[1.1.3]
- Minor optimizations and code cleaning.
- Added instructions to update an existing Thunderstore mixtape in README.
[1.1.2]
- Bundle optimization for MESA update.
- Some groundwork for upcoming feature.
[1.1.1]
- Changed recalling with F4 to be enabled by default (host only).
- Fixed a desync when dropped while paused.
- Fixed files not loading if containing special characters.
[1.1.0]
- Added MP3 and WAV support.
- Removed ZIP format requirement for mixtapes.
- Updated README.
[1.0.0]
- Initial release, with mixtapes.