{"id":18734018,"url":"https://github.com/mgoltzsche/highfipi","last_synced_at":"2026-01-26T01:02:49.622Z","repository":{"id":101283089,"uuid":"400929625","full_name":"mgoltzsche/highfipi","owner":"mgoltzsche","description":"An SD card image to run Raspberry Pi based wireless Hifi speakers for multi-room audio","archived":false,"fork":false,"pushed_at":"2021-12-13T21:34:20.000Z","size":22,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-20T00:12:47.306Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgoltzsche.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2021-08-29T02:02:59.000Z","updated_at":"2021-12-13T21:34:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"b40660d1-7440-4f3a-aa71-6b57a437ac23","html_url":"https://github.com/mgoltzsche/highfipi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mgoltzsche/highfipi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fhighfipi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fhighfipi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fhighfipi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fhighfipi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgoltzsche","download_url":"https://codeload.github.com/mgoltzsche/highfipi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgoltzsche%2Fhighfipi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28763093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T00:37:26.264Z","status":"ssl_error","status_checked_at":"2026-01-26T00:37:25.959Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2024-11-07T15:12:05.150Z","updated_at":"2026-01-26T01:02:49.604Z","avatar_url":"https://github.com/mgoltzsche.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# highfipi\n\nRaspbian based SD card images to run a wireless multi-room audio system using [mopidy](https://mopidy.com/) and [snapcast](https://github.com/badaix/snapcast) on [Raspberry Pi](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/)s.\n\n\n## Build the images\n\nThe images defined within this repository are built using [Packer](https://github.com/hashicorp/packer) along with the [arm-image builder](https://github.com/solo-io/packer-builder-arm-image).  \n\nThe `Makefile` specifies a build target for each image.\nEach of these build targets writes an image into `./output-arm-image/image`.\n\n### Prerequisites\n\nTo build the SD card images, you need to have the following tools installed on your host:\n\n* Golang \u003e=1.16\n* qemu-user-static\n* kpartx\n\nFor instance on Debian-based Linux distributions you can do so as follows:\n\n```sh\nsudo apt-get install golang qemu-user-static kpartx\n```\n\nAlternatively you can build the images using `docker`.\nWhile this does not require additional dependencies, it fails randomly due to asynchronously populated loopback devices within the container.\n\n\n### Build the speaker image\n\nThe speaker image comes with a [snapcast](https://github.com/badaix/snapcast) client and is meant to be run on a [Raspberry Pi 3](https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/) with a [Hifiberry Amp2](https://www.hifiberry.com/shop/boards/hifiberry-amp2/) or [DAC+ Standard](https://www.hifiberry.com/shop/boards/hifiberry-dacplus-rca-version/)/Pro.\nYou can build it as follows:\n\n```sh\nsudo make build-speaker WIFI_SSID=\u003cWIFI_NAME\u003e WIFI_PASSWORD='\u003cPASSWORD\u003e' WIFI_COUNTRY=\u003cTWO_LETTER_COUNTRY_CODE\u003e SPEAKER_HOSTNAME=\u003cHOSTNAME\u003e\n```\n\nAlternatively you can build the image using `docker`:\n\n```sh\nmake docker-build-speaker WIFI_SSID=\u003cWIFI_NAME\u003e WIFI_PASSWORD='\u003cPASSWORD\u003e' WIFI_COUNTRY=\u003cTWO_LETTER_COUNTRY_CODE\u003e SPEAKER_HOSTNAME=\u003cHOSTNAME\u003e\n```\n\nIf you boot your Raspberry Pi from that image, it will connect to a [snapcast](https://github.com/badaix/snapcast) server within your local network automatically.\n\n\n### Build the streamer image\n\nThe streamer image comes with a [snapcast](https://github.com/badaix/snapcast) server and [mopidy](https://mopidy.com/) preinstalled.\nIt does not necessarily require any sound card attached to the Raspberry Pi since mopidy is configured to send audio to the snapcast server directly currently.\nYou can build it as follows:\n\n```sh\nsudo make build-streamer\n```\n\nAlternatively you can build the image using `docker`:\n\n```sh\nmake docker-build-streamer\n```\n\nPlease note that the streamer should be connected via ethernet in order to free WLAN bandwidth for the speakers.\nCorrespondingly the streamer disables WLAN by default.  \n\nOnce you booted a Raspberry Pi from that image, you can access [Iris](https://github.com/jaedb/iris) (a mopidy web UI) at [http://highfipi-streamer:6680/iris](http://highfipi-streamer:6680/iris) within your local network.  \n\nYou may wish to install additional mopidy plugins and configure authentication for them, as it is needed for eg. [mopidy-soundcloud](https://github.com/mopidy/mopidy-soundcloud) and [mopidy-youtube](https://github.com/natumbri/mopidy-youtube).\nYou'd have to do that manually after booting a Raspberry Pi from the image by placing a corresponding configuration file into `/usr/share/mopidy/conf.d/` and restarting mopidy using `sudo systemctl restart mopidy`.  \nYou can check the mopidy logs for configuration errors using the command `sudo journalctl -u mopidy`.\n\n\n## Flash the image to an SD card\n\nYou can write a previously built image to an SD card as follows:\n\n```sh\nTARGET_DEVICE=/dev/sdX\nsudo umount ${TARGET_DEVICE}* || true\nsudo dd bs=4M if=./output-arm-image/image of=\"$TARGET_DEVICE\"\nsync\n```\n\n**ATTENTION:** Please replace `/dev/sdX` carefully with the path to the device you want to write the image to - specifying the wrong device can cause data loss!\nTo find the correct device path, you can use `lsblk`.  \n\n\n## Stream audio from your workstation or laptop\n\nYou don't need to use a dedicated Raspberry Pi as snapcast server/streamer.\nYou could as well install a snapcast server on your workstation or laptop.\n[This example](https://gist.github.com/mgoltzsche/8a08cd11c5d1dad76096a5d139322446) shows how you can make pulseaudio stream into snapcast, allowing you to select \"Snapcast\" as a virtual device within pulseaudio's `pavucontrol` GUI in order to play audio from your machine on all connected snapcast clients / speakers synchronously.\nHowever the audio is not in sync with locally playing video unfortunately.\nAlso a snapcast client only connects to a single snapcast server so that you either need to stream your machine's audio to a central snapcast server within your local network which distributes it to the snapcast clients (adds additional latency!) or you need to make sure that the snapcast clients are connected to the right snapcast server (by turning off other snapcast servers).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgoltzsche%2Fhighfipi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgoltzsche%2Fhighfipi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgoltzsche%2Fhighfipi/lists"}