Giter Club home page Giter Club logo

ironsmile / euterpe Goto Github PK

View Code? Open in Web Editor NEW
513.0 513.0 41.0 36.53 MB

Self-hosted music streaming server 🎢 with RESTful API and Web interface. Think of it as your very own Spotify! ☁️🎧

Home Page: https://listen-to-euterpe.eu

License: GNU General Public License v3.0

CSS 2.87% HTML 4.87% JavaScript 31.74% Shell 0.48% Go 59.77% Makefile 0.16% Dockerfile 0.10%
http listen mp3 mp3player music self-hosted streaming streaming-audio

euterpe's People

Contributors

gthole avatar ironsmile avatar mstoykov avatar trilliot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

euterpe's Issues

Unable to persist database

Regardless of whatever I try to do, I am unable to persist the database when installed via docker.

docker-compose.yml:

version: '3.3'
services:
    euterpe:
        volumes:
            - '/home/keo7/services/euterpe/data:/root/.euterpe'
            - '/home/keo7/consti/Music/:/root/Music'
        ports:
            - '9996:9996'
        image: 'ironsmile/euterpe:latest'

Track duration in the playlist

Showing the track duration in media players is ubiquitous. HTTPMS should do the same.

In order to happen, there will be changes to the database, scanner and the returned JSON for a track search. After, the JS interface would have to be altered as well.

Fallback encoding for non-UTF8 meta data

As most who do not speak english as their native language know, not all meta data in music files in the wild is in ASCII or Unicode. This is certainly the case for my own library. The current implementation of httpms does not handle this at all.

So I think the following scheme would solve the problem. A fallback_encoding setting is introduced. Whenever a string is not encoded with UTF8, this fallback encoding would be assumed and used to read it.

This scheme does not solve the problem completely. What happens when you have files with two (or more) different and exotic encodings? But at the moment it is the simplest solution which will solve my particular case.

Configuration through the web interface

Currently HTTPMS can be configured by editing its JSON config file only. The web interface should be able to do the same. Not many people are comfortable with editing text file. Especially JSON files which require knowledge of the syntax.

Error while scanning .opus-files in library

After i have added some OPUS Files to my library, Taglib gives me an 'invalid file' Error:

root@server:~# docker-compose up euterpe 

root_euterpe_1 is up-to-date
Attaching to root_euterpe_1
euterpe_1        | error adding modified file: Taglib error for /root/Music/Patrick Doyle/Cinderella/La Cenicienta - Soundtrack 01 'A Golden Childhood' - HD.opus: invalid file

Maybe it is related to this Taglib-Issue: taglib/taglib#1011

I am running the Docker-Container with version v1.5.1. The opus file was encoded by ffmpeg, without any special flags, and it is played fine by Players like Audacious (including Metadata). Also ffprobe is recognizing the Metadata without errors.

Other Files (mp3, ogg, m4a) are handled also without errors by euterpe.

Command line tools for managing the library

Currently there is no tools for inspecting, removing or scanning the library. If the meta data for a file is changed, HTTPMS will not update it by itself. So such tools are clearly needed. The current workaround is removing the file from the library by hand.

Use a pure Go library for reading media tags

The current reliance of taglib is making the project much less portable than it should be. Cross-compiling is much harder as well.

To remedy this a pure go implementation of a library for reading media meta data could be used. There are a few possible candidates. They should be tested and evaluated with a big enough data set to see whether they perform similarly to taglib or not.

Update JWT lib to latest version (v2)

Hi there! I was checking which libs use the JWT library I have created and found your project. I like it very much, congrats. But I advise you to update my lib to version 2 since there are some performance enhancements. However, code is not backwards compatible, so you might need to make some adjustments in order to make it work, but it's definitely worth it.

Anyway, thanks for your trust in my work.

Set loop or random by default

Can we set loop or random enabled by default? Im looking the config example but can find anything, thanks 🌷

