{"id":13596762,"url":"https://github.com/davidhampgonsalves/music-server","last_synced_at":"2025-04-10T01:13:18.467Z","repository":{"id":139260393,"uuid":"469702678","full_name":"davidhampgonsalves/music-server","owner":"davidhampgonsalves","description":"Music streaming server on a Android Galaxy S7 ","archived":false,"fork":false,"pushed_at":"2024-12-29T21:07:06.000Z","size":13,"stargazers_count":77,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T01:13:12.378Z","etag":null,"topics":["android","featured","termux"],"latest_commit_sha":null,"homepage":"https://davidhampgonsalves.com/junk-drawer-phone-as-a-music-streaming-server/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/davidhampgonsalves.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2022-03-14T11:25:42.000Z","updated_at":"2024-12-30T22:26:47.000Z","dependencies_parsed_at":"2024-06-13T01:27:49.973Z","dependency_job_id":"5847fcfa-bd54-496d-97ae-a5d4c140234f","html_url":"https://github.com/davidhampgonsalves/music-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhampgonsalves%2Fmusic-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhampgonsalves%2Fmusic-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhampgonsalves%2Fmusic-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davidhampgonsalves%2Fmusic-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davidhampgonsalves","download_url":"https://codeload.github.com/davidhampgonsalves/music-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137891,"owners_count":21053775,"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":["android","featured","termux"],"created_at":"2024-08-01T16:02:46.155Z","updated_at":"2025-04-10T01:13:18.446Z","avatar_url":"https://github.com/davidhampgonsalves.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"Setup for my personal [Navidrome](https://github.com/navidrome/navidrome) based music streaming server running on a Samsung Galaxy S7 using [Termux](https://termux.dev/en/). \n\n## features\n* Uses [Termux:Boot](https://wiki.termux.com/wiki/Termux:Boot) \u0026 [Termux-Services](https://wiki.termux.com/wiki/Termux-services) to automatically start everything on boot.\n* Automatically removes songs with ☆☆☆☆★ reviews.\n* Uses Cloudflare for dynamic DNS updates.\n\n## Add Music\nI transfer music using SFTP after converting to OPUS. The S7 only has about 20GB of usable storage and this makes a big difference.\n\nIOS doesn't do OPUS except in a CAF and Navidrome doesn't like the CAF container.\n```\nmkdir mp3\nfind . -iname '*.mp3' -exec bash -c 'F=$(cat /dev/urandom | gtr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1); ffmpeg -i \"{}\" -codec:a libmp3lame -qscale:a 6 \"../mp3/$F.mp3\"' \\;\n```\n\n## Install\n* Install [F-Droid](https://f-droid.org/en/) and then Termux + Termux:Boot.\n* Launch Termux:Boot and then exit.\n* send this to your phone and paste into termux terminal.\n```\npkg update \u0026\u0026 pkg upgrade \u0026\u0026 pkg add openssh -y\npasswd \"password\" --stdin\nifconfig\nwhoami\nsshd\n```\n* SSH into phone from computer.\nssh root@192.168.2.89 -p 8022\n```\npkg add git wget neovim -y\ngit clone https://github.com/davidhampgonsalves/music-server.git\n```\n\n### Navidrome\nTermux can't run binaries, even if they are built for arm64. As such we will build navidrome.\n```\npkg add golang taglib build-essential\ngit clone https://github.com/navidrome/navidrome 8b93962 \n// might want to checkout a specfic commit that matches a release\nmkdir music\ncd navidrome\ncp ../music-server/navidrome.toml ./\nmake setup\n\n// building the navidrone UI OOM's on my Samsung Galaxy S7\n// so build it on a PC (via cd ui ; npm install ; npm run build) and \n// then transfer the ui/build contents to the same folder under navidrome via sftp\n// This has to be done before `go build` or else it won't be included in binary\n\ngo mod download\ngo build\n\n// setup sshd and navidrome as services\npkg install termux-services\n// restart so that daemon starts\nmkdir -p $PREFIX/var/service/navidrome/log\nln -s $PREFIX/share/termux-services/svlogger $PREFIX/var/service/navidrome/log/run\nchmod u+x $PREFIX/var/service/navidrome/run\n\nmkdir -p $PREFIX/var/service/navidrome\nmv ~/music-server/navidrome.runit.sh $PREFIX/var/service/navidrome/run\nchmod ugo+x $PREFIX/var/service/navidrome/run\nmkdir -p $PREFIX/var/service/navidrome/log\nmkdir -p $PREFIX/var/log/sv/navidrome\nln -sf $PREFIX/share/termux-services/svlogger $PREFIX/var/service/navidrome/log/run\n// Logs are at `cat $PREFIX/var/log/sv/navidrome/current` but do not seem to work\n// sv up/down/status navidrome`\nsv-enable sshd\nsv-enable navidrome\n```\n\n### Termux Boot\n```\nmkdir ./termux/boot\nmv music-server/boot/start-services .termux/boot/\nchmod ugo+x .termux/boot/start-services\n```\n\n# DDNS\npython venv creation(happening in start-sync.sh) was hanging so after installing the requirements from start-sync.sh I commented out everything except `cd ... ; python ...`.\n```\ngit clone https://github.com/timothymiller/cloudflare-ddns.git\nchmod +x /data/data/com.termux/files/home/cloudflare-ddns/start-sync.sh\nchmod +x /data/data/com.termux/files/home/music-server/remove-starred-tracks.sh\nln -s /data/data/com.termux/files/home/music-server/cloudflare-ddns.config.json /data/data/com.termux/files/home/cloudflare-ddns/config.json\n\npkg install cronie termux-services python sqlite\nsv-enable crond\ncrontab /data/data/com.termux/files/home/music-server/crontab\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidhampgonsalves%2Fmusic-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavidhampgonsalves%2Fmusic-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavidhampgonsalves%2Fmusic-server/lists"}