pianobar(1)

πŸ“¦
version 2024.12.21 Β· 2 versions
, in alpine 3.24, arch rolling, debian trixie, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

okay so bestie, meet pianobar β€” a console music player for pandora.com 🎧✨ like, it plays your personalized internet radio right there in the terminal, no browser, no nonsense. This page is pianobar(1) from the General Commands Manual, and yeah it's long, but we're getting through it together. πŸ’…


🌸 SYNOPSIS 🌸

pianobar

that's it. one word. no flags, no arguments. iconic behaviour honestly. πŸ‘‘


πŸ¦‹ DESCRIPTION πŸ¦‹

pianobar is a lightweight console music player for the personalized online radio pandora.com. 🌈


πŸ“ FILES πŸ“

  • $XDG_CONFIG_HOME/pianobar/config or ~/.config/pianobar/config β€” your per-user configuration file, bestie. See CONFIGURATION below, it's a whole section, we'll get there. πŸ’–
  • /etc/libao.conf or ~/.libao β€” the global / per-user audio output configuration. The libao documentation lives at http://xiph.org/ao/doc/config.html if you wanna go read the source of truth. πŸŽ€

βš™οΈ CONFIGURATION βš™οΈ

So the config file is just simple key = value lines, each one ending with a newline (\n) character. And heads up: keys are case sensitive. so Foo and foo are NOT the same thing, not even close, don't do that to yourself. πŸ™ˆ

The act_* keys are what control pianobar's key-bindings. Every one-byte character is allowed here β€” except \x00 and the special value disabled. That's the whole rule. ✨

⌨️ key-bindings ⌨️

  • act_help = ? β€” show keybindings. πŸ†˜
  • act_songlove = + β€” love the currently played song. πŸ’–
  • act_songban = - β€” ban the current track. It will not be played again, and it can only be removed using the pandora.com web interface. so like, be sure. πŸ’€
  • act_stationaddmusic = a β€” add more music to the current station. You'll be asked for a search string β€” just follow the instructions. If you're clueless, try ? (without quotes). 🫢
  • act_bookmark = b β€” bookmark the current song or artist. πŸ”–
  • act_stationcreate = c β€” create a new station. You have to enter a search string and then select the song or artist of your choice. 🌟
  • act_stationdelete = d β€” delete the current station. 😭
  • act_songexplain = e β€” explain why this song is being played. the way it has a whole reason... πŸ”
  • act_stationaddbygenre = g β€” add a genre station provided by pandora. 🎼
  • act_history = h β€” show history. πŸ•°οΈ
  • act_songinfo = i β€” print information about the currently played song/station. ℹ️
  • act_addshared = j β€” add a shared station by id. the id is a very long integer without the sh at the beginning. no cap, that leading sh is not invited. 🚫
  • act_managestation = = β€” delete artist/song seeds or feedback. 🧹
  • act_songnext = n β€” skip the current song. ⏭️
  • act_songpause = S β€” pause playback. ⏸️
  • act_songpausetoggle = p β€” pause/resume playback. πŸ”
  • act_songpausetoggle2 = <Space> β€” pause/resume playback. yes, there are two of these, they do the same thing, and honestly? slay. πŸ”
  • act_songplay = P β€” resume playback. ▢️
  • act_quit = q β€” quit pianobar. bye bestie πŸ‘‹
  • act_stationrename = r β€” rename the currently played station. ✏️
  • act_stationchange = s β€” select another station. The station list can be filtered like most lists, by entering a search string instead of a station number. πŸ”Ž
  • act_songtired = t β€” ban the song for one month. it's not forever, it's just... a break. πŸ’€
  • act_upcoming = u β€” show the next songs in the playlist. πŸ“œ
  • act_stationcreatefromsong = v β€” create a new station from the current song or artist. 🌱
  • act_stationselectquickmix = x β€” select quickmix stations. You can toggle the selection with t, select all with a, or select none with n. πŸŽ›οΈ
  • act_voldown = ( β€” decrease volume. πŸ”‰
  • act_volreset = ^ β€” reset volume. 🎚️
  • act_volup = ) β€” increase volume. πŸ”Š
  • act_settings = ! β€” change Pandora settings. πŸ› οΈ

