Library toolbar rework + bulk local-file import into a "Local Files" playlist - #112
Merged
sanylax0 merged 1 commit intoJul 20, 2026
Merged
Conversation
…aylist
Removes the dead overflow ('...') toolbar item and replaces the plus button
with two composed add buttons: plus+download opens the services importer
(YouTube/Spotify links), plus+upload opens a Files picker that accepts audio
files or whole folders. Picked folders are scanned recursively, filtering to
audio types big enough to plausibly be songs, and everything imports into a
shared "Local Files" playlist (deduped by title/artist/duration) with
embedded metadata + artwork extraction and post-ready analysis.
Ports the App Store branch's local-import foundation to main: Track.stemKey
(video ID or UUID) so local tracks get stems/caches, Track.artworkPath +
ArtworkStore for embedded art, and stem/cleanup paths rekeyed from
youtubeVideoID to stemKey (existing YouTube stems keep their keys).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013TJoWkqg8bzkGdzxWhWjWP
sanylax0
added a commit
that referenced
this pull request
Jul 20, 2026
…ments-yvk3t7-cloud-import Materialize cloud-provider files (Google Drive) on local import [stacked on #112]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Toolbar
secondaryActionplacement, which iOS collapses into an ellipsis menu that appeared broken. (Per-playlist sync + auto-sync are untouched.)Local files import
The upload button opens a Files picker accepting audio files or entire folders. A picked folder is scanned recursively and filtered to things that are plausibly music (audio container extensions, not hidden, ≥250 KB so ringtones/UI sounds are skipped); everything found imports in bulk into a shared "Local Files" playlist.
Each import extracts embedded metadata (title/artist/duration) and cover art, creates a ready
Track, and kicks off the normal post-ready analysis (BPM/key/loudness/silence) — so local songs participate fully in beatmatched, stem-separated transitions.Foundation ported from
appStoreReleaseCandidateTrack.stemKey(youtubeVideoID ?? id.uuidString) — local tracks get stem-cache identity; existing YouTube stems keep their keys.Track.artworkPath+ArtworkStore(additive SwiftData property) for extracted art;artworkURLprefers it.LibraryCleanup(and its three callers) rekeyed fromyoutubeVideoIDtostemKey, so local tracks' cached audio/stems/artwork are cleaned up on delete like everything else.Device checks
stemslogs) enabling vocal-aware transitions.xcodegen generateafter checkout (new source file).🤖 Generated with Claude Code
https://claude.ai/code/session_013TJoWkqg8bzkGdzxWhWjWP
Generated by Claude Code