[Web player] Unexpected Shuffle button behaviour

In most audio players, the Shuffle button toggles an option wether the next track should be according to the playlist or a random song. In Euterpe, it immediately plays a random song, which is unexpected, and therefore undesireable. It is also confusing since the Repeat button besides it is simply a toggle as it should (instead of also immediately restarting the current song).

DLNA option 😍

Hi, your soft is very good, and an option to cast in dlna on speakers would be even better :)

Album Artwork

How hard would it be to implement adding the track/album art within the API? i think it would be a pretty cool feature.
as well as adding POST / PUT / DELETE features so you can edit your library from the frontend. πŸ’―

Apple TV app

I think we could easily build an Apple TV app for this.

There are 2 options that might work.
Tvml is apples own markup for Apple TV that may also support music . We could serve that from the server or another project t that imports the pkg of the server.

https://developer.apple.com/documentation/tvmljs/playing_media_in_a_client-server_app

The other way is with golang . You can build advanced golang gui that can play music using gioui. It compiles to iOS and hence apple tv. I use gioui a fair bit.

It can also be used to output web and mobile and desktop apps.

https://github.com/gioui

Euterpe not starting (WebUI) after mounting '/root/.euterpe'

Hello, I'm having problems when I try to mount the '/root/.euterpe' container directory.

When I start the container with this mount, pointing to a physical directory on my server to allow the persistance of the information (db, logs, configs), Euterpe just doesn't start. I mean, the container starts without erros (no terminal errors nor nothing related, I think, in the log file), but it doesn't show the WebUI from port 9996.

I tried changing the permissions of the mounted volume manually, if that could be the problem, being Euterpe not able to access or write to the directory, but nothing. It has full access as all the files are created: config.json, euterpe.db, euterpe.log, pidfile,pid.

Thank you for your attention.

Shareable searches

When you search for something, you should be able to share the search with someone else via URL. It would be great if the generated link can be for particular track as well.

Default listen address for docker

I tried to install euterpe use docker, by following command.

docker build -t ironsmile/euterpe github.com/ironsmile/euterpe

but I cannot access from the host. I found that the default listening address of the server is localhost:9996, and you need to manually change it to 0.0.0.0:9996.

For out-of-the-box use, can you change the default listening address in docker to 0.0.0.0:9996.

Also if you can publish docker image to dockerhub, that would be great.

API Feature request - Qerying of folder structure and request songs by path

I really like this project's simplicity, in contrast with many of the mainstream alternatives like Subsonic, Koel or Funkwhale. Yet here I am, asking to "bloat" it regardless: it would be great if the API would support the querying of the folder structure/tree (of the media folder), and then would enable to query songs based on the path (in addition to artist and album). Instead/in addition of the path, for simplicity, this could also be accomplished through a folder id (supplied by the response structure to the folder tree query). Most users with large media collections have songs neatly organized in a specific way, and are used to browse by that, instead of (possibly incomplete) tagging.

I'm pondering to create a web client that would eventually support multiple mediaserver backends, with a big emphasis of folder browsing. It would be cool to support simple to install servers like this project.

Caching proxy

Cool project . Really great to see desktop and mobile supported too. I would like to help with those .

I was wondering if a proxy that supports also caching the audio files efficiently is envisaged ?

maybe if it’s outside the scope of the project you have sone suggestions.

My use case is that I host everything on tiny Linux server in my house and expose it over a proxy .

So it would ease the load on my home server if I could run a simple proxy in the cloud , that of course Proxies my home server .

I saw a old golang proxy called β€œnedomi” and was wondering if this would be a good match to my use case of a simple proxy. It looked really cool in that it chunked the files into smaller parts and so match user habits of jumping forward in a stream .

thanks again for this awesome project !!

Don’t know if anyone remembers google music when it allowed you to upload your music btw . I was one of these users that got stung by google shutting it down.

Error generating JWT: jwt.(Signer).Sign: HMAC key is empty.

