Ctrl K
ComunidadGuías…

zapstore.yaml

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
repository: https://github.com/peerloomllc/peartune

name: PearTune
summary: Your music collection, playable anywhere, without exposing your server to the internet
description: |
  PearTune plays the music library on a machine you own - an Umbrel, a NAS, an
  old desktop, a laptop - from anywhere, over a direct encrypted connection
  between your phone and that machine.

  No port forwarding, no VPN, no dynamic DNS, no account, and no copy of your
  library in anyone's cloud. The music never leaves your hardware: it streams
  through the live connection while it plays.

  It reads the library you already have. Point it at Navidrome, Jellyfin, Emby
  or anything else that speaks the Subsonic API and it uses your tags, your
  artwork and the server's transcoding. Or point it at a plain folder of files
  and PearTune reads the tags itself - artist, album, track number, year and
  embedded cover art - so a folder is a real library, not a list of filenames.

  Features:
  - Browse by artist, album, genre or track, with artwork
  - Gapless playback, shuffle and repeat, a sleep timer, background and lock-screen audio
  - Search across the whole library
  - Playlists you make on the phone, plus the read-only ones your server already has
  - Favourites and resume points that follow you between your own devices, and playback
    that hands over rather than doubling up - starting on one device pauses the other
  - Offline caching: pin an album for a flight, and recent listening is kept
  - Ask the owner for music you cannot find, and see what they did with the request
  - Pair a phone by scanning a QR code - there is no password to type

  The library does not have to be yours. Someone can let a friend or a family
  member in, each as their own person with their own devices, their own
  favourites and their own resume points, and no login to pass around. The
  owner sees every device on their dashboard and can revoke one, or everything
  one person holds, in a second - mid-song, not "on next login". Nobody who is
  let in ever receives a copy of a file.

  Two things worth stating plainly. First, PearTune needs that machine running
  the PearTune host - it is the source of the music, so this is not a player for
  files on your phone. Second, some networks stop a phone and a host connecting
  directly. When that happens PearTune can fall back to a relay PeerLoom runs,
  which forwards encrypted data it cannot read and keeps no copy of it. Your
  phone always tries a direct connection first.

  When the relay is the only route to a library, PearTune asks before streaming
  that library's music through it and remembers your answer. Browsing that
  library goes over the relay without asking, which is a much smaller amount of
  data and is stated here rather than left for you to assume. One switch in
  Settings turns the relay off entirely.

tags:
  - music
  - audio
  - selfhosted
  - privacy
  - p2p
  - nostr

license: MIT
website: https://peerloomllc.com/peartune/

images:
  - metadata/store/android/scene-2.webp
  - metadata/store/android/scene-3.webp
  - metadata/store/android/scene-4.webp
  - metadata/store/android/scene-5.webp
  - metadata/store/android/scene-6.webp

# WHY THESE ARE COMMITTED WHEN NOTHING ELSE UNDER metadata/ IS, and why there are five.
#
# The first Zapstore listing went up with no pictures at all. Not the release script and not a
# missing credential: this file had no `images:` block, because the only screenshots that existed
# rendered REAL commercial album art out of a real library. That cannot live in a public MIT repo,
# so the captures are gitignored, so this file could not point at them - and the publish did
# exactly what it was told.
#
# Fixed by INVENTING the library: scripts/make-screenshot-fixture.js draws 40 albums that belong
# to nobody, deterministically, so anyone can regenerate exactly what shipped. These five are the
# framed output, converted to WebP - 320 KB the whole set, against 15 MB of PNGs.
#
# FIVE, NOT SIX. Scene 1 is the full-screen player, and on a freshly wiped device it captures the
# MINI player instead - the one frame whose entire subject is the artwork. Three attempted fixes
# on 2026-08-12 did not change it and the cause is not yet understood; see TODO.md. Shipping the
# five that are right beats holding the listing hostage to the sixth.
#
# Regenerate:
#   node scripts/make-screenshot-fixture.js && ./scripts/android-screenshots.sh
#   then convert metadata/android/screenshots/Pixel_9_Framed/dark/*.png to WebP into here.

metadata_sources:
  - github