Skip to main content

smart-playlist-io

PyPI

Build and inspect Apple Music smart playlists from Python.

from smart_playlist_io import AND, OR, rule, encode_b64

rules = AND([
    rule("Rating", "greater", 3),
    rule("LastPlayed", "not_in_last", 6, "months"),
    OR([
        rule("Genre", "starts", "Ambient"),
        rule("Genre", "starts", "Electronic / Ambient"),
    ]),
])

info_b64, criteria_b64 = encode_b64(rules, limit=25, select_by="most_played")

Produces the Smart Info and Smart Criteria base64 blobs used in Music.app's Library XML format. Import them via File > Library > Import Playlist or the AppleScript add command. Also decodes existing smart playlists back to readable rules.

Not affiliated with or endorsed by Apple Inc.

Install

Requires Python 3.12+.

pip install smart-playlist-io

Encode

from smart_playlist_io import AND, OR, rule, encode, encode_b64

# Raw bytes
info_bytes, criteria_bytes = encode(rules, limit=25, select_by="most_played", live=True)

# Base64 strings (for XML plist)
info_b64, criteria_b64 = encode_b64(rules, limit=25, select_by="most_played")

Options

Parameter Default Values
limit None Any int, or None to disable
limit_by "items" "items", "minutes", "hours", "MB", "GB"
select_by "most_played" random, name, album, artist, genre, highest_rated, lowest_rated, most_played, least_played, most_recently_played, least_recently_played, most_recently_added, least_recently_added
live True True / False
only_checked False True / False

Fields and operators

Type Fields Operators
String Name, Artist, Album, Genre, Comments, Grouping, Composer, AlbumArtist, Kind is, is_not, contains, not_contains, starts, ends
Integer Rating (1–5), Year, Plays, BPM, BitRate, TrackNumber, DiskNumber, Size, Duration, Skips is, is_not, greater, less, between
Boolean Checked, HasArtwork is
Date DateAdded, DateModified, LastPlayed, LastSkipped in_last, not_in_last (+ unit: "days", "weeks", "months"), after, before
Enum iCloudStatus, Love, MediaKind, Location is, is_not

Decode

from smart_playlist_io import decode_criteria, decode_info_flags

rules = decode_criteria(criteria_bytes)   # ['AND', 'Rating > 3', ...]
flags = decode_info_flags(info_bytes)     # 'live updating, limit 25 items, most played'

CLI

Decode all smart playlists in a Library XML export:

decode-smart-playlists /path/to/Library.xml
decode-smart-playlists /path/to/Library.xml --out baseline.md

Known Limitations

  • String fields (Name, Artist, Album, Genre, etc.) are limited to 127 characters due to a UTF-16 byte-length constraint in the binary format. Longer values raise ValueError.
  • The binary format is reverse-engineered from 2021 Music.app library exports and may change with future macOS updates. If imports start failing after an OS update, see docs/runbook-format-changes.md.
  • Decoding is best-effort: unknown field IDs and operator codes are reported as hex literals rather than raising errors.

Notes

Binary format details and the skip-length padding decision are in docs/format-constants.md. Architecture decisions behind the boilerplate structure and top-level OR handling are documented in docs/adr-001-boilerplate-n2-no-identity-child.md and docs/adr-002-top-level-or-emitted-directly.md.

Format knowledge derived from itunessmart by cvzi and banshee-itunes-import-plugin by Scott Peterson. See NOTICE for license text.

License

MIT

Metadata

Release files for smart-playlist-io 1.1.2

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

Source distribution (sdist)

Source distribution for smart-playlist-io 1.1.2
File Size Uploaded
smart_playlist_io-1.1.2.tar.gz 29.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for smart-playlist-io 1.1.2
File Interpreter ABI Platform
smart_playlist_io-1.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 49.1 kB

Release files / smart_playlist_io-1.1.2.tar.gz

Download URL smart_playlist_io-1.1.2.tar.gz
Size 29.0 kB
Tags Source
SHA-256 checksum
How to use checksums
43be311ea065d2a8ee00c4b3f4cfa71b6f04cba1d4849e9f32f74e76175876d5
BLAKE2b-256 checksum
How to use checksums
98d6091598bc79183ead94ecae40ed02539fe29be1f01270bdc4eae270cc2d31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Jun 26, 2026.

Transparency log

Release files / smart_playlist_io-1.1.2-py3-none-any.whl

Download URL smart_playlist_io-1.1.2-py3-none-any.whl
Size 20.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
53dc95c349f53f4f5cd9d47638e57cfc5dd91eebf2dc352f9108922fd8e41ae4
BLAKE2b-256 checksum
How to use checksums
06cbd29d0eafdf2483f3bd37a0ec9bb843e3d7dde161f711b9d7a191aa9d0025
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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 Jun 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 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