Add vibe-aware playlists with CLAP text embeddings
Blend taste profile with text-embedded mood descriptions (e.g. "chill ambient lo-fi") using pre-blended vector search against the existing HNSW index. New optional `vibe` and `alpha` params on playlist generate and recommendations endpoints. Backward compatible — no vibe = pure taste profile (alpha=1.0). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
20
README.md
20
README.md
@@ -51,7 +51,7 @@ docker exec haunt-fm alembic upgrade head
|
||||
| POST | `/api/history/webhook` | Log a listen event (from HA automation) |
|
||||
| POST | `/api/admin/discover` | Expand listening history via Last.fm |
|
||||
| POST | `/api/admin/build-taste-profile` | Rebuild taste profile from embeddings |
|
||||
| GET | `/api/recommendations?limit=50` | Get ranked recommendations |
|
||||
| GET | `/api/recommendations?limit=50&vibe=chill+ambient` | Get ranked recommendations (optional vibe) |
|
||||
| POST | `/api/playlists/generate` | Generate and optionally play a playlist |
|
||||
|
||||
## Usage
|
||||
@@ -69,11 +69,26 @@ curl -X POST http://192.168.86.51:8321/api/playlists/generate \
|
||||
}'
|
||||
```
|
||||
|
||||
### Generate a vibe-based playlist
|
||||
|
||||
```bash
|
||||
curl -X POST http://192.168.86.51:8321/api/playlists/generate \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"total_tracks": 15,
|
||||
"vibe": "chill ambient lo-fi",
|
||||
"speaker_entity": "media_player.living_room_speaker_2",
|
||||
"auto_play": true
|
||||
}'
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
- `total_tracks` — number of tracks in the playlist (default 20)
|
||||
- `known_pct` — percentage of known-liked tracks vs new discoveries (default 30)
|
||||
- `speaker_entity` — Music Assistant entity ID (must be a `_2` suffix entity)
|
||||
- `auto_play` — `true` to immediately play on the speaker
|
||||
- `vibe` — text description of the desired mood/vibe (e.g. "chill lo-fi beats", "upbeat party music"). Uses CLAP text embeddings to match tracks in the same vector space as audio.
|
||||
- `alpha` — blend factor between taste profile and vibe (default 0.5). `1.0` = pure taste profile, `0.0` = pure vibe match, `0.5` = equal blend. Ignored when no vibe is provided.
|
||||
|
||||
### Speaker entities
|
||||
|
||||
@@ -113,6 +128,9 @@ curl -X POST http://192.168.86.51:8321/api/admin/build-taste-profile
|
||||
|
||||
# Get recommendations (without playing)
|
||||
curl http://192.168.86.51:8321/api/recommendations?limit=20
|
||||
|
||||
# Get vibe-matched recommendations
|
||||
curl "http://192.168.86.51:8321/api/recommendations?limit=20&vibe=dark+electronic&alpha=0.3"
|
||||
```
|
||||
|
||||
## Pipeline Stages
|
||||
|
||||
Reference in New Issue
Block a user