ciderfy 1.0.3

dotnet tool install --global ciderfy --version 1.0.3
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local ciderfy --version 1.0.3
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=ciderfy&version=1.0.3
                    
nuke :add-package ciderfy --version 1.0.3
                    

<p align="center"> <img src="./docs/assets/banner.png" alt="Ciderfy terminal banner" width="600"> </p>

<p align="center"> <a href="https://github.com/thomas-fazzari/ciderfy/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/thomas-fazzari/ciderfy/ci.yml?branch=master&style=flat-square&labelColor=11111B&label=CI" alt="CI"></a> <a href="https://codecov.io/gh/thomas-fazzari/ciderfy"><img src="https://img.shields.io/codecov/c/github/thomas-fazzari/ciderfy?style=flat-square&labelColor=11111B" alt="Coverage"></a> <a href="https://www.nuget.org/packages/Ciderfy"><img src="https://img.shields.io/nuget/v/Ciderfy?style=flat-square&labelColor=11111B&color=313244" alt="NuGet"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-313244?style=flat-square&labelColor=11111B" alt="MIT License"></a> <img src="https://img.shields.io/badge/.NET-10.0-313244?style=flat-square&labelColor=11111B" alt=".NET 10"> </p>

A .NET 10 CLI tool to transfer Spotify playlists to Apple Music without any developer accounts required

Features

  • Interactive modern CLI built with Spectre.Console
  • Spotify playlist import from standard URLs, embed URLs, intl URLs, and spotify: URIs
  • Playlist Merging: Queue multiple Spotify playlists with /add <url> and merge them into a single deduplicated Apple Music playlist with /run
  • Two-stage matching pipeline:
    • ISRC-based matching (resolved via the Deezer catalog, since Spotify does not expose ISRCs publicly)
    • Optional fuzzy matching for remaining tracks
  • Automatic Apple Music playlist creation and batched track insertion
  • Token caching to avoid reauthentication

Installation

dotnet tool install -g Ciderfy

Requirements

  • .NET SDK 10.0+
  • Apple Music account

How It Works

Ciderfy fetches Spotify playlists without requiring an API key by using the web player's internal GraphQL endpoint with TOTP-based authentication

An Apple Music developer token is automatically extracted from the web player's JavaScript bundles, removing the need for a $99/year Apple Developer account

ISRCs (International Standard Recording Codes) are then resolved through the Deezer catalog and used to find exact matches in the Apple Music catalog

Tracks that weren't matched can then go through an optional fuzzy matching pass that scores title and artist similarity using Jaro-Winkler, then scales the result down based on track duration difference to reduce false positives

Transfer Flow

flowchart TD
    A[Paste Spotify URL] --> B[Fetch Playlist]
    B --> C[Resolve ISRCs via Deezer]
    C --> D[Lookup ISRCs in Apple Catalog]
    D --> E{Unmatched tracks?}

    E -- No --> H[Create Apple Music Playlist]
    E -- Yes --> F{Use fuzzy matching?}

    F -- No --> H
    F -- Yes --> G[Fuzzy match remaining tracks]
    G --> H

    H --> I[Transfer Complete]

Quick Start

ciderfy

From source

dotnet restore
dotnet run --project src/Ciderfy

First-Time Authentication

In the app, run:

/auth

Then follow the prompt:

  1. Open https://music.apple.com in your browser and sign in

  2. Open your browser's DevTools Console

  3. Run:

    MusicKit.getInstance().musicUserToken;
    
  4. Paste the returned token into Ciderfy, it will then be cached

Ciderfy will also automatically fetch and cache a valid Apple Music developer token if it isn't already in cache

Usage

After startup, paste a Spotify playlist URL for a direct transfer:

https://open.spotify.com/playlist/<playlist-id>

Or queue multiple playlists to merge them into one:

/add https://open.spotify.com/playlist/<id-1>
/add https://open.spotify.com/playlist/<id-2>
/run

You can set storefront and playlist naming behavior before transfer using commands below.

Commands

  • /auth - authenticate with Apple Music
  • /auth reset - clear cached tokens and re-authenticate
  • /status - show tokens and storefront status
  • /storefront <code> or /sf <code> - set Apple Music storefront (default: us)
  • /add <url> - queue a Spotify playlist for merging
  • /run - start the transfer and merge all queued playlists
  • /name <name> - set name override for the next created playlist
  • /name - clear name override
  • /help or /h - show command help
  • /quit, /exit, or /q - exit

Notes and Limitations

  • Tokens are cached locally in your application data directory under Ciderfy/tokens.json
  • This project relies on third-party services and API behavior that may change
  • Spotify playlist fetch currently allows up to 1000 tracks per call
  • Apple Music developer token extraction is based on current web player assets

License

MIT. See LICENSE.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.0.3 75 3/30/2026
1.0.2 97 3/28/2026
1.0.1 92 3/22/2026
1.0.0 88 3/21/2026