{"id":13413822,"url":"https://github.com/ironsmile/euterpe","last_synced_at":"2026-04-02T13:28:20.354Z","repository":{"id":12887504,"uuid":"15564170","full_name":"ironsmile/euterpe","owner":"ironsmile","description":"Self-hosted music streaming server 🎶 with RESTful API and Web interface. Think of it as your very own Spotify! ☁️🎧","archived":false,"fork":false,"pushed_at":"2026-01-01T15:06:11.000Z","size":41118,"stargazers_count":567,"open_issues_count":12,"forks_count":44,"subscribers_count":11,"default_branch":"master","last_synced_at":"2026-01-14T12:33:59.639Z","etag":null,"topics":["http","listen","mp3","mp3player","music","self-hosted","streaming","streaming-audio"],"latest_commit_sha":null,"homepage":"https://listen-to-euterpe.eu","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ironsmile.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-01-01T12:51:54.000Z","updated_at":"2026-01-13T11:16:51.000Z","dependencies_parsed_at":"2024-04-27T10:33:55.740Z","dependency_job_id":"a0cb0ab7-e53a-4f7c-95ec-57696b9962be","html_url":"https://github.com/ironsmile/euterpe","commit_stats":{"total_commits":460,"total_committers":5,"mean_commits":92.0,"dds":"0.013043478260869601","last_synced_commit":"0f04db85c775c642f4c0b739948deef968a87ec6"},"previous_names":["ironsmile/httpms"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/ironsmile/euterpe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ironsmile%2Feuterpe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ironsmile%2Feuterpe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ironsmile%2Feuterpe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ironsmile%2Feuterpe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ironsmile","download_url":"https://codeload.github.com/ironsmile/euterpe/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ironsmile%2Feuterpe/sbom","scorecard":{"id":494645,"data":{"date":"2025-08-11","repo":{"name":"github.com/ironsmile/euterpe","commit":"5e39b6d785edc43d6ff421e2a25889cde25147e6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Maintained","score":10,"reason":"14 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build-test-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/docker-images.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-test-lint.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/build-test-lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-test-lint.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/build-test-lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test-lint.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/build-test-lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-test-lint.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/build-test-lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-test-lint.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/build-test-lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test-lint.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/build-test-lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docker-images.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/docker-images.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:102: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:143: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:158: update your workflow using https://app.stepsecurity.io/secureworkflow/ironsmile/euterpe/release.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:12: pin your Docker image by updating alpine:3.21 to alpine:3.21@sha256:b6a6be0ff92ab6db8acd94f5d1b7a6c2f0f5d10ce3c24af348d333ac6da80685","Info:   0 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   4 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build-test-lint.yml:5"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.6.2 not signed: https://api.github.com/repos/ironsmile/euterpe/releases/238858228","Warn: release artifact v1.6.1 not signed: https://api.github.com/repos/ironsmile/euterpe/releases/223814342","Warn: release artifact v1.6.0 not signed: https://api.github.com/repos/ironsmile/euterpe/releases/223790825","Warn: release artifact v1.5.4 not signed: https://api.github.com/repos/ironsmile/euterpe/releases/97776040","Warn: release artifact v1.5.3 not signed: https://api.github.com/repos/ironsmile/euterpe/releases/97077200","Warn: release artifact v1.6.2 does not have provenance: https://api.github.com/repos/ironsmile/euterpe/releases/238858228","Warn: release artifact v1.6.1 does not have provenance: https://api.github.com/repos/ironsmile/euterpe/releases/223814342","Warn: release artifact v1.6.0 does not have provenance: https://api.github.com/repos/ironsmile/euterpe/releases/223790825","Warn: release artifact v1.5.4 does not have provenance: https://api.github.com/repos/ironsmile/euterpe/releases/97776040","Warn: release artifact v1.5.3 does not have provenance: https://api.github.com/repos/ironsmile/euterpe/releases/97077200"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T20:10:17.551Z","repository_id":12887504,"created_at":"2025-08-19T20:10:17.552Z","updated_at":"2025-08-19T20:10:17.552Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307084,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["http","listen","mp3","mp3player","music","self-hosted","streaming","streaming-audio"],"created_at":"2024-07-30T20:01:50.296Z","updated_at":"2026-04-02T13:28:20.347Z","avatar_url":"https://github.com/ironsmile.png","language":"Go","funding_links":[],"categories":["服务器应用程序","置顶","Server Applications","[🎛️ yunohost](https://github.com/stars/ketsapiwiq/lists/yunohost)","Go","Relational Databases"],"sub_categories":["HTTP客户端","04、多媒体处理中心","HTTP Clients"],"readme":"Euterpe\n======\n\n\u003cimg src=\"images/heavy-metal-128.png\" alt=\"Euterpe Icon\" align=\"left\" style=\"margin-right: 20px\" title=\"Euterpe Icon\" /\u003e\n\nEuterpe is self-hosted streaming service for music.\n\nA way to listen to your music library from everywhere. Once set up you won't need anything but a browser. Think of it as your own Spotify service over which you have full control. Euterpe will let you browse through and listen to your music over HTTP(s). Up until now I've had a really bad time listening to my music which is stored back home. I would create a mount over ftp, sshfs or something similar and point the local player to the mounted library. Every time it resulted in some unpleasantry. Just imagine searching in a network mounted directory!\n\nNo more!\n\n[![Build Status](https://github.com/ironsmile/euterpe/actions/workflows/build-test-lint.yml/badge.svg?branch=master)](https://github.com/ironsmile/euterpe/actions/workflows/build-test-lint.yml?query=branch%3Amaster) [![GoDoc](https://pkg.go.dev/badge/github.com/ironsmile/euterpe)](https://godoc.org/github.com/ironsmile/euterpe) [![Go Report Card](https://goreportcard.com/badge/github.com/ironsmile/euterpe)](https://goreportcard.com/report/github.com/ironsmile/euterpe) [![Coverage Status](https://coveralls.io/repos/github/ironsmile/euterpe/badge.svg?branch=master)](https://coveralls.io/github/ironsmile/euterpe?branch=master)\n\n* [Web UI](#web-ui)\n* [Features](#features)\n* [Demo](#demo)\n* [Requirements](#requirements)\n* [Install](#install)\n* [Docker Image](#docker)\n* [Configuration](#configuration)\n* [As an API](#as-an-api)\n* [OSX Media Keys Control](#media-keys-control-for-osx)\n* [Clients](#clients)\n* [Change Log](CHANGELOG.md)\n* [Name Change](#name-change)\n\n\nWeb UI\n======\n\nHave a taste of how its web interface looks like\n\n![Euterpe Screenshot](images/euterpe-preview.webp)\n\nIt comes with a custom [jPlayer](https://github.com/happyworm/jPlayer) which can handle playlists with thousands of songs. Which is [an improvement](https://github.com/jplayer/jPlayer/pull/192) over the original which never included this performance patch.\n\nI feel obliged to say that the music on the screenshot is written and performed by my close friend [Velislav Ivanov](http://www.progarchives.com/artist.asp?id=4264).\n\n\nFeatures\n======\n\n* Simple. It is just one binary, that's it! You don't need to faff about with interpreters or web servers\n* Fast. A typical response time on my more than a decade old mediocre computer is 26ms for a fairly large collection\n* Supports the most common audio formats such as mp3, oga, ogg, wav, flac, opus, web and m4a audio formats\n* Built-in fast and simple Web UI so that you can play your music on every device\n* Media and UI could be served over HTTP(S) natively without the need for other software\n* User authentication (HTTP Basic, query token, Bearer token)\n* Media artwork from local files or automatically downloaded from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive)\n* Artist images could be downloaded automatically from [Discogs](https://www.discogs.com/)\n* Search by track name, artist or album\n* Download whole album in a zip file with one click\n* Controllable via media keys in OSX with the help of [BeardedSpice](https://beardedspice.github.io/)\n* Extensible via [stable API](#as-an-api)\n* Multiple [clients and player plugins](#clients)\n* Uses [jplayer](https://github.com/happyworm/jPlayer) to play your music on really old browsers\n\nDemo\n======\n\nJust show, don't talk, will ya? I will! You may take the server a spin with the [live demo](https://listen-to-euterpe.eu/demo) if you would like to. Feel free to thank all the artists who made their music available for this!\n\nRequirements\n======\nIf you want to install it from source you will need:\n\n* [Go](http://golang.org/) 1.24 or later [installed and properly configured](http://golang.org/doc/install).\n\n* [taglib](https://taglib.org/) - Read the [install instructions](https://github.com/taglib/taglib/blob/master/INSTALL.md) or better yet the one inside your downloaded version. Most operating systems will have it in their package manager, though. Better use this one.\n\n* [International Components for Unicode](http://site.icu-project.org/) - The Euterpe binary dynamically links to `libicu`. Your friendly Linux distribution probably already has a package. For other OSs one should [go here](http://site.icu-project.org/download).\n\nInstall\n======\n\nThe safest route is installing [one of the releases](https://github.com/ironsmile/euterpe/releases).\n\n#### Linux \u0026 macOS\n\nIf you have [one of the releases](https://github.com/ironsmile/euterpe/releases) (for example `euterpe_1.1.0_linux.tar.gz`) it includes an `install` script which would install Euterpe in `/usr/bin/euterpe`. You will have to uninstall any previously installed versions first. An `uninstall` script is provided as well.\n\n#### Windows\n\nAutomatically creating a release version for Windows is in progress at the moment. For the time being check out the next section, \"From Source\". Pay attention to the [requirements](#requirements) section above. As of writing this the author hasn't been yet initiated in the secret art of building and installing libraries on Windows so you are on your own.\n\n#### From Source (any OS)\n\nIf installing from source running `go install` in the project root directory will compile `euterpe` and move its binary in your `$GOPATH`. Releases from `v1.0.1` onward have their go dependencies vendored in.\n\nSo, to install the `master` branch, you can just run\n\n```\ngo install github.com/ironsmile/euterpe\n```\n\nOr alternatively, if you want to produce a release version you will have to get the repository. Then in the root of the project run\n\n```\nmake release\n```\n\nThis will produce a binary `euterpe` which is ready for distribution. Check its version with\n\n```\n./euterpe -v\n```\n\nFirst Run\n======\n\nOnce installed, you are ready to use your media server. After its initial run it will create a configuration file which you will have to edit to suit your needs.\n\n1. Start it with ```euterpe```\n\n2. [Edit the config.json](#configuration) and add your library paths to the \"library\" field. This is an *important* step. Without it, `euterpe` will not know where your media files are.\n\n\nDocker\n======\n\nAlternatively to installing everything in your environment you can use the [Docker image](https://hub.docker.com/r/ironsmile/euterpe).\n\nStart the server by running:\n\n```sh\ndocker run -v \"${HOME}/Music/:/root/Music\" -p 8080:9996 -d ironsmile/euterpe:latest euterpe\n```\n\nThen point your browser to [https://localhost:8080](https://localhost:8080) and you will see the Euterpe web UI. The `-v` flag in the Docker command will mount your `$HOME/Music` directory to be discoverable by Euterpe.\n\n\n### Building the Image Yourself\n\nYou can use the [Dockerfile](Dockerfile) in this repository to build the image yourself.\n\n```docker build -t ironsmile/euterpe github.com/ironsmile/euterpe```\n\nThe `euterpe` binary there is placed in `/usr/local/bin/euterpe`.\n\nConfiguration\n======\n\nHTTPS configuration is saved in a JSON file, different for every user in the system. Its\nlocation is as follows:\n\n* Linux or BSD: ```$HOME/.euterpe/config.json```\n* Windows: ```%APPDATA%\\euterpe\\config.json```\n\nWhen started for the first time Euterpe will create one for you. Here is an example:\n\n```js\n{\n    // Address and port on which Euterpe will listen. It is in the form hostname[:port]\n    // For exact explanation see the Addr field in the Go's net.http.Server\n    // Make sure the user running Euterpe have permission to bind on the specified\n    // port number\n    \"listen\": \":443\",\n\n    // true if you want to access Euterpe over HTTPS or false for plain HTTP.\n    // If set to true the \"ssl_certificate\" field must be configured as well.\n    \"ssl\": true,\n\n    // Provides the paths to the certificate and key files. Must be full paths, not\n    // relatives. If \"ssl\" is false this can be left out.\n    \"ssl_certificate\": {\n        \"crt\": \"/full/path/to/certificate/file.crt\",\n        \"key\": \"/full/path/to/key/file.key\"\n    },\n\n    // true if you want the server to require HTTP basic authentication. Credentials\n    // are set by the 'authentication' field below.\n    \"basic_authenticate\": true,\n    \n    // User and password for the HTTP basic authentication.\n    \"authentication\": {\n        \"user\": \"example\",\n        \"password\": \"example\"\n    },\n\n    // An array with all the directories which will be scanned for media. They must be\n    // full paths and formatted according to your OS. So for example a Windows path\n    // have to be something like \"D:\\Media\\Music\".\n    // As expected Euterpe will need permission to read in the library folders.\n    \"libraries\": [\n        \"/path/to/my/files\",\n        \"/some/more/files/can/be/found/here\"\n    ],\n    \n    // Optional configuration on how to scan libraries. Note that this configuration\n    // is applied to each library separately.\n    \"library_scan\": {\n        // Will wait this much time before actually starting to scan a library.\n        // This might be useful when scanning is resource hungry operation and you\n        // want to postpone it on start up.\n        \"initial_wait_duration\": \"1s\",\n        \n        // With this option a \"operation\" is defined by this number of scanned files.\n        \"files_per_operation\": 1500,\n\n        // After each \"operation\", sleep this amount of time.\n        \"sleep_after_operation\": \"15ms\"\n    },\n\n    // When true, Euterpe will search for images on the internet. This means album artwork\n    // and artists images. Cover Art Archive is used for album artworks when none is\n    // found locally. And Discogs for artist images. Anything found will be saved in\n    // the Euterpe database and later used to prevent further calls to the archive.\n    \"download_artwork\": true,\n\n    // If download_artwork is true the server will try to find artist artwork in the\n    // Discogs database. In order for this to work an authentication is required\n    // with their API. This here must be a personal access token. In effect the server\n    // will make requests on your behalf.\n    //\n    // See the API docs for more information:\n    // https://www.discogs.com/developers/#page:authentication,header:authentication-discogs-auth-flow\n    \"discogs_auth_token\": \"some-personal-token\",\n\n    // If set to true, logs will include a line for every HTTP request handled by the\n    // server.\n    \"access_log\": false\n}\n```\n\nList with all directives can be found in the [configuration wiki](https://github.com/ironsmile/euterpe/wiki/configuration#wiki-json-directives).\n\nAs an API\n======\n\nCheck out the Euterpe API reference for:\n\n* For the current branch at [API.md](API.md)\n* The latest released Eupterpe version at the [website's docs](https://listen-to-euterpe.eu/docs/api/).\n\nMedia Keys Control For OSX\n======\n\nYou can control your Euterpe web interface with the media keys the same way you can control any native media player. To achieve this a third-party program is required: [BearderSpice](https://beardedspice.github.io/). Sadly, Euterpe is [not included](https://github.com/beardedspice/beardedspice/pull/684) in the default web strategies bundled-in with the program. You will have to import the [strategy](https://github.com/beardedspice/beardedspice/tree/disco-strategy-web#writing-a-media-strategy) [file](tools/bearded-spice.js) included in this repo yourself.\n\nHow to do it:\n\n1. Install BeardedSpice. Here's the [download link](https://beardedspice.github.io/#download)\n2. Then go to BeardedSpice's Preferences -\u003e General -\u003e Media Controls -\u003e Import\n3. Select the [bearded-spice.js](tools/bearded-spice.js) strategy from this repo\n\nOr with images:\n\nBeardedSpice Preferences:\n\n![BS Install Step 1](images/barded-spice-install-step1.png)\n\nSelect \"Import\" under General tab:\n\n![BS Install Step 2](images/barded-spice-install-step2.png)\n\nSelect the [bearded-spice.js](tools/bearded-spice.js) file:\n\n![BS Install Step 3](images/barded-spice-install-step3.png)\n\nThen you are good to go. Smash those media buttons!\n\n\nClients\n======\n\nYou are not restricted to using the web UI. The server has a RESTful API which can easily be used from other clients. I will try to keep a list with all of the known clients here:\n\n* ~~[httpms-android](https://github.com/ironsmile/httpms-android) is a Android client for HTTPMS.~~ Long abandoned in favour of a React Native mobile client.\n* [euterpe-mobile](https://github.com/ironsmile/euterpe-mobile) is an iOS/Android mobile client written with React Native.\n* [euterpe-rhythmbox](https://github.com/ironsmile/euterpe-rhythmbox) is an Euterpe client plug-in for Gnome's Rhythmbox.\n* [euterpe-gtk](https://github.com/ironsmile/euterpe-gtk) is a GTK client for mobile or desktop.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fironsmile%2Feuterpe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fironsmile%2Feuterpe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fironsmile%2Feuterpe/lists"}