BeatNet-dual / README.md
ellagranger's picture
Change to subprocess
b6f3797
|
Raw
History Blame Contribute Delete
2.8 kB
---
title: BeatNet Dual
emoji: ๐ŸŒ–
colorFrom: red
colorTo: blue
sdk: docker
pinned: false
---
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
# BeatNet dual-Python Hugging Face Space template
This directory is a copy-ready solution for a Hugging Face Docker Space that
needs two Python interpreters in one container:
- **Frontend:** Python 3.10 virtual environment for Gradio / pyharp.
- **Backend:** Python 3.9 virtual environment for BeatNet and madmom.
- **Transport:** on-demand Python 3.9 subprocess calls, with uploaded audio
passed as a file path. This avoids importing BeatNet/madmom in the frontend
interpreter without keeping a backend process alive.
The public `teamup-tech/BeatNet` Space currently uses a single
`python:3.10-slim` Docker image and starts `app.py` directly. Replace that setup
with these files, or adapt the same pattern in-place.
## File map
| File | Purpose |
| --- | --- |
| `Dockerfile` | Builds separate Python 3.9 and 3.10 virtual environments. |
| `requirements-backend-py39.txt` | BeatNet/madmom dependencies only. |
| `requirements-frontend-py310.txt` | Gradio/pyharp dependencies only. |
| `backend_worker.py` | One-shot BeatNet subprocess runner under Python 3.9. |
| `frontend_app.py` | Gradio app running under Python 3.10. |
| `start.sh` | Starts the frontend. |
## Why a subprocess instead of importing both stacks?
`madmom` and BeatNet can be sensitive to Python, NumPy, Cython, and build
isolation versions. Running BeatNet/madmom in a backend-only Python 3.9
environment avoids the madmom compatibility patching needed by newer Python
versions, while the public web layer runs independently on Python 3.10. The
frontend invokes the backend script only when processing audio:
```sh
/opt/backend-py39/bin/python /app/backend_worker.py /tmp/gradio/upload.wav
```
The backend prints stable JSON to stdout:
```json
{"ok": true, "beats": [{"time": 0.42, "beat": 1.0}]}
```
## Hugging Face Space usage
1. Copy every file in this directory to the root of the BeatNet Space.
2. Do not copy or run `patch_madmom.py`; the backend stays on Python 3.9 so
madmom can be installed without the Python 3.10+ patch.
3. Add any project-specific frontend packages to
`requirements-frontend-py310.txt` and backend packages to
`requirements-backend-py39.txt`.
4. Push to the Space. Hugging Face will build the Docker image and route traffic
to `PORT=7860`.
## Alternative: persistent worker transport
If startup latency becomes a problem, keep the same two virtual environments and
run `backend_worker.py` as a long-lived process behind a Unix socket or file
queue. The subprocess approach uses less idle memory, while a persistent worker
can reuse the loaded BeatNet model across requests.