A Spotify-style music player for iPhone, Android and the Mac that plays your own music files, with YouTube on top when you want it.

Made entirely by Claude. Every line of this app, its server, the tests, the screenshots and this README were written by Claude (Anthropic's AI) in Claude Code. A person decided what it should do, tried it on their iPhone and Mac, and reported back what to change; Claude did the rest.
There are two halves:
.dmg) and Android (.apk): from
Releases.
On Android, allow installing from your browser or Files when it asks.Add a folder (from Files on iPhone, the open panel on the Mac, the file picker on Android) and every folder in it that holds songs becomes a playlist. Folders inside folders become playlists of their own, not merged into their parent, so the way you already sort your music is the way it shows up:
Music/
├── Michael Jackson/
│ ├── Thriller/ → playlist "Thriller"
│ └── Bad/ → playlist "Bad"
└── Queen/
├── A Night at the Opera/ → playlist "A Night at the Opera"
└── Greatest Hits/ → playlist "Greatest Hits"

A desktop layout on a wide window: your library in a sidebar, search on top, the player across the bottom. Space plays and pauses.

Run musify_backend (one small Docker container; its README walks through it), enter its address and key in Settings → Musify server, and you also get:

Save a YouTube song, or a whole playlist, artist or album, as M4A (AAC as YouTube has it, not re-encoded) with its title, artist and cover, into a folder of yours. Downloading one of your own playlists turns it into a folder playlist. Songs you already have are skipped.
You need Flutter 3.47 or newer (Dart 3.13), and Xcode for iPhone or Android Studio / the Android SDK for Android.
git clone https://github.com/fatmachines/musify_frontend.git
cd musify_frontend
flutter pub get
flutter run # on a connected phone
ios/Runner.xcworkspace in Xcode.com.fatmachines.musify) to one of your own.ios/Runner/Runner.entitlements). Siri needs a paid Apple Developer
account; with a free one, remove it there (the app then simply skips
Siri).flutter run, or Run in Xcode.CarPlay needs Apple's CarPlay audio entitlement, which Apple gives on request; without it Musify shows in CarPlay's Now Playing only.
flutter run -d macos
or open macos/Runner.xcworkspace in Xcode, pick your team under Runner →
Signing & Capabilities, and Run. On a wide window Musify switches to a
desktop layout (library sidebar, search bar on top, player across the
bottom; space plays and pauses). The app is sandboxed: music folders are
added with the open panel and stay readable across launches. Debug builds
(flutter run) are com.fatmachines.musify.dev, with their own data, so
they don't clash with a signed release build installed on the same Mac.
To hand the Mac app to others, scripts/make_dmg.sh builds it, signs it
with your Developer ID, packs dist/Musify-<version>.dmg and has Apple
notarize it, so it opens without a warning. The script's header lists the
one-time setup (certificate and notarization credentials).
Change applicationId in android/app/build.gradle.kts if you publish your
own build, then flutter run. scripts/make_apk.sh builds a release APK
into dist/, signed with your key from android/key.properties (its
header shows how to make one).
Deploy the backend (its README walks through it), then in the app: Settings → Musify server, and enter its address and key. Or build them in:
flutter run --dart-define=MUSIFY_SERVER=https://musify.example.com \
--dart-define=MUSIFY_KEY=<your key>
flutter analyze
flutter test
packages/just_audio is a copy of just_audio
with Musify's iOS equalizer (MusifyEqualizer.m); otherwise unchanged.ios/Runner/AppDelegate.swift holds the native parts: folder access
(security-scoped bookmarks) and Siri./audio/<id>.m4a. Without one (or if that fails),
lib/services/youtube/youtube_web_player.dart keeps YouTube's mobile
player in a hidden web view in step with the app's player, which plays
silence of the same length for each YouTube song.Musify was built from start to finish by Claude, Anthropic's AI, working in Claude Code: the Flutter app (iPhone, Android, Mac), the native iOS and Mac parts (folder access, Siri, the equalizer), the Python server, the sync protocol, the tests that run both together, and the screenshots above (rendered by a test, with made-up sample files). The person behind it didn't write its code: they said what they wanted, used it every day, and sent back bugs and screen recordings.
Musify is for your own listening. Download only what you have the right to, and respect YouTube's terms where you live.
A Spotify-style music player for iPhone, Android and the Mac that plays your own music files, with YouTube on top when you want it.

