A BepInEx plugin for Lethal Company that downloads audio from YouTube for use with Steven's Custom Boombox Music.
- Create a subdirectory in your
BepInEx/plugins
directory, e.g.myTracksMod
. - Create a new JSON file called
configured-youtube-boombox-tracks.json
in theBepInEx/plugins/myTracksMod
folder. Paste this template into the file:{ "$schema": "https://github.com/Lordfirespeed/ConfiguredYoutubeBoombox/raw/main/assets/configured-youtube-boombox-tracks.schema.json", "tracks": [ { "youtubeVideoId": "yourVideoIdHere", "trackName": "yourTrackName" } ] }
- Replace the
youtubeVideoId
andtrackName
accordingly. - Specify extra options such as
startTimestamp
,endTimestamp
,volumeScalar
(See here for an example) - Add additional tracks by adding more items to the array
- That's it! CYTBB will download the listed tracks from Youtube into the
BepInEx/Custom Songs/Boombox Tracks
folder when the game is opened.
Required string
. Determines the source YouTube video. See this gist
for how to get YouTube video IDs.
Required string
. Will be formatted into the .mp3
track's filename once downloaded, cytbb-[trackname]-[youtubeId].mp3
Optional string
of form h:m:s
. The downloaded audio will be cropped to start at this timestamp.
Seconds can be a decimal quantity and leading zeroes can be omitted. For example:
- ✅
128.95
(128.95 seconds) - ✅
2:08.95
(2 minute 8.95 seconds) - ✅
1:35:20.12
(1 hour, 35 minutes and 20.12 seconds) - ❌
35:94
(can't have >=60 seconds when specifying minutes) - ❌
1:62:30
(can't have >=60 minutes when specifying hours)
Optional string
of same form as startTimestamp
. The downloaded audio will be cropped to end at this timestamp.
Desync will occur if players have different tracklists. Make sure all players have the same custom boombox tracks to ensure synchronicity.
CYTBB will not search for tracklists recursively. Your tracklist must be inside a folder in BepInEx/plugins
.
For example:
- ✅
BepInEx/plugins/portalRadio/configured-youtube-boombox-tracks.json
- ❌
BepInEx/plugins/portalRadio/youtube-boombox-tracks.json
(wrong filename) - ✅
BepInEx/plugins/pirateSongs/configured-youtube-boombox-tracks.json
- ❌
BepInEx/plugins/pirateSongs/tracks/configured-youtube-boombox-tracks.json
(extratracks
folder) - ❌
BepInEx/plugins/configured-youtube-boombox-tracks.json
(missing subfolder)
The $schema
property is a link to a JSON Schema which
provides helpful validation and autocomplete features in supported text editors.
You will need to create a ConfiguredYoutubeBoombox/ConfiguredYoutubeBoombox.csproj.user
:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LETHAL_COMPANY_DIR>F:/SteamLibrary/steamapps/common/Lethal Company</LETHAL_COMPANY_DIR>
<TEST_PROFILE_DIR>$(APPDATA)/r2modmanPlus-local/LethalCompany/profiles/Test Configured YT Boombox</TEST_PROFILE_DIR>
<NETCODE_PATCHER_DIR>$(SolutionDir)NetcodeWeaver</NETCODE_PATCHER_DIR>
</PropertyGroup>
<!-- Create your 'Test Profile' using your modman of choice before enabling this.
Enable by setting the Condition attribute to "true". *nix users should switch out `copy` for `cp`. -->
<Target Name="CopyToTestProfile" AfterTargets="PostBuildEvent;NetcodeWeave" Condition="false">
<MakeDir
Directories="$(TEST_PROFILE_DIR)/BepInEx/plugins/Lordfirespeed-Configured_Youtube_Boombox"
Condition="Exists('$(TEST_PROFILE_DIR)') And !Exists('$(TEST_PROFILE_DIR)/BepInEx/plugins/Lordfirespeed-Configured_Youtube_Boombox')"
/>
<Exec Command="copy "$(TargetPath)" "$(TEST_PROFILE_DIR)/BepInEx/plugins/Lordfirespeed-Configured_Youtube_Boombox/"" />
</Target>
</Project>