Roadmap
Priorities:
- Fix all the bugs that users have reported.
- Windows support.
- MacOS Intel support.
- Everything else.
Feature list:
- Add Traktor Smart playlists support.
- Add Traktor static playlists support. (see collection tree on the left side of the app)
Hypothetical feature list:
-
Support AMD GPUs acceleration. As of right now, AMD Rocm is not supported with PyTorch on Windows (only Linux). There is some experimental support, but it requires special system drivers. Not super UX-friendly, therefore not a good choice for NUO-STEMS. List of GPUs is also limited. And only Win 11.
Vulkan is not supported in PyTorch as well on Windows. Only on Android via ExecuTorch.
There seems to be a way to make ONNX work on AMD GPU on Windows, but not sure how stable it is.
Currently, NUO-STEMS uses frozen PyTorch for inference, but I had success previously testing ONNX. On MacOS it was slower, so I abandoned this idea. Anyways, my current priority is to make NVIDIA GPUs run properly on Windows using PyTorch. And when some future comes - I'll take a look at AMD GPUs and ONNX.
-
VirtualDJ integration exploration. Some users report that .stem.m4a files can be played in VirtualDJ.
Click to expand details
User A reported:
Ok. Just tried on Windows again, VDJ v2025 b8909 . It does indeed work (now) on Windows 💯
All the info I could retrieve from the Song that it worked with: Format Mpeg-4 Audio (AAC LC) .stem.m4a
Steps I took before I loaded the song in VirtualDJ:
- Created a Folder in Windows Explorer named 'VirtualDJ Stems'.
- Copied some tracks into that folder to test.
- VDJ Settings - Search keyword 'stem'
- Performance - stemsRealtimeSeparation: Fully Disabled
- Performance -stemsSavedStems: Manual
- Performance - stemsFix: Don't use GPU
- Performance - stemsSavedFolder -> Linked to folder I created
- Loaded .stems.m4a song directly from the 'VirtualDJ Stems'-folder I created
I tried EXACTLY the same on macOS (Ventura 13.6.9 on MacBook Pro 13 M1 16GB) as far as I can tell: Same Settings, Same .stems.m4a file, copied to 'VirtualDJ Stems'-folder I created on macOS. VirtualDJ version v2025-m b8909 . On macOS unfortunately it did NOT work for me ... 🙁 Will contact Virtual DJ Support.
To have 4 stems instead of 5 stems in VirtualDJ, you need to:
- Go get a 4 stem pad from the extensions rather than use the default 5
the combined drums stem is called rhythm in VDJ if you're doing any commands IIRC
also, if you ever want to get just the bass drum or just the hi hats (ish) just apply the filter to the drums
On the .stem.m4a song I loaded in VirtualDJ on Windows the 'Kick' stem is empty, the 'Hi Hat' stem is the Nuo Stems 'Drums' stem. All other stems are as you'd expect.
- Denon Engine DJ integration exploration.
- Upon primary investigation, it seems that Denon Engine encodes .stems files in a very weird way and none of the decoders (ffmpeg, sox, mp4box) can decode them.
- Low priority: Offline licensing. Ability to use NUO-STEMS 4 without an internet connection.
Bugs:
- Long tracks (e.g. 30 minutes and more) crash the app.
Left for history:
-
How to use another computer to convert stems? - already implemented in NUO-STEMS 4 - see migrate .stem.m4a to natively linked TP4 stems
Click to expand technical details
-
how to know AUDIO_ID of the original track on the computer which doesn't have Traktor installed (e.g. your gaming NVIDIA PC)?
- Your suggestion is actually quite clever... Hmmm... I can definitely write my own "hash" or for simplicity - "original filename" into .stem.m4a or .stem.mp4.
- Let me think about it for a day or two to understand the most robust way 🙂
- (e.g. I don't want to calculate hash for all entries on the main DJ computer to match with stems as it will be resource intensive and long process. But maybe it's the only reliable option and resource usage is not that high. Will have to experiment.)
From user in Discord: Hey Nuo, I may have just found out how the AUDIO_ID's are generated. Check this link (scroll to the bottom for the relevant C++ function) https://www.mail-archive.com/[email protected]/msg05061.html
I just re-wrote it in Python and can confirm it does actually generate a valid thumbnail of the waveform! I don't wanna get ahead of myself, but I'm assuming this means if we write a new function to basically do this process backwards, we should be able to generate a perfectly valid AUDIO_ID from nothing more than the original audio track 😄
My response: This is truly interesting find. BUT, you need to understand that Traktor has it's own audio decoders & decoders are pain in the ass (refer to 26ms issue here - https://pestrela.github.io/dj_kb/dj_collection_converters/ )
With NS4 I tried to get decoders behave the same as Traktor. In works on Apple Silicon at least, while Intel MacOS & Windows are subject to confirm this finding. AND, testing was limited to tracks that I have. It is subject to users of NS4 now to test whether there is truly no offset in beatgrid & hotcues between Original & Linked STEMS.
Only once this is confirmed - it's a valid option to investigate generating AUDIO_ID from the audio itself, without relying on collection.nml.
Some more exploration from me Discord message link:
Okay, some news on AUDIO_ID and potential ability to convert stems on gaming computer and then transfer to MacBook for DJing.
IF both of your computers are on the same platform (e.g. Win + Win or Mac + Mac) - things might work. IF NOT - Traktor decodes .m4a (aac/alac) files differently on MacOS vs Windows.
I've just tested with the same track on both systems & got different AUDIO_ID's for the same .m4a tracks.
I haven't tested other file formats yet, but this is already a huge issue.
This means that when you transfer .stem.mp4 files from Win, and link to originals on Mac - there will be offset between them. According to my tests, this offset is different from track to track, ranging from 0ms to 93 ms...
This might be okay for other formats. I'd like to hear your thoughts, guys
Edit: FLAC, MP3, AIFF are fine (same on Mac & Win)
Also, added some comments here: https://community.native-instruments.com/discussion/49074/bug-traktor-does-not-play-first-50ms-of-alac-files#latest
-