Skip to content

v3.6.0

Latest

Choose a tag to compare

@1Lucas1apk 1Lucas1apk released this 05 Feb 03:14
· 5 commits to v3 since this release
a610f5f

NodeLink v3.6.0

NodeLink v3.6.0 is a big update: more sources (newsources++) and 154 commits focused on core improvements. The audio pipeline was cleaned up by consolidating previously scattered streaming logic into a single, sturdier HLSHandler, bringing Twitter, Bilibili, Mixcloud, SoundCloud, and Gaana into one high-performance flow.

This release also adds SABR (Self-Adaptive Bitrate) by porting the same system used by the YouTube Web client, improving parity with native behavior and making YouTube streams recover more intelligently. With TrackCacheManager and a full refactor of source handling, every source in NodeLink is now seekable.

On top of that, the Deezer integration was rebuilt with native Blowfish-CBC decryption and full seek support, YouTube Lyrics Alignment was added for tight synchronization, and the FlowController now handles fading and gapless preloading. Client headers were refreshed for 2026, and validation was migrated to fastest-validator for faster API performance.

Commit count in v3.5.0..dev: 154. This file includes all commits from that range.

Added

  • 2087e0a add: implement SabrStream for adaptive bitrate streaming
  • 1e15863 add: implement Yandex Music source and lyrics integration
  • 8e9de73 add: bluesky source support with direct hls/mp4 streaming
  • 9847638 add: anghami source support
  • 8c577cb add: source Qobuz
  • a7ff46b add: source Twitter
  • 191634e add: source Tumblr
  • eca6973 add: eternalbox source integration with streaming
  • 602a747 add: implement letrasmus source and related functionality
  • 73abdf3 add: implement meanings functionality with letrasmus support
  • f264c51 add: enhance letrasmus meaning extraction
  • f6e493e add: implement Piper TTS source with configuration
  • a9de0be add: implement FlowController for managing audio processing flow
  • 0e131ec add: fading configuration and processing for audio playback
  • f37ae69 add: implement preload functionality for gapless track transitions
  • 5172ba0 add: implement YouTube lyrics alignment and enhance lyrics loading logic
  • 9a12694 add: implement mobile token handling and canvas fetching for Spotify
  • 852dbb4 add: include sp_dc for mobile token retrieval in configuration
  • b060ddb add: implement WikipediaMeaning class
  • 152cee6 add: youtube live chat support via websocket
  • 6ca26a6 add: audius source implementation
  • 52892db add: implement lyrics subscription and unsubscription endpoints
  • a017053 add: finishbuffering event to sabr
  • 3da9059 add: webParentTools client and update Android SDK version
  • 98bb706 add: webremix client support
  • 2531ae5 add: native spotify auth tokener
  • 3d28928 add: initialize _lyricsBasePackets in track start logic
  • 4dbff0f add: feature request template for Winter of Code
  • 867497d add: Winter of Code issue report template
  • d630c79 add: include star history section in README.md
  • 67dce8d add: architecture diagram in README.md
  • 998e8c4 add: implement Blowfish CBC decryption for Deezer stream
  • 69070ca add: eventTimeoutMs config & use in waitEvent

Fixed

  • afd5db2 fix: prevent Denial of Service (DoS) via memory exhaustion
  • ee983a9 fix: youtube OAuth class not found, credentialManager being undefined
  • 1b2b913 fix: set IV for Blowfish CBC decryption in Deezer source
  • 87d72cc fix: change module export to ES6 default export for BlowfishCBC
  • ab50a6c fix: deezer playback and add seekeable support
  • 8790860 fix: auto-inject openssl-legacy-provider if bf-cbc is missing
  • 17a4616 fix: resolve 500 errors on youtube mix playlists for android
  • 54bd9d8 fix: enhance waitEvent method with timeout handling
  • dda7af3 fix: soundcloud playback & caching
  • 1593394 fix: shazam duration not beign extracted
  • 01609ab fix: correct highWaterMark value in FlowController constructor
  • 52025fb fix: race condition on finishBuffering
  • 929552b fix: filter out invalid spacer elements in android client search
  • e430d48 fix: update regex patterns in Deezer and Tidal sources
  • d03f692 fix: add missing getBestMatch import in deezer
  • d4d5aaa fix: anghami source search term and artwork url
  • 00b45c4 fix: add youtube mirror fallback to audiomack if stream url is not found
  • e2dc48f fix: add youtube fallback to gaana and jiosaavn
  • 519ef87 fix: disable hacky fix for bun
  • fe26ad6 fix: playlist title extraction for ytmusic
  • 5b0a0b0 fix: webremix client exporting
  • 7e9b9a1 fix: lyricsline event not beign sent
  • b975122 fix: improve HTML decoding in LetrasMusMeaning
  • 9e3cc05 fix: enhance lyrics processing and synchronization in Player class
  • 5069274 fix: remove duplicated compositeBuffer
  • 71cda9b fix: enhance decoding loop management in SymphoniaDecoderStream
  • 107d13d fix: update _lyricsBasePackets initialization
  • 57c714c fix: improve audius configuration validation
  • 47a61b2 fix: correctly decode and validate basic auth for metrics
  • 3b4aa72 fix: enhance player request handling with dynamic signature timestamp

