The MusicGPT Extraction API's audio_url field only accepts YouTube URLs,
not direct MP3 links. Sending our /api/audio-source/ endpoint URL resulted
in 'Error fetching audio length from YouTube' because MusicGPT tried to
parse it as a YouTube video.
Switch to the audio_file upload option: open the local MP3 and upload it
directly as multipart/form-data to the Extraction API.
Bumped timeout from 30s to 60s for file upload.
- VERSION bumped to 0.8.7
- README.md: comprehensive update with Gokapi integration, stems radio
buttons, download button, cost tracking improvements, stepper fixes,
error recovery, new env vars, new troubleshooting entries
- app.py: updated module docstring with all current routes
- helpers.py: updated module docstring with function group overview,
added section header for Gokapi integration
- config.py: added Gokapi env vars to docstring
- models.py: updated schema comments for per-version costs and
stems_link/stems_url distinction
- New helpers: parse_stems_urls, upload_to_gokapi, process_stems_to_gokapi
- Stems webhook handler now downloads stem files from MusicGPT CDN,
zips them, uploads to Gokapi with 30-day expiry, saves the Gokapi
download URL to stems_link in the DB
- Download Stems button uses stems_link (Gokapi URL) when available,
falls back to the zip endpoint if not
- Config: GOKAPI_URL, GOKAPI_API_KEY, GOKAPI_EXPIRY_DAYS env vars
- docker-compose: GOKAPI_* environment variables added