Skip to main content

sonagram

Ask your AI assistant for a playlist from your own music collection — and get a file any music app can play.

sonagram listens to every track you own (tempo, energy, mood, key, how songs feel), organizes what it learns into a fast, searchable map of your library, and lets an AI agent translate your sentence into a typed request. Sonagram's deterministic library engine—not the agent—then selects, orders, audits, and explains the playlist:

"Make me a deep-focus work playlist." "A party mix for Saturday that builds." "Songs like Teardrop, but calmer."

Your music files are never modified, moved, or uploaded — everything happens on your machine.

For AI agents

You are an AI agent and a user asked you to work with their music library — start here:

  1. Install — pip install sonagram. Prebuilt wheels cover macOS (Apple Silicon + Intel), Linux x86_64, and Windows x86_64 on Python ≥ 3.9 — no toolchain needed. Only on other platforms does pip fall back to the sdist, which compiles the native core and needs a Rust toolchain (rustup).
  2. Install the skill — sonagram skill install. This writes the sonagram-playlist skill to ~/.claude/skills/ (pass --dir <skills_root> for a non-default skills location).
  3. Read the installed SKILL.md and follow it now. It covers library detection, scanning, the optional Last.fm walkthrough, and playlist delivery. A skill only auto-loads at the next session start, so act on it immediately in this one.

Use it through your agent (no code)

This is the main way to use sonagram. One-time setup:

  1. Install it — pip install sonagram. That's it on Mac, Windows, and regular Linux — prebuilt packages, nothing to compile. (On unusual platforms pip builds from source, which needs the free Rust toolchain — your agent can sort that out.)
  2. Point it at your music — sonagram sources add ~/Music (repeat for other folders).
  3. Give your agent the skill — sonagram skill install.

That's it. From now on, just ask:

  • "make me a deep-focus work playlist"
  • "a party mix for Saturday that builds"
  • "songs like Teardrop but calmer"
  • "which songs do I have multiple versions of? pair them"
  • "what's even in my library?"

The first request analyzes your whole collection (about an hour for ~10,000 songs — your agent will tell you and can let it run in the background). Every request after that takes seconds: sonagram notices what changed, re-reads only that, and keeps the map current — including songs you've added or deleted.

Each playlist is saved with its name, your original request, and the full track list, so you can always ask for it again later (sonagram playlists). The .m3u8 files point straight at your own music files and open in any player.

Optional: better picks with Last.fm. A free Last.fm API key adds richer genre info, song popularity, and "fans also like" connections. Your agent can walk you through getting one — just ask.

CLI (scriptable)

