sPEAKer
Now in the AIRPORT! โ Some guy had it aboard. Does it still work?
| Last updated | 4 days ago |
| Total downloads | 229640 |
| Total rating | 23 |
| Categories | Mods Audio Items All Clients |
| Dependency string | onlystar-sPEAKer-2.1.1 |
| Dependants | 499 other packages depend on this package |
This mod requires the following mods to function
README
Sophisticated Pulse-Eloquent Acoustic Kymatologic Eidolon Reverberator
๐ถ ...or just sPEAKer
This is sPEAKer, the most feature-packed music player in PEAK.
Unlike the bugle, sPEAKer is an independent audio source. Simply 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.
๐ธ Loading Songs
When it comes to loading songs, you have two solid options.
The first is to use Mixtapes, the favorite format among users of this mod. Thunderstore has plenty to pick and choose from already. There are MANY different styles out there, even some original music from independent artists! Either way, you always have the option to make your own mix and upload it to Thunderstore. Playback is instantaneous and perfectly synced. This is the highest quality option.
The second is to use YouTube Radio, the brand new mode that lets you input a song and get infinite recommendations! Literally pick a song and let the vibe carry itself. Or if you prefer, put together a YouTube playlist and input that instead. Sync is entirely host-driven, so clients may start songs a little late. This is the least setup option.
Whatever you choose, sPEAKer has your back.
๐ฎ 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, but they might work. For rebinding, see "Keybinds" section.
-
Shift + Secondary: Previous Song
-
Ctrl + Secondary: Toggle Shuffle
-
Alt + Secondary: Cycle Loop modes
-
Y: Activate YouTube Radio / Open YouTube Input
-
Ctrl + Y: Go back to Mixtape playback (from YouTube Radio)
-
P: Activate Drone Mode
-
Ctrl + P: Activate Drone Recall
-
O: Dance Emote (when Drone Mode is active)
-
U: Bring up sPEAKer UI (queue system, mixtape exclusive)
-
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
- ytModule
- 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 default music folder will be created:
.../plugins/onlystar-sPEAKer Music
This is intended for local playback. To listen in with your friends, you should use mixtapes.
๐ Introducing: Mixtapes
A mixtape is simply a folder containing your collection of audio files.
To create one, start by creating a new folder inside your default 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 allows you to sign your Mixtape with your name.
The mixtape name 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 around 500 SUBMISSIONS!! Thank you all for enjoying sPEAKer!
There are SO MANY that there's even an exclusive filter for them:

Just in case you wanna list them all or filter them out of your browsing. A heads up tho: if you're browsing on Thunderstore's webpage, all mixtapes will be under "Resource Packs" instead of "Mods".
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 refer to the general instructions for Manual Packaging as described here.
There's also an alternative explanation on how to create mixtapes here.
As a minimum, your package should include a manifest.json, a README.md, a /plugins folder and (hopefully) a 256x256 icon.png.
manifest.json is formatted as follows, and 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-2.0.0" // remember to 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.
plugins/ folder is where your songs are. It should follow a structure like this:
plugins/
โโโ sPEAKer.json // <-- this file is empty!
โโโ 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, otherwise it won't find it.
Important Note: 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 MP3 into OGG.
At this point, you should have everything to put together your package, like so:
some_folder/
โโ manifest.json
โโ README.md
โโ icon.png
โโ plugins/ <-- the folder from before!!
Your next step is to put these files inside a ZIP. This does NOT MEAN to ZIP the containing folder (like "some_folder" in this example), it should only be the contents. In other words, when opening your ZIP you should directly see the manifest.json, README.md, icon.png and plugins/ folder inside.
Once your package is ready, upload it to Thunderstore.
You should only select "Mixtapes" in the Categories field.
๐ก Don't delete the files you created your package with! (manifest, README, etc)
๐ It's important for the next section
Updating your Thunderstore mixtape
If you wanna add songs to an already published mixtape, add your songs to the original (uncompressed) plugins/ folder and bump the "version_number" up that's inside your manifest.json. DON'T change the "name" field, otherwise Thunderstore will create a new mod 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-2.0.0"
]
}
ZIP it once again and reupload it.
You should only select "Mixtapes" in the Categories field.
Disclaimer: Make sure you have permission to upload the audio files your mixtape contains to Thunderstore.
YouTube Radio
This has been requested endless times, and it's finally arrived!

Here's how to get it started:
- After turning sPEAKer on, switch to YouTube Radio using
Y. - A small window will appear. You must enter a YouTube link into it and press Enter.
It is autoplay from here! A queue of songs will be filled with endless recommendations based on the song you entered. The recommendations are made to be quite aggressive in their "likeness", so whatever song you pick will become the vibe.
๐พ We have playlists at home
While on YouTube Radio, whoever is controlling sPEAKer can press Y to bring the link window up again. Here you can enter a new song to reset the radio from, meaning the queue will adapt to the new song you pick.
As an alternative to this, Playlist URLs are supported too!
If you enter the URL to a YouTube playlist, you skip the recommendations system altogether and the queue will fill with your playlist instead. Playlist support includes albums from YouTube Music, as they are treated as playlists as well.

