{"id":13535863,"url":"https://github.com/rubiojr/rplay","last_synced_at":"2025-04-14T10:51:52.981Z","repository":{"id":57553630,"uuid":"308636335","full_name":"rubiojr/rplay","owner":"rubiojr","description":"Command line audio player for your Restic repository.","archived":false,"fork":false,"pushed_at":"2021-01-07T01:51:11.000Z","size":541,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T00:05:03.844Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rubiojr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-30T13:19:15.000Z","updated_at":"2024-05-02T11:18:38.000Z","dependencies_parsed_at":"2022-09-26T18:41:13.582Z","dependency_job_id":null,"html_url":"https://github.com/rubiojr/rplay","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiojr%2Frplay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiojr%2Frplay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiojr%2Frplay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rubiojr%2Frplay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rubiojr","download_url":"https://codeload.github.com/rubiojr/rplay/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248868857,"owners_count":21174754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T09:00:30.586Z","updated_at":"2025-04-14T10:51:52.957Z","avatar_url":"https://github.com/rubiojr.png","language":"Go","readme":"# RPlay\n\n[![CI Status](https://github.com/rubiojr/rplay/workflows/ci/badge.svg)](https://github.com/rubiojr/rplay/actions)\n[![Go ReportCard](http://goreportcard.com/badge/rubiojr/rplay)](http://goreportcard.com/report/rubiojr/rplay)\n\nA command line MP3 player for your [Restic repository](https://restic.net).\n\n## Features\n\n* Index and play available audio files (flac, mp3, ogg)\n* ID3 metadata support\n* Search your music collection (filename or ID3 tag)\n* Support for indexing multiple Restic repositories\n* Random, endless playback\n* Optionally fetch missing song metadata (artist, album, etc) from Internet (see [ACOUSTICID.md](docs/ACOUSTICID.md))\n* macOS and Linux supported\n\n## Installation\n\nBinaries for Linux are available in [the releases page](https://github.com/rubiojr/rplay/releases/latest).\n\nYou'll need to build from source for macOS and other Linux architectures:\n\n```\nGO111MODULE=on go get -u github.com/rubiojr/rplay\n```\n\nOr clone the repository and run `go build`.\n\n## Usage\n\n### ⚠️ A word of caution\n\nRPlay does not encrypt the index created (locally, where rplay runs), meaning that the following information from your Restic repository will be available to those with access to the index:\n\n* Audio file names and ID3 metadata\n* Audio file contents (cached locally for playback and other things)\n* Repository ID\n* Restic (packed)blob metadata (the SHA256 of the Packfile where the blob is stored, blob length, offset within the pack file)\n* Last file modification time (mtime)\n* Hostname where the file was backed up\n* Full file path when it was backed up\n\n### Indexing your MP3\n\nThe first thing we need to do, is to index the repository:\n\n![](docs/images/rplay-index.gif)\n\nIndexing yields some stats while indexing:\n\n```\n⢿ Taco Tuesday.mp3          🎯 62 new, 0 skipped, 0 errors, 11 f/s, 0.02 minutes left\n```\n\n_file being indexed, indexed files count, already indexed, indexing speed, remaining time_\n\nand when the indexing process finishes:\n\n```\n💥 74 indexed, 0 already present. Took 5 seconds.\n```\n\nWorth noting also that RPlay accepts the same repository (the `-r` flag) URIs and backends [Restic does](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html), which means S3, rest-server, Backblaze, etc are all supported.\n\nThe indexing process will create an index in a OS specific path:\n\n**Linux**\n\n`~/.local/share/rplay`\n\n**MacOS**\n\n`~/Library/Application Support/rplay`\n\n### Searching our collection\n\nThe `search` command will search our indexed files (filename searching only for now):\n\n![](docs/images/rplay-search.gif)\n\n### Playing our tunes\n\nOnce we have indexed our repository, we're ready to play:\n\n![](docs/images/rplay-random.gif)\n\nThe play command also supports playing a specific file:\n\n```\n$ rplay -r rest:http://localhost:8000 search \"*playa*\"\nSearching for *playa*...\nID:                  e6a9a3e7e630744cd6bcfd0820a25f7b9b467c5d472f7d0f1bd443103f1fa35c\nAlbum:               La Playa\nArtist:              DJ ALEX\nFilename:            La Playa.mp3\nGenre:               unknown\nTitle:               La Playa\nYear:                20190718\n```\n\n```\nrplay -r rest:http://localhost:8000 play e6a9a3e7e630744cd6bcfd0820a25f7b9b467c5d472f7d0f1bd443103f1fa35c\nPlaying e6a9a3e7e630744cd6bcfd0820a25f7b9b467c5d472f7d0f1bd443103f1fa35c...\n\n⣾ Next song found, loading...\nalbum:               La Playa\nartist:              DJ ALEX\nfilename:            La Playa.mp3\ngenre:\ntitle:               La Playa\nyear:                20190718\n```\n\n### Environment variables\n\nRPlay supports configuring Restic's repository location and credentials via environment variables, so you don't have to type the URI and password all the time:\n\n```\nexport RESTIC_REPOSITORY=rest:http://localhost:8000\nexport RESTIC_PASSWORD=secret\n```\n\n## Roadmap\n\n* Better curses UI\n* Flag songs as hidden/unwanted\n\n## Credits\n\nRPlay is an experiment quickly built in a few days thanks to the following projects that power it:\n\n* [restic](https://restic.net) (via [RAPI](https://github.com/rubiojr/rapi))\n* [go-mp3](https://github.com/hajimehoshi/go-mp3)\n* [oto](https://github.com/hajimehoshi/oto)\n* [urfave/cli](https://github.com/urfave/cli)\n* [bluge](https://github.com/blugelabs/bluge)\n* [go-app-paths](https://github.com/muesli/go-app-paths)\n* [reflow](https://github.com/muesli/reflow)\n* [termenv](https://github.com/muesli/termenv)\n* [spinner](https://github.com/briandowns/spinner)\n","funding_links":[],"categories":["Apps"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubiojr%2Frplay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frubiojr%2Frplay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frubiojr%2Frplay/lists"}