hi After sign in the page return:

Error generating JWT: jwt.(Signer).Sign: HMAC key is empty.

my docker-compose.yml:

version: '3'
services:
    kavita:
        image: ironsmile/euterpe:latest
        container_name: euterpe
        volumes:
            - /data/euterpe/config:/root/.euterpe
            - /data/euterpe/Music:/root/Music
        ports:
            - "4000:9996"
        restart: unless-stopped

config.json :

{
    "listen": ":9996",
    "ssl": false,
    "ssl_certificate": {
        "crt": "/full/path/to/certificate/file.crt",
        "key": "/full/path/to/key/file.key"
    },
    "basic_authenticate": true,
    "authentication": {
        "user": "kong",
        "password": "xxxxxxxxxxxxxxxxxxxxxx"
    },
    "libraries": [
        "/root/Music"
    ],
    "library_scan": {
        "initial_wait_duration": "1s",
        "files_per_operation": 1500,
        "sleep_after_operation": "15ms"
    },
    "download_artwork": true,
    "discogs_auth_token": "xxxxxxxxxxxxxxxxxxxxxxx"
}

Thanks

Automatic building and pushing images to Docker Hub

It would be great if images to the Docker Hub were pushed automatically. For this end a new GitHub action could be created.

What to push?

  • Merges to master should cause building and pushing an image with the latest tag
  • Tags for released versions should cause building and pushing this version with a docker image tag matching the release tag

Testing

The Docker Hub publishing pipeline should make sure that the pushed Docker images are actually operational. So it should try to run the image and check that Euterpe is actually starting inside it.

The download whole album button does not work

How to see the bug

  1. Load an album which contains tracks from different artists
  2. Press the download button for one of them

What happen

The downloaded archive contains only tracks for one of the artists. The one on which it was clicked.

What should happen

The whole album should be downloaded in the archive. No matter how many artists.

Do not gzip media files over HTTP even when gzip setting is on

The gzip handler should not gzip media content. This has no point since savings will be small for mp3 files and the like which are more or less compressed already as much as possible. Ideally it should detect content type here and make a decision based on some configuration. This have the following benefits:

  • Easier on the CPU for the server and client both. Considering mobile clients this could be a huge saving.
  • Will probably allow implementing io.ReaderFrom with io.Copy for non-gzipped files. This makes possible sending them with sendfile and friends.

XDG compliance

Hello,

Euterpe does not follow the XDG Base Directory Specification, I came across two behaviors from a fresh install so far;

  • Config file under $HOME/.euterpe
  • Default music library assumed to be under $HOME/Music (this is covered under XDG User Dirs)

Euterpe can instead follow XDG specification;

  • ${XDG_CONFIG_HOME:-$HOME/.config}/euterpe
  • ${XDG_MUSIC_DIR:-$HOME/Music}

So user set directories (custom and/or localized!) will be used instead, with sane fallbacks.

Help to setup the dev environment

I would appreciate if you could please help me on how to setup the dev environment for this project.I would like to tinker a bit with the project to learn.

Playing .flac files on EUTERPE

Hi Ironsmile,
New user to your projet Docker version 1.0 (2022-01-31) . I'm using your webApp via Docker under Unraid 6.11.5. Since I can read .mp3 files without any problems, I have an issue with the.flac files: no reading whatsoever ( I click on the play button but it seems there is no action taken into account ).
I read some of install procedures recently, but nothing convincing.
Can you tell me what am I missing ? (Most of my music files are encoded in flac format. ;-) . )

Tx for your support, and by the way , nice job, : this is simple, fast... neat.
FG

Add an GitHub Action check for generated files

At this point quite a few things are generated. This includes:

  • Some HTML pages
  • The single CSS file
  • The JavaScript file
  • Interface implementation mocks for unit testing

A GitHub action should be created so that generation would not be forgotten. The action should do the generation and check that no files have been changed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.