{"id":13457344,"url":"https://github.com/JeffreyCA/spleeter-web","last_synced_at":"2025-03-24T12:31:24.476Z","repository":{"id":36977258,"uuid":"222361481","full_name":"JeffreyCA/spleeter-web","owner":"JeffreyCA","description":"Self-hostable web app for isolating the vocal, accompaniment, bass, and drums of any song. Supports Spleeter, D3Net, Demucs, Tasnet, X-UMX. Built with React and Django.","archived":false,"fork":false,"pushed_at":"2024-05-01T10:57:47.000Z","size":10910,"stargazers_count":384,"open_issues_count":21,"forks_count":71,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-05-01T13:37:12.374Z","etag":null,"topics":["crossnet-open-unmix","d3net","demucs","django","react","source-separation","spleeter","tasnet","x-umx"],"latest_commit_sha":null,"homepage":"https://jeffreyca.github.io/spleeter-web/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JeffreyCA.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["JeffreyCA"]}},"created_at":"2019-11-18T04:09:48.000Z","updated_at":"2024-05-03T11:43:40.817Z","dependencies_parsed_at":"2023-09-28T10:01:41.839Z","dependency_job_id":"31824565-7c8e-4f11-a74b-f0cd05f6059c","html_url":"https://github.com/JeffreyCA/spleeter-web","commit_stats":null,"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffreyCA%2Fspleeter-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffreyCA%2Fspleeter-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffreyCA%2Fspleeter-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JeffreyCA%2Fspleeter-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JeffreyCA","download_url":"https://codeload.github.com/JeffreyCA/spleeter-web/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245269854,"owners_count":20587863,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crossnet-open-unmix","d3net","demucs","django","react","source-separation","spleeter","tasnet","x-umx"],"created_at":"2024-07-31T08:01:40.646Z","updated_at":"2025-03-24T12:31:24.450Z","avatar_url":"https://github.com/JeffreyCA.png","language":"TypeScript","readme":"# Spleeter Web\n[![Latest release](https://img.shields.io/github/v/release/JeffreyCA/spleeter-web?label=latest%20release)](https://github.com/JeffreyCA/spleeter-web/releases) [![Commits since latest release](https://img.shields.io/github/commits-since/JeffreyCA/spleeter-web/latest/master?color=yellow)](https://github.com/JeffreyCA/spleeter-web/commits/master) [![Docker Compose push (master)](https://github.com/JeffreyCA/spleeter-web/actions/workflows/master.yml/badge.svg?branch=master)](https://github.com/JeffreyCA/spleeter-web/actions/workflows/master.yml)\n\nSpleeter Web is a web application for isolating or removing the vocal, accompaniment, bass, and/or drum components of any song. For example, you can use it to isolate the vocals of a track, or you can use it remove the vocals to get an instrumental version of a song.\n\nIt supports a number of different source separation models: [Spleeter](https://github.com/deezer/spleeter) (`4stems-model` and `5stems-model`), [Demucs](https://github.com/facebookresearch/demucs), [CrossNet-Open-Unmix](https://github.com/sony/ai-research-code/tree/master/x-umx), and [D3Net](https://github.com/sony/ai-research-code/tree/master/d3net).\n\nThe app uses [Django](https://www.djangoproject.com/) for the backend API and [React](https://reactjs.org/) for the frontend. [Celery](https://docs.celeryproject.org/en/stable/getting-started/introduction.html) is used for the task queue. Docker images are available, including ones with GPU support.\n\n## Table of Contents\n\n- [Features](#features)\n- [Demo site](#demo-site)\n- [Getting started with Docker](#getting-started-with-docker)\n- [Getting started without Docker](#getting-started-without-docker)\n- [Configuration](#configuration)\n    - [Django settings](#django-settings)\n    - [Environment variables](#environment-variables)\n- [Using cloud storage](#using-cloud-storage-azure-storage-aws-s3-etc)\n- [Deployment](#deployment)\n- [Common issues \u0026 FAQs](#common-issues--faqs)\n- [Credits](#credits)\n- [License](#license)\n\n## Features\n- Supports Spleeter, Demucs, CrossNet-Open-Unmix (X-UMX), and D3Net source separation models\n    - Each model supports a different set of user-configurable parameters in the UI\n- Dynamic Mixes let you export and play back in realtime your own custom mix of the different components\n- Import tracks by uploading an audio file or by a YouTube link\n    - Built-in YouTube search functionality (YouTube Data API key required)\n- Supports lossy (MP3) and lossless (FLAC, WAV) output formats\n- Persistent audio library with ability to stream and download your source tracks and mixes\n- Customize number of background workers working on audio separation and YouTube imports\n- Supports third-party storage backends like S3 and Azure Blob Storage\n- Clean and responsive UI\n- Support for GPU separation\n- Fully Dockerized\n\n## [Demo site](https://jeffreyca.github.io/spleeter-web/)\n\n**Homepage**\n\n\u003cimg src=\"./screenshots/main.png\" width=\"80%\"\u003e\n\n**Upload modal**\n\n\u003cimg src=\"./screenshots/upload.png\" width=\"45%\"\u003e\n\n**Mixer**\n\n\u003cimg src=\"./screenshots/mixer.png\" width=\"80%\"\u003e\n\n## Getting started with Docker\n### Requirements\n* 4 GB+ of memory (source separation is memory-intensive)\n* [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/install/)\n\n### Instructions\n1. Clone repo:\n    ```sh\n    $ git clone https://github.com/JeffreyCA/spleeter-web.git\n    $ cd spleeter-web\n    ```\n2. (Optional) Set the YouTube Data API key (for YouTube search functionality):\n\n    You can skip this step, but you would not be able to import songs by searching with a query. You would still be able to import songs via YouTube links though.\n\n    Create an `.env` file at the project root with the following contents:\n    ```\n    YOUTUBE_API_KEY=\u003cYouTube Data API key\u003e\n    ```\n3. (Optional) Setup for GPU support:\n    Source separation can be accelerated with a GPU (however only NVIDIA GPUs are supported).\n\n    1. Install NVIDIA drivers for your GPU.\n\n    2. [Install the NVIDIA Container Toolkit.](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker) If on Windows, refer to [this](https://docs.nvidia.com/cuda/wsl-user-guide/index.html).\n\n    3. Verify Docker works with your GPU by running `sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi`\n\n4. Download and run prebuilt Docker images:\n\n    \u003e Note: On Apple Silicon and other AArch64 systems, the Docker images need to be built from source.\n\n    ```sh\n    # CPU separation\n    spleeter-web$ docker-compose -f docker-compose.yml -f docker-compose.prod.yml -f docker-compose.prod.selfhost.yml up\n    # GPU separation\n    spleeter-web$ docker-compose -f docker-compose.gpu.yml -f docker-compose.prod.yml -f docker-compose.prod.selfhost.yml up\n    ```\n\n    Alternatively, you can build the Docker images from source:\n    ```sh\n    # CPU separation\n    spleeter-web$ docker-compose -f docker-compose.yml -f docker-compose.build.yml -f docker-compose.prod.yml -f docker-compose.prod.selfhost.yml up --build\n    # GPU separation\n    spleeter-web$ docker-compose -f docker-compose.gpu.yml -f docker-compose.build.gpu.yml -f docker-compose.prod.yml -f docker-compose.prod.selfhost.yml up --build\n    ```\n\n5. Launch **Spleeter Web**\n\n    Navigate to [http://127.0.0.1:80](http://127.0.0.1:80) in your browser. Uploaded tracks and generated mixes will appear in `media/uploads` and `media/separate` respectively on your host machine.\n\n## Getting started without Docker\n**If you are on Windows, it's recommended to follow the Docker instructions above. Celery is not well-supported on Windows.**\n\n### Requirements\n* x86-64 arch (For AArch64 systems, use Docker)\n* 4 GB+ of memory (source separation is memory-intensive)\n* Python 3.8+ ([link](https://www.python.org/downloads/))\n* Node.js 16+ ([link](https://nodejs.org/en/download/))\n* Redis ([link](https://redis.io/))\n* ffmpeg and ffprobe ([link](https://www.ffmpeg.org/download.html))\n    * On macOS, you can install it using Homebrew or MacPorts\n    * On Windows, you can follow [this guide](http://blog.gregzaal.com/how-to-install-ffmpeg-on-windows/)\n\n### Instructions\n1. Set environment variables\n\n    **Make sure these variables are set in every terminal session prior to running the commands below.**\n\n    ```sh\n    # Unix/macOS:\n    (env) spleeter-web$ export YOUTUBE_API_KEY=\u003capi key\u003e\n    # Windows:\n    (env) spleeter-web$ set YOUTUBE_API_KEY=\u003capi key\u003e\n    ```\n2. Create Python virtual environment\n    ```sh\n    spleeter-web$ python -m venv env\n    # Unix/macOS:\n    spleeter-web$ source env/bin/activate\n    # Windows:\n    spleeter-web$ .\\env\\Scripts\\activate\n    ```\n3. Install Python dependencies\n    ```sh\n    (env) spleeter-web$ pip install -r requirements.txt\n    (env) spleeter-web$ pip install -r requirements-spleeter.txt --no-dependencies\n    ```\n4. Install Node dependencies\n    ```sh\n    spleeter-web$ cd frontend\n    spleeter-web/frontend$ npm install\n    ```\n5. Ensure Redis server is running on `localhost:6379` (needed for Celery)\n\n    You can run it on a different host or port, but make sure to update `CELERY_BROKER_URL` and `CELERY_RESULT_BACKEND` in `settings.py`. It must be follow the format: `redis://host:port/db`.\n\n6. Apply migrations\n    ```sh\n    (env) spleeter-web$ python manage.py migrate\n    ````\n7. Build frontend\n    ```sh\n    spleeter-web$ npm run build --prefix frontend\n    ```\n8. Start backend in separate terminal\n    ```sh\n    (env) spleeter-web$ python manage.py collectstatic \u0026\u0026 python manage.py runserver 127.0.0.1:8000\n    ````\n\n9. Start Celery workers in separate terminal\n\n    **Unix/macOS:**\n    ```sh\n    # Start fast worker\n    (env) spleeter-web$ celery -A api worker -l INFO -Q fast_queue -c 3\n\n    # Start slow worker\n    (env) spleeter-web$ celery -A api worker -l INFO -Q slow_queue -c 1\n    ```\n\n    This launches two Celery workers: one processes fast tasks like YouTube imports and the other processes slow tasks like source separation. The one working on fast tasks can work on 3 tasks concurrently, while the one working on slow tasks only handles a single task at a time (since it's memory-intensive). Feel free to adjust these values to your fitting.\n\n    **Windows:**\n\n    You'll first need to install `gevent`. Note however that you will not be able to abort in-progress tasks if using Celery on Windows.\n\n    ```sh\n    (env) spleeter-web$ pip install gevent\n    ```\n\n    ```sh\n    # Start fast worker\n    (env) spleeter-web$ celery -A api worker -l INFO -Q fast_queue -c 3 --pool=gevent\n\n    # Start slow worker\n    (env) spleeter-web$ celery -A api worker -l INFO -Q slow_queue -c 1 --pool=gevent\n    ```\n\n10. Launch **Spleeter Web**\n\n    Navigate to [http://127.0.0.1:8000](http://127.0.0.1:8000) in your browser. Uploaded and mixed tracks will appear in `media/uploads` and `media/separate` respectively.\n\n## Configuration\n\n### Django settings\n\n| Settings file | Description |\n|---|---|\n| `django_react/settings.py` | The base Django settings used when launched in non-Docker context. |\n| `django_react/settings_dev.py` | Contains the **override** settings used when run in development mode (i.e. `DJANGO_DEVELOPMENT` is set). |\n| `django_react/settings_docker.py` | The base Django settings used when launched using Docker. |\n| `django_react/settings_docker_dev.py` | Contains the **override** settings used when run in development mode using Docker (i.e. `docker-compose.dev.yml`). |\n\n### Environment variables\nHere is a list of all the environment variables you can use to further customize Spleeter Web:\n\n| Name | Description |\n|---|---|\n| `CPU_SEPARATION` | No need to set this if using Docker. Otherwise, set to `1` if you want CPU separation and `0` if you want GPU separation. |\n| `DJANGO_DEVELOPMENT` | Set to `true` if you want to run development build, which uses `settings_dev.py`/`settings_docker_dev.py` and runs Webpack in dev mode. |\n| `ALLOW_ALL_HOSTS` | Set to `1` if you want Django to allow all hosts, overriding any `APP_HOST` value. This effectively sets the Django setting `ALLOWED_HOSTS` to `[*]`. There are [security risks](https://docs.djangoproject.com/en/4.1/ref/settings/#allowed-hosts) associated with doing this. Default: `0` |\n| `APP_HOST` | Domain name(s) or public IP(s) of server. To specify multiple hosts, separate them by a comma (`,`). |\n| `API_HOST` | Hostname of API server (for nginx). |\n| `DEFAULT_FILE_STORAGE` | Whether to use local filesystem or cloud-based storage for storing uploads and separated files. `FILE` or `AWS` or `AZURE`. |\n| `AWS_ACCESS_KEY_ID` | AWS access key. Used when `DEFAULT_FILE_STORAGE` is set to `AWS`. |\n| `AWS_SECRET_ACCESS_KEY` | AWS secret access key. Used when `DEFAULT_FILE_STORAGE` is set to `AWS`. |\n| `AWS_STORAGE_BUCKET_NAME` | AWS S3 storage bucket name. Used when `DEFAULT_FILE_STORAGE` is set to `AWS`. |\n| `AWS_S3_CUSTOM_DOMAIN` | Custom domain, such as for a CDN. Used when `DEFAULT_FILE_STORAGE` is set to `AWS`. |\n| `AWS_S3_REGION_NAME` | S3 region (e.g. `us-east-1`). Used when `DEFAULT_FILE_STORAGE` is set to `AWS`. |\n| `AWS_S3_SIGNATURE_VERSION` | Default signature version used for generating presigned urls. To be able to access your s3 objects in all regions through presigned urls, set this to `s3v4`. Used when `DEFAULT_FILE_STORAGE` is set to `AWS`. |\n| `AZURE_ACCOUNT_KEY` | Azure Blob account key. Used when `DEFAULT_FILE_STORAGE` is set to `AZURE`. |\n| `AZURE_ACCOUNT_NAME` | Azure Blob account name. Used when `DEFAULT_FILE_STORAGE` is set to `AZURE`. |\n| `AZURE_CONTAINER` | Azure Blob container name. Used when `DEFAULT_FILE_STORAGE` is set to `AZURE`. |\n| `AZURE_CUSTOM_DOMAIN` | Custom domain, such as for a CDN. Used when `DEFAULT_FILE_STORAGE` is set to `AZURE`. |\n| `CELERY_BROKER_URL` | Broker URL for Celery (e.g. `redis://localhost:6379/0`). |\n| `CELERY_RESULT_BACKEND` | Result backend for Celery (e.g. `redis://localhost:6379/0`). |\n| `CELERY_FAST_QUEUE_CONCURRENCY` | Number of concurrent YouTube import tasks Celery can process. Docker only. |\n| `CELERY_SLOW_QUEUE_CONCURRENCY` | Number of concurrent source separation tasks Celery can process. Docker only. |\n| `CERTBOT_DOMAIN` | Domain for creating HTTPS certs using Let's Encrypt's Certbot. Docker only. |\n| `CERTBOT_EMAIL` | Email address for creating HTTPS certs using Let's Encrypt's Certbot. Docker only. |\n| `D3NET_OPENVINO` | Set to `1` to use OpenVINO for D3Net CPU separation. Requires Intel CPU. |\n| `DEMUCS_SEGMENT_SIZE` | Length of each split for GPU separation. Default is `40`, which requires a around 7 GB of GPU memory. For GPUs with 2-4 GB of memory, experiment with lower values (minimum is `10`). Also recommended to set `PYTORCH_NO_CUDA_MEMORY_CACHING=1`. |\n| `D3NET_OPENVINO_THREADS` | Set to the number of CPU threads for D3Net OpenVINO separation. Default: # of CPUs on the machine. Requires Intel CPU. |\n| `DEV_WEBSERVER_PORT` | Port that development webserver is mapped to on **host** machine. Docker only. |\n| `ENABLE_CROSS_ORIGIN_HEADERS` | Set to `1` to set `Cross-Origin-Embedder-Policy` and `Cross-Origin-Opener-Policy` headers which are required for exporting Dynamic Mixes in-browser. |\n| `NGINX_PORT` | Port that Nginx is mapped to on **host** machine for HTTP. Docker only. |\n| `NGINX_PORT_SSL` | Port that Nginx is mapped to on **host** machine for HTTPS. Docker only. |\n| `PYTORCH_NO_CUDA_MEMORY_CACHING` | Set to `1` to disable Pytorch caching for GPU separation. May help with Demucs separation on lower memory GPUs. Also see `DEMUCS_SEGMENT_SIZE`. |\n| `UPLOAD_FILE_SIZE_LIMIT` | Maximum allowed upload file size (in megabytes). Default is `100`. |\n| `YOUTUBE_API_KEY` | YouTube Data API key. |\n| `YOUTUBE_LENGTH_LIMIT` | Maximum allowed YouTube track length (in minutes). Default is `30`. |\n| `YOUTUBEDL_SOURCE_ADDR` | Client-side IP address for `yt-dlp` to bind to. If you are facing 403 Forbidden errors, try setting this to `0.0.0.0` to force all connections through IPv4. |\n| `YOUTUBEDL_VERBOSE` | Set to `1` to enable verbose logging for `yt-dlp`. |\n\n## Using cloud storage (Azure Storage, AWS S3, etc.)\n\nBy default, **Spleeter Web** uses the local filesystem to store uploaded files and mixes. It uses [django-storages](https://django-storages.readthedocs.io/en/latest/), so you can also configure it to use other storage backends like Azure Storage or AWS S3.\n\nYou can set the environment variable `DEFAULT_FILE_STORAGE` (`.env` if using Docker) to either `FILE` (for local storage), `AWS` (S3 storage), or `AZURE` (Azure Storage).\n\nThen, depending on which backend you're using, set these additional variables:\n\n**AWS S3:**\n- `AWS_ACCESS_KEY_ID`\n- `AWS_SECRET_ACCESS_KEY`\n- `AWS_STORAGE_BUCKET_NAME`\n\n**Azure Storage:**\n- `AZURE_ACCOUNT_KEY`\n- `AZURE_ACCOUNT_NAME`\n- `AZURE_CONTAINER`\n\n### CORS\n\nTo play back a dynamic mix, you may need to configure your storage service's CORS settings to allow the `Access-Control-Allow-Origin` header.\n\nIf you have `ENABLE_CROSS_ORIGIN_HEADERS` set, then you'll need to additionally set the `Cross-Origin-Resource-Policy` response headers of audio files to `cross-origin`. See [this](https://web.dev/coop-coep/) for more details.\n\n## Deployment\n**Spleeter Web** can be deployed on a VPS or a cloud server such as Azure VMs, AWS EC2, DigitalOcean, etc. Deploying to cloud container services like ECS is not yet supported out of the box.\n\n1. Clone this git repo\n    ```sh\n    $ git clone https://github.com/JeffreyCA/spleeter-web.git\n    $ cd spleeter-web\n    ```\n\n2. (Optional) If self-hosting, update `docker-compose.prod.selfhost.yml` and replace `./media` with the path where media files should be stored on the server.\n\n3. In `spleeter-web`, create an `.env` file with the production environment variables\n\n    Example `.env` file:\n    ```\n    APP_HOST=\u003cdomain name(s) or public IP(s) of server\u003e\n    DEFAULT_FILE_STORAGE=\u003cFILE or AWS or AZURE\u003e       # Optional (default = FILE)\n    CELERY_FAST_QUEUE_CONCURRENCY=\u003cconcurrency count\u003e # Optional (default = 3)\n    CELERY_SLOW_QUEUE_CONCURRENCY=\u003cconcurrency count\u003e # Optional (default = 1)\n    YOUTUBE_API_KEY=\u003cyoutube api key\u003e                 # Optional\n    ```\n\n    See [Environment Variables](#environment-variables) for all the available variables. You can also set these directly in the `docker-compose.*.yml` files.\n\n4. Build and start production containers\n\n    **For GPU separation, replace `docker-compose.yml` and `docker-compose.build.yml` below for `docker-compose.gpu.yml` and `docker-compose.build.gpu.yml` respectively.**\n\n    If you are self-hosting media files:\n    ```sh\n    # Use prebuilt images\n    spleeter-web$ sudo docker-compose -f docker-compose.yml -f docker-compose.prod.yml -f docker-compose.prod.selfhost.yml up -d\n    # Or build from source\n    spleeter-web$ sudo docker-compose -f docker-compose.yml -f docker-compose.build.yml -f docker-compose.prod.yml -f docker-compose.prod.selfhost.yml up --build -d\n    ```\n\n    Otherwise if using a storage provider:\n    ```sh\n    # Use prebuilt images\n    spleeter-web$ sudo docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d\n    # Or build from source\n    spleeter-web$ sudo docker-compose -f docker-compose.yml -f docker-compose.build.yml -f docker-compose.prod.yml up --build -d\n    ```\n\n4. Access **Spleeter Web** at whatever you set `APP_HOST` to. Note that it will be running on port 80, not 8000. You can change this by setting `NGINX_PORT` and `NGINX_PORT_SSL`.\n\n## HTTPS support\n\nEnabling HTTPS allows you to export Dynamic Mixes from your browser. To enable HTTPS, set **both** `CERTBOT_DOMAIN` and `CERTBOT_EMAIL` to your domain name and `CERTBOT_EMAIL` to your email in `.env` and include `-f docker-compose.https.yml` in your `docker-compose up` command.\n\n## [Common issues \u0026 FAQs](https://github.com/JeffreyCA/spleeter-web/wiki/Common-issues-\u0026-FAQs)\n\n## Credits\nSpecial thanks to my [Sponsors](https://github.com/sponsors/JeffreyCA/):\n\n* [603000](https://github.com/603000)\n\nAnd especially to all the researchers and devs behind all the source separation models:\n\n* [Spleeter](https://github.com/deezer/spleeter)\n* [Demucs](https://github.com/facebookresearch/demucs)\n* [CrossNet-Open-Unmix](https://github.com/sony/ai-research-code/tree/master/x-umx)\n* [D3Net](https://github.com/sony/ai-research-code/tree/master/d3net)\n\nAnd additional thanks to these wonderful projects:\n\n* [tone.js](https://github.com/Tonejs/Tone.js/)\n* [youtube-dl](https://github.com/ytdl-org/youtube-dl) / [yt-dlp](https://github.com/yt-dlp/yt-dlp)\n* [react-dropzone-uploader](https://github.com/fortana-co/react-dropzone-uploader)\n* [react-music-player](https://github.com/lijinke666/react-music-player)\n* [docker-nginx-certbot](https://github.com/JonasAlfredsson/docker-nginx-certbot)\n\nTurntable icon made from [Icon Fonts](https://www.onlinewebfonts.com/icon/497039) is licensed by CC BY 3.0.\n\n## License\n[MIT](./LICENSE)\n","funding_links":["https://github.com/sponsors/JeffreyCA","https://github.com/sponsors/JeffreyCA/"],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJeffreyCA%2Fspleeter-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJeffreyCA%2Fspleeter-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJeffreyCA%2Fspleeter-web/lists"}