{"id":18044594,"url":"https://github.com/abusch/sinuous","last_synced_at":"2025-08-21T08:30:58.686Z","repository":{"id":36986998,"uuid":"417676595","full_name":"abusch/sinuous","owner":"abusch","description":"A simple TUI for controlling Sonos speakers","archived":false,"fork":false,"pushed_at":"2024-11-25T17:03:19.000Z","size":466,"stargazers_count":19,"open_issues_count":2,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-07T15:11:59.141Z","etag":null,"topics":["rust","rust-lang","sonos","sonos-controller","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/abusch.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-10-16T00:50:31.000Z","updated_at":"2024-11-21T02:26:29.000Z","dependencies_parsed_at":"2024-02-24T23:29:18.789Z","dependency_job_id":"9e6b37dc-eebe-4e00-bec2-126ee00ead24","html_url":"https://github.com/abusch/sinuous","commit_stats":{"total_commits":64,"total_committers":3,"mean_commits":"21.333333333333332","dds":0.28125,"last_synced_commit":"24fc83512ae02d44a043724f7396b5e4e5d65ef4"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abusch%2Fsinuous","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abusch%2Fsinuous/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abusch%2Fsinuous/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abusch%2Fsinuous/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abusch","download_url":"https://codeload.github.com/abusch/sinuous/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230501172,"owners_count":18236061,"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":["rust","rust-lang","sonos","sonos-controller","tui"],"created_at":"2024-10-30T18:09:32.310Z","updated_at":"2025-08-21T08:30:58.667Z","avatar_url":"https://github.com/abusch.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sinuous\n\n[![dependency status](https://deps.rs/repo/github/abusch/sinuous/status.svg)](https://deps.rs/repo/github/abusch/sinuous)\n[![CI](https://github.com/abusch/sinuous/actions/workflows/rust.yml/badge.svg)](https://github.com/abusch/sinuous/actions/workflows/rust.yml)\n\nSinuous is a simple TUI for controlling local Sonos speakers.\n\nIt currently allows you to cycle through the different groups (zone players),\ndisplays the current track, and the current queue.\n\nNote: `sinuous` directly talks to the Sonos speakers via their local upnp\ninterface, and the speakers are discovered via the SSDP protocol. This means\nyour Sonos speakers need to be on the same network (or visible from your\ncurrent network).\n\n## Key bindings\n\n- \u003ckbd\u003eSpace\u003c/kbd\u003e: Play / Pause\n- \u003ckbd\u003ep\u003c/kbd\u003e / \u003ckbd\u003en\u003c/kbd\u003e: Skip to previous / next track\n- \u003ckbd\u003e[\u003c/kbd\u003e / \u003ckbd\u003e]\u003c/kbd\u003e: Adjust volume of the coordinator of the current group\n- \u003ckbd\u003eShift+Tab\u003c/kbd\u003e / \u003ckbd\u003eTab\u003c/kbd\u003e: Switch to previous / next group\n- \u003ckbd\u003eq\u003c/kbd\u003e: Quit\n\n## To run\n\nInstall a recent Rust toolchain via [rustup](https://rustup.rs), if you don't\nalready have one, then simply run `cargo run`.\n\nTo get debug logs, run `RUST_LOG=\"sinuous=debug\" cargo run`. The logs can be\nfound in `/tmp/sinuous.log`.\n\n## Screenshot\n\n![screenshot](assets/screenshot.png)\n\n## Todo\n\n- [x] Allow switching between speakers\n- [ ] Support more actions (seek forward, backward, change playing mode, volume...)\n- [ ] Display play/pause indicator as well as current play mode (shuffle+repeat)\n- [ ] Allow searching for tracks and modify the queue\n- [ ] Allow customizing colours\n- [x] Allow specifying speaker to connect to as a command line argument\n- [ ] Handle grouping of speakers\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabusch%2Fsinuous","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabusch%2Fsinuous","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabusch%2Fsinuous/lists"}