Versions:
1.3.0
- Important security update. Servers and all players should update. 1.3.0 can't connect to older versions.
- Added Speaker Output (cog menu): Center plays from one point between the speakers, Each Speaker plays from every linked speaker in sync.
- Radios and screens now count themselves as one of their linked speakers. Receivers still play only from their speakers.
- Added a Show Speaker Links remote key (middle mouse) that draws lines from media players to their linked speakers.
- Fixed the mod failing to load recipes on a fresh install.
- Dedicated servers no longer play media or flood their log with audio errors.
- Fixed a freeze caused by a radio station folder with no playable tracks, and radio stations that loaded late never advancing.
- Fixed YouTube videos loading forever for players joining partway through. Playback now recovers on its own.
- Fixed YouTube and stream playback stuttering on every time sync.
1.2.6
- Moved settings to
BepInEx/config/com.valmedia.odinondemand.cfg. The old OdinOnDemand/config.cfg is moved over automatically on first launch.
- Fixed server settings being ignored by clients, including Skalds Girdle Sold at Haldor and Skalds Girdle Cost.
- Fixed settings not showing up in in-game config editors and mod managers.
- Fixed a black screen while wearing Skald's Girdle that required a relog. Another player's game could take control of the wearer's character.
- Fixed Skald's Girdle being sold by every trader instead of only Haldor, which could break other stores such as Epic Loot's.
- Fixed game music getting much louder after placing any OdinOnDemand piece, until restart. Music now only fades down near an active player.
- Fixed linked speakers dropping out, snapping back to the receiver, or playing from different places for different players.
- Links now stay in place while speakers are unloaded, and removing a speaker unlinks it.
- Fixed player controls sometimes reaching the wrong receiver, cart, or girdle when more than one was nearby.
- Fixed volume resetting to default after walking out of range, using a portal, or restarting. Volume is now remembered per player on your own machine.
- Fixed unmuting leaving the volume at 0.
- Fixed opening the cog menu on Skald's Girdle or Bard's Wagon overwriting their master volume with the radio master volume.
- Fixed a remote control error when using Skald's Girdle while its player wasn't available.
- Fixed YouTube audio dropping out on slower connections. The next piece of the video now downloads in the background while the current one plays.
- Added a client-side Stream Buffer Milliseconds setting (default 1500). Raise it if audio still drops out on a slow or unstable connection.
- SoundCloud now streams through VLC, fixing the game freezing while long tracks and mixes loaded. Playback also starts sooner.
- Fixed SoundCloud loading forever when SoundCloud couldn't be reached.
- Local audio files and folder radio stations now stay compressed in memory, fixing load hitches and high memory use with long tracks.
- Moved YouTube, SoundCloud, yt-dlp, Streamlink, and JavaScript runtime lookups off the game thread to prevent small freezes when media loads.
1.2.5
- Added online radio playback through VLC with support for station URLs without file extensions, with waveform support. Thanks isimp for the suggestion.
- Added optional Streamlink detection, adding in full support for Twitch and Kick playback!
- Added a fallback YouTube extraction client.
- Fixed external runtimes not being detected when they were added to
PATH after Steam started.
- Fixed registry-discovered Deno being shown as available without passing its executable path to yt-dlp.
- Sped up YouTube loading by no longer checking for a yt-dlp update before every video. It now checks once per player instance, or after a setting change.
- Changed the LibVLC audio resampler from "ugly" to "speex":
- Fixed YouTube audio drifting out of sync or cutting out during long playback.
- Fixed gradual audio desync on 44.1 kHz sources.
- Added an optional Decoder Audio Stats setting that logs audio diagnostics for bug reports.
- Added a now-playing readout to the player panel: title with elapsed/total time, or
LIVE for endless streams.
- Made the player panel taller so the info rows clear the Loop button, and errors now stay readable for 8 seconds.
1.2.0
- Updated interfaces, equipment hashes, and Harmony placement support for Valheim 1.0; restored the OdinOnDemand build-menu group using usage tags.
- Added cog settings for Max Quality (360p-2160p, default 1080p) and persisted Use Nightly yt-dlp, plus a fixed-height, scrollable settings layout.
- Added External JS runtime status, setup guidance, yt-dlp warnings, and
--js-runtimes support for node, bun, and qjs.
- Improved YouTube playback with bounded HTTP range requests, split-first H.264/AAC format selection, untouched signed URLs, and clearer unavailable-media errors.
- Added packaged Windows x64 LibVLC streaming for separate video/audio, including Proton, without full downloads or remuxing.
- Shared one LibVLC instance across players and trimmed packaged modules to those needed for playback; replace the entire
libvlc folder when updating.
- Improved Unity video/audio output, fixing a native buffer over-read and playback timing issues.
- Unified playback, seeking, looping, playlists, and source changes around the decoder clock, preventing stale extraction results from restarting stopped players.
- Fixed RPC pause/position synchronization while preserving artwork, gramophone animations, station timers, and direct extensionless URLs.
- Migrated YoutubeExplode from System.Text.Json to Newtonsoft.Json.
1.0.11
- Update/remove dependencies, switch to JsonDotNET
1.0.10
- Fixed log spam
- Fixed YT and other video playback
1.0.9
- Revised VIP Rank System to not hard reference Steamworks
- This should allow Xbox users to run the mod properly.
- Fixed remote control component
- Added auto-update for Yt-dlp DLSharp extension
1.0.8
- Supplemented broken YouTubeExplode commands with YoutubeDLSharp
- As a side effect, you can now grab videos from a wide variety of sites: vimeo, TikTok, dailymotion, facebook, Instagram, twitter, reddit, etc. Just try your site of choice and it may return a valid file.
- On the flip side, YouTube videos are now limited to 360p due to scarce muxed video options
- Fixed SoundcloudExplode 401 errors
- Fixed PlacePiecePatch
1.0.7
- Fix Relative URL Lookup
- Fix Loop UI Text
- Remote Controller support for ValheimRAFT, and any other similar mods
- Fix Relative Video loading prepare
- Potential URL fix for foreign languages
1.0.6
- Fixed crash when attempting to listen to SoundCloud links
1.0.5
- Updated to new game version
1.0.4
- Added new settings buttons: Reload player, Sync Time
- Changed "SyncTime" repeated event to only broadcast if ZDO owner, instead of pinging server from each player
- Speakers now check for Owner & PrivateArea access
- Fix master volume mixer bug
- UI, Speaker Tweaks
1.0.3
- Audio Waveform Visualizer tweaks:
- Added configurable waveform visualizer scale factors (turns out I have my volume settings very low)
- Tweaked base values to fit default volume levels better, if you have volume turned down then adjust your scale factors as needed
- Changes to height limits
1.0.2
- Changed radio station addons to search for .assetbundle files due to flat file structure download from Thunderstore
1.0.1
- Fixed missing directory issues
- Switch to OOD_LIB Dependancy package over Runtime Assembly Loading
1.0.0
- Change: Config files moved to BepInEx\config\OdinOnDemand[...]
- Improvement: Multiplayer - All videos and audio clips are now fully multiplayer time synced even upon fresh loading. Players will regularly sync time with current ZDO owner. All players "autoplay". This means that tracking forward and autoplay options have been removed. You can manually set seek time in seconds through the Cog wheel settings sub-menu.
- New Piece: Bard's Wagon - A mobile mediaplayer on wheels!
- New Item: Skald's Girdle - An equipable mediaplayer sold by Haldor.
- Control Cart Player & Skald's Girdle via the Remote Control item. Looping always enabled.
- New Feature: Linkable Speakers - Speakers can now be (un)linked to all types of stationary mediaplayers via the remote control. This changes the center of their audio output, displayed briefly as a red circle.
- Improved Feature: Reciever is now a mediaplayer.
- New Feature: Dynamic Audio Stations - Create radio stations from folders and assetbundles that are simulated server-side. When players have the same radio stations, they hear the same songs at the same time.
- New Feature: Audio Waveform Visualizer - Enabled when listening to dynamic stations, audio files & soundcloud on cinema screens and radio displays.
- Improvement: All mediaplayers can play audio files and Soundcloud.
- Improvement: RPC overhaul to reduce server side network load
- Improvement: *Explode handling overhaul to lower amount of unexplained errors when using YouTube/Soundcloud Links. Increased error verbosity for YouTube/Soundcloud Explode. Removed timeout settings to opt for built in *Explode timeout.
- Improvement: Configurable Item json recipes added for Remote Control & Skald's Girdle
- Change: Relative path lookup now begins from OdinOnDemand plugin folder, no prefix needed.
- Refactor: Abstraction, Organization
- Fixed: Missing Remote Icon
0.9.96-beta
- Fixed master volume fluctuations caused by incorrect mixer in Radio prefab audioSource
0.9.95-beta
- New feature: In-Game Music Audio Crossfade based on distance [See config file]
- New feature: Configurable vertical volume drop-off [See Mediaplayer Settings Panel]
- Fixed missing meshes (How long was it like this?)
- Combined & Condensed Shaders
- Increased default YTExpolode Timeout
0.9.94-beta
- Hopefully fixed issues with new updates
0.9.93-beta
- Fixed local file unpause for real this time
0.9.92-beta
- Fixed relative/local path file unpause and playback issues
0.9.91-beta
- Config reorganized, now divided by categories.
- Piece recipe rework. Fixed file not saving, now auto-updates when certain recipes are missing. You can disable this in the config.
0.9.90-beta
- Fixed issues stemming from Bepinex removing unstripped corlibs (thanks OrianaVenture)
- VIP System Beta. Very barebones, meant for feedback. Prevents non-VIP users from placing and interacting with Mediaplayers. Please check/wipe config for new settings.
0.9.89-beta
- Fixed flow issue preventing remote recipe loading
0.9.88-beta
- Fixed missing GetMyID method
0.9.87-beta
- Fixed relative path audio file playback
- Radio mesh edit
0.9.86-beta
- Fixed SetURL behavior
- Fixed radio behavior, audio properties
0.9.85-beta
- Added prefabs:
- New mediaplayer: Radio, a vintage style wooden radio
- Studio Speaker, Standing Speaker, Receiver
- Decorative pieces, with future planned mechanics
- Added relative path file lookup from plugin dir (local:// or local:\)
- Default recipe JSON is now properly formatted
- Autoplay YouTube and SoundCloud links are now stored and sent un-parsed, fixing old CDN video timeout
- Proper key config for Remote Control
- Modifications to YoutubeExplode Library
- Readme update
- Code refactoring
0.9.82-beta
- Added crash disclaimer from 2020.3.45 upgrade
0.9.81-beta
- Updated YoutubeExplode to version 6.2.12
0.9.80-beta
- Theater Screen
- Very large screen roughly 16m x 9m for theater environments.
- Fixed ward locking behavior
- Fixed musicplayer volume mixer
- Added settings overlay, click the cog icon!
- Added ZDO for several variables
- Distance, Autoplay/URL, Admin Only, isLocked, and isLooping are saved to world and synced over multiplayer.
- This means each individual player can have it's own distance and properties, which will sync and persist after reloading world or areas!
- Custom listening distance can be limited via config. This is not enforced on admins.
- Added admin only
- Added autoplay
- Playlists are currently NOT supported.
- .mp3/SoundCloud autoplay is currently NOT supported. Direct video links or youtube only.
- Autoplayed videos are NOT SYCNED. The video will start upon object loading for every viking.
- Please be aware that YouTube videos saved from autoplay will expire after an indeterminable amount of time. This is simply the nature of Google's content delivery and as such cannot be avoided.
0.9.76-beta
- Fixed playlist index string
- Fixed unnecessary debug logging
0.9.75-beta
- UI Redesign
- Button icons, combined overflow menus, volume slider
- Ward interaction, when a media-player is Locked it will check for access with Wards. Media-players are locked by default. You may have to cycle the lock for newly loaded Vikings.
- Removed pickup button. All media-players can be destroyed via the Hammer just like any piece, you will get appropriate materials refunded.
- All media-players now have Wear N Tear - they can take damage, and be destroyed. Media-players are weak to pickaxes.
- Changed Screen Render Distance calculations to hopefully be more efficient. It no longer does any distance calculations and instead just uses collider OnTrigger events.
0.9.71-beta
- Fixed missing Monitor recipe. If your recipe file is outdated, the default one will be loaded. Check logs and delete recipe file if needed.
0.9.70-beta
- Monitor Prefab added, larger than Old TV but smaller than Table TV.
- Remote control for interacting with media-players from a distance
- Basic playlist support implemented
- Shuffle feature for playlists
- Fixed resources not refunding on destruction
- Media-player code refactoring
- More multiplayer code refactoring
0.9.60-beta
- First Gramophone prefab release
- Added custom recipes via json config
- Added looping with multiplayer sync
- Added Boombox YouTube support
- Added loading circle to cinema screens
- Greatly increased efficiency of how plugin finds media-players for multiplayer
- Changed volume handling, added default player volume
- Fixed Boombox volume bug
- Fixed boombox playing previous SoundCloud song on set video button press when song unavailable
- Cleaned up debug logging
- Cleaned up config
0.9.58-beta
- Fixed GUI not closing when media-player destroyed by other player.
0.9.57-beta
0.9.56-beta
- Small adjustment in Rendering distance calculations
0.9.55-beta
- Fixed Screen volume bug
- Added "Screens Stop Rendering Out of Range" and config
0.9.51-beta
0.9.5-beta
- Added native YouTube Functionality. No need to use an external server now, but it's still there if you want it.
YouTube is now enabled by default and should work just fine. Let me know if you have any issues. Be sure to wipe configs.
0.9.1-beta
- Fixed Boombox Default Distance
- Separate Boombox Default Distance and Master Volume
0.9.0-beta Initial Release