pip install sonagram also gives you the standalone sonagram command (the same shared code path the agent uses, so the two can't drift). Once a source is registered, commands need no path arguments:

sonagram sources add ~/Music     # register a library folder (repeatable)
sonagram status                  # is everything up to date? (exit 0/1/2)
sonagram scan                    # analyze new/changed files → local cache
sonagram enrich                  # optional: fold in Last.fm metadata (needs a key)
sonagram build                   # merge all sources → the central graph
sonagram profile --format json   # curation-relevant coverage/distributions
sonagram curate --preset focus --tracks 25 \
    --name "Deep Focus" --description "a calm work playlist" --format json
sonagram playlists               # list stored playlists (newest first)
sonagram mcp install             # native kglite manifest + revealed music skills

sonagram config shows where everything lives (defaults under ~/.sonagram/) and whether a Last.fm key is set up. Explicit-path forms (sonagram scan ~/Music, sonagram status ~/Music --format json, …) still work for scripting a single library without touching the config, and sonagram playlist ... --copy-to <dir> produces a portable folder — the tracks copied next to the playlist file, ready for a USB stick or another device.

Everything is incremental: a rescan of an unchanged library analyzes nothing and finishes in well under a second.

For building your own agents / integrations

Install Sonagram's safe kglite manifest/revealed skills, then use the absolute launch command it prints—or drive the same library contract from Python:

sonagram mcp install
# RUN: '/absolute/path/sonagram-mcp-server' --graph '/.../music.kgl'

The thin Sonagram frontend embeds KGLite 0.20.0's server and registers typed profile/policy/curate/audit/explain/store tools against its live graph. KGLite still owns MCP, Cypher, graph lifecycle, and generic tools; Sonagram owns only the music-domain handlers.

MCP query output is bounded by default. Agents should discover the response controls through tools/list and copy the preview's advertised expansion action to inspect retained evidence. Query LIMIT controls executed rows; response budgeting controls only how the completed result is presented.

import sonagram
sonagram.scan("~/Music")
g = sonagram.build("~/Music", out_path="music.kgl")   # a live kglite graph
brief = {"preset": "focus", "target_tracks": 25,
         "target_duration_sec": None, "seed_ids": [],
         "seed_role": "pinned", "unsupported_intents": []}
result = sonagram.curate_playlist("music.kgl", brief)
assert result["exportable"] and result["audit"]["passed"]

Agents get a full manual (AGENT-GUIDE.md: the schema, a query cookbook, and a typed curation contract) plus live-gated kglite skills. Both route final selection/order/audit through the library rather than agent-authored heuristics.

How it works (the short version)

  • sonara does the listening: tempo, key, energy, mood, loudness, structure, and an audio "fingerprint of feel" for every track.
  • kglite stores the map: a graph database with search, similarity, and an agent-friendly query interface.
  • sonagram is the part in between: it decides what the map contains — every song with all its signals, connected to artists, genres, decades, moods, detected styles, and its 10 most similar tracks — and keeps the map exactly reproducible, byte for byte, no matter how often you rescan.

Full documentation (CLI reference, Python API, the graph's schema, and the engineering details) lives on Read the Docs — see docs/.

License: MIT

Metadata

Release files for sonagram 0.2.29

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sonagram 0.2.29
File Size Uploaded
sonagram-0.2.29.tar.gz 951.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for sonagram 0.2.29
File
sonagram-0.2.29-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
sonagram-0.2.29-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
sonagram-0.2.29-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
sonagram-0.2.29-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 57.4 MB

Release files / sonagram-0.2.29.tar.gz

Download URL sonagram-0.2.29.tar.gz
Size 951.2 kB
Tags Source
SHA-256 checksum
How to use checksums
95bc4252ee70dada16b8d5bdd471b6af8d64286f3311c4023d990880ee9669af
BLAKE2b-256 checksum
How to use checksums
3e05db4988a31fb8f0d2cdd8364c7a8bfa2efe33e4e6583d7d783b1e72152aa7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / sonagram-0.2.29-cp39-abi3-win_amd64.whl

Download URL sonagram-0.2.29-cp39-abi3-win_amd64.whl
Size 14.4 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
a2913af248d087bae74563d138397ba76bced5dd744dec316f9081fef5c414b9
BLAKE2b-256 checksum
How to use checksums
bd0c19ffde9604ba8a21dd03dcf39f9512cece4a771d390c31a81bcbc8f6bba2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / sonagram-0.2.29-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sonagram-0.2.29-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 14.7 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
313e21788ca96e59fbae70e7340c9a2f3f30e121c145416adae1adbe62ddca4e
BLAKE2b-256 checksum
How to use checksums
2ff0c43fc028d08e0ba4d168cb90579adf1b06e473265f9e3309f71ee732984a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / sonagram-0.2.29-cp39-abi3-macosx_11_0_arm64.whl

Download URL sonagram-0.2.29-cp39-abi3-macosx_11_0_arm64.whl
Size 13.1 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2ac63cf7d238b210c391c1108e9d8a2a2c9fa682a658fe206a7b1a034f1cfb30
BLAKE2b-256 checksum
How to use checksums
ef2928600dcbc53c05d0e1942a51b01cf9466290311c178faf0053974189e7b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / sonagram-0.2.29-cp39-abi3-macosx_10_12_x86_64.whl

Download URL sonagram-0.2.29-cp39-abi3-macosx_10_12_x86_64.whl
Size 14.3 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2907199ee14a7fc843578d3e5c79e712482e2381b41434ab1b49bc364e1704b6
BLAKE2b-256 checksum
How to use checksums
99d83094d619291a72f8eecfa3fd3a98b5df2658576852335f3c8fec057da9e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.29 This release

5 release files

0.2.28

5 release files

0.2.24

5 release files

0.2.23

5 release files

0.2.22

5 release files

0.2.21

5 release files

0.2.20

5 release files

0.2.19

5 release files

0.2.18

5 release files

0.2.13

5 release files

0.2.12

5 release files

0.2.11

5 release files

0.2.10

5 release files

0.2.9

5 release files

0.2.8

5 release files

0.2.7

5 release files

0.2.6

5 release files

0.2.5

5 release files

0.2.4

5 release files

0.2.3

5 release files

0.2.2

5 release files

0.2.1

5 release files

0.2.0

5 release files

0.1.0

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page