You don't need to clean URLs either, just copy and paste.
https://www.youtube.com/watch?v=s1ATTIQrmIQ&list=RDAMVMs1ATTIQrmIQ
https://music.youtube.com/playlist?list=OLAK5uy_kITj3Vy7-mmbGgBqfGT2RpY9zQ8aLg9-I
https://youtu.be/_ulQaM9c0vA?si=PTx_SxT8Jbjg2Oij
Hopefully this makes up for the lack of a proper manual queue :p
๐ Switch it up
While on YouTube Radio, if you wanna go back to your mixtapes, you can do so with Ctrl + Y.
This will take you back exactly where you left your mixtape playing, so you always have a backup vibe just in case. Keep in mind however, YouTube Radio does not save state yet. When you enter YouTube mode, you'll have to enter a URL again.
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.
Note: This feature is a Mixtapes exclusive, for now.
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 |
| FastLoad | ๐พ Audio Loading | Makes sPEAKer load songs during gameplay instead of at 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 |
| RenderVisualizers | ๐ Playback | Renders visualizers when sPEAKer plays music in the airport. | true |
| SpawnAtAirport | ๐ป Spawning | Automatically spawn sPEAKer at the airport. | true |
| SpawnAtGameStart | ๐ป Spawning | Automatically spawn sPEAKer around the crash site when a game starts. | true |
| SpawnWithF4 | ๐ป Spawning | Allows the host to spawn 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, 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! |
true |
โจ๏ธ Keybinds
To change keybinds more easily, I recommend using ModConfig.
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 |
| YouTubeKey | Enter Youtube Radio mode. Hold Ctrl and this key to exit. | Y |
| SpawnKey | Key to spawn sPEAKer if the corresponding spawning option is enabled. | F4 |
| QueueUIKey | Opens Queue UI. | U |
Keybinds are released regularly alongside new features.
๏ธTechnical Notes

Mixtape Playback
- For the best experience, everyone in the room should have the same tracks and mixtapes.
- The host always owns the tracklist canon, which means everyone must play the host's catalogue regardless if you have more music locally.
- If you're missing a song your host has, you'll hear white noise instead. Songs are content-hashed on load, so playback will resume when the host plays something you do have.
- Large files (4MB+) and MP3/WAV files cause significant lag spikes during loading. OGG is strongly recommended.
- Shuffle randomizes your list every time you toggle it on, so you might get repeated songs if you toggle it more than once.
- If you experience lag when playing music, you can load during game startup instead by setting FastLoad to
false. You'll then experience a big lag spike when game boots up until music loading finishes, but have no lag during playback. - Beware of loading too much music with FastLoad set to
false, as every song will fully load into RAM. This has been tested with up to 250 songs (a mp3/wav/ogg test mix) on a 32 GB system. Potentially more songs could be achieved by using OGG exclusively, and even more if you choose more aggressive compression methods. ExternalAudioFolderPathis set only on first mod load. When moving your game folder, the path won't automatically change. You should set it to your music's folder new location, or you can deleteconfig/onlystar.sPEAKer.cfgto regenerate the correct path (this also resets your other configs).- When importing a profile code, it copies both mods AND configs from the original profile. This includes their
ExternalAudioFolderPath, which will inevitably be an invalid path in your machine. To avoid issues, sPEAKer will automatically default to a relative path toplugins/onlystar-sPEAKer Musicwhen it detects it has been installed through a profile code. Mixtapes downloaded from Thunderstore are unaffected by this config, which is probably the main source of music for shared profiles anyway.
YouTube Radio
- This mode has been designed to be used slow. Skipping too quickly will eventually result in a messy state. The room will also eventually sync again, but it can take some time.
- If you're ever stuck in a messy state too long while in YouTube Radio, you can fix it by pressing
Yand entering an URL. This works because it kills all pending actions/downloads to prioritize the one you just entered. - Despite the name, YouTube Radio is download-based and does not stream. This may change in the future.
- Songs next in queue are always being downloaded in the background. This means that while you play a song, you are also downloading the next 10 or so in the queue to achieve a faster playback experience similar to that of mixtapes.
- YouTube Radio always keeps a small cache of songs in
%temp%/sPEAKerYT, so it's possible you won't need to download tracks you have played recently. A future update will include configs to set the size of this cache to whatever you want, be it in terms of disk space or amount of songs. - The sync strategy in YouTube Radio is host-centric. The host always starts playing first, and the rest catch up to them when they can.
General
- sPEAKer monitors its own existence across all clients in the room. If anyone loses track of it or ends up with inconsistent state, sPEAKer will automatically respawn after five seconds to prevent permanent loss.
- sPEAKer is considered to "exist" when it's: on the ground, floating in the air, in a backpack, held in someone's hands, or in someone's pocket. If it disappears from any of these states without explanation, a respawn is triggered.
- When respawning, sPEAKer will appear above its last known holder in Drone mode. Any duplicate copies in inventories/backpacks will be removed to maintain a single instance.
- In some cases, your client may be forced to destroy and respawn sPEAKer even if you never had a failed state. This ensures all clients stay synchronized; consistency is prioritized over continuity.
- The respawn system is still a work in progress. If you encounter cases where sPEAKer fails to respawn or you do lose it permanently, please report it!
โ๏ธ 2026 Roadmap โ๏ธ (in no particular order)
YouTube Radio:
- Song cache size config
- Queue UI for radio playback
- Better URL input window
- Search songs by text
- Option to switch sync strategy to "Wait for everyone" instead of "Catch up to the host"
- Option to stream instead of downloading
- Other platforms support (Soundcloud, Vimeo, etc.)
Other:
- Milestone system
- Alternative mesh skin
Created by onlystar - Bringing music to the PEAK experience!