orwelian84/arc-music-embeddings
ARC Music Embeddings Pre-computed CLAP embeddings for 5,050 music tracks with 291,468 segments, ready to use for semantic music similarity search and DJ-style transitions. Authors: Claude and his monkey Files File Size Description segment_embeddings.npz 553MB Full segment-level embeddings (5050 tracks) tracklist.txt 350KB Complete track listing with IDs and titles embeddings.npz 3.5MB Legacy track-level embeddings (1836 tracks)… See the full description on the dataset page: https://huggingface.co/datasets/orwelian84/arc-music-embeddings.
ARC Music Embeddings
Pre-computed CLAP embeddings for 5,050 music tracks with 291,468 segments, ready to use for semantic music similarity search and DJ-style transitions.
Authors: Claude and his monkey
Files
Embedding Details
- Model:
laion/larger_clap_music(512 dimensions) - Segment duration: 10 seconds with 50% overlap
- Max track duration: 600 seconds (10 minutes)
- Total tracks: 5,050
- Total segments: 291,468
Segment embeddings (segment_embeddings.npz) - Recommended
Track-level aggregated:
ids: Track IDs (5050,)titles: Track titles (5050,)mean_emb: Mean-pooled track embeddings (5050, 512)max_emb: Max-pooled track embeddings (5050, 512)std_emb: Std-pooled track embeddings (5050, 512)
Segment-level for fine-grained matching:
segment_ids: Track ID for each segment (291468,)segment_times: Segment [start, end] times (291468, 2)segment_emb: Individual segment embeddings (291468, 512)
Legacy embeddings (embeddings.npz)
ids: Video IDs (1836,)titles: Track titles (1836,)clap: Mean-pooled embeddings (1836, 512)
Usage
import numpy as np
from huggingface_hub import hf_hub_download
# Download segment embeddings (recommended)
emb_path = hf_hub_download(
repo_id="orwelian84/arc-music-embeddings",
filename="segment_embeddings.npz",
repo_type="dataset"
)
data = np.load(emb_path, allow_pickle=True)
ids = list(data['ids'])
titles = list(data['titles'])
embeddings = data['mean_emb'] # (5050, 512) - use for track similarity
# Find similar tracks using cosine similarity
def cosine_sim(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
query_idx = 0 # First track
sims = [cosine_sim(embeddings[query_idx], emb) for emb in embeddings]
top_k = np.argsort(sims)[-10:][::-1]
print(f"Similar to: {titles[query_idx]}")
for i in top_k:
print(f" {sims[i]:.3f} - {titles[i]}")DJ-Style Transition Matching
# Use segment embeddings for DJ transitions
# Match ending of track A to beginning of track B
segment_ids = list(data['segment_ids'])
segment_times = data['segment_times'] # [start, end] for each segment
segment_emb = data['segment_emb']
# Get segments for a specific track
track_id = ids[0]
track_mask = [sid == track_id for sid in segment_ids]
track_segments = segment_emb[track_mask]
track_times = segment_times[track_mask]
# Get ending segments (last 30 seconds)
max_time = track_times[:, 1].max()
ending_mask = track_times[:, 1] >= (max_time - 30)
ending_emb = track_segments[ending_mask].mean(axis=0)Part of ARC Music Player
These embeddings power the ARC Music Player:
- Flow shuffle: Smooth transitions between similar tracks
- DJ Mode: Match track endings to beginnings for seamless mixes
- Anti-cluster shuffle: Maximum variety by avoiding similar tracks
- Energy Trajectory: Arrange tracks by energy (rise, fall, peak, chill)
- Semantic search: Find music by vibe/description
- Vibe Flow: Text prompt to playlist generation
License
MIT - Use freely for any purpose.
