{"id":20748191,"url":"https://github.com/topi314/lavasrc","last_synced_at":"2025-05-16T16:09:17.273Z","repository":{"id":42175341,"uuid":"452027059","full_name":"topi314/LavaSrc","owner":"topi314","description":"A collection of additional Lavaplayer/Lavalink Sources","archived":false,"fork":false,"pushed_at":"2025-05-07T22:33:56.000Z","size":697,"stargazers_count":196,"open_issues_count":9,"forks_count":67,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-05-07T23:28:01.418Z","etag":null,"topics":["applemusic","deezer","hacktoberfest","lavalink","lavalink-plugin","lavaplayer","lavaplayer-source-manager","source-manager","spotify","yandex-music"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/topi314.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-25T20:13:07.000Z","updated_at":"2025-05-06T06:52:36.000Z","dependencies_parsed_at":"2023-09-24T22:17:36.348Z","dependency_job_id":"91ba11ee-ba30-402c-bab5-48c3043ec03d","html_url":"https://github.com/topi314/LavaSrc","commit_stats":null,"previous_names":["topi314/lavasrc","topisenpai/lavasrc"],"tags_count":61,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topi314%2FLavaSrc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topi314%2FLavaSrc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topi314%2FLavaSrc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/topi314%2FLavaSrc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/topi314","download_url":"https://codeload.github.com/topi314/LavaSrc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254564127,"owners_count":22092122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["applemusic","deezer","hacktoberfest","lavalink","lavalink-plugin","lavaplayer","lavaplayer-source-manager","source-manager","spotify","yandex-music"],"created_at":"2024-11-17T08:15:53.167Z","updated_at":"2025-05-16T16:09:17.239Z","avatar_url":"https://github.com/topi314.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![](https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fmaven.topi.wtf%2Freleases%2Fcom%2Fgithub%2Ftopi314%2Flavasrc%2Flavasrc%2Fmaven-metadata.xml)](https://maven.topi.wtf/#/releases/com/github/topi314/lavasrc)\n\n# LavaSrc\n\n\u003e [!IMPORTANT]\n\u003e For LavaSrc v3 (Lavaplayer v1 \u0026 Lavalink v3) look [here](https://github.com/topi314/LavaSrc/tree/v3-legacy)\n\n## Summary\n\n* [Sources](#sources)\n    * [Features](#features)\n    * [What is Mirroring?](#what-is-mirroring)\n* [Lavalink Usage](#lavalink-usage)\n    * [Configuration](#configuration)\n    * [Update Settings at Runtime](#update-settings-at-runtime)\n* [Lavaplayer Usage](#lavaplayer-usage)\n* [Supported URLs and Queries](#supported-urls-and-queries)\n\n# Sources\n\n| Source                                              | Features       | Playback                     | Credits                                                                                                                |\n|-----------------------------------------------------|----------------|------------------------------|------------------------------------------------------------------------------------------------------------------------|\n| Spotify                                             | 📁💿🎵🧑🔍🔬📜 | [Mirror](#what-is-mirroring) | [@topi314](https://github.com/topi314)                                                                                 |\n| Apple Music                                         | 📁💿🎵🧑🔍🔬📜 | [Mirror](#what-is-mirroring) | [@ryan5453](https://github.com/ryan5453)                                                                               |\n| Deezer                                              | 📁💿🎵🧑🔍🔬📜 | Direct                       | [@topi314](https://github.com/topi314), [@ryan5453](https://github.com/ryan5453), [@viztea](https://github.com/viztea) |\n| Yandex                                              | 📁💿🎵🧑🔍🔬📜 | Direct                       | [@agutinvboy](https://github.com/agutinvboy)                                                                           |\n| Flowery TTS                                         |                | Direct                       | [@bachtran02](https://github.com/bachtran02)                                                                           |\n| YouTube (Music)                                     | 🔬📜           | N/A                          | [@topi314](https://github.com/topi314), [@DRSchlaubi](https://github.com/DRSchlaubi)                                   |\n| VK Music                                            | 📁💿🎵🧑🔍🔬📜 | Direct                       | [@Krispeckt](https://github.com/Krispeckt)                                                                             |\n| Tidal                                               | 📁💿🎵🧑       | [Mirror](#what-is-mirroring) | [@nansess](https://github.com/nansess), [@InfNibor](https://github.com/InfNibor)                                       |\n| Qobuz                                               | 📁💿🎵🧑       | Direct                       | [@munishkhatri720](https://github.com/munishkhatri720)                                                                 |\n| YouTube([yt-dlp](https://github.com/yt-dlp/yt-dlp)) | 📁💿🎵🧑🔍     | Direct                       | [@topi314](https://github.com/topi314)                                                                                 |\n\n### Features\n\n- 📁 playlists\n- 💿 albums\n- 🎵 tracks\n- 🧑 artist top tracks\n- 🔍 search results\n- 🔬 [LavaSearch](https://github.com/topi314/LavaSearch)\n- 📜 [LavaLyrics](https://github.com/topi314/LavaLyrics)\n\n\u003e [!IMPORTANT]\n\u003e ### What is Mirroring?\n\u003e\n\u003e Mirroring is the process of taking the metadata resolved from one source and using it to retrieve a playable `AudioTrack` from another.\n\u003e\n\u003e For example, LavaSrc cannot directly play from Spotify, or any source marked as `Mirror` playback, so it must use a LavaSrc platform marked as `Direct`, like Deezer.\n\u003e You may also use any source manager registered to your `AudioPlayerManager`.\n\n## Lavalink Usage\n\nThis plugin requires Lavalink `v4` or greater\n\nTo install this plugin either download the latest release and place it into your `plugins` folder or add the following into your `application.yml`\n\n\u003e [!Note]\n\u003e For a full `application.yml` example see [here](application.example.yml)\n\nReplace x.y.z with the latest version number\n\n```yaml\nlavalink:\n  plugins:\n    - dependency: \"com.github.topi314.lavasrc:lavasrc-plugin:x.y.z\"\n      repository: \"https://maven.lavalink.dev/releases\" # this is optional for lavalink v4.0.0-beta.5 or greater\n      snapshot: false # set to true if you want to use snapshot builds (see below)\n```\n\nSnapshot builds are available in https://maven.lavalink.dev/snapshots with the short commit hash as the version\n\n### Configuration\n\nFor all supported urls and queries see [here](#supported-urls-and-queries)\n\nTo get your Spotify clientId, clientSecret go [here](https://developer.spotify.com/dashboard/applications) \u0026 then copy them into your `application.yml` like the following.\n\nTo get your Spotify spDc cookie go [here](#spotify)\n\nTo get your Apple Music api token go [here](#apple-music)\n\nTo get your Deezer arl cookie go [here](#deezer)\n\nTo get your Yandex Music access token go [here](#yandex-music)\n\nTo get your Vk Music user token go [here](#vk-music)\n\nTo get your Tidal token go [here](#tidal)\n\nTo get your Qobuz userOauthToken go [here](#qobuz)\n\n\u003e [!WARNING]\n\u003e YES `plugins` IS AT ROOT IN THE YAML\n\n```yaml\nplugins:\n  lavasrc:\n    providers: # Custom providers for track loading. This is the default\n      # - \"dzisrc:%ISRC%\" # Deezer ISRC provider\n      # - \"dzsearch:%QUERY%\" # Deezer search provider\n      - \"ytsearch:\\\"%ISRC%\\\"\" # Will be ignored if track does not have an ISRC. See https://en.wikipedia.org/wiki/International_Standard_Recording_Code\n      - \"ytsearch:%QUERY%\" # Will be used if track has no ISRC or no track could be found for the ISRC\n      #  you can add multiple other fallback sources here\n    sources:\n      spotify: false # Enable Spotify source\n      applemusic: false # Enable Apple Music source\n      deezer: false # Enable Deezer source\n      yandexmusic: false # Enable Yandex Music source\n      flowerytts: false # Enable Flowery TTS source\n      youtube: false # Enable YouTube search source (https://github.com/topi314/LavaSearch)\n      vkmusic: false # Enable Vk Music source\n      tidal: false # Enable Tidal source\n      qobuz : false # Enabled qobuz source\n      ytdlp: false # Enable yt-dlp source\n    lyrics-sources:\n      spotify: false # Enable Spotify lyrics source\n      deezer: false # Enable Deezer lyrics source\n      youtube: false # Enable YouTube lyrics source\n      yandexmusic: false # Enable Yandex Music lyrics source\n      vkmusic: false # Enable Vk Music lyrics source\n    spotify:\n      # clientId \u0026 clientSecret are required for using spsearch\n#      clientId: \"your client id\"\n#      clientSecret: \"your client secret\"\n      # spDc: \"your sp dc cookie\" # the sp dc cookie used for accessing the spotify lyrics api\n      countryCode: \"US\" # the country code you want to use for filtering the artists top tracks. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n      playlistLoadLimit: 6 # The number of pages at 100 tracks each\n      albumLoadLimit: 6 # The number of pages at 50 tracks each\n      resolveArtistsInSearch: true # Whether to resolve artists in track search results (can be slow)\n      localFiles: false # Enable local files support with Spotify playlists. Please note `uri` \u0026 `isrc` will be `null` \u0026 `identifier` will be `\"local\"`\n      preferAnonymousToken: true # Whether to use the anonymous token for resolving tracks, artists and albums. Playlists are always resolved with the anonymous token to support autogenerated playlists.\n    applemusic:\n      countryCode: \"US\" # the country code you want to use for filtering the artists top tracks and language. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n      mediaAPIToken: \"your apple music api token\" # apple music api token\n      # or specify an apple music key\n      keyID: \"your key id\"\n      teamID: \"your team id\"\n      musicKitKey: |\n        -----BEGIN PRIVATE KEY-----\n        your key\n        -----END PRIVATE KEY-----      \n      playlistLoadLimit: 6 # The number of pages at 300 tracks each\n      albumLoadLimit: 6 # The number of pages at 300 tracks each\n    deezer:\n      masterDecryptionKey: \"your master decryption key\" # the master key used for decrypting the deezer tracks. (yes this is not here you need to get it from somewhere else)\n      arl: \"your deezer arl\" # the arl cookie used for accessing the deezer api this is not optional anymore\n      formats: [ \"FLAC\", \"MP3_320\", \"MP3_256\", \"MP3_128\", \"MP3_64\", \"AAC_64\" ] # the formats you want to use for the deezer tracks. \"FLAC\", \"MP3_320\", \"MP3_256\" \u0026 \"AAC_64\" are only available for premium users and require a valid arl\n    yandexmusic:\n      accessToken: \"your access token\" # the token used for accessing the yandex music api. See https://github.com/TopiSenpai/LavaSrc#yandex-music\n      playlistLoadLimit: 1 # The number of pages at 100 tracks each\n      albumLoadLimit: 1 # The number of pages at 50 tracks each\n      artistLoadLimit: 1 # The number of pages at 10 tracks each\n    flowerytts:\n      voice: \"default voice\" # (case-sensitive) get default voice from here https://api.flowery.pw/v1/tts/voices\n      translate: false # whether to translate the text to the native language of voice\n      silence: 0 # the silence parameter is in milliseconds. Range is 0 to 10000. The default is 0.\n      speed: 1.0 # the speed parameter is a float between 0.5 and 10. The default is 1.0. (0.5 is half speed, 2.0 is double speed, etc.)\n      audioFormat: \"mp3\" # supported formats are: mp3, ogg_opus, ogg_vorbis, aac, wav, and flac. Default format is mp3\n    youtube:\n      countryCode: \"US\" # the country code you want to use for searching \u0026 lyrics. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n      language: \"en\" # the language code you want to use for searching \u0026 lyrics. See https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes\n    vkmusic:\n      userToken: \"your user token\" # This token is needed for authorization in the api. Guide: https://github.com/topi314/LavaSrc#vk-music\n      playlistLoadLimit: 1 # The number of pages at 50 tracks each\n      artistLoadLimit: 1 # The number of pages at 10 tracks each\n      recommendationsLoadLimit: 10 # Number of tracks\n    tidal:\n      countryCode: \"US\" # the country code for accessing region-specific content on Tidal (ISO 3166-1 alpha-2).\n      searchLimit: 6 # How many search results should be returned\n      token: \"your tidal token\" # the token used for accessing the tidal api. See https://github.com/topi314/LavaSrc#tidal\n    qobuz:\n      userOauthToken : \"your user oauth token\" # This token is needed for authorization in the api. Guide: https://github.com/topi314/LavaSrc#qobuz\n      #      appId : optional (Only pass it when you are using an old userOauthToken)\n      #      appSecret : optional (Only pass it when you are using an old userOauthToken)\n    ytdlp:\n      path: \"yt-dlp\" # the path to the yt-dlp executable.\n      searchLimit: 10 # How many search results should be returned\n#      customLoadArgs: [\"-q\", \"--no-warnings\", \"--flat-playlist\", \"--skip-download\", \"-J\"] # Custom arguments to pass to yt-dlp\n#      customPlaybackArgs: [\"-q\", \"--no-warnings\", \"-f\", \"bestaudio\", \"-J\"] # Custom arguments for yt-dlp\n```\n\n### Plugin Info\n\nLavaSrc adds the following fields to tracks \u0026 playlists in Lavalink\n\n#### Track\n\n| Field            | Type    | Description                    |\n|------------------|---------|--------------------------------|\n| albumName        | ?string | The name of the album          |\n| albumArtUrl      | ?string | The url of the album art       |\n| artistUrl        | ?string | The url of the artist          |\n| artistArtworkUrl | ?string | The url of the artist artwork  |\n| previewUrl       | ?string | The url of the preview         |\n| isPreview        | bool    | Whether the track is a preview |\n\n\u003cdetails\u003e\n\u003csummary\u003eExample Payload\u003c/summary\u003e\n\n```json\n{\n  \"encoded\": \"...\",\n  \"info\": {\n    ...\n  },\n  \"pluginInfo\": {\n    \"albumName\": \"...\",\n    \"albumArtUrl\": \"...\",\n    \"artistUrl\": \"...\",\n    \"artistArtworkUrl\": \"...\",\n    \"previewUrl\": \"...\",\n    \"isPreview\": false\n  },\n  \"userData\": {\n    ...\n  }\n}\n```\n\n\u003c/details\u003e\n\n#### Playlist\n\n| Field       | Type                             | Description                                |\n|-------------|----------------------------------|--------------------------------------------|\n| type        | [Playlist Type](#playlist-types) | The type of the playlist                   |\n| url         | ?string                          | The url of the playlist                    |\n| artworkUrl  | ?string                          | The url of the playlist artwork            |\n| author      | ?string                          | The author of the playlist                 |\n| totalTracks | ?int                             | The total number of tracks in the playlist |\n\n\u003cdetails\u003e\n\u003csummary\u003eExample Payload\u003c/summary\u003e\n\n```json\n{\n  \"info\": {\n    ...\n  },\n  \"pluginInfo\": {\n    \"type\": \"playlist\",\n    \"url\": \"...\",\n    \"artworkUrl\": \"...\",\n    \"author\": \"...\",\n    \"totalTracks\": 10\n  },\n  \"tracks\": [\n    ...\n  ]\n}\n```\n\n\u003c/details\u003e\n\n#### Playlist Types\n\n| Type              | Description                                |\n|-------------------|--------------------------------------------|\n| `album`           | The playlist is an album                   |\n| `playlist`        | The playlist is a playlist                 |\n| `artist`          | The playlist is an artist                  |\n| `recommendations` | The playlist is a recommendations playlist |\n\n---\n\n### Update Settings at Runtime\n\nSometimes you may want to update the settings at runtime without restarting Lavalink. This can be done by sending a `PATCH` request to the `/v4/lavasrc/config` endpoint.\nKeep in mind this will **NOT** update the settings in the `application.yml` file. If you restart Lavalink the settings will be reset to the ones in the `application.yml` file.\n\n```http\nPATCH /v4/lavasrc/config\n```\n\n#### LavaSrc Config Object\n\n\u003e [!NOTE]\n\u003e All fields are optional and only the fields you provide will be updated.\n\n| Field        | Type                                               | Description               |\n|--------------|----------------------------------------------------|---------------------------|\n| ?spotify     | [Spotify Config](#spotify-config-object)           | The Spotify settings      |\n| ?applemusic  | [Apple Music Config](#apple-music-config-object)   | The Apple Music settings  |\n| ?deezer      | [Deezer Config](#deezer-config-object)             | The Deezer settings       |\n| ?yandexMusic | [Yandex Music Config](#yandex-music-config-object) | The Yandex Music settings |\n| ?vkMusic     | [Vk Music Config](#vk-music-config-object)         | The Vk Music settings     |\n| ?qobuz       | [Qobuz Config](#qobuz-config-object)               | The Qobuz settings        |\n\n##### Spotify Config Object\n\n| Field         | Type   | Description              |\n|---------------|--------|--------------------------|\n| ?clientId     | string | The Spotify clientId     |\n| ?clientSecret | string | The Spotify clientSecret |\n| ?spDc         | string | The Spotify spDc cookie  |\n\n##### Apple Music Config Object\n\n| Field          | Type   | Description               |\n|----------------|--------|---------------------------|\n| ?mediaAPIToken | string | The Apple Music api token |\n\n##### Deezer Config Object\n\n| Field    | Type                                      | Description           |\n|----------|-------------------------------------------|-----------------------|\n| ?arl     | string                                    | The Deezer arl cookie |\n| ?formats | array of [Deezer Format](#deezer-formats) | The Deezer formats    |\n\n##### Deezer Formats\n\n| Format    | Description |\n|-----------|-------------|\n| `FLAC`    | FLAC        |\n| `MP3_320` | MP3 320kbps |\n| `MP3_256` | MP3 256kbps |\n| `MP3_128` | MP3 128kbps |\n| `MP3_64`  | MP3 64kbps  |\n| `AAC_64`  | AAC 64kbps  |\n\n##### Yandex Music Config Object\n\n| Field        | Type   | Description                   |\n|--------------|--------|-------------------------------|\n| ?accessToken | string | The Yandex Music access token |\n\n##### Vk Music Config Object\n\n| Field      | Type   | Description             |\n|------------|--------|-------------------------|\n| ?userToken | string | The Vk Music user token |\n\n#### Qobuz Config Object\n\n| Field           | Type   | Description          |\n|-----------------|--------|----------------------|\n| ?userOauthToken | string | The Qobuz user token |\n| ?appId          | String | The Qobuz App ID     |\n| ?appSecret      | string | The Qobuz App Secret |\n\n\u003cdetails\u003e\n\u003csummary\u003eExample Payload\u003c/summary\u003e\n\n```json\n{\n  \"spotify\": {\n    \"clientId\": \"your client id\",\n    \"clientSecret\": \"your client secret\",\n    \"spDc\": \"your sp dc cookie\"\n  },\n  \"applemusic\": {\n    \"mediaAPIToken\": \"your apple music api token\"\n  },\n  \"deezer\": {\n    \"arl\": \"your deezer arl\",\n    \"formats\": [\n      \"FLAC\",\n      \"MP3_320\",\n      \"MP3_256\",\n      \"MP3_128\",\n      \"MP3_64\",\n      \"AAC_64\"\n    ]\n  },\n  \"yandexMusic\": {\n    \"accessToken\": \"your access token\"\n  },\n  \"vkMusic\": {\n    \"userToken\": \"your user token\"\n  },\n  \"qobuz\": {\n    \"userOauthToken\": \"your user token\",\n    \"appId\": \"your app ID\",\n    \"appSecret\": \"your app Secret\"\n  },\n  \"ytdlp\": {\n    \"path\": \"yt-dlp\",\n    \"customLoadArgs\": [\"-q\", \"--no-warnings\", \"--flat-playlist\", \"--skip-download\", \"-J\"],\n    \"customPlaybackArgs\": [\"-q\", \"--no-warnings\", \"-f\", \"bestaudio\", \"-J\"]\n  }\n}\n```\n\n\u003c/details\u003e\n\n---\n\n## Lavaplayer Usage\n\nReplace `x.y.z` with the latest version number\n\nSnapshot builds are instead available in https://maven.topi.wtf/snapshots with the short commit hash as the version\n\n### Using in Gradle:\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\n```gradle\nrepositories {\n  maven {\n    url \"https://maven.topi.wtf/releases\"\n  }\n}\n\ndependencies {\n  implementation \"com.github.topi314.lavasrc:lavasrc:x.y.z\"\n  implementation \"com.github.topi314.lavasrc:lavasrc-protocol:x.y.z\"\n}\n```\n\n\u003c/details\u003e\n\n### Using in Maven:\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\n```xml\n\u003crepositories\u003e\n  \u003crepository\u003e\n    \u003cid\u003eTopiWTF-releases\u003c/id\u003e\n    \u003cname\u003eTopis Maven Repo\u003c/name\u003e\n    \u003curl\u003ehttps://maven.topi.wtf/releases\u003c/url\u003e\n  \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependencies\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.topi314.lavasrc\u003c/groupId\u003e\n    \u003cartifactId\u003elavasrc\u003c/artifactId\u003e\n    \u003cversion\u003ex.y.z\u003c/version\u003e\n  \u003c/dependency\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.topi314.lavasrc\u003c/groupId\u003e\n    \u003cartifactId\u003elavasrc-protocol-jvm\u003c/artifactId\u003e\n    \u003cversion\u003ex.y.z\u003c/version\u003e\n  \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n\u003c/details\u003e\n\n---\n\n### Spotify\n\nTo get a Spotify clientId \u0026 clientSecret you must go [here](https://developer.spotify.com/dashboard) and create a new application.\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get sp dc cookie\u003c/summary\u003e\n\n1. Go to https://open.spotify.com\n2. Open DevTools and go to the Application tab\n3. Copy the value of the `sp_dc` cookie\n\n\u003c/details\u003e\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new SpotifySourceManager with the default providers, clientId, clientSecret, spDc, countryCode and AudioPlayerManager and register it\n// spDc is only needed if you want to use it with LavaLyrics\nvar spotify = new SpotifySourceManager(clientId, clientSecret, spDc, countryCode, () -\u003e playerManager, DefaultMirroringAudioTrackResolver);\nplayerManager.registerSourceManager(spotify);\n```\n\n#### LavaLyrics\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new lyrics manager\nvar lyricsManager = new LyricsManager();\n\n// register source\nlyricsManager.registerLyricsManager(spotify);\n```\n\n\u003c/details\u003e\n\n#### LavaSearch\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new search manager\nvar searchManager = new SearchManager();\n\n// register source\nsearchManager.registerSearchManager(spotify);\n```\n\n\u003c/details\u003e\n\n---\n\n### Apple Music\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get media api token without Apple developer account\u003c/summary\u003e\n\n1. Go to https://music.apple.com\n2. Open DevTools and go to the Debugger tab\n3. Search with this regex `\"(?\u003ctoken\u003e(ey[\\w-]+)\\.([\\w-]+)\\.([\\w-]+))\"` in all `index-*.js` files\n4. Copy the token from the source code\n\n\u003c/details\u003e\n\nAlternatively, you can\nfollow [this guide](https://developer.apple.com/help/account/configure-app-capabilities/create-a-media-identifier-and-private-key/)\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new AppleMusicSourceManager with the standard providers, apple music api token, countrycode and AudioPlayerManager and register it\nvar appleMusic = new AppleMusicSourceManager(null, mediaAPIToken, \"us\", playerManager);\nplayerManager.registerSourceManager(appleMusic);\n```\n\n#### LavaSearch\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new search manager\nvar searchManager = new SearchManager();\n\n// register source\nsearchManager.registerSearchManager(appleMusic);\n```\n\n\u003c/details\u003e\n\n---\n\n### Deezer\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get deezer master decryption key\u003c/summary\u003e\n\nUse Google.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get deezer arl cookie\u003c/summary\u003e\n\nUse Google to find a guide on how to get the arl cookie. It's not that hard.\n\n\u003c/details\u003e\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new DeezerSourceManager with the master decryption key and register it\n\nvar deezer = new DeezerSourceManager(\"the master decryption key\", \"your arl\", formats);\nplayerManager.registerSourceManager(deezer);\n```\n\n#### LavaLyrics\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new lyrics manager\nvar lyricsManager = new LyricsManager();\n\n// register source\nlyricsManager.registerLyricsManager(deezer);\n```\n\n\u003c/details\u003e\n\n#### LavaSearch\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new search manager\nvar searchManager = new SearchManager();\n\n// register source\nsearchManager.registerSearchManager(deezer);\n```\n\n\u003c/details\u003e\n\n---\n\n### Yandex Music\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get access token\u003c/summary\u003e\n\n1. (Optional) Open DevTools in your browser and on the Network tab enable trotlining.\n2. Go to https://oauth.yandex.ru/authorize?response_type=token\u0026client_id=23cabbbdc6cd418abb4b39c32c41195d\n3. Authorize and grant access\n4. The browser will redirect to the address like `https://music.yandex.ru/#access_token=AQAAAAAYc***\u0026token_type=bearer\u0026expires_in=31535645`. \n   Very quickly there will be a redirect to another page, so you need to have time to copy the link. ![image](https://user-images.githubusercontent.com/68972811/196124196-a817b828-3387-4f70-a2b2-cdfdc71ce1f2.png)\n5. Your accessToken, what is after `access_token`.\n\nToken expires in 1 year. You can get a new one by repeating the steps above.\n\n#### Important information\n\nYandex Music is very location-dependent. You should either have a premium subscription or be located in one of the following countries:\n\n- Azerbaijan\n- Armenia\n- Belarus\n- Georgia\n- Kazakhstan\n- Kyrgyzstan\n- Moldova\n- Russia\n- Tajikistan\n- Turkmenistan\n- Uzbekistan\n\nElse you will only have access to podcasts.\n\u003c/details\u003e\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new YandexMusicSourceManager with the access token and register it\nvar yandex = new YandexMusicSourceManager(\"...\");\n\nplayerManager.registerSourceManager(yandex);\n```\n\n#### LavaLyrics\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new lyrics manager\nvar lyricsManager = new LyricsManager();\n\n// register source\nlyricsManager.registerLyricsManager(yandex);\n```\n\n\u003c/details\u003e\n\n#### LavaSearch\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new search manager\nvar searchManager = new SearchManager();\n\n// register source\nsearchManager.registerSearchManager(yandex);\n```\n\n\u003c/details\u003e\n\n---\n\n### Flowery Text-to-Speech\n\nGet list of all voices and languages supported [here](https://api.flowery.pw/v1/tts/voices)\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new FloweryTTSSourceManager \nplayerManager.registerSourceManager(new FloweryTTSSourceManager());\n// create a new FloweryTTSSourceManager with a default voice\nplayerManager.registerSourceManager(new FloweryTTSSourceManager(\"...\"));\n```\n\n---\n\n### Vk Music\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get user token\u003c/summary\u003e\n\n### WARNING!\n\n#### Carefully, this token can be used to access your personal data. Use a newly created account specifically for LavaSrc. This source is designed mainly for the RU region, 80% of songs in other regions will not be played.\n\n1. Go to the authorization page [Marusya application](https://oauth.vk.com/authorize?client_id=6463690\u0026scope=1073737727\u0026redirect_uri=https://oauth.vk.com/blank.html\u0026display=page\u0026response_type=token\u0026revoke=1)\n2. Authorize through your vk account.\n3. A link like this `https://oauth.vk.com/blank.html#access_token=$$$$$\u0026expires_in=0\u0026user_id=$$$$$@email=$$$$$@gmail.com`\n4. Copy your token and paste it into your config! Enjoy captcha-free vk music!\n\n\u003c/details\u003e\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new VkMusicSourceManager with the user token and register it\nplayerManager.registerSourceManager(new VkMusicSourceManager(\"...\");\n```\n\n#### LavaLyrics\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new lyrics manager\nvar lyricsManager = new LyricsManager();\n\n// register source\nlyricsManager.registerLyricsManager(vkmusic);\n```\n\n\u003c/details\u003e\n\n#### LavaSearch\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand\u003c/summary\u003e\n\n```java\n// create new search manager\nvar searchManager = new SearchManager();\n\n// register source\nsearchManager.registerSearchManager(vkmusic);\n```\n\n\u003c/details\u003e\n\n---\n\n### Tidal\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get tidal token\u003c/summary\u003e\n\nUse Google to get the tidal token.\n\n\u003c/details\u003e\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new TidalSourceManager with the token and register it\nvar tidal = new TidalSourceManager(countryCode, () -\u003e playerManager, new DefaultMirroringAudioTrackResolver(providers), \"your tidal token\");\n\nplayerManager.registerSourceManager(tidal);\n```\n\n### Qobuz\n\n\u003cdetails\u003e\n\u003csummary\u003eHow to get the userOauthToken\u003c/summary\u003e\n\n### WARNING!\n\n#### If you are using an older userOauthToken, you must specify the `x-app-id` in the config. Each userOauthToken is associated with a specific app ID. If you don't specify the `x-app-id` in the config, the latest fetched one will be used and it may not work. Remember that Qobuz requires a premium account to work properly.\n\nTo retrieve the token:\n1. Open Qobuz in any web browser and log in with your Qobuz account.\n2. Press **F12** to open the developer tools and navigate to the **Network** tab.\n3. Select any request and check the request headers.\n\u003e When looking for a request, you must find a POST request - not OPTIONS! \n4. Copy the value of the `x-user-auth-token` and paste it into the config.\n\n\u003c/details\u003e\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new QobuzAudioSourceManager with the userOauthToken and register it\nplayerManager.registerSourceManager(new QobuzAudioSourceManager(\"...\");\n```\n\n### yt-dlp\n\n```java\nAudioPlayerManager playerManager = new DefaultAudioPlayerManager();\n\n// create a new YTDLPSourceManager with the path to the yt-dlp executable and register it\nplayerManager.registerSourceManager(new YTDLPSourceManager(\"path/to/yt-dlp\"));\n```\n\n\n---\n## Supported URLs and Queries\n\n### Spotify\n\n* `spsearch:animals architects` (check out [Spotify Search Docs](https://developer.spotify.com/documentation/web-api/reference/search) for advanced search queries like isrc \u0026 co)\n* `sprec:seed_artists=3ZztVuWxHzNpl0THurTFCv,4MzJMcHQBl9SIYSjwWn8QW\u0026seed_genres=metalcore\u0026seed_tracks=5ofoB8PFmocBXFBEWVb6Vz,6I5zXzSDByTEmYZ7ePVQeB`\n  (only works in [Extended quota mode](https://developer.spotify.com/documentation/web-api/concepts/quota-modes#extended-quota-mode) or with anonymous tokens, check out [Spotify Recommendations Docs](https://developer.spotify.com/documentation/web-api/reference/get-recommendations) for the full query parameter list)\n* https://open.spotify.com/track/0eG08cBeKk0mzykKjw4hcQ\n* https://open.spotify.com/album/7qemUq4n71awwVPOaX7jw4\n* https://open.spotify.com/playlist/7HAO9R9v203gkaPAgknOMp (playlists can include local files if you enabled this via: `plugins.lavasrc.spotify.localFiles: true`. Please note `uri` \u0026 `isrc` will be `null` \u0026 `identifier` will be `\"local\"`)\n* https://open.spotify.com/artist/3ZztVuWxHzNpl0THurTFCv\n\n(including new regional links like https://open.spotify.com/intl-de/track/0eG08cBeKk0mzykKjw4hcQ)\n\n### Apple Music\n\n* `amsearch:animals architects`\n* https://music.apple.com/cy/album/animals/1533388849?i=1533388859\n* https://music.apple.com/cy/album/for-those-that-wish-to-exist/1533388849\n* https://music.apple.com/us/playlist/architects-essentials/pl.40e568c609ae4b1eba58b6e89f4cd6a5\n* https://music.apple.com/cy/artist/architects/182821355\n\n### Deezer\n\n* `dzsearch:animals architects`\n* `dzisrc:USEP42058010`\n* `dzrec:1090538082` (`dzrec:{TRACK_ID}`, `dzrec:track={TRACK_ID}` or `dzrec:artist={ARTIST_ID}`)\n* https://deezer.page.link/U6BTQ2Q1KpmNt2yh8\n* https://www.deezer.com/track/1090538082\n* https://www.deezer.com/album/175537082\n* https://www.deezer.com/playlist/8164349742\n* https://www.deezer.com/artist/159126\n\n### Yandex Music\n\n* `ymsearch:animals architects`\n* `ymrec:71663565` (`ymrec:{TRACK_ID}`)\n* https://music.yandex.ru/album/13886032/track/71663565\n* https://music.yandex.ru/album/13886032\n* https://music.yandex.ru/track/71663565\n* https://music.yandex.ru/users/yamusic-bestsongs/playlists/701626\n* https://music.yandex.ru/artist/701626\n\n### Flowery TTS\n\nYou can read about all the available options [here](https://flowery.pw/docs), a list of available voices is [here](https://api.flowery.pw/v1/tts/voices)\n\n* `ftts://hello%20world`\n* `ftts://hello%20world?audio_format=ogg_opus\u0026translate=False\u0026silence=1000\u0026speed=1.0\u0026voice=09924826-684f-51e9-825b-cf85aed2b2cf`\n\n### Vk Music\n\n* `vksearch:animals architects`\n* `vkrec:-2001015907_104015907` (`vkrec:{TRACK_ID}`)\n* https://vk.com/audio-2001015907_104015907\n* https://vk.ru/artist/shadxwbxrn\n* https://vk.com/audios700949584?q=phonk%20playlist\u0026z=audio_playlist-219343251_152_389941c481d1375ac0\n* https://vk.com/audios700949584?q=phonk%20playlist\u0026z=audio_playlist-219343251_152\n* https://vk.com/music/playlist/-219343251_152_389941c481d1375ac0\n* https://vk.ru/music/playlist/-219343251_152\n* https://vk.com/music/album/-2000228258_15228258_cafcb9e95f552acbb6?act=album\n* https://vk.com/music/album/-2000228258_15228258_cafcb9e95f552acbb6\n* https://vk.ru/music/album/-2000228258_15228258?act=album\n* https://vk.com/music/album/-2000228258_15228258\n* https://vk.com/audios700949584?q=phonk%20album\u0026z=audio_playlist-2000933493_13933493%2Fbe3494d46d310b0d0d\n* https://vk.ru/audios700949584?q=phonk%20album\u0026z=audio_playlist-2000933493_13933493\n\n### Tidal\n\n* `tdsearch:animals architects`\n* `tdrec:12345678` (`tdrec:{TRACK_ID}`)\n* https://tidal.com/browse/track/12345678\n* https://tidal.com/browse/album/12345678\n* https://tidal.com/browse/playlist/12345678\n* https://tidal.com/browse/artist/12345678\n\n### Qobuz \n\n* `qbsearch:animals architects`\n* `qbisrc:USEP42058010` (`qbisrc:ISRC`)\n* `qbrec:295210968` (`qbrec:{TRACK_ID}`)\n* https://open.qobuz.com/track/52151405\n* https://play.qobuz.com/album/c9wsrrjh49ftb\n* https://play.qobuz.com/playlist/24893079\n* https://play.qobuz.com/artist/2070395\n* https://www.qobuz.com/us-en/album/kesariya-pritam-arijit-singh-amitabh-bhattacharya/cxtiqss1up8ub\n\n### yt-dlp\n\n* `ytsearch:animals architects`\n* `ytsearch:\"USEP42058010\"` (`ytsearch:\"{ISRC}\"`)\n* https://www.youtube.com/watch?v=jdWhJcrrjQs\n* https://www.youtube.com/watch?v=yEBEg4NGVrw\u0026list=PLcZMZxR9uxC8EGrCPopQT1JjNTV6nnQ1G\n* https://youtu.be/jdWhJcrrjQs\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftopi314%2Flavasrc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftopi314%2Flavasrc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftopi314%2Flavasrc/lists"}