πŸŽ€ the rest of the config πŸŽ€

  • at_icon = @ β€” the replacement for %@ in the station format string. It's " @ " by default. ✨
  • audio_quality = {high, medium, low} β€” select audio quality. pick your fighter. 🎡
  • audio_pipe = /path/to/fifo β€” stream decoded, raw audio samples to a pipe instead of the default audio device. Use sample_rate to enforce a fixed sample rate. 🚰
  • autoselect = {1,0} β€” auto-select the last remaining item of a filtered list. Currently enabled for station selection only. 🎯
  • autostart_station = stationid β€” play this station when starting up. You can get the stationid by pressing i, or whatever key you defined in act_songinfo. πŸš€
  • ban_icon = </3 β€” icon for banned songs. πŸ’”
  • bind_to = {if!tunX,host!x.x.x.x,..} β€” this sets the interface name to use as the outgoing network interface. The name can be an interface name, an IP address, or a host name. (from CURLOPT_INTERFACE) 🌐

It can be used as a replacement for control_proxy in conjunction with OpenVPN's option route-nopull. πŸ”

  • buffer_seconds = 5 β€” audio buffer size in seconds. ⏳
  • ca_bundle = /etc/ssl/certs/ca-certificates.crt β€” path to the CA certificate bundle, containing the root and intermediate certificates required to validate Pandora's SSL certificate. πŸ”’
  • control_proxy = http://user:password@host:port/ β€” non-american users need a proxy to use pandora.com. Only the xmlrpc interface will use this proxy. The music is streamed directly. πŸ—ΊοΈ
  • decrypt_password = R=U!LH$O2B# β€” the original doesn't say what this does, so I'm not making anything up. just leave it alone bestie, iykyk. 🀫
  • device = android-generic β€” again, no description in the original. don't touch it. πŸ™ˆ
  • encrypt_password = 6#26FRL$ZWD β€” same deal, no description. hands off. βœ‹
  • event_command = path β€” file that is executed when an event occurs. See the EVENTCMD section. πŸ“£
  • fifo = $XDG_CONFIG_HOME/pianobar/ctl β€” location of the control fifo. See the REMOTE CONTROL section. πŸ“‘
  • format_list_song = %i) %a - %t%r β€” the song list format. Available format characters are:
    • %i β€” song number
    • %a β€” song artist
    • %t β€” song title
    • %r β€” rating icon
    • %d β€” song duration
    • %@ β€” the at_icon
    • %s β€” the song's station, if it's not the current station. 🎢
  • format_msg_none = %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_msg_info = (i) %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_msg_nowplaying = |> %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_msg_time = # %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_msg_err = /!\ %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_msg_question = [?] %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_msg_list = %s β€” a message format string: %s gets replaced with the actual message. πŸ’¬
  • format_nowplaying_song = "%t" by "%a" on "%l"%r%@%s β€” the now-playing song message format. Available format characters are:
    • %t β€” song title
    • %a β€” song artist
    • %l β€” album name
    • %r β€” rating icon
    • %@ β€” at_icon if the station is quickmix, empty otherwise.
    • %s β€” real station name if quickmix
    • %u β€” song detail url 🎀
  • format_nowplaying_station = Station "%n" (%i) β€” the now-playing station format. Available format characters are:
    • %n β€” station name
    • %i β€” station id πŸ“»
  • format_time = %s%r/%t β€” the time format.
    • %e β€” elapsed time
    • %r β€” remaining time
    • %s β€” sign
    • %t β€” total time ⏱️
  • gain_mul = 1.0 β€” Pandora sends a ReplayGain value with every song. This sets a multiplier so that the gain adjustment can be reduced. 0.0 means no gain adjustment, 1.0 means full gain adjustment, and values in between reduce the magnitude of the gain adjustment. 🎚️
  • history = 5 β€” keep a history of the last n songs (5, by default). You can rate these songs. πŸ•°οΈ
  • love_icon = <3 β€” icon for loved songs. πŸ’—
  • max_retry = 3 β€” max failures for several actions before giving up. πŸ›‘
  • partner_password = AC7IBG09A3DTSYM4R41UJWL07VLN8JI7 β€” no description in the original. it just is. 🀐
  • partner_user = android β€” no description either. leave it be. 🀐
  • password = plaintext_password β€” your pandora.com password. Plain-text. yeah, plain-text, we know, bestie, we know. 😬
  • password_command = gpg --decrypt ~/password β€” use the output of the command as the password. This setting is overridden by specifying a password with password. πŸ—οΈ
  • proxy = http://user:password@host:port/ β€” use a http proxy. Note that this setting overrides the http_proxy environment variable. Only "Basic" http authentication is supported. 🧦
  • rpc_host = tuner.pandora.com β€” no description in the original. don't ask me, I don't make the rules. 🀷
  • rpc_tls_port = 443 β€” no description in the original either. 🀷
  • sample_rate = 0 β€” force a fixed output sample rate. The default, 0, uses the stream's sample rate. 🎧
  • sort = {name_az, name_za, quickmix_01_name_az, quickmix_01_name_za, quickmix_10_name_az, quickmix_10_name_za} β€” sort the station list by name, or by type (is quickmix) and name. name_az for example sorts by name from a to z, and quickmix_01_name_za sorts by type (quickmix at the bottom) and name from z to a. πŸ”€
  • timeout = 30 β€” network operation timeout. ⏲️
  • tired_icon = zZ β€” icon for temporarily suspended songs. 😴
  • user = your@user.name β€” your pandora.com username. πŸͺͺ
  • volume = 0 β€” initial volume correction in dB. Usually between -30 and +5. πŸ”ˆ