Updated & Improved

  • c961e7d improve: implement universal and robust HLS handler (HLSHANDLER)
  • 2cb3c71 improve: implement TrackCacheManager and all source seekable
  • 1e4dbbd improve: fully refactor the SABR implementation
  • f9959c6 update: implement SABR recovery mechanism for stream stalls
  • c801703 update: add bandwidth estimator for sabr segments
  • c95d81a improve: reduce sabr allocations & potoken bugfixes
  • 0f1b6d9 update: add sabr and potoken flags to config
  • 6f1b773 update: rename potoke -> potoken
  • 651769a update: move sabr files into a folder
  • 795340b update: migrate Twitter to HLSHandler
  • a4db2e5 update: migrate Bilibili to HLSHandler
  • cf89082 update: migrate Mixcloud to HLSHandler
  • e6ed545 update: migrate Gaana and SoundCloud to HLSHandler
  • 25aef1b update: migrate YouTube HLS to HLSHandler
  • fa1a9af improve: implement HLSHandler and PlaylistParser
  • afd7923 improve: add spotify isrc extraction & optimize metadata
  • 6c39ebc update: add seek support for sabr & format with biome
  • 2a19350 improve: spotify source with native autogenerated playlist support
  • d15594b improve: replace myzod with fastest-validator
  • ce15898 update: add zstd compression support
  • 63cd113 improve: make shazam use isrc to mirror songs
  • 5a99e4d improve: add icy metadata handling and stream metadata event
  • 12f905c improve: reorganize playback structure and worker files
  • 8911c99 update: license to GPLv3 (then BSD 3-Clause)
  • c77fb39 update: license from BSD 2-Clause to BSD 3-Clause
  • d049baa update: adapt to new visitordata & web_remix changes
  • 300cca1 update: add search support for amazonmusic
  • a69d8ad improve: amazonmusic duration extractor & caching
  • 3f98a34 update: support deezer isrc search
  • 999dc9e update: add 'Web' client to playback and resolve lists in config
  • a312897 update: modify client list initialization in YouTubeSource
  • f58d5b2 update: enhance SABR stream handling and seeking
  • 87b2433 update: replace tv client user-agent
  • bf97c72 improve: enhance text cleaning and decoding in lyrics extraction
  • ca045bd improve: enhance LRC parsing logic
  • 0c66624 improve: move lyrics alignment logic
  • 5340c71 improve: implement DES ECB decryption
  • e430be0 improve: streamline voice fetching in FlowerySource
  • 5bf13e1 update: replace tvhtml_embedded with webembedded
  • d00e78e improve: add duration calculation for playlist in BlueskySource
  • ae03eee improve: refine BlueskySource with enhanced service endpoint
  • 68ed555 improve: enhance lyrics synchronization in Player class
  • 6577d5c improve: enhance Yandex Music source stream handling
  • 2f46f21 update: make vimeo use hls by default
  • 30ee35c improve: add RSS and SongLink source classes
  • 36957b5 improve: refactor error handling and optimize key
  • cefb230 improve: rename variables for clarity in TwitterSource
  • e31c049 improve: update loadStream method
  • 4816e44 improve: streamline VKMusic source handling
  • ba499a9 update: trim identifier and refactor regex matching
  • ed70cb2 update: format amazonmusic with biome & update headers
  • 4e4c854 remove: clientName and clientVersion from ytContext
  • 954c053 improve: add username support for Bearer and Basic auth
  • f3ddede update: limit content-length to 10mb on api
  • 3a83df1 update: add support for soundcloud aac hls formats
  • 610e61a Update lastfm.js
  • 95268a8 Update lastfm.js
  • 795379f Update lastfm.js
  • 3cb4ada Refactor LastFMSource to support API searches
  • f7e67c5 Update jiosaavn.js
  • 8f9f95a Update gaana.js
  • e5c8ab5 Update audiomack.js
  • 9695063 Update lastfm.js
  • a1b9885 Update lastfm.js
  • 6d42262 Update lastfm.js
  • 2eb11a2 Update audius.js
  • 2035866 Update audius.js
  • 75c8d05 Update index.js
  • 1703705 Update audius.js
  • 14b4bd9 Update audius.js
  • bcbd8d5 Update config.default.js
  • 58b21e2 Update audius.js
  • 46b8d9c Update config.default.js
  • 83b0652 Update index.js
  • f47fa51 update: bump version to 3.6.0

What's Changed

Contributors

  • 1lucas1apk
  • ToddyTheNoobDud (or toddynnn)
  • Priyanshuuuu
  • southctrl
  • SinghAman21
  • bre4d777
  • UnschooledGamer
  • notinsane-dev
  • Emmanuel Lobo
  • AV

Full Changelog: v3.5.0...v3.6.0