From 32d7361db2cd6fbbeb56c50d9b05b9d5ec939295 Mon Sep 17 00:00:00 2001 From: DrMxrcy <58747968+DrMxrcy@users.noreply.github.com> Date: Tue, 4 Apr 2023 17:08:39 -0400 Subject: [PATCH] Add mStream (#230) * Add mStream * Updates * Fix Lowercase --- README.md | 1 + apps/mstream/config.json | 16 ++++++++++ apps/mstream/docker-compose.yml | 26 ++++++++++++++++ apps/mstream/metadata/description.md | 44 +++++++++++++++++++++++++++ apps/mstream/metadata/logo.jpg | Bin 0 -> 22543 bytes 5 files changed, 87 insertions(+) create mode 100644 apps/mstream/config.json create mode 100644 apps/mstream/docker-compose.yml create mode 100644 apps/mstream/metadata/description.md create mode 100644 apps/mstream/metadata/logo.jpg diff --git a/README.md b/README.md index 4a16f9e3..9f184d16 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Monero p2pool Daemon](https://github.com/SChernykh/p2pool) - Decentralized pool for Monero mining - [Monica](https://github.com/monicahq/monica) - A Personal Relationship Management tool to help you document your social life - [Mixpost](https://github.com/inovector/mixpost) - Self-hosted social media management. Schedule and organize your social content. +- [mStream](https://github.com/IrosTheBeggar/mStream) - The easiest music streaming server available - [Mylar3](https://github.com/mylar3/mylar3) - Mylar3 is an automated Comic Book downloader (cbr/cbz) for use with NZB and torrents written in python. - [n8n](https://github.com/n8n-io/n8n) - Workflow Automation Tool - [Navidrome](https://github.com/navidrome/navidrome) - A selfhosted music server diff --git a/apps/mstream/config.json b/apps/mstream/config.json new file mode 100644 index 00000000..5b3400b8 --- /dev/null +++ b/apps/mstream/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "mStream Music", + "port": 8162, + "available": true, + "exposable": true, + "id": "mstream", + "tipi_version": 1, + "version": "v5.11.4-ls101", + "categories": ["music", "media"], + "description": "mStream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere.", + "short_desc": "The easiest music streaming server available", + "author": "IrosTheBeggar", + "source": "https://github.com/IrosTheBeggar/mStream", + "form_fields": [] +} diff --git a/apps/mstream/docker-compose.yml b/apps/mstream/docker-compose.yml new file mode 100644 index 00000000..9896a8f1 --- /dev/null +++ b/apps/mstream/docker-compose.yml @@ -0,0 +1,26 @@ +version: "3" + +services: + mstream: + container_name: mstream + image: lscr.io/linuxserver/mstream:v5.11.4-ls101 + restart: unless-stopped + ports: + - ${APP_PORT}:3000 + volumes: + - ${APP_DATA_DIR}/data/mstream-config:/data + - ${ROOT_FOLDER_HOST}/media/data/music:/music + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.mstream.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.mstream.entrypoints: websecure + traefik.http.routers.mstream.service: mstream + traefik.http.routers.mstream.tls.certresolver: myresolver + traefik.http.services.mstream.loadbalancer.server.port: 3000 + diff --git a/apps/mstream/metadata/description.md b/apps/mstream/metadata/description.md new file mode 100644 index 00000000..30d3441b --- /dev/null +++ b/apps/mstream/metadata/description.md @@ -0,0 +1,44 @@ +# mStream Music + +mStream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere. + +| Main | Shared | Admin | +| --- | --- | --- | +| [![main](https://github.com/IrosTheBeggar/mStream/raw/master/docs/designs/mstreamv5.png?raw=true)](https://github.com/IrosTheBeggar/mStream/blob/master/docs/designs/mstreamv5.png?raw=true) | [![shared](https://github.com/IrosTheBeggar/mStream/raw/master/docs/designs/shared.png?raw=true)](https://github.com/IrosTheBeggar/mStream/blob/master/docs/designs/shared.png?raw=true) | [![admin](https://github.com/IrosTheBeggar/mStream/raw/master/docs/designs/admin.png?raw=true)](https://github.com/IrosTheBeggar/mStream/blob/master/docs/designs/admin.png?raw=true) | + +## [](https://github.com/IrosTheBeggar/mStream#demo--other-links)Demo & Other Links + +#### [](https://github.com/IrosTheBeggar/mStream#check-out-the-demo)[Check Out The Demo!](https://demo.mstream.io/) + +#### [](https://github.com/IrosTheBeggar/mStream#discord-channel)[Discord Channel](https://discord.gg/AM896Rr) + +#### [](https://github.com/IrosTheBeggar/mStream#website)[Website](https://mstream.io) + +### [](https://github.com/IrosTheBeggar/mStream#server-features)Server Features + +- Cross Platform. Works on Windows, OSX, Linux, & FreeBSD +- Light on memory and CPU +- Tested on multi-terabyte libraries +- Runs on ARM boards like the Raspberry Pi + +### [](https://github.com/IrosTheBeggar/mStream#webapp-features)WebApp Features + +- Gapless Playback +- Milkdrop Visualizer +- Playlist Sharing +- Upload Files through the file explorer + +## [](https://github.com/IrosTheBeggar/mStream#android-app)Android App + +[![mStream Android App](https://github.com/IrosTheBeggar/mStream/raw/master/webapp/assets/img/play-store-logo.png)](https://play.google.com/store/apps/details?id=mstream.music&hl=en_US&gl=US) + +[This App is Open Source. See the Source Code](https://github.com/IrosTheBeggar/mstream_music/releases) + +## [](https://github.com/IrosTheBeggar/mStream#ios-app)iOS App + +[![mStream iOS App](https://github.com/IrosTheBeggar/mStream/raw/master/webapp/assets/img/app-store-logo.png)](https://apps.apple.com/us/app/mstream-player/id1605378892) + +[Made by Niera Tech](https://mplayer.nieratech.com/) + + +**Supported File Formats:** flac, mp3, mp4, wav, ogg, opus, aac, m4a \ No newline at end of file diff --git a/apps/mstream/metadata/logo.jpg b/apps/mstream/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ba06441fc0f5026c0558add30672520d0a9091b GIT binary patch literal 22543 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 W{GBYhUp~+Ee{BC7QQ*YE;Qs)Wb`u5w literal 0 HcmV?d00001