From 8e9ba22e71365496d3d16df4f7b10be3f6219458 Mon Sep 17 00:00:00 2001 From: Antoine C Date: Thu, 16 May 2024 00:39:44 +0100 Subject: [PATCH] feat: initial feature and project setup --- .codespellignore | 1 + .dockerignore | 10 + .github/ISSUE_TEMPLATE/bug.yaml | 28 +++ .github/ISSUE_TEMPLATE/feature_request.yaml | 16 ++ .github/dependabot.yml | 6 + .github/labeler.yml | 24 ++ .github/workflows/build.yml | 111 +++++++++ .github/workflows/labeler.yml | 28 +++ .github/workflows/pre-commit.yml | 79 +++++++ .github/workflows/stale.yml | 30 +++ .gitignore | 4 + .pre-commit-config.yaml | 39 ++++ CONTRIBUTING.md | 78 +++++++ Dockerfile | 24 ++ LICENSE | 21 ++ README.md | 217 +++++++++++++++++- pyproject.toml | 3 + requirements.txt | 8 + setup.py | 113 ++++++++++ stembox/LICENSE | 165 ++++++++++++++ stembox/stembox.pxd | 10 + stembox/stembox.pyx | 104 +++++++++ stembox/stembox_api.cpp | 223 ++++++++++++++++++ stembox/stembox_api.h | 29 +++ stemgen/__init__.py | 1 + stemgen/__main__.py | 236 ++++++++++++++++++++ stemgen/cli.py | 72 ++++++ stemgen/constant.py | 5 + stemgen/demucs.py | 69 ++++++ stemgen/nistemfile.py | 93 ++++++++ stemgen/track.py | 38 ++++ 31 files changed, 1884 insertions(+), 1 deletion(-) create mode 100644 .codespellignore create mode 100644 .dockerignore create mode 100644 .github/ISSUE_TEMPLATE/bug.yaml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yaml create mode 100644 .github/dependabot.yml create mode 100644 .github/labeler.yml create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/labeler.yml create mode 100644 .github/workflows/pre-commit.yml create mode 100644 .github/workflows/stale.yml create mode 100644 .pre-commit-config.yaml create mode 100644 CONTRIBUTING.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 stembox/LICENSE create mode 100644 stembox/stembox.pxd create mode 100644 stembox/stembox.pyx create mode 100644 stembox/stembox_api.cpp create mode 100644 stembox/stembox_api.h create mode 100644 stemgen/__init__.py create mode 100644 stemgen/__main__.py create mode 100644 stemgen/cli.py create mode 100644 stemgen/constant.py create mode 100644 stemgen/demucs.py create mode 100644 stemgen/nistemfile.py create mode 100644 stemgen/track.py diff --git a/.codespellignore b/.codespellignore new file mode 100644 index 0000000..b35ba4c --- /dev/null +++ b/.codespellignore @@ -0,0 +1 @@ +demucs diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0f3de92 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +build +.codespellignore +dist +.dockerignore +Dockerfile +.git +.gitignore +.pre-commit-config.yaml +UNKNOWN.egg-info +.vscode diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml new file mode 100644 index 0000000..4582029 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -0,0 +1,28 @@ +name: 🐛 Bug Report +description: | + Describe your problem here. +labels: [bug] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: textarea + id: description + attributes: + label: Bug Description + description: Tell us what happens and what should happen instead. + validations: + required: true + - type: input + id: version + attributes: + label: Version + description: What version of stemgen are you running? + placeholder: 0.1.0, main, ... + - type: input + id: os + attributes: + label: OS + description: What operating system (and distribution if you're on Linux) are you running? + placeholder: Windows 11, macOS Big Sur, Ubuntu 22.04, ... diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 0000000..149a529 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,16 @@ +name: 🚀 Feature Request +description: | + What feature would you like to see added to stemgen? +labels: [feature] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to suggest a new feature! + - type: textarea + id: description + attributes: + label: Feature Description + description: Describe describe your use-case, not yet supported and a possible solution. + validations: + required: true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..5ace460 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 0000000..467cc9e --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,24 @@ +build: + - changed-files: + - any-glob-to-any-file: + - Dockerfile + - setup.py + - pyproject.toml + - requirements.txt + - .github/workflows/** + +stembox: + - changed-files: + - any-glob-to-any-file: + - stembox/** + +stemgen: + - changed-files: + - any-glob-to-any-file: + - stemgen/** + +code quality: + - changed-files: + - any-glob-to-any-file: + - .pre-commit-config.yaml + - .codespellignore diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..7602a8f --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,111 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow + +name: Build + +on: + push: + pull_request: + +permissions: + contents: read # to fetch code (actions/checkout) + +env: + REGISTRY_IMAGE: aclmb/stemgen + +jobs: + build: + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v4 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 0000000..997bfd8 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,28 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow +# +# This workflow will triage pull requests and apply a label based on the +# paths that are modified in the pull request. +# +# To use this workflow, you will need to set up a .github/labeler.yml +# file with configuration. For more information, see: +# https://github.com/actions/labeler + +name: "Pull Request Labeler" +on: + - pull_request_target + +permissions: + contents: read + +jobs: + triage: + permissions: + contents: read # for actions/labeler to determine modified files + pull-requests: write # for actions/labeler to add labels to PRs + runs-on: ubuntu-latest + + steps: + - uses: actions/labeler@v5.0.0 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + sync-labels: false diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..f2ed40f --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,79 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow + +name: pre-commit + +on: + pull_request: + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + pre-commit: + name: Detecting code style issues + runs-on: ubuntu-latest + # The Dockerfile for this container can be found at: + # https://github.com/Holzhaus/mixxx-ci-docker + container: holzhaus/mixxx-ci:20220930@sha256:c219b780280a21566111e8bd3df7a0d495922aca96a927aa1fef12b2095fa5d8 + steps: + - name: "Check out repository" + uses: actions/checkout@v4.1.5 + with: + # Unfortunately we need the whole history and can't use a shallow clone + # because the Appstream Metadata hook parses the history to find the + # latest changelog modification date. Otherwise, `fetch-depth: 2` would + # suffice. + fetch-depth: 0 + + - name: "Add GitHub workspace as a safe directory" + # Without this, git commands will fail due to mismatching permissions in + # the container. See actions/runner#2033 for details. + # + # The actions/checkout action should already take care of this thanks to + # commit actions/checkout@55fd82fc42c0cdd6f1f480dd23f60636a42f6f5c, but + # it seems like that's not working properly. + run: | + git config --global --add safe.directory "${GITHUB_WORKSPACE}" + git config --global --list + + - name: "Detect code style issues (push)" + uses: pre-commit/action@v3.0.1 + if: github.event_name == 'push' + # There are too many files in the repo that have formatting issues. We'll + # disable these checks for now when pushing directly (but still run these + # on Pull Requests!). + env: + SKIP: clang-format,eslint,no-commit-to-branch + + - name: "Detect code style issues (pull_request)" + uses: pre-commit/action@v3.0.1 + if: github.event_name == 'pull_request' + env: + SKIP: no-commit-to-branch + with: + # HEAD is the not yet integrated PR merge commit +refs/pull/xxxx/merge + # HEAD^1 is the PR target branch and HEAD^2 is the HEAD of the source branch + extra_args: --from-ref HEAD^1 --to-ref HEAD + + - name: "Generate patch file" + if: failure() + run: | + git diff-index -p HEAD > "${PATCH_FILE}" + [ -s "${PATCH_FILE}" ] && echo "UPLOAD_PATCH_FILE=${PATCH_FILE}" >> "${GITHUB_ENV}" + shell: bash + env: + PATCH_FILE: pre-commit.patch + + - name: "Upload patch artifact" + if: failure() && env.UPLOAD_PATCH_FILE != null + uses: actions/upload-artifact@v4.3.3 + with: + name: ${{ env.UPLOAD_PATCH_FILE }} + path: ${{ env.UPLOAD_PATCH_FILE }} + + - name: "Upload pre-commit.log" + if: failure() && env.UPLOAD_PATCH_FILE == null + uses: actions/upload-artifact@v4.3.3 + with: + name: pre-commit.log + path: /github/home/.cache/pre-commit/pre-commit.log diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000..9dd72f0 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,30 @@ +# yaml-language-server: $schema=https://json.schemastore.org/github-workflow + +name: "Detect stale issues and pull request" +on: + schedule: + - cron: "0 0 * * *" + +permissions: + contents: read + +jobs: + stale: + permissions: + issues: write # for actions/stale to close stale issues + pull-requests: write # for actions/stale to close stale PRs + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + stale-pr-message: "This PR is marked as stale because it has been open 90 days with no activity." + stale-pr-label: "stale" + days-before-pr-stale: 90 + days-before-pr-close: -1 + exempt-pr-labels: "needs review" + close-issue-message: "Expired for stemgen because there has been no activity for 60 days." + stale-issue-label: "stale" + days-before-issue-stale: 60 + days-before-issue-close: 0 + only-issue-labels: "incomplete" diff --git a/.gitignore b/.gitignore index 68bc17f..ad019e8 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,7 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + + +# Project specific +stembox/stembox.cpp diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..a6ca0c0 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,39 @@ +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-merge-conflict +- repo: https://github.com/pre-commit/mirrors-clang-format + rev: v18.1.3 + hooks: + - id: clang-format +- repo: https://github.com/psf/black + rev: 24.4.2 + hooks: + - id: black +- repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.28.3 + hooks: + - id: check-github-workflows +- repo: https://github.com/pycqa/flake8 + rev: "7.0.0" + hooks: + - id: flake8 + files: ^tools/.*$ + types: [text, python] +- repo: https://github.com/DavidAnson/markdownlint-cli2 + rev: v0.13.0 + hooks: + - id: markdownlint-cli2 +- repo: https://github.com/codespell-project/codespell + rev: v2.2.6 + hooks: + - id: codespell + args: [ + --ignore-words, + .codespellignore, + --write-changes + ] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1e6d124 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,78 @@ +# Contributing to Stemgen + +We love your input! We want to make contributing to this project as easy and +transparent as possible, whether it's: + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features +- Becoming a maintainer + +## We Develop with Github + +We use GitHub to host code, to track issues and feature requests, as well as +accept pull requests. + +**We use [Git Flow](https://guides.github.com/introduction/flow/index.html), +so all code changes happen through pull requests** + +Pull requests are the best way to propose changes to the codebase (we use +[Git Flow](https://guides.github.com/introduction/flow/index.html)). We +actively welcome your pull requests: + +1. Fork the repo and create your branch from `main`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Make sure your code lints. +6. Issue that pull request! + +## Any contributions you make will be under the MIT Software License + +In short, when you submit code changes, your submissions are understood to be +under the same [MIT License](http://choosealicense.com/licenses/mit/) that +covers the project. Feel free to contact the maintainers if that's a concern. + +## Report bugs using Github's [issues](https://github.com/acolombier/stemgen/issues) + +We use GitHub issues to track public bugs. Report a bug by +[opening a new issue](https://github.com/acolombier/stemgen/issues/new/choose); +it's that easy! + +## Write bug reports with detail, background, and sample code + +[This is an example](http://stackoverflow.com/q/12488905/180626) of a good bug +report. Here's +[another example from Craig Hockenberry](http://www.openradar.me/11905408). + +**Great Bug Reports** tend to have: + +- A quick summary and/or background +- Steps to reproduce + - Be specific! + - Give sample code if you can. + [This Stackoverflow question](http://stackoverflow.com/q/12488905/180626) + includes sample code that *anyone* with a basic setup can run to reproduce +- What you expected would happen +- What actually happens +- Notes (possibly including why you think this might be happening, or stuff you + tried that didn't work) + +Remember, we all *love* thorough bug reports. + +## Use a Consistent Coding Style + +Linting and code style consistency are assured by pre-commit. Make sure to +install the hooks, by running `pre-commit install`. You can also run +`pre-commit` at anytime to format your code as it is expected in this project. + +## License + +By contributing, you agree that your contributions will be licensed under its +MIT License and LGPL 3.0 for the stembox component. + +## References + +This document was adapted from the open-source contribution guidelines for +[Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1966ed1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM python:3.10 as build +WORKDIR /build +RUN wget -O taglib.tar.gz https://github.com/taglib/taglib/releases/download/v2.0.1/taglib-2.0.1.tar.gz && \ + tar xf taglib.tar.gz && \ + apt update && apt install -y cmake libutfcpp-dev && \ + cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON taglib-2.0.1 && \ + make -j && \ + make install && \ + pip install build +ADD . . +RUN python3 -m build --wheel && \ + find /usr/lib -name libtag.so.2.0.1 -exec cp '{}' /build/libtag.so.2.0.1 \; + + +FROM python:3.10 +COPY --from=build /build/libtag.so.2.0.1 /usr/local/lib/libtag.so.2.0.1 +COPY --from=build /build/dist/stemgen-*.whl /tmp/ +COPY --from=build /usr/include/taglib/ /usr/include/taglib/ +RUN ln -s /usr/local/lib/libtag.so.2.0.1 /usr/local/lib/libtag.so && \ + python -m pip install /tmp/stemgen-*.whl && \ + apt update && apt install -y ffmpeg && \ + pip install --upgrade --force torchaudio && \ + rm -rf /root/.cache /tmp/* && rm -rf /usr/include/taglib/ +CMD ["/usr/local/bin/stemgen"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0c21c1c --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Antoine Colombier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 71b3489..f2670eb 100644 --- a/README.md +++ b/README.md @@ -1 +1,216 @@ -# stemgen \ No newline at end of file +# Stemgen + +![GitHub License](https://img.shields.io/github/license/acolombier/stemgen) +![GitHub Release](https://img.shields.io/github/v/release/acolombier/stemgen?include_prereleases) +![Docker Image](https://img.shields.io/docker/v/aclmb/stemgen) + +> NOTE: Stemgen currently doesn't have a stable release. Please use carefully! + +Stemgen is a library and tool that can be used to generate NI stem files +from most audio files. It is inspired from the the tool of the same name +[Stemgen](https://stemgen.dev). Here is how it compares: + +- Transparent: no binaries or opaque processes required the generation. + Everything is available open source, from the + [demucsing](https://github.com/facebookresearch/demucs), till the STEM + metadata generation. +- More flexible: support virtually any input format and codex and allows full + customisation of the stem metadata. +- Dynamic: easy to ship or run on the go with Docker, or to script to + generate many STEM at once. + +Under the hood, it uses: + +- Facebook's [demucs](https://github.com/facebookresearch/demucs) to split + the signal into multiple audio stream +- Torch to generate the audio container with all the stream +- Some Taglib sources to generate the STEM metadata +- Taglib to manage the traditional audio metadata + +## Install + +> Currently, the tool was only tested on `linux/amd64`. All used dependency +> are meant to be cross platform, but some additional work my be required to +> get it working natively. Please +> [open a issue](https://github.com/acolombier/stemgen/issues) if your platform +> isn't supported + +```sh +pip install -e "git+https://github.com/acolombier/stemgen.git@0.1.0#egg=stemgen" +``` + +### Ubuntu 22.04 / Debian Bookworm / PopOS 22.04 + +```sh +# Install FFmpeg and TagLib 2.0 +sudo apt install -y ffmpeg cmake libutfcpp-dev +wget -O taglib.tar.gz https://github.com/taglib/taglib/releases/download/v2.0.1/taglib-2.0.1.tar.gz +tar xf taglib.tar.gz +cd taglib-2.0.1 +cmake -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON . +make -j +sudo make install +cd .. +rm -rf taglib-2.0.1 taglib.tar.gz +``` + +## Usage + +```text +Usage: stemgen [OPTIONS] FILES... OUTPUT + + Generate a NI STEM file out of an audio stereo file. + + FILES path(s) to a file supported by the FFmpeg codec available on your + machine + + OUTPUT path to an existing directory where to store the generated STEM + file(s) + +Options: + --model Demucs model. + --device Device for the demucs model inference + --ext TEXT Extension for the STEM file + --force Proceed even if the output file already + exists + --verbose Display verbose information which may be + useful for debugging + --repo DIRECTORY The local directory to use to fetch models + for demucs. + --model TEXT The model to use with demucs. Use --list- + models to list the supported models. Default + to htdemucs fine-trained + --shifts INTEGER Number of random shifts for equivariant + stabilization to use for demucs. Increase + separation time but improves quality for + Demucs. 10 was used in the original paper. + --overlap FLOAT Overlap between the splits to use for + demucs. + --jobs INTEGER The number of jobs to use for demucs. + --use-alac / --use-aac The codec to use for the stem stream stored + in the output MP4. + --drum-stem-label