Playback
Connect controls normally act on the currently active device. Use spogo device list to see what's available and spogo device set <name|id> to switch.
#play
spogo play [<id|url>] [--type <track|album|playlist|show|episode>] [--shuffle]
Accepts:
- A Spotify URI:
spotify:track:7hQJA50XrCWABAu5v6QZ4i,spotify:album:...,spotify:playlist:...,spotify:show:...,spotify:episode:...,spotify:artist:.... - A web URL:
https://open.spotify.com/track/7hQJA50XrCWABAu5v6QZ4i. Locale-prefixed (/intl-de/track/...) and embedded (/embed/track/...) Spotify URLs work too. - A bare ID — combine with
--typeto disambiguate. - No argument — resumes the current item.
Behavior:
- Tracks start immediately.
- Albums / playlists / shows start a context —
spogo nextwalks through items. - Artists start with the artist's top tracks (first track first).
--shuffleenables shuffle on the device before play, randomizing the first track for context URIs.
Examples:
spogo play # resume
spogo play spotify:track:7hQJA50XrCWABAu5v6QZ4i # one track
spogo play https://open.spotify.com/album/4aawyAB9vmqN3uQ7FjRGTy
spogo play 37i9dQZF1DXcBWIGoYBM5M --type playlist # bare ID
spogo play spotify:playlist:37i9dQZF1DXcBWIGoYBM5M --shuffle # shuffle on
spogo play spotify:artist:6sFIWsNpZYqfjUpaCgueju # top tracks
#pause / resume
spogo pause
spogo play # no argument resumes
#next / prev
spogo next
spogo prev # restart current track if past ~3s, else previous
#seek
spogo seek 90000 # milliseconds
spogo seek 1:30 # mm:ss
spogo seek 0 # back to start
#volume
spogo volume 60 # 0-100
spogo volume 0 # mute
Some devices ignore volume changes (e.g. Spotify Connect on hardware that exposes its own volume).
#shuffle / repeat
spogo shuffle on
spogo shuffle off
spogo repeat off
spogo repeat track # loop current track
spogo repeat context # loop current album/playlist
#status
spogo status # human, color
spogo status --plain # tab-separated key value
spogo status --json # full payload
JSON shape includes is_playing, progress_ms, device, item, repeat, shuffle. Use jq to pluck what you need:
spogo status --json | jq -r '.item.name + " — " + (.item.artists|join(", "))'
#Targeting a specific device
Use device set to select a device before playback controls. The Web API accepts a device ID via --device; Connect uses that selector for play when no device is active. See Devices.
spogo play spotify:track:... --device "Kitchen"
spogo device set "MacBook Pro"
spogo volume 30
When Connect state has no origin device, spogo falls back to the Web API transfer endpoint instead of failing.
#Engine notes
connect(default) — playback control via Spotify's internal Connect endpoints. Best fidelity for transitions, queueing, and device transfer; auto-falls-back to Web API for transfers when no origin device exists.web— the public Web API. Slower, rate-limited, but the only option for accounts with restrictive Connect availability.auto— Connect first, then Web; on macOS, playback status/control finally fall back to Spotify.app through AppleScript if both remote engines fail.applescript(macOS only) — playback controls drive the local Spotify.app. Other commands may use a remote fallback.
See Engines for the full breakdown.
#Errors
no active device— open Spotify on a phone/desktop/Connect speaker first, or pass--device.403 PREMIUM_REQUIRED— playback requires a Spotify Premium account.429 too many requests— preferconnectfor supported playback; Web-API-only fallback paths can still be limited, so honor the reportedretry-after hint.