Made entirely by Claude. Every line of this app, its server, the tests, the screenshots and this README were written by Claude (Anthropic's AI) in Claude Code. A person decided what it should do, tried it on their iPhone and Mac, and reported back what to change; Claude did the rest.
There are two halves:
.dmg) and Android (.apk): from
Releases.
On Android, allow installing from your browser or Files when it asks.Add a folder (from Files on iPhone, the open panel on the Mac, the file picker on Android) and every folder in it that holds songs becomes a playlist. Folders inside folders become playlists of their own, not merged into their parent, so the way you already sort your music is the way it shows up:
Music/
├── Michael Jackson/
│ ├── Thriller/ → playlist "Thriller"
│ └── Bad/ → playlist "Bad"
└── Queen/
├── A Night at the Opera/ → playlist "A Night at the Opera"
└── Greatest Hits/ → playlist "Greatest Hits"

A desktop layout on a wide window: your library in a sidebar, search on top, the player across the bottom. Space plays and pauses.

Run musify_backend (one small Docker container; its README walks through it), enter its address and key in Settings → Musify server, and you also get:

Save a YouTube song, or a whole playlist, artist or album, as M4A (AAC as YouTube has it, not re-encoded) with its title, artist and cover, into a folder of yours. Downloading one of your own playlists turns it into a folder playlist. Songs you already have are skipped.
You need Flutter 3.47 or newer (Dart 3.13), and Xcode for iPhone or Android Studio / the Android SDK for Android.
git clone https://github.com/fatmachines/musify_frontend.git
cd musify_frontend
flutter pub get
flutter run # on a connected phone
ios/Runner.xcworkspace in Xcode.com.fatmachines.musify) to one of your own.ios/Runner/Runner.entitlements). Siri needs a paid Apple Developer
account; with a free one, remove it there (the app then simply skips
Siri).flutter run, or Run in Xcode.CarPlay needs Apple's CarPlay audio entitlement, which Apple gives on request; without it Musify shows in CarPlay's Now Playing only.
flutter run -d macos
or open macos/Runner.xcworkspace in Xcode, pick your team under Runner →
Signing & Capabilities, and Run. On a wide window Musify switches to a
desktop layout (library sidebar, search bar on top, player across the
bottom; space plays and pauses). The app is sandboxed: music folders are
added with the open panel and stay readable across launches. Debug builds
(flutter run) are com.fatmachines.musify.dev, with their own data, so
they don't clash with a signed release build installed on the same Mac.
To hand the Mac app to others, scripts/make_dmg.sh builds it, signs it
with your Developer ID, packs dist/Musify-<version>.dmg and has Apple
notarize it, so it opens without a warning. The script's header lists the
one-time setup (certificate and notarization credentials).
Change applicationId in android/app/build.gradle.kts if you publish your
own build, then flutter run. scripts/make_apk.sh builds a release APK
into dist/, signed with your key from android/key.properties (its
header shows how to make one).
Deploy the backend (its README walks through it), then in the app: Settings → Musify server, and enter its address and key. Or build them in:
flutter run --dart-define=MUSIFY_SERVER=https://musify.example.com \
--dart-define=MUSIFY_KEY=<your key>
flutter analyze
flutter test
packages/just_audio is a copy of just_audio
with Musify's iOS equalizer (MusifyEqualizer.m); otherwise unchanged.ios/Runner/AppDelegate.swift holds the native parts: folder access
(security-scoped bookmarks) and Siri./audio/<id>.m4a. Without one (or if that fails),
lib/services/youtube/youtube_web_player.dart keeps YouTube's mobile
player in a hidden web view in step with the app's player, which plays
silence of the same length for each YouTube song.Musify was built from start to finish by Claude, Anthropic's AI, working in Claude Code: the Flutter app (iPhone, Android, Mac), the native iOS and Mac parts (folder access, Siri, the equalizer), the Python server, the sync protocol, the tests that run both together, and the screenshots above (rendered by a test, with made-up sample files). The person behind it didn't write its code: they said what they wanted, used it every day, and sent back bugs and screen recordings.
Musify is for your own listening. Download only what you have the right to, and respect YouTube's terms where you live.