CoolFace
Datasetpublic

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.

sourceHugging Facemitupdated 7mo agoView on Hugging Face
0likes21downloads
Dataset Card

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

FileSizeDescription
segment_embeddings.npz553MBFull segment-level embeddings (5050 tracks)
tracklist.txt350KBComplete track listing with IDs and titles
embeddings.npz3.5MBLegacy track-level embeddings (1836 tracks)

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

python
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

python
# 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.