-
v0.3.2 Stable
released this
2026-11-09 09:38:46 +00:00 | -6 commits to master since this releaseSync now prefers the
extralargeartwork URL from listening history. If that size is missing or its URL is blank, sync uses the first nonblank artwork URL.Updated the adapter and sync integration tests to cover image selection and verify that the selected URL reaches LoneFM after enrichment and resume.
Ruff lint and formatting, strict Pyright, and all 51 pytest tests passed.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Source code (ZIP)
-
v0.3.1 Stable
released this
2026-10-29 05:56:06 +00:00 | -5 commits to master since this releasePrefer large artwork URLs when collecting recent tracks for synchronization. Fall back to the first nonempty image URL when large artwork is unavailable. Updated regression tests cover large-image preference, missing large images, and blank URLs.
Validation: Ruff lint and formatting checks passed; strict Pyright passed with no errors or warnings; all 51 pytest tests passed.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Source code (ZIP)
-
v0.3.0 Stable
released this
2026-10-28 07:49:32 +00:00 | -4 commits to master since this releasesyncfm-core 0.3.0 moves network integration to PyScrobbler and adds artwork synchronization to LoneFM.
Changes:
- Replace the pylast network backend with PyScrobblerNetworkAdapter and require PyScrobbler 0.1.5 or newer, including its singleton recent-history response fix.
- Collect paginated recent history through PyScrobbler while preserving inclusive timestamp boundaries and repeated plays.
- Carry optional artwork URLs from recent tracks through SQLite snapshots, metadata enrichment, queued submissions, and session resume. Prefer medium artwork, falling back to the first nonempty image URL.
- Upgrade the SQLite schema to version 3 without losing existing snapshots or queued work; artwork does not affect duplicate detection.
- Restore the normal terminal before displaying sync, resume, or verification-retry errors, so dashboard failures remain visible.
- Preserve legacy gnufm profile values and GNU.fm session names while using LoneFM naming for new configurations.
- Close command-owned network transports on success and failure, and retain metadata conversion, authentication-error translation, and rejected-submission handling.
Compatibility:
- Python 3.13 or newer is required.
- The former GNUFMNetwork, PyLastMapper, and PyLastNetworkAdapter exports and modules have been removed. Use NetworkFactory and PyScrobblerNetworkAdapter.
- Use NetworkType.LONEFM and --type lonefm instead of NetworkType.GNUFM. Legacy serialized profile values remain readable.
Validation: 50 tests passed using PyScrobbler 0.1.5; strict Pyright, Ruff lint, and Ruff formatting checks passed. Tests cover pagination, network configuration and cleanup, legacy resume compatibility, artwork selection and persistence, schema migration, complete sync/resume flows, and terminal error visibility. No live scrobbles were submitted during validation.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
0.2.5 Stable
released this
2026-09-11 09:40:55 +00:00 | 1 commits to master since this releaseSyncFM Core 0.2.5 expands the supported profile names.
Changes since 0.2.4:
- Allow uppercase letters and dots in profile names. Names must start with a letter or number and may contain letters, numbers, underscores, hyphens, and dots.
- Update the profile validation error message to describe the supported characters.
- Remove the outdated lowercase-only profile naming restriction from the README.
- Bump the package version and uv lockfile to 0.2.5.
Validation: Ruff and Pyright pass; profile-name acceptance and rejection smoke checks pass; uv successfully built the wheel and source distribution.
Full changelog: https://git.hirad.it/Hirad/syncfm-core/compare/0.2.4...0.2.5
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
3 downloads
-
0.2.4 Stable
released this
2026-08-30 10:34:17 +00:00 | 3 commits to master since this releaseSyncFM Core 0.2.4 adds resolved synchronization ranges to progress updates. New synchronizations report the automatically resolved range, resumed sessions report their persisted range, and the optional SyncProgress field is appended to preserve positional API compatibility.
Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
4 downloads
-
Source code (ZIP)
-
0.2.3 Stable
released this
2026-08-30 05:54:33 +00:00 | 4 commits to master since this releaseSyncFM Core 0.2.3 fixes metadata progress reporting for GUI and callback consumers. Completed metadata-enrichment events now carry the fetched duration and MusicBrainz ID, allowing rows to populate those values when they transition from Fetching to Ready.
Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
4 downloads
-
Source code (ZIP)
-
0.2.2 Stable
released this
2026-08-28 09:30:53 +00:00 | 5 commits to master since this releaseSyncFM Core 0.2.2 adds per-scrobble failure reporting for GUI and callback consumers. SyncProgress now exposes current_scrobble_failed with validation for mutually exclusive completion and failure states. Metadata enrichment and scrobble submission emit failure progress after persisting failed queue state, and the terminal dashboard displays failed items in both interactive and plain-text modes.
Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
3 downloads
-
Source code (ZIP)
-
0.2.1 Stable
released this
2026-08-23 08:35:01 +00:00 | 6 commits to master since this releaseHighlights
- Correct inclusive timestamp-range handling for Last.fm, Libre.fm, and GNU.fm history requests made through pylast.
- Widen pylast query boundaries before locally filtering results, reconciling pylast’s exclusive
fromandtobehavior with SyncFM’s inclusive range contract. - Prevent the target’s latest existing scrobble—the inferred start boundary—from being falsely queued for submission and later reported as missing during verification.
- Preserve correct range results when a caller combines timestamp boundaries with a scrobble limit.
This is a focused bug-fix release following 0.2.0.
Downloads
-
Source code (ZIP)
3 downloads
-
Source code (TAR.GZ)
3 downloads
-
0.2.0 Stable
released this
2026-08-22 07:48:00 +00:00 | 7 commits to master since this releaseHighlights
- Verify every completed synchronization against fresh source and target histories over the exact resolved timestamp range.
- Report final source and target counts plus scrobbles still missing from either network through the new public
SyncVerificationresult model. - Poll the target after submission to allow newly submitted scrobbles time to become visible.
- Show verification results in the CLI and offer confirmed retries for scrobbles still missing from the target after both
syncandresumeoperations. - Retry through the normal durable synchronization pipeline using the original resolved range, preserving comparison, metadata enrichment, and recovery behavior.
API note
SyncResultnow includes a requiredverificationfield containing the resolved range, fresh counts, directional difference lists, and coverage helpers.Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
4 downloads
-
0.1.1 Stable
released this
2026-08-19 08:08:07 +00:00 | 8 commits to master since this releasesyncfm-core 0.1.1
This release improves project readiness, documentation, and network-name presentation since
0.1.0.Highlights
- Mark the package as beta software in its project metadata.
- Add
NetworkType.display_namefor human-readable Last.fm, Libre.fm, and GNU.fm labels in user-facing integrations. - Expand the README with installation, quick-start synchronization, profile and credential management, proxy configuration, recovery workflows, environment variables, Python API examples, and development guidance.
- Bump the package and lockfile version to
0.1.1.
Validation
- Ruff: passed
- Pyright: passed with zero errors or warnings
- Source distribution and wheel: built successfully
- Pytest: no test files are currently present
Full history: https://git.hirad.it/Hirad/syncfm-core/compare/0.1.0...0.1.1
Downloads
-
Source code (ZIP)
4 downloads
-
Source code (TAR.GZ)
4 downloads
generated from Hirad/Template