💾 Archived View for jojolepro.com › blog › 2022-12-18_demucs_on_nixos › index.gmi captured on 2023-05-24 at 17:33:18. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-01-29)

-=-=-=-=-=-=-

Jojolepro

Blog

Projects

Music

Quotes

GitHub

Archives

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 <nixpkgs> { };

# Usage: python3 -m demucs -d cpu --mp3 <input.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 <input_file.mp3>

The stems will be in the folder separated/htdemucs/<song_name>/*.mp3

Enjoy ~

(CC0) Joël Lupien 2020-2022

View page source