{"id":51511933,"url":"https://github.com/rocklobster42195/streamdeck-sonos-controller","last_synced_at":"2026-07-08T07:30:24.566Z","repository":{"id":367756702,"uuid":"1282164176","full_name":"rocklobster42195/streamdeck-sonos-controller","owner":"rocklobster42195","description":"Full Sonos playback control for Elgato Stream Deck — cover art, volume, track info, and more.","archived":false,"fork":false,"pushed_at":"2026-07-05T16:06:58.000Z","size":8760,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-07-05T17:12:19.629Z","etag":null,"topics":["elgato","sonos","stream-deck","stream-deck-plugin","typescript","upnp"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rocklobster42195.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"rocklobster42195"}},"created_at":"2026-06-27T12:06:23.000Z","updated_at":"2026-07-05T16:07:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rocklobster42195/streamdeck-sonos-controller","commit_stats":null,"previous_names":["rocklobster42195/streamdeck-sonos-controller"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/rocklobster42195/streamdeck-sonos-controller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocklobster42195%2Fstreamdeck-sonos-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocklobster42195%2Fstreamdeck-sonos-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocklobster42195%2Fstreamdeck-sonos-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocklobster42195%2Fstreamdeck-sonos-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rocklobster42195","download_url":"https://codeload.github.com/rocklobster42195/streamdeck-sonos-controller/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocklobster42195%2Fstreamdeck-sonos-controller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35257082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["elgato","sonos","stream-deck","stream-deck-plugin","typescript","upnp"],"created_at":"2026-07-08T07:30:23.161Z","updated_at":"2026-07-08T07:30:24.558Z","avatar_url":"https://github.com/rocklobster42195.png","language":"TypeScript","funding_links":["https://ko-fi.com/rocklobster42195"],"categories":[],"sub_categories":[],"readme":"# Sonos Controller for Elgato Stream Deck\n\nFull Sonos playback control for your Stream Deck — cover art, track info, volume dials, favorites browsing, and ambient particle animations.\n\n[![Ko-fi](https://img.shields.io/badge/support-Ko--fi-FF5E5B?logo=ko-fi\u0026logoColor=white)](https://ko-fi.com/rocklobster42195)\n[![GitHub release](https://img.shields.io/github/v/release/rocklobster42195/streamdeck-sonos-controller)](https://github.com/rocklobster42195/streamdeck-sonos-controller/releases/latest)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n\u003e **Disclaimer:** This is an independent, community-made plugin. It is not affiliated with, endorsed by, or officially connected to Sonos, Inc. or Elgato in any way. Sonos is a trademark of Sonos, Inc.\n\n\u003cimg src=\"assets/favorite_demo.gif\" width=\"340\" alt=\"Favorites Dial — browse and play Sonos favorites\"/\u003e\n\n---\n\n## At a Glance\n\n| Key Actions | Dial Actions *(Stream Deck+ only)* |\n|---|---|\n| **Play / Pause** — cover art + scrolling title | **Track Dial** — cover art · title · progress · EQ Effect |\n| **Playback Control** — next · previous · shuffle · repeat | **Volume Dial** — pie chart · mute · preset |\n| **Volume Key** — up · down · mute · preset | **Favorites Dial** — browse \u0026 play your favorites list |\n| **Play Favorite** — one tap to play a saved favorite | **Panorama Particles** — ambient art spanning multiple panels |\n| | **Group Volume Dial** — control a whole Sonos group's volume together |\n\n---\n\n## Actions\n\n### Play / Pause Key\n\nToggles playback on your Sonos speaker. While playing, the key displays the current album or radio station cover art. A scrolling marquee shows track title and artist.\n\n\u003cimg src=\"assets/play-pause_toggle_demo.gif\" width=\"100\" alt=\"Play / Pause Key showing cover art\"/\u003e\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Show cover art | Display album art on the key while playing |\n| Show track title | Scroll the track title and artist across the key |\n| Font color | Color for the scrolling title text |\n| Font size | Size of the title text (px) |\n\n---\n\n### Track Dial *(Stream Deck+ only)*\n\nThe centerpiece of the plugin. The LCD panel shows the album or station cover art, a scrolling track title, artist name, and a progress bar — tinted to match the cover art palette.\n\n\u003cimg src=\"assets/track_dial_eq.gif\" alt=\"Track Dial showing cover art and EQ Effect\"/\u003e\n\n| Interaction | Effect |\n|-------------|--------|\n| Rotate | Seek ±5% in the current track |\n| Press | Skip to next track |\n| Touch | Toggle play / pause |\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Background | `None` (track info only), `EQ Effect` (animated bars), or `Particles` |\n| Particle count | Number of particles (Particles mode) |\n| Particle speed | Animation speed (Particles mode) |\n\n---\n\n### Volume Dial *(Stream Deck+ only)*\n\nDedicated volume control with a live pie chart showing the current level. When muted, a volume-off icon replaces the pie.\n\n\u003cimg src=\"assets/volume_dial_demo.gif\" width=\"200\" alt=\"Volume Dial\"/\u003e\n\n| Interaction | Effect |\n|-------------|--------|\n| Rotate | Adjust volume (±1% per tick, ±2% for fast rotation) |\n| Press | Toggle mute |\n| Touch | Set volume to configured preset |\n| Long-touch | Save the current volume as the new preset |\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Preset Volume | Target volume for touch |\n| Show text | Show/hide the volume percentage and device name on the dial |\n| Alignment | Position of the pie: `Left`, `Center`, or `Right` |\n| Background | `None` or `Particles` |\n\n---\n\n### Group Volume Dial *(Stream Deck+ only)*\n\nControls the volume of an entire Sonos group — all speakers currently grouped together — instead of a single device. Rotating moves every group member by the same number of percentage points, so a speaker that's already louder than the others (e.g. a Sonos Port next to quieter satellites) keeps its relative balance instead of being flattened to match them. Automatically follows the group even if its membership or coordinator changes later.\n\n| Interaction | Effect |\n|-------------|--------|\n| Rotate | Adjust the whole group's volume together |\n| Press | Toggle mute for the entire group |\n| Touch | Recall the saved per-speaker volume preset |\n| Long-touch | Save each speaker's current volume as the preset |\n\n| Setting | Description |\n|---------|-------------|\n| Group | Which Sonos group to control (selected by any of its member speakers) |\n| Show text | Show/hide the volume percentage on the dial |\n| Alignment | Position of the pie: `Left`, `Center`, or `Right` |\n| Background | `None` or `Particles` |\n\n---\n\n### Favorites Dial *(Stream Deck+ only)*\n\nBrowse and play your saved Sonos favorites. Rotate to scroll through the list; the LCD shows the cover art, title, and position indicator for the highlighted item.\n\n\u003cimg src=\"assets/favorites_dial_demo.gif\" width=\"200\" alt=\"Favorites Dial browsing the list\"/\u003e\n\n| Interaction | Effect |\n|-------------|--------|\n| Rotate | Scroll through favorites |\n| Press | Play the highlighted favorite |\n| Touch | Return to now playing |\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Browse timeout | Seconds of inactivity before returning to now playing |\n\n---\n\n### Panorama Particles Dial *(Stream Deck+ only)*\n\nAmbient particle network animation that spans multiple adjacent LCD panels as one continuous scene. Place two or more side by side to connect them into a seamless panorama.\n\n![Panorama Particles across 4 LCD panels](assets/panorama_particle_demo.gif)\n\n| Interaction | Effect |\n|-------------|--------|\n| Rotate | Adjust particle count or speed (depending on active mode) |\n| Press | Toggle between count mode and speed mode |\n\n---\n\n### Volume Key\n\nIncrease, decrease, mute, or set a preset volume with a single key press.\n\n\u003cimg src=\"assets/screenshots/key-volume.png\" width=\"100\" alt=\"Volume Key\"/\u003e\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Command | `Volume Up`, `Volume Down`, `Mute / Preset`, or `Volume Preset` |\n| Preset Volume | Target volume for the preset command |\n| Show preset | Display the preset value on the key |\n\n---\n\n### Playback Control Key\n\nNext, previous, shuffle, or repeat — each as a dedicated key. All four **dim automatically** when a radio station is playing, since seek controls are unavailable for live streams.\n\n\u003cimg src=\"assets/screenshots/key-playback-control.png\" width=\"100\" alt=\"Playback Control Key — Next\"/\u003e\n\u003cimg src=\"assets/screenshots/key-playback-control-radio.png\" width=\"100\" alt=\"Playback Control Key dimmed during radio\"/\u003e\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Command | `Next Track`, `Previous Track`, `Toggle Shuffle`, or `Toggle Repeat` |\n\n---\n\n### Play Favorite\n\nPlay one of your saved Sonos favorites with a single key press. The key displays the favorite's cover art while it is playing.\n\n| Setting | Description |\n|---------|-------------|\n| Device | Which Sonos speaker to control |\n| Favorite | Select from your Sonos favorites list |\n| Show title | Display the favorite's title on the key |\n\n---\n\n## Requirements\n\n- **Elgato Stream Deck** — any model for key actions; **Stream Deck+** required for dial actions\n- **Stream Deck software** — version 6.9 or later\n- **Sonos system** — any Sonos speaker on the same local network as your computer\n- **Network** — plugin and speaker must be on the same subnet (no VLAN isolation between them)\n\n---\n\n## Setup\n\n1. Install the plugin via the **Elgato Marketplace** or by double-clicking the `.streamDeckPlugin` file.\n2. Drag an action from the **Sonos Controller** category onto a key or dial slot.\n3. Open the action's settings (click the slot in Stream Deck software).\n4. Select your **Sonos device** from the dropdown — devices are discovered automatically on your local network.\n5. Configure the remaining options and click anywhere to save.\n\n\u003e The plugin supports **English**, **German**, and **Spanish** in the settings panel — the language follows your operating system's regional setting.\n\n---\n\n## Troubleshooting\n\n**Speaker not showing in the device list**\n- Make sure the speaker is powered on and connected to your Wi-Fi or Ethernet.\n- The computer and speaker must be on the **same subnet**. The plugin uses UPnP, which does not cross router or VLAN boundaries.\n- Restart the Stream Deck software and wait a few seconds for discovery to complete.\n\n**Cover art not showing on radio stations**\n- Radio station art is fetched on first play. It may take a moment to appear after the plugin starts.\n\n**Controls not responding / out of sync**\n- The plugin uses UPnP event subscriptions for real-time updates. On an unstable network, a subscription may drop and recover automatically within 60 seconds.\n- If the problem persists, restart the Stream Deck software.\n\n**Panorama Particles not connecting across panels**\n- All Panorama Particles dials must be placed in **adjacent slots** in the same profile row.\n- Each dial detects its neighbors automatically — no manual column setting is needed.\n\n---\n\n## Network Notes\n\n- The plugin subscribes to **UPnP events** from each Sonos device for real-time track and volume updates.\n- Subscriptions are automatically renewed to maintain the connection.\n- **No cloud connection** — the plugin only communicates with Sonos devices on your local network.\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n---\n\n## Credits\n\nBuilt with:\n- [Elgato Stream Deck SDK](https://developer.elgato.com/documentation/stream-deck/) (`@elgato/streamdeck`)\n- [Sonos TypeScript SDK](https://github.com/svrooij/node-sonos-ts) (`@svrooij/sonos`) by Stephan van Rooij — MIT license\n- [Material Design Icons](https://pictogrammers.com/library/mdi/) (`@mdi/js`) — MIT license\n- [sdpi-components](https://github.com/geekyeggo/sdpi-components) by GeekyEggo — MIT license\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocklobster42195%2Fstreamdeck-sonos-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frocklobster42195%2Fstreamdeck-sonos-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocklobster42195%2Fstreamdeck-sonos-controller/lists"}