🐦 A personal music streaming server that works.

Last update: May 20, 2022

koel e2e unit Code Quality codecov OpenCollective OpenCollective

Showcase

Intro

Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side and Laravel on the server side. Targeting web developers, Koel embraces some of the more modern web technologies – CSS grid, audio, and drag-and-drop API to name a few – to do its job.

Install and Upgrade Guide

For system requirements, installation/upgrade guides, troubleshooting etc., head over to the Official Documentation.

Development

Since Koel makes use of git submodules, you'll want to make sure the submodule is up-to-date:

git pull
git submodule update --init --recursive --remote

# install the submodule dependencies
cd resources/assets
yarn install

To start the PHP dev server, which serves as the API of the application, run the following command from the root directory. By default, the server will listen at port 8000.

php artisan serve

For the client application itself, run this command:

yarn hot

A development version of Koel should now be available at http://localhost:8080 with full support for hot module reloading.

Alternatively, you can start both the PHP server and the client application in one go with yarn dev, which uses start-server-and-test under the hood.

Testing, Linting, Static Analysis and Stuff

# PHP-related code quality tasks
# Basically, take a look at the "scripts" section in composer.json
composer test        # Run the PHP test suite
composer cs          # Run code style checker
composer cs:fix      # Run code style fixer 
composer analyze     # Run PHP static analysis

yarn build # Build a production version of the client application

# Client/E2E code quality tasks
# You may want to run `yarn build` first.
yarn test:e2e        # Run the Cypress test suite interactively
yarn test:e2e:ci     # Run the Cypress test suite non-interactively (CI mode)
# These commands need to be run from within the submodule (resources/assets)
yarn lint            # Lint
yarn type-check      # TypeScript type checking
yarn test            # Unit testing

Note: If you're already running yarn test:e2e, there's no need to start a dev server. yarn test:e2e calls yarn dev internally and will eliminate the existing yarn dev process, if any.

A quick and easy way to start hacking on koel is to open and run this repo in Gitpod, an online IDE with full Laravel support.

Open in Gitpod

Backers

Support me on OpenCollective with a monthly donation and help me continue building Koel.

Sponsors

GitHub Sponsors

OpenCollective

Become a sponsor on OpenCollective and get your logo on our README on Github with a link to your site.

GitHub

