Spotify im Terminal

  Ralf Hersel   Lesezeit: 5 Minuten  🗪 15 Kommentare Auf Mastodon ansehen

Da ytdl sich in einem Katz-und-Maus-Spiel mit Google befindet, kam mir die Idee, das Streamen von Musik im Terminal über einen Spotify-Premium-Account zu probieren.

spotify im terminal

Chris White - Dire Straits

Neulich habe ich ein Dire-Straits-Konzert besucht, gespielt von der Cover Band The Dire Straits Experience, da es die Originalband seit 1995 nicht mehr gibt. Aber immerhin ist der Bläser aus der ursprünglichen Besetzung, Chris White, bei der Experience dabei (siehe Titelbild). Obwohl die Tickets ziemlich teuer sind, kann ich einen Besuch empfehlen; die Halle tobte.

Am Tag nach dem Konzert wollte ich mir das Stück "Your latest trick" noch einmal mit dem Kopfhörer am PC anhören. Zwar habe ich das Lied in meiner Musiksammlung, aber – faul, wie ich bin – öffnete ich ein Terminal und tippte das hier ein:

play "dire straits your latest trick"

Dahinter versteckt sich dieser Alias:

play='_y(){ mpv --ytdl-format=bestaudio ytdl://ytsearch:"$*";}; _y'

Wer mehr darüber lesen möchte, findet die Details in diesem Artikel. Der Befehl verwendet den Player mpv und streamt das Musikstück nach einer Suche von YouTube. Doch leider bekam ich statt Musik auf die Ohren, eine Fehlermeldung auf die Augen. Den Grund dafür könnt ihr euch denken. Es liegt am ständigen Katz-und-Maus-Spiel zwischen YouTube (Google) und der Bibliothek ytdl. Diese Library ist ein YouTube-Downloader und Streamer für Video und Audio. Vermutlich funktioniert ytdl in ein paar Tagen wieder, wenn sich das Spielchen eine Runde weitergedreht hat.

Doch dann schoss mir ein Gedanke durch den Kopf: "Warum muss es YouTube sein?"

Spotify statt YouTube

Ich habe einen Spotify-Premium-Account, den ich mir mit der Familie teile. Statt im Terminal Musik von YouTube zu streamen, könnte man doch dasselbe Ziel über die Spotify-API erreichen. Der Idee folgten mehrere Stunden Suche im Internet, ohne, dass diese Suche das Gewünschte hervorbrachte. Ich erspare euch alle Anwendungen, die ich ausprobiert habe. Das beste Ergebnis meiner Suche war ncspot. Der Name dieser Anwendung ist schnell erklärt: "nc" steht für ncurses, eine freie C-Bibliothek für die Implementierung von TUIs (Terminal User Interface). Und "spot" steht für Spotify.

ncspot findet ihr höchstwahrscheinlich in der Paketverwaltung eurer Distribution. Aktuell ist die Version 1.3.1. So sieht die Anwendung im Terminal aus:

Der Screenshot zeigt, was ncspot vordergründig kann. Das Programm ist unzureichend dokumentiert; hier findet ihr weitere Hinweise zu den Fähigkeiten und zur Bedienung. Dummerweise gibt es in der Version 1.3.1 einen Fehler, der das Abspielen von Audio verunmöglicht. Das Problem liegt nicht bei ncspot, sondern bei der darunter liegenden Bibliothek librespot. Da der Fehler bereits behoben, aber noch nicht gemerged ist, dürft ihr in Kürze mit einer funktionierenden Version von ncspot rechnen.

Keine Lösung in Sicht

Mein Ziel ist es, einen Ersatz für "play [Song]" zu finden. Soweit ich es bisher einschätzen kann, bietet ncspot das nicht. Auch mit den anderen Kandidaten bin ich nicht klargekommen:

Ja, es ist ein wildes Sammelsurium. Die einen sind TUIs, manche sind Fernsteuerungen für einen laufenden Spotify-Client und andere sind Spotify-Connect Ziele oder Downloader. Und dann gibt es noch den freien Spotify-GUI-Client Psst, über den ich bereits geschrieben habe. Wer den ausprobieren möchte, kann die Datei psst-linux-x86_64 von hier herunterladen, ausführbar machen und starten. Dieser hübsche GUI-Client funktioniert zurzeit auch nicht; vermutlich ebenfalls wegen des Fehlers in librespot.

Dann soll es halt die KI erledigen

Aber Ralf, du Boomer. Frag doch einfach die KI. Habe ich gemacht:

Liebe KI. Generiere ein Linux Shell Script oder ein Python Script, welches die Suche und das Streamen eines Liedes über meinen Spotify-Account im Terminal implementiert.

Hinweis: das "Liebe KI" habe ich weggelassen :)

Proton-Lumo liefert eine umfangreiche Anleitung (könnt ihr selbst ausprobieren, falls es euch interessiert. Achtet bitte darauf, dass ihr die Web-Suche und den Ghost-Modus eingeschaltet habt.) Ich habe mir den generierten Code angesehen; er macht Sinn. Ausprobiert habe ich ihn nicht, weil Lumo auch Folgendes sagt:

Die offizielle Spotify‑Web‑API erlaubt kein direktes Streamen von Audiodaten, sondern nur die Steuerung von bereits autorisierten Geräten. Deshalb benötigen wir einen laufenden Spotify‑Player, den wir per API anweisen, den gefundenen Titel abzuspielen.

Damit ist die Sache witzlos. Wenn ich erst den langsamen und überentwickelten Electron-Client von Spotify starten muss, brauche ich kein "play [Song]" im Terminal.

Fazit

Ich weiss nicht, ob ncspot die Kastanien noch aus dem Feuer holen kann, nachdem der Fehler in librespot behoben ist. Meine Zweifel überwiegen, nachdem, was die KI geantwortet hat. Und dann frage ich mich, warum ich jeden Monat viel Geld an Spotify zahle, ohne deren API für meine Zwecke nutzen zu können (ihr wisst, was ich meine: Freiheit Nr. 0).

Jetzt zähle ich auf die Community. Schreibt bitte in die Kommentare, wie man bei Spotify-Premium im Terminal nach einem Song suchen, und ihn abspielen kann. Zur Not über einen Spotify-Downloader.

Bevor ich es vergesse: Wer "Sultans of Swing" nicht kennt, darf diesen Artikel nicht lesen 🎸

Nachtrag

Dank eurer Kommentare sind wir einen Schritt weiter. Vielen Dank!

Der play-Alias (mit mpv und yt-dlp) funktioniert zwar mit älteren Versionen, jedoch noch mit dem aktuellen mpv 0.40.0. Dieses Problem wird sich mit kommenden Updates heilen.

Das Abspielen von Musik mit ncspot funktioniert mit der aktuellen Version 1.3.2, die als Flatpak zur Verfügung steht. Wer einen Alias dafür haben möchte, gibt das in die Shell-Konfiguration ein:

alias spot='flatpak run io.github.hrkfdn.ncspot'

Die Dokumentation von ncspot ist - gelinde gesagt - verbesserungswürdig. Ubuntuusers beschreibt das besser als das Projekt selbst. Wer "Suchen und Abspielen" haben möchte, macht im Terminal das:

  • spot
  • F2
  • your latest trick
  • RETURN

Ich habe nicht herausgefunden, ob man ncspot direkt mit einem Suchtitel aufrufen kann. Wie dem auch sei, dieses TUI-Programm ist ein Geschenk des Himmels. Es ist so viel einfacher und angenehmer zu bedienen als das verschissene Spotify-GUI (leider weiss ich nicht, wie das deutsche Adjektiv für Enshittification heisst).

Titelbild: https://direstraitsexperience.com/artists/

Quellen:

https://flathub.org/en/apps/io.github.hrkfdn.ncspot

https://github.com/hrkfdn/ncspot

https://github.com/hrkfdn/ncspot/issues/1732

https://www.linuxlinks.com/ncspot-ncurses-spotify-client/

… und weitere im Text.

Tags

Musik, Spotify, youtube, cli, Play, Terminal

Klaus Tachtler
Geschrieben von Klaus Tachtler am 12. November 2025 um 09:38

Hallo,

ich habe es nicht ausprobiert - aber ich habe das hier gefunden:

https://github.com/Rigellute/spotify-tui

Grüße Klaus.

niels
Geschrieben von niels am 12. November 2025 um 14:23

https://github.com/Rigellute/spotify-tui?tab=readme-ov-file#limitations bestätigt die KI

This app uses the Web API from Spotify, which doesn't handle streaming itself. So you'll need either an official Spotify client open or a lighter weight alternative such as spotifyd.

Martin
Geschrieben von Martin am 12. November 2025 um 10:49

Ahoi,

kein Kommentar zu Spotify von mir. Aber. Ich war ein wenig überrascht, in Deinem Script "ytdl" zu lesen. Wird das nicht seit Jahren nicht mehr weiter entwickelt? Vielleicht würde Deinem "play" ein Wechsel auf https://github.com/yt-dlp/yt-dlp helfen,