πŸ“‘ REMOTE CONTROL πŸ“‘

pianobar can be controlled through a fifo. You have to create it yourself by executing:

mkfifo ~/.config/pianobar/ctl

Adjust the path if you set up a $XDG_CONFIG_HOME or changed the fifo setting. Afterwards you can write commands directly into the fifo. Example (next song):

echo -n 'n' > ~/.config/pianobar/ctl

n is the keybinding for "next song". If you customized your keybindings, you have to use these characters to control pianobar.

⚠️ This behaviour may change in the future! so don't get too attached, bestie. πŸ’€

Another example:

while true; do;
   nc -l -p 12345 -s localhost localhost > ~/.config/pianobar/ctl;
   sleep 1;
done
echo -ne 'n\x1a' | nc -q 0 127.0.0.1 12345

πŸ“£ EVENTCMD πŸ“£

pianobar can report certain "events" to an external application (see CONFIGURATION). This application is started with the event name as its first argument. More information β€” like the error code and description, as well as song information related to the current event β€” is supplied through stdin. 🫧

Currently supported events are:

  • artistbookmark
  • settingschange
  • settingsget
  • songban
  • songbookmark
  • songexplain
  • songfinish
  • songlove
  • songshelf
  • songstart
  • stationaddgenre
  • stationaddmusic
  • stationaddshared
  • stationcreate
  • stationdelete
  • stationdeleteartistseed
  • stationdeletefeedback
  • stationdeletesongseed
  • stationdeletestationseed
  • stationfetchgenre
  • stationfetchinfo
  • stationfetchplaylist
  • stationgetmodes
  • stationquickmixtoggle
  • stationrename
  • stationsetmode
  • usergetstations
  • userlogin

An example script can be found in the contrib/ directory of pianobar's source distribution. 🧚


πŸ‘‘ AUTHOR πŸ‘‘

Lars-Dominik Braun <lars@6xq.net> β€” thank you for this masterpiece, we are obsessed. 🫢


and that's the whole page, bestie!! πŸŽ€ this was pianobar(1) from the General Commands Manual, and you made it all the way to the bottom, which is honestly main character energy. go make a station and love some songs. βœ¨πŸ’–πŸ¦‹