# Udio source — follow-up reference These files are **not part of the build**. They are the original client-side Lavaplayer implementation of the udio.com source, kept verbatim as the reference for a future port. | File | Was | |---|---| | `UdioAudioSourceManager.java` | `me.bobert.netneutrality.music.source.UdioAudioSourceManager` | | `UdioAudioTrack.java` | `me.bobert.netneutrality.music.source.UdioAudioTrack` | | `UdioAudioSourceManagerTest.java` | its unit test | ## Why they were moved The bot no longer decodes audio itself: after the [migration to Lavalink](../../music.md), source resolution happens on the node. A Lavaplayer `AudioSourceManager` living in the bot process can never be used by Lavalink, and these classes cannot even compile now that the `dev.arbjerg:lavaplayer` dependency has been dropped from `pom.xml`. ## Status **Udio playback is disabled.** `SourceFinder` still classifies Udio URLs, but `SourceFinder.getIdentifier` returns no identifier for them and `MusicManager.play` replies that Udio is temporarily unsupported. ## Follow-up Port `UdioAudioSourceManager` / `UdioAudioTrack` into a standalone **Lavalink server plugin** (its own build and published artifact), then enable it by adding the dependency to `lavalink/application.yml`: ```yaml lavalink: plugins: - dependency: ":udio-plugin:" ``` Once the node resolves `https://www.udio.com/songs/...` identifiers, the only bot-side change is to restore `Udio` in the `SourceFinder.getIdentifier` switch and drop the "temporarily unsupported" reply in `MusicManager.play`. The scraping logic itself still applies: the manager extracts metadata and a direct playback URL from the Next.js payload (`self.__next_f.push(...)`) of the track page, and the URL must be re-fetched right before playback because it expires.