Best

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 12. November 2025 um 16:00

--ytdl ist ein Parameter von mpv. Ich gehe davon aus, dass mpv yt-dlp verwendet.

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 12. November 2025 um 21:57

Der Befehl:

yt-dlp -g -f bestaudio ytsearch1:'dua lipa levitating' | xargs mpv

scheitert genauso.

klausb
Geschrieben von klausb am 12. November 2025 um 23:07

Bei mir funktioniert das merkwürdigerweise, auch wenn einige Warnungen geworfen werden:

WARNING: [youtube] 2Q_ZzBGPdqE: Signature extraction failed: Some formats may be missing
...
WARNING: [youtube] 2Q_ZzBGPdqE: Some web_safari client https formats have been skipped as they are missing a url...
[ao/pipewire] Could not connect to context '(null)': Host is down

Distro: MX-23.6_x64 Libretto

Denis
Geschrieben von Denis am 18. November 2025 um 01:05

Das ist genial. Danke.

stefan
Geschrieben von stefan am 12. November 2025 um 15:16

Apropos „Katz und Maus“-Spiel: Du brauchst jetz eine Javascript-Runtime für den YT Spaß

https://github.com/yt-dlp/yt-dlp/issues/15012

z. B. Deno

Jürgen
Geschrieben von Jürgen am 12. November 2025 um 20:14

Bin ja immer noch der Meinung das man Spotify nicht nutzen sollte. KI generierte Musik und Künstler werden nicht gekennzeichnet, sehr weit rechts stehende Podcast und Musik sowie Playlisten sind immer noch vorhanden und die Künstler werden am schlechtesten vergütet. Zudem investiert einer der Gründer Massiv in die Rüstungsindustrie.

https://www.rnd.de/wirtschaft/kritik-am-spotify-ceo-warum-musiker-und-fans-mit-boykott-drohen-KVJASVQQN5HJ7F3YDZULRDAELU.html https://www.zeit.de/digital/internet/2024-11/ki-musik-spotify-streaming-plattform https://www.srf.ch/kultur/musik/nazi-bands-und-rechtsrock-ist-spotify-auf-dem-rechten-auge-blind

tuxfanmatze
Geschrieben von tuxfanmatze am 14. November 2025 um 20:07

Bei mir läuft noch dein play script, mpv --version:

mpv 0.37.0 Copyright © 2000-2023 mpv/MPlayer/mplayer2 projects
libplacebo version: v6.338.2
FFmpeg version: 6.1.1-3ubuntu5

Selbst yp-dlp mit einer älteren Version yt-dlp: 2025.08.11 läuft. OS ist Mint Cinnamon 22.2.

Für Spotify habe ich mal spotify_player ausprobiert, da muß tatsächlich in einem weiteren Fenster spotify_client als sozusagen Server laufen, dann kann man in einer weiteren Konsole Kommandos hinschicken. Ich hab mal ein Script versucht, schwierig ist das automatische minimieren des Fensters, in dem spotify_player als Server läuft, geht nur mit Tricks wie xdotools, das aber nur unter X11 läuft, mit Wayland muß man nach einer anderen Lösung suchen.. Wen es interessiert, hier das Script:

plays.sh

Ist ziemlich getrickst. Eine leichtgewichtige Option wäre wohl eher Spotify TUI zusammen mit spofiyd.

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 14. November 2025 um 21:40

Das ist interessant. Bei meiner viel neueren Version läuft es nicht:

mpv --version
mpv v0.40.0-dirty
built on Jul 29 2025 22:35:55
libplacebo version: v7.351.0
FFmpeg version: n7.1.1

yt-dlp --version
2025.09.26
tuxfanmatze
Geschrieben von tuxfanmatze am 2. Dezember 2025 um 01:34

Die Linkfreigabe zum plays Skript ist irgendwie abgelaufen, daher hier noch einmal: plays

tuxfanmatze
Geschrieben von tuxfanmatze am 14. November 2025 um 20:23

Achso, ncspot läuft wieder in der Version 1.3.2. Gibt es auch als Flatpak. Ich finde spotify_player von Funktionsmfang insgesamt ziemlich gut, man kann schnell durch eigene Playlists, Alben, Artist navigieren, die Suche ist auch sehr gut und es gibt sogar Lyrics (Songtexte) die sogar mit dem Lied mitlaufen.

FireWorx
Geschrieben von FireWorx am 14. November 2025 um 21:03

unter arch > librespot-git + ncspot-git benutzen ;-)

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 14. November 2025 um 22:09

Es gibt einen Nachtrag am Ende des Artikel.