https://github.com/phanan/koel
Comments
  • 1. Koel Sync error - SQLSTATE[HY000]: General error: 1 no such table: info

    I am trying to sync media via the command link using php artisan koel:sync and I keep getting the below error. Although I get the below error, music does appear after 5-10 mins in Koel.

    
      at vendor/teamtnt/tntsearch/src/TNTSearch.php:399
        395▕ 
        396▕     public function getValueFromInfoTable($value)
        397▕     {
        398▕         $query = "SELECT * FROM info WHERE key = '$value'";
      ➜ 399▕         $docs  = $this->index->query($query);
        400▕ 
        401▕         if ($ret = $docs->fetch(PDO::FETCH_ASSOC)) {
        402▕             return $ret['value'];
        403▕         }
    
      +20 vendor frames 
      21  app/Services/FileSynchronizer.php:198
          Illuminate\Database\Eloquent\Model::__callStatic()
    
     22  app/Services/MediaSyncService.php:95
          App\Services\FileSynchronizer::sync()
    

    To reproduce Steps to reproduce the behavior:

    1. docker exec --user www-data -it koel bash
    2. php artisan koel:sync

    Expected behavior Sync Music to Koel Server without error

    Screenshots Screenshot

    Environment

    DOCKER Docker version 19.03.13, build 4484c46d9d

    Ansible deploys the containers - main config for each below

    KOEL

    docker_container:
        name: koel
        image: "phanan/koel:latest"
        pull: yes
        published_ports:
          - "127.0.0.1:800:80"
        env:
          BACKUP: "no"
          FORCE_HTTPS : "true"
          DB_CONNECTION: "mysql"
          DB_HOST : "mysql"
          DB_USERNAME : "koel"
          DB_PASSWORD : "samplePW"
          DB_DATABASE : "koel"
          PUID: "{{ uid }}"
          PGID: "{{ gid }}"
          UMASK: 002
          VIRTUAL_HOST: "koel.{{ user.domain }}"
          VIRTUAL_PORT: 80
          LETSENCRYPT_HOST: "koel.{{ user.domain }}"
          LETSENCRYPT_EMAIL: "{{ user.email }}"
          TZ: "{{ tz }}"
        volumes: "{{ default_volumes }}"
        labels:
         "com.github.cloudbox.cloudbox_managed": "true"
       networks:
          - name: koelnetwork
            aliases:
            - koel
    

    MYSQL

    docker_container:
        name: mysql
        image: "mysql"
        pull: yes
        env:
          TZ: "{{ tz }}"
          PUID: "{{ uid }}"
          PGID: "{{ gid }}"
          LOG_LEVEL: DEBUG
          MYSQL_DATABASE : "koel"
          MYSQL_USER : "koel"
          MYSQL_PASSWORD : "samplePW"
          MYSQL_ROOT_PASSWORD: "samplePW"
        volumes:
          - /opt/mysql/data:/var/lib/mysql
        labels:
          "com.github.cloudbox.cloudbox_managed": "true"
        networks:
          - name: koelnetwork
            aliases:
              - mysql
    

    RClone Mount - Config

    [Unit]
    Description=Rclone VFS dibdab-t-en-01 Mount
    After=network-online.target
    
    [Service]
    User=serveruser
    Group=serveruser
    Type=notify
    ExecStartPre=/bin/sleep 10
    ExecStart=/usr/bin/rclone mount \
      --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36' \
      --config=/home/serveruser/.config/rclone/rclone.conf \
      --allow-other \
      --allow-non-empty \
      --drive-skip-gdocs \
      --vfs-read-chunk-size=64M \
      --vfs-read-chunk-size-limit=2048M \
      --buffer-size=64M \
      --poll-interval=1m \
      --dir-cache-time=168h \
      --timeout=10m \
      --drive-chunk-size=64M \
      --vfs-cache-mode=writes \
      --umask=002 \
      --syslog \
      --use-mmap \
      -v \
      koel-music: /mnt/remote/koel
    ExecStop=/bin/fusermount -uz /mnt/remote/koel
    Restart=on-abort
    RestartSec=5
    StartLimitInterval=60s
    StartLimitBurst=3
    
    [Install]
    WantedBy=default.target
    

    Additional context Add any other context about the problem here.

    Reviewed by ch1nch4ch4 at 2022-05-20 10:28
  • 2. chore(deps): bump async from 2.6.3 to 2.6.4

    Bumps async from 2.6.3 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2022-05-16 17:02
  • 3. No album and artist covers neither automatically nor manually.

    Cannot add album and artist covers neither automatically nor manually.

    To reproduce Build from source with one change

    1. Clone repository and install composer
    cd <KOEL_ROOT_DIR>
    git clone --recurse-submodules https://github.com/koel/koel.git .
    git checkout latest # v5.1.14
    composer install
    
    1. As I am using node v14 (last week it was current LTS), I changed version of node-sass in resources/assets/package.json from 4.13.1 to 4.14.1
    2. Finish building
    php artisan koel:init
    
    1. Start server, login, add folder and sync music.

    Expected behavior Some albums have album covers with correct file names, so they should sync automatically. As screenshot shows, album covers cannot be changed manually.

    Screenshots AlbumCoverBug

    Environment

    • Koel version [v5.1.14]
    • OS: [Ubuntu 22.04]
    • Browser [Chrome 79, Firefox 99]
    • PHP version [v8.1.2]
    • Node version [v14.19.1]

    Additional context No 404 errors, no files in public/img/covers except unknown-album.png if I up node to v16 (current LTS) it will leads to more build errors.

    Reviewed by VesselWave at 2022-04-26 17:10
  • 4. [Suggestion]Automatically get lyrics from lrc file

    Just get the lyrics from the .lrc file with the same name as the song file in the same folder. It took me a long time to download the lyrics, cause many music players support this way to get the lyrics, but finally found out that Koel does not support it, which makes me very sad.

    Reviewed by cmodog at 2022-04-24 13:41
  • 5. chore(deps): bump composer/composer from 2.2.1 to 2.3.5

    Bumps composer/composer from 2.2.1 to 2.3.5.

    Release notes

    Sourced from composer/composer's releases.

    2.3.5

    • Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)
    • Added warning when downloading a file with verify_peer[_name] disabled (#10722)
    • Fixed curl downloader not retrying when a DNS resolution failure occurs (#10716)
    • Fixed composer.lock file still being used/read when the lock config option is disabled (#10726)
    • Fixed validate command checking the lock file even if the lock option is disabled (#10723)
    • Fixed detection of default branch name when it changed since a git repo was mirrored in cache dir (#10701)

    2.3.4

    • Fixed the generated autoload.php to support running on PHP 5.6+ (down from 7.0+) and warn clearly on older PHP versions (#10714)
    • Fixed run-script --list flag regression (#10710)
    • Fixed curl downloader handling of DNS resolution failures to do an automatic retry (#10716)
    • Fixed script handling of external commands not setting the Path env correctly on windows (#10700)
    • Fixed various type errors (#10694, #10696, #10702, #10712, #10703)

    2.3.3

    • Added --2.2 flag to self-update to pin the Composer version to the 2.2 LTS range (#10682)
    • Added missing config.bitbucket-oauth in composer-schema.json
    • Fixed type errors in SvnDriver (#10681)
    • Fixed --version output to match the pre-2.3 one (#10684)
    • Fixed config/auth.json files not being validated against the composer-schema.json (#10685)
    • Fixed generation of autoload crashing if a package has a broken path (#10688)
    • Fixed GitDriver state issue when reusing old cache dirs and the default branch was renamed (#10687)
    • Updated semver, jsonlint deps for minor fixes
    • Removed dev-master=>dev-main alias from #10372 as it does not work when reloading from lock file and extracting dev deps (#10651)

    2.3.2

    • Fixed type error when running exec command (#10672)
    • Fixed endless loop in plugin activation prompt when input is not fully interactive yet appears to be (#10648)
    • Fixed type error in ComposerRepository (#10675)
    • Fixed issues loading platform packages where the version of a library cannot be established (#10631)

    2.3.1

    • Fixed type error when HOME env var is not set (#10670)

    2.3.0

    Read the Composer 2.3 Release Announcement for more details on the release highlights.

    Complete Changelog

    • BC Break: the minimum PHP version is now 7.2.5+, use the Composer 2.2 LTS if you are stuck with an older PHP (#10343)
    • BC Break: added native parameter & return types to many internal APIs, we explicitly left the most extended/implemented symbols untouched but if this causes problems nonetheless please report it ASAP (#10547, #10561)
    • BC Break: added visibility to all constants, a few internal ones have been made private/protected, if this causes problems please report it ASAP (#10550)
    • BC Break: the minimum supported Symfony components version is now 5.4, this only affects you if you are requiring composer/composer directly however, which is generally frowned upon
    • Bumped composer-plugin-api to 2.3.0
    • Bumped bundled Symfony components from 2.8 to 5.4 🥳
    • Added declare(strict_types=1) to all the classes, which for sure could cause regressions in edge cases, please report with stack traces (#10567)
    • Added --patch-only to the outdated command to only show updates to patch versions and ignore new major/minor versions (#10589)
    • Added clickable links to various commands for terminals which support it (#10430)
    • Added ProcessExecutor ability to receive commands as arrays by (internals/plugin change only) (#10435)

    ... (truncated)

    Changelog

    Sourced from composer/composer's changelog.

    [2.3.5] 2022-04-13

    • Security: Fixed command injection vulnerability in HgDriver/GitDriver (GHSA-x7cr-6qr6-2hh6 / CVE-2022-24828)
    • Added warning when downloading a file with verify_peer[_name] disabled (#10722)
    • Fixed curl downloader not retrying when a DNS resolution failure occurs (#10716)
    • Fixed composer.lock file still being used/read when the lock config option is disabled (#10726)
    • Fixed validate command checking the lock file even if the lock option is disabled (#10723)
    • Fixed detection of default branch name when it changed since a git repo was mirrored in cache dir (#10701)

    [2.3.4] 2022-04-07

    • Fixed the generated autoload.php to support running on PHP 5.6+ (down from 7.0+) and warn clearly on older PHP versions (#10714)
    • Fixed run-script --list flag regression (#10710)
    • Fixed curl downloader handling of DNS resolution failures to do an automatic retry (#10716)
    • Fixed script handling of external commands not setting the Path env correctly on windows (#10700)
    • Fixed various type errors (#10694, #10696, #10702, #10712, #10703)

    [2.3.3] 2022-04-01

    • Added --2.2 flag to self-update to pin the Composer version to the 2.2 LTS range (#10682)
    • Added missing config.bitbucket-oauth in composer-schema.json
    • Fixed type errors in SvnDriver (#10681)
    • Fixed --version output to match the pre-2.3 one (#10684)
    • Fixed config/auth.json files not being validated against the composer-schema.json (#10685)
    • Fixed generation of autoload crashing if a package has a broken path (#10688)
    • Fixed GitDriver state issue when reusing old cache dirs and the default branch was renamed (#10687)
    • Updated semver, jsonlint deps for minor fixes
    • Removed dev-master=>dev-main alias from #10372 as it does not work when reloading from lock file and extracting dev deps (#10651)

    [2.3.2] 2022-03-30

    • Fixed type error when running exec command (#10672)
    • Fixed endless loop in plugin activation prompt when input is not fully interactive yet appears to be (#10648)
    • Fixed type error in ComposerRepository (#10675)
    • Fixed issues loading platform packages where the version of a library cannot be established (#10631)

    [2.3.1] 2022-03-30

    • Fixed type error when HOME env var is not set (#10670)

    [2.3.0] 2022-03-30

    [2.3.0-RC2] 2022-03-20

    • Fixed invalid return value in ComposerRepository::findPackage (#10622)
    • Fixed many show command issues due to a flipped condition (#10623)
    • Fixed phpversion() handling when it returns false due to an extension defining no version (#10631)
    • Fixed remove command failing when no allow-plugin is defined in config (#10629)

    ... (truncated)

    Commits
    • 50c47b1 Release 2.3.5
    • 61b07f9 Reverting release version changes
    • 45e5fd1 Release 2.3.5
    • 65f4dde Update changelog
    • 615530f Merge branch '2.2' into main, update baseline (2085, 104)
    • 2ba8758 Update changelog
    • 2c40c53 Merge pull request from GHSA-x7cr-6qr6-2hh6
    • 915b97f Fix docs
    • d64e32c Merge remote-tracking branch 'ktomk/patch-validate-no-check-lock' into 2.2
    • 0a8dfe6 Clarify that autoloader-suffix should be a non-empty-string, fixes #10720 (#1...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    Reviewed by dependabot[bot] at 2022-04-22 20:23
  • 6. YouTube Music integration

    Hi all! First of all, congratulations for your work and effort 😄 I would like to propose this feature because I'm a former Plex + Tidal user, from which I went off for many reasons. However, I love that idea: you have your own music, and you have the opportunity to legally listen to music you don't own via the Tidal streaming. I often looked for a FOSS music streaming server which offered both a mobile app and the integration with a public streaming service, such as YouTube Music, Spotify, or Tidal, and I have never found one. Recently, I found out that koel has its own mobile app, so I thought that it would be nice to integrate YouTube Music inside koel. I'm totally aware, being a developer, that it cannot be an easy task that could be done in a short time. That's why I would like to ask you what do you think of the idea of this feature; if you are fine with it, I'd gladly fork the project, work on the feature, and then send you pull requests on every repo (backend, frontend if needed, and mobile application) after that the feature has been tested by myself. (Disclaimer: I cannot contribute for the iOS part, since I only own Android 😔 ) I never worked on community projects, and as you'll see this account is freshly created. But I've been working as a developer for companies for 6 years, and that's why I don't have another account with personal projects. This would be my first time working on something that is FOSS, but I would be enthusiast to do that. Well... let me know! And happy Easter if you read this on 2022/04/17 🐣

    Reviewed by str0tta at 2022-04-17 10:25
🐦 A personal music streaming server that works.
🐦 A personal music streaming server that works.

koel Intro Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side a

May 20, 2022
🐦 A personal music streaming server that works.
🐦 A personal music streaming server that works.

koel Intro Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side a

May 18, 2022
Ampache is a web based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device.
Ampache is a web based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device.

Ampache is a web based audio/video streaming application and file manager allowing you to access your music & videos from anywhere, using almost any internet enabled device.

May 18, 2022
Koel is a simple web-based personal audio streaming service written in Vue and Laravel
Koel is a simple web-based personal audio streaming service written in Vue and Laravel

Koel (also stylized as koel, with a lowercase k) is a simple web-based personal audio streaming service written in Vue on the client side and Laravel on the server side. Targeting web developers, Koel embraces some of the more modern web technologies – CSS grid, audio, and drag-and-drop API to name a few – to do its job.

May 15, 2022
Event-driven, streaming HTTP client and server implementation for ReactPHP

HTTP Event-driven, streaming HTTP client and server implementation for ReactPHP. This HTTP library provides re-usable implementations for an HTTP clie

May 14, 2022
This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. It allows you to query some other server information
This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. It allows you to query some other server information

QueryServer This is a plugin written in PHP programming language and running on the PocketMine platform that works stably on the API 4.0.0 platform. I

Feb 5, 2022
This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform. It helps to liven up your server with Tags!
This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform. It helps to liven up your server with Tags!

General This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform.

Oct 21, 2021
This is a Task Manager system for managing your task. You can categorize your tasks and upload music to the project And a whole host of other features

taskManager Login and register Each user can have their own task Categorize tasks by creating folders Edit and Delete Folders Search for Tasks Show nu

Feb 12, 2022
This plugin allow you play music from resources pack in minecraft

Music Player for PocketMine-MP Commands music-start songname music-stop songname IMPORTANT! You must add music resources pack to PocketMine resources

Oct 14, 2021
Search music with voice

Configuration: Open the index.php file and paste the bot token: define('API_KEY', 'TOKEN'); Login to Ahangify and create an account Open the login.php

Feb 4, 2022
Music website developed as a final group project for our Webpage Development class.

double-drummer Music listening website developed as final group project for our Webpage Development course. All parts that disclosed any information r

Dec 8, 2021
BicBucStriim streams books, digital books. It fills a gap in the functionality of current NAS devices that provide access to music, videos and photos

BicBucStriim streams books, digital books. It fills a gap in the functionality of current NAS devices that provide access to music, videos and photos -- but not books. BicBucStriim fills this gap and provides web-based access to your e-book collection.

May 12, 2022
Musicoker is a music player made by Laravel & Reactjs
Musicoker is a music player made by Laravel & Reactjs

Musicoker | Music Player Music player created with Laravel 8 and React 17.0.2 ReactJs Laravel MySQL Used Packages: Sanctum Getid3 Bootstrap React Rout

Apr 3, 2022
A powerful music API framework to accelerate your development
A powerful music API framework to accelerate your development

?? Wow, such a powerful music API framework Introduction A powerful music API framework to accelerate your development Elegant - Easy to use, a standa

May 15, 2022
Generates a static website of metal music events in Leipzig

About EN: This projects generates a static website of metal music events in Leipzig (Ger). DE: Dieses Projekt erstellt einen Webkalender zu diversen M

Mar 13, 2022
A music shop based on the chinook database example.

LTW Example Based on a simplified version of the Chinook Database: You can see previous versions of the example by changing branches. Step 1: Create t

May 4, 2022
There is no better way to learn than by watching other developers code live. Find out who is streaming next in the Laravel world.
There is no better way to learn than by watching other developers code live. Find out who is streaming next in the Laravel world.

Larastreamers This is the repository of https://larastreamers.com. It shows you who is live coding next in the Laravel world. Installation Steps clone

May 11, 2022
phpReel is a free, MIT open-source subscription-based video streaming service that lets you create your platform for distributing video content in the form of movies or series.

phpReel is a free, MIT open-source subscription-based video streaming service that lets you create your platform for distributing video content in the form of movies or series.

May 14, 2022
MediaDB is a web-based media streaming service written in Laravel and Vue.

MediaDB (API) MediaDB is a web-based media streaming service written in Laravel and Vue. The nginx-vod-module is used for on-the-fly repackaging of MP

May 1, 2022