in_phase 1.4.1
in_phase: ^1.4.1 copied to clipboard
A music library management tool for creating and syncing playlists between Spotify and Rekordbox.
Upcoming #
1.4.1 #
- ci: run CI and pana only on pull requests, and publish merged
releasePRs with the GitHub ActionsPUB_CREDENTIALSsecret
1.4.0 #
- fix(curate): show API/playback errors in the session log instead of exiting silently; keep curating after playback failures; allow next/quit while a key action is in progress
- perf(curate): use per-track Liked Songs
containsforlinstead of waiting for the full library prefetch; load target playlist ids in the background without blocking add-to-target - feat(curate): replace curate's stream UI with a Nocterm full-screen session (sticky footer with shortcut hints, per-target and Liked Songs indicators,
auto-like: ✓when enabled); close the Spotify client before Nocterm shuts down - feat(curate): press
lto save the current track to Liked Songs; shows an "already in Liked Songs" message when it is already saved (same style as target playlist keys) - perf(curate): prefetch Liked Songs once per session and update the in-memory id set after each save, so
landauto_add_to_likesavoid acontainsAPI call on every action - ci: publish releases from merged
releasePRs, add changelog enforcement, and tag successful publishes automatically
1.3.1 #
- ci: cache ci setup steps
- chore: rename 'docs' directory to 'doc'
- feat(crawl): add optional
cover.fontto render covers with ImageMagick using custom TTF/OTF fonts, with automatic fallback to Dart-native rendering when ImageMagick is unavailable or fails - docs(crawl): document custom cover font usage and update crawl config/default schema examples
1.3.0 #
- chore(tool):
prepare_release.shandrewrite_changelog_for_release.sh(awk/sed); add Pana CI workflow - docs: README contributing/CI; CLAUDE tech stack
spotifypub package; Copilot instructions link workflows - fix(cli): resolve relative config paths to absolute after tilde expansion; clarify config path test name
- chore(deps): use
spotify: ^0.16.1from pub instead of a git dependency - ci: upload coverage to Codecov (OSS); analyze full repository; ignore
coverage/ - feat(collect): per-collection
track_order(oldest_first|newest_first, defaultoldest_first) to sort the target playlist byadded_at - refactor(crawl): remove
{time_format_HH_MM}template variable (was always00:00for date-only crawl end; use{real_time}for wall-clock time) - refactor(crawl): use
simple_date(SimpleDate) for date-only ranges, parsing, and filters; align playlist release vs added-day checks with calendar-day helpers - feat(curate): optional
auto_add_to_likesin curate config — saves to Liked Songs when adding to a target playlist; shows "Liked" only if the track was not already saved - fix(sync): route
sync validatevia first rest argument instead of anargssubcommand soin_phase syncandin_phase sync <playlist>…work again (--configonly applies to validate) - feat(search): show audio file path in track details when looking up by Rekordbox ID (above Cues)
- fix(sync):
sync validateruns Spotify playlist checks concurrently viaRequestPooland prints grouped, color-balanced issue sections with truncated paths - refactor(sync): centralize sync config YAML parsing (
SyncConfig.fromYamlString) - chore: add Rekordbox audio path helper (
rekordboxAudioPath) - docs: document barrel-file conventions in
CLAUDE.md - feat(sync): add
sync validateto check sync config YAML, Spotify playlist keys incustom_tracks, and Rekordbox track IDs with on-disk audio files - feat(curate): press
cto copy the current track's Spotify URL to the clipboard - feat(sync): add interactive
buycommand to open iTunes links for missing tracks - fix(cli): resolve
~and relative paths passed via-c/--configto absolute paths - fix(cli): stop creating new config files when a custom
-c/--configpath does not exist - feat(crawl): include artist appearances on albums and compilations in crawl
- fix(request-pool): respect Retry-After from Spotify 429 responses
- fix(crawl): use
api.me.playlists.createinstead ofapi.playlists.createPlaylist - fix(crawl): fix some albums not being found by sorting artist's albums by release date
- feat(cache): add
cache clear-artistscommand to delete cached albums for specific artists - fix: decrease album fetch limit to 10 (according to Spotify API docs)
- fix(crawl): include time in
realDateTimeandrealDateTimeFulltemplate variables - refactor(crawl): move
target_playlisttooutput_playlist.id(breaking config change) - refactor(crawl): remove deprecated
append_to_existingoption in favor oftarget_playlist+update_mode - feat(crawl): add
update_modeoption (replaceorappend) for controlling how target playlists are updated - feat(crawl): add
target_playlistoption to update existing playlists instead of creating new ones - refactor(crawl): use barrel imports for crawl module
- feat(crawl): add
date_range: "today"shortcut for single-day filtering - feat(crawl): deprecate
added_between_daysin favor ofdate_range(backward compatible) - feat(crawl): add flexible
date_rangefilter supporting current month/week/year, time units (days/weeks/months), and absolute date ranges
1.2.0 #
- feat(collect): add
collectcommand to aggregate tracks from multiple Spotify playlists into a single target playlist - feat(crawl): add in-place TUI with parallel collection, progress display, slots for active sources, recently completed section, spinner and checkmarks, fall back to log output when not a TTY
- refactor(curate): extract command into curate/ module (types, key handler, display) for maintainability
- fix(curate): stop re-printing "Added to" status when pressing N after adding a track
- chore: adopt recursive barrel files (crawl, curate, reports) and update imports to use highest available barrel
1.1.5 #
- feat: add
curatecommand to preview playlist tracks and organize them into target playlists - fix: remove invalid sync cache mappings when Rekordbox track was deleted
- fix: exit search after initial query instead of entering interactive mode
1.1.4 #
- feat: add
updatecommand to update InPhase to the latest version - docs: expand Rekordbox setup instructions with comprehensive rekorddart prerequisites
- chore: update rekorddart to 1.1.1 (use default encryption key when REKORDBOX_DB_KEY is not set)
1.1.3 #
- feat: add
cache cleancommand to delete build folder containing sync and crawl reports - feat: automatically initialize default config files with helpful examples on first run
- chore: remove unused constants (
syncCacheFile,crawlCacheFile)
1.1.2 #
- feat: improved YouTube channel source reporting in crawl reports
- docs: update documentation to include YouTube channel configuration
1.1.1 #
- feat: add support for YouTube channel sources to crawl command
- ci: add publish script
1.1.0 #
- feat: add search command and cues sync functionality
- docs: document rekorddart setup prerequisite for Rekordbox features
- chore: upgrade to dart 3.10
- feat: add config reveal command to open config directory
- chore: remove local dependencies in favor of git and pub hosted
- chore: improve docs, remove old export file
- chore: rename project to in_phase
- chore: database migrations, minor edits
- refactor: migrate to Drift, generate sync reports
- feat: cache more stuff
- feat: make reports on every crawl run
- feat: enhance logging and debugging for track collection and request handling
- feat: add custom track support for playlist sync operations
- feat: add crawl command, improve sync caching
- docs: add comprehensive configuration documentation
1.0.0 #
- Initial version.