Skip to content

sync: v3 < dev - #217

Open
1Lucas1apk wants to merge 127 commits into
v3from
dev
Open

sync: v3 < dev#217
1Lucas1apk wants to merge 127 commits into
v3from
dev

Conversation

@1Lucas1apk

@1Lucas1apk 1Lucas1apk commented Aug 4, 2026

Copy link
Copy Markdown
Member

Changes

Release v3.9 with new features, improvements, bug fixes, performance optimizations, and dependency updates.

Why

Merges all changes from the dev branch into v3 to prepare the v3.9 release.

Additional information

This pull request contains the complete set of changes planned for the v3.9 release.

ToddyTheNoobDud and others added 30 commits April 30, 2026 13:50
this is the gap between heapTotal and the v8 heap space, this revels v8
internal memory.
fixes the npm build error.
Added support for playing tiktok videos.
After some researching and testing, aead_xchacha20_poly1305_rtpsize runs
natively on libsodum + has support for encrypt_into apis, that on my
machine, gave an 300% speed boost in decrypt/encrypt packets, since it
runs on sodium-native or libsodium-wrappers, only by running on these
packages makes it faster. Also tested with bun, sodium-native is still
faster than it by ~80%.
Fixed fadeTo/tapeTo/setFadeVolume silently no-oping on
connection.audioStream   (missing from _assignStream proxy)
Fixed 'audioStream' event listener being dead code (voice lib never
emits it)
Fixed 'reconnecting' connection status never firing (voice lib uses
connecting state, not reconnecting)
Fixed pause detection broken (voice lib uses idle+reason='paused', not
status='paused')
Fixed double-destroy race in _cleanupCurrentAudioStream
Fixed stuck detection conflict (set stuckTimeout above player threshold)
Fixed force=true reconnect being no-op when token+endpoint unchanged
Fixed ping -1 not caught by nullish coalescing

Implement setLoudnessNormalizer runtime toggle via
VolumeTransformer.setAGCEnabled
Handle circuit breaker disconnect reason
Update type declarations to match actual voice lib behavior
Remove 'seamless_bridge' from playing reason check, add 'unpaused'
Formmated the entire code with biome.
Replaced the circular ring buffer (RING_SIZE, writePos/readPos tracking,
swap buffer for wrap-around copies) with a straightforward leftover
strategy. Incoming chunks are concatenated with any leftover bytes using
bufferPool, full frames are encoded in a single pass, and remaining
bytes are saved for the next transform call. This reduces memory
overhead (no fixed 512KB ring allocation), eliminates wrap-around
complexity, and properly releases pooled buffers on error and flush.

After testing this for 2d, managed to get a 97% buffer reuse, which
alones gets an ~200/400mb saving in memory.
since its gonna be an LTS in october, and can run TS natively, i have
updated the experimental flag and fixed an error on config validator
causing it to crash on startup.
Since tidal does not seem to work now, will be default to qobuz.
Replaced the fragile NODE_UNIQUE_ID environment variable approach with
an explicit two-step identification protocol:

Master sends clusterId via IPC on fork
Worker confirms identity with HELLO packet (incl. PID) over event socket

Changed eventSockets from Set to Map keyed by worker ID. This enables
reliable mapping, stale socket cleanup on reconnect, and correct stats
attribution

Fixes an issue where /v4/workers showed complete stats only for worker
ID 1 all workers reported workerId: 1, so their stats overwrote each
other, leaving other worker IDs with only the initial { players: 0,
playingPlayers: 0 } stub.
resampler.destroy() was being called twice.
Lazily allocate tape/scratch effect buffers only when those effects are
used, instead of retaining them for every playback pipeline.

Lowered oversized AAC and WebM demux ring buffer defaults that were
retained per active stream.

Added teardown cleanup for playback filters and mixers so ended streams
release native buffers promptly.

From my tests on the playback worker, with 19 active players, the
JSArrayBufferData went from ~146MB to ~19.5MB.
This should help with client compatibility.
* fix: dynamicly spelling to dynamically

Signed-off-by: Ramkrishna <144999854+ramsquishna@users.noreply.github.com>

* fix: exaustive spelling to exhaustive

Signed-off-by: Ramkrishna <144999854+ramsquishna@users.noreply.github.com>

---------

Signed-off-by: Ramkrishna <144999854+ramsquishna@users.noreply.github.com>
Symphonia v0.6.0
Rubato v2.0.0
And fixed FLAC playback, ig thats good.

New repo: https://github.com/ToddyTheNoobDud/symphonia-decoder
Pass abort signal into DASH segment fetches so stop() cancels in-flight
downloads. Refactor DASHHandler backpressure from data-event drain
detection to _read()-driven read-waiters. Replace .pipe() with
pipeline() for
proper error propagation and cleanup. Remove removeAllListeners() from
streamProcessor and AudioMixer in favor of owned listener cleanup.
Delete unreachable duplicate writableNeedDrain early-return in YouTube
recovery.

Also fixed an 403 error happening on bandcamp (by adding an Referer, and
fixed getTrackUrl capturing an trailing JSON.)
This seems to be no longer experimental and can be used in prod, since
bun got some major stability updates.
Also fix a crash ocurring during startup.
= and others added 2 commits August 6, 2026 07:39
Since nodelink moved to typescript, updated readme and dockerfile switching the file
extension to .ts, and also updated the dependencies list in readme.
Signed-off-by: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com>
@UnschooledGamer

Copy link
Copy Markdown
Collaborator

oh it's 3.9

@UnschooledGamer

Copy link
Copy Markdown
Collaborator

nvm, I'll leave it as is on 3.8.1, so that Lucas & toddy can bump it to 3.9 when they merge or pre-merge

1Lucas1apk and others added 8 commits August 7, 2026 11:25
update: readme & dockerfile to reflect new changes
fix: reset fading start postion for gapless
Youtube seems to be rolling out age checks for searchs that has
sugestive names (or swear words, etc). This should fix this check
blocking the search.
fix: use seekable resource for seeks instead of refetching
stops GET requests from creating players (only PATCH should create them)
and prevents disconnected players from being marked as stuck
@1Lucas1apk

Copy link
Copy Markdown
Member Author

It's version v3.9, which has additions that weren't widely reported and fixes that need to be moved to the main release; it's accumulated quite a bit already.

ToddyTheNoobDud and others added 17 commits August 12, 2026 14:37
Added some missing fields + special handling for py clients that sends
True/False in camelCase

note: the added clients does not work 100% with nodelink, because they
din't implement support for handling 'nodelinkLoad' in stats, but as
from i tested, the playback/searching/resolving/etc all worked using
their examples.
Added mirrorOfficialAlbums option to redirect Official Album videos

to ytmusic. Injects mirroredTrack in pluginInfo so clients receive

the official metadata. Added strict title/author search cleaning.
This should fix some songs returning no search results and No suitable
alternative stream found.
Allows users to disable reading and writing caches to the disk by setting cache.diskEnabled to

false in their config.ts. The cache system will then operate entirely in-memory.
Should fix not matching for soundcloud urls that contains 'on.' on it
- Base smart crossfade engine with ahead-of-time musical analysis
- Harmonic Camelot matching and asymmetric bass-swap
- Vocal anti-clash ducking and Schroeder reverb tails
- Seek stability with safety buffers for community testing
ANDROID_VR has been giving some problems recently, visionOs seems to be
more reliable.
fix(youtube): resolve letterboxed hqdefault thumbnails
- Smooth equal-power volume curves to eliminate sudden audio changes

- Progressive vocal ducking ramp to keep speech clear without harsh cuts

- Multi-band crossover with clean bass swap to prevent low-end clashes

- Mid/Side 3D stereo morphing for smooth spatial transitions between tracks

- High-pass filter sweeps, vinyl tape stops, spinbacks, and dub delay tails

- Stutter build risers and energy lifting for seamless high-energy mix points

- Background pre-analysis queue to prepare queued songs ahead of time smoothly
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants