• 0.2.5 5985640985

    0.2.5 Stable

    Hirad released this 2026-09-11 09:40:55 +00:00 | 0 commits to master since this release

    SyncFM 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
  • 0.2.4 24d87d0de2

    0.2.4 Stable

    Hirad released this 2026-08-30 10:34:17 +00:00 | 2 commits to master since this release

    SyncFM 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
  • 0.2.3 520ac1d6cc

    0.2.3 Stable

    Hirad released this 2026-08-30 05:54:33 +00:00 | 3 commits to master since this release

    SyncFM 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
  • 0.2.2 c32e1abc65

    0.2.2 Stable

    Hirad released this 2026-08-28 09:30:53 +00:00 | 4 commits to master since this release

    SyncFM 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
  • 0.2.1 2f2144b0a6

    0.2.1 Stable

    Hirad released this 2026-08-23 08:35:01 +00:00 | 5 commits to master since this release

    Highlights

    • 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 from and to behavior 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
  • 0.2.0 8ad74e1ea9

    0.2.0 Stable

    Hirad released this 2026-08-22 07:48:00 +00:00 | 6 commits to master since this release

    Highlights

    • 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 SyncVerification result 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 sync and resume operations.
    • Retry through the normal durable synchronization pipeline using the original resolved range, preserving comparison, metadata enrichment, and recovery behavior.

    API note

    SyncResult now includes a required verification field containing the resolved range, fresh counts, directional difference lists, and coverage helpers.

    Downloads
  • 0.1.1 a4f11d1c26

    0.1.1 Stable

    Hirad released this 2026-08-19 08:08:07 +00:00 | 7 commits to master since this release

    syncfm-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_name for 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
  • 0.1.0 f5224bf8ad

    0.1.0 Stable

    Hirad released this 2026-08-14 06:42:20 +00:00 | 11 commits to master since this release

    syncfm-core 0.1.0

    The first release of syncfm-core provides a reusable Python synchronization engine and a command-line interface for copying missing scrobbles between Last.fm, Libre.fm, and GNU.fm-compatible networks.

    Highlights

    • Synchronize missing scrobbles between reusable source and target network profiles, with optional Unix timestamp bounds.
    • Resume, inspect, or discard interrupted synchronization sessions.
    • Store durable synchronization state, snapshots, and queues in SQLite for recovery after failures.
    • Enrich scrobbles with metadata before submission and retry recoverable network operations.
    • Manage network profiles through the CLI, with secrets stored in the system keyring or configuration file.
    • Connect through HTTP, HTTPS, and SOCKS proxies configured per profile.
    • Follow synchronization activity through an interactive Rich dashboard, with a plain-text fallback for non-interactive terminals.
    • Embed the typed Python application layer independently of the CLI.

    CLI

    The syncfm command includes:

    • syncfm profile add|list|show|remove
    • syncfm sync --source <profile> --target <profile> [--start <timestamp>] [--end <timestamp>]
    • syncfm status
    • syncfm resume
    • syncfm discard

    Run syncfm --help or syncfm <command> --help for complete usage information.

    Requirements

    • Python 3.12 or newer
    • Credentials for each network being synchronized
    • A supported system keyring when keyring-backed credential storage is selected

    Notes

    This is the initial release. Synchronization is directional: scrobbles present on the source but missing from the target are submitted to the target. Review the selected source, target, and timestamp range before starting a sync.

    Full history: https://git.hirad.it/Hirad/syncfm-core/commits/tag/0.1.0

    Downloads