Demucs 4.0.0 on Nix ================================================================================ Splitting tracks into their stems is fun! It's great for karaoke or to listen to little details you would not notice otherwise in your favorite songs. Want to use demucs to do that on Nix/NixOS? Follow along! Note: python programs have the fun tendency to break every month or so. This mini tutorial will become outdated extremely fast. nix-shell --------------------------------------------------------------------------------- We'll use nix-shell to create an environment. Then, we'll use pip to install demucs. We'll fix an issue with LD not finding libc++. Ready? Go! Create a file called shell.nix (or whatever.) Paste the following (and read the comments if you want to understand). #``` with import { }; # Usage: python3 -m demucs -d cpu --mp3 let pythonPackages = python3Packages; in pkgs.mkShell rec { name = "impurePythonEnv"; venvDir = "./.venv"; buildInputs = [ pythonPackages.python # This executes some shell code to initialize a venv in $venvDir before # dropping into the shell pythonPackages.venvShellHook # Those are dependencies that we would like to use from nixpkgs, which will # add them to PYTHONPATH and thus make them accessible from within the venv. pythonPackages.numpy pythonPackages.requests # In this particular example, in order to compile any binary extensions they may # require, the Python modules listed in the hypothetical requirements.txt need # the following packages to be installed locally: openssl git ]; # Run this command, only after creating the virtual environment postVenvCreation = '' unset SOURCE_DATE_EPOCH #pip install demucs pip install 'demucs=4.0.0' ''; # Now we can execute any commands within the virtual environment. # This is optional and can be left out to run pip manually. postShellHook = '' LD_LIBRARY_PATH=${stdenv.cc.cc.lib}/lib/ # allow pip to install wheels unset SOURCE_DATE_EPOCH ''; } #``` Run #``` nix-shell shell.nix #``` If you are lucky, the install will complete without blowing up in your face. Using demucs --------------------------------------------------------------------------------- I use the following command line to use the cpu version: #``` python3 -m demucs -d cpu --mp3 #``` The stems will be in the folder separated/htdemucs//*.mp3 Enjoy ~