mierak/rmpc

TUI rendering broken in Konsole

Closed this issue · 3 comments

Description

Hi,

rmpc seems to be borked when running in Konsole:

image

It flashes a single frame correctly and then breaks.

It does work correctly if i swap to another terminal emulator e.g. kitty:

image

I could look into this myself, but pointers would be helpful if anyone can offer any. (honestly I would just start using kitty or something else, I have no particular fondness for konsole)

Steps to reproduce

  • open Konsole
  • run rmpc
  • see busted tui from description

Expected behavior

  • the tui should be rendered correctly :)

What terminal emulator are you running rmpc in?

konsole 24.08.3

rmpc debuginfo

rmpc debuginfo
rmpc 0.6.0 git Arch Linux

Config path          /home/john/.config/rmpc/config.ron
Theme path           None

MPD:
Address              "127.0.0.1:6600"
Resolved Address     IpAndPort("127.0.0.1:6600")
MPD_HOST             unset
MPD_PORT             unset

Youtube playback:
Cache dir            None
ffmpeg               installed       ffmpeg version n7.1 Copyright (c) 2000-2024 the FFmpeg developers
ffprobe              installed       ffprobe version n7.1 Copyright (c) 2007-2024 the FFmpeg developers
yt-dlp               not installed   Version not available
python3              installed       Python 3.12.7       
python-mutagen       not installed   NOT PRESENT         

Image protocol:
Requested            Auto
Resolved             Kitty
TMUX                 false
ueberzugpp           not installed   Version not available

Config file

rmpc config
#![enable(implicit_some)]
#![enable(unwrap_newtypes)]
#![enable(unwrap_variant_newtypes)]
(
  address: "127.0.0.1:6600",
  password: None,
  theme: None,
  cache_dir: None,
  on_song_change: None,
  volume_step: 5,
  scrolloff: 0,
  wrap_navigation: false,
  enable_mouse: true,
  status_update_interval_ms: 1000,
  select_current_song_on_change: false,
  album_art: (
      method: Auto,
      max_size_px: (width: 600, height: 600),
  ),
  keybinds: (
      global: {
          ":":       CommandMode,
          ",":       VolumeDown,
          "s":       Stop,
          ".":       VolumeUp,
          "c":       ToggleSingle,
          "<Tab>":   NextTab,
          "<S-Tab>": PreviousTab,
          "1":       SwitchToTab("Queue"),
          "2":       SwitchToTab("Directories"),
          "3":       SwitchToTab("Artists"),
          "4":       SwitchToTab("Albums"),
          "5":       SwitchToTab("Playlists"),
          "6":       SwitchToTab("Search"),
          "q":       Quit,
          "x":       ToggleRandom,
          ">":       NextTrack,
          "<":       PreviousTrack,
          "f":       SeekForward,
          "v":       ToggleConsume,
          "p":       TogglePause,
          "z":       ToggleRepeat,
          "b":       SeekBack,
          "~":       ShowHelp,
          "I":       ShowCurrentSongInfo,
          "O":       ShowOutputs,
      },
      navigation: {
          "k":       Up,
          "j":       Down,
          "h":       Left,
          "l":       Right,
          "<Up>":    Up,
          "<Down>":  Down,
          "<Left>":  Left,
          "<Right>": Right,
          "<C-k>":   PaneUp,
          "<C-j>":   PaneDown,
          "<C-h>":   PaneLeft,
          "<C-l>":   PaneRight,
          "<C-u>":   UpHalf,
          "N":       PreviousResult,
          "a":       Add,
          "A":       AddAll,
          "r":       Rename,
          "n":       NextResult,
          "g":       Top,
          "<Space>": Select,
          "G":       Bottom,
          "<CR>":    Confirm,
          "i":       FocusInput,
          "J":       MoveDown,
          "<C-d>":   DownHalf,
          "/":       EnterSearch,
          "<C-c>":   Close,
          "<Esc>":   Close,
          "K":       MoveUp,
          "D":       Delete,
      },
      queue: {
          "D":       DeleteAll,
          "<CR>":    Play,
          "<C-s>":   Save,
          "a":       AddToPlaylist,
          "d":       Delete,
          "i":       ShowInfo,
      },
  ),
  search: (
      case_sensitive: false,
      mode: Contains,
      tags: [
          (value: "any",         label: "Any Tag"),
          (value: "artist",      label: "Artist"),
          (value: "album",       label: "Album"),
          (value: "albumartist", label: "Album Artist"),
          (value: "title",       label: "Title"),
          (value: "filename",    label: "Filename"),
          (value: "genre",       label: "Genre"),
      ],
  ),
  tabs: [
      (
          name: "Queue",
          border_type: None,
          pane: Split(
              direction: Horizontal,
              panes: [(size: "40%", pane: Pane(AlbumArt)), (size: "60%", pane: Pane(Queue))],
          ),
      ),
      (
          name: "Directories",
          border_type: None,
          pane: Pane(Directories),
      ),
      (
          name: "Artists",
          border_type: None,
          pane: Pane(Artists),
      ),
      (
          name: "Album Artists",
          border_type: None,
          pane: Pane(AlbumArtists),
      ),
      (
          name: "Albums",
          border_type: None,
          pane: Pane(Albums),
      ),
      (
          name: "Playlists",
          border_type: None,
          pane: Pane(Playlists),
      ),
      (
          name: "Search",
          border_type: None,
          pane: Pane(Search),
      ),
  ],
)

Relevant log output

rmpc log
2024-11-18T15:51:33.129794338Z DEBUG src/main.rs:212 message="rmpc started" rev="Arch Linux" 
2024-11-18T15:51:33.176427920Z INFO  src/deps.rs:99 message="Dependency check" name="ffmpeg" installed="true" version="ffmpeg version n7.1 Copyright (c) 2000-2024 the FFmpeg developers" 
2024-11-18T15:51:33.225873790Z INFO  src/deps.rs:99 message="Dependency check" name="ffprobe" installed="true" version="ffprobe version n7.1 Copyright (c) 2007-2024 the FFmpeg developers" 
2024-11-18T15:51:33.225939734Z INFO  src/deps.rs:99 message="Dependency check" name="yt-dlp" installed="false" version="Version not available" 
2024-11-18T15:51:33.226009185Z INFO  src/deps.rs:99 message="Dependency check" name="ueberzugpp" installed="false" version="Version not available" 
2024-11-18T15:51:33.229257313Z INFO  src/deps.rs:99 message="Dependency check" name="python3" installed="true" version="Python 3.12.7" 
2024-11-18T15:51:33.232668798Z DEBUG src/utils.rs:234 message="devattr response" buf=""\u{1b}_Gi=31;OK\u{1b}\\\u{1b}[?62;1;4c\0"" 
2024-11-18T15:51:33.232684257Z DEBUG src/config/mod.rs:293 message="Image method resolved" resolved="Kitty" requested="Auto" is_tmux="false" 
2024-11-18T15:51:33.232952321Z DEBUG src/mpd/client.rs:139 message="MPD client initiazed" name="command" addr="IpAndPort("127.0.0.1:6600")" version="0.23.5" handshake="OK MPD 0.23.5" 
2024-11-18T15:51:33.233962771Z INFO  src/context.rs:35 message="Supported commands by server" supported_commands="{"repeat", "rm", "seekid", "moveoutput", "listplaylist", "playlist", "single", "subscribe", "toggleoutput", "listall", "seek", "unmount", "stop", "unsubscribe", "commands", "listmounts", "close", "save", "outputset", "idle", "clearerror", "mixrampdelay", "playlistinfo", "replay_gain_mode", "enableoutput", "password", "seekcur", "albumart", "volume", "addid", "clear", "getvol", "listallinfo", "move", "searchaddpl", "readpicture", "decoders", "listplaylists", "currentsong", "consume", "getfingerprint", "playlistadd", "playlistdelete", "rangeid", "searchadd", "sticker", "addtagid", "listpartitions", "add", "swap", "kill", "playlistfind", "tagtypes", "ping", "notcommands", "status", "sendmessage", "crossfade", "listfiles", "newpartition", "outputs", "binarylimit", "rescan", "delete", "list", "delpartition", "mount", "count", "moveid", "mixrampdb", "channels", "plchanges", "pause", "search", "playlistclear", "deleteid", "findadd", "prio", "random", "swapid", "lsinfo", "prioid", "setvol", "stats", "update", "rename", "urlhandlers", "shuffle", "partition", "cleartagid", "listplaylistinfo", "playid", "playlistmove", "playlistsearch", "readcomments", "next", "plchangesposid", "play", "disableoutput", "readmessages", "load", "playlistid", "replay_gain_status", "config", "find", "previous"}" 
2024-11-18T15:51:33.234100691Z INFO  src/context.rs:42 message="Resolved config" config="Config { address: IpAndPort("127.0.0.1:6600"), password: None, cache_dir: None, volume_step: 5, scrolloff: 0, wrap_navigation: false, keybinds: KeyConfig { global: {Key { key: Char('I'), modifiers: KeyModifiers(SHIFT) }: ShowCurrentSongInfo, Key { key: Char('c'), modifiers: KeyModifiers(0x0) }: ToggleSingle, Key { key: Char('5'), modifiers: KeyModifiers(0x0) }: SwitchToTab(TabName("Playlists")), Key { key: Char(','), modifiers: KeyModifiers(0x0) }: VolumeDown, Key { key: Char(':'), modifiers: KeyModifiers(0x0) }: CommandMode, Key { key: Char('.'), modifiers: KeyModifiers(0x0) }: VolumeUp, Key { key: Char('v'), modifiers: KeyModifiers(0x0) }: ToggleConsume, Key { key: Char('z'), modifiers: KeyModifiers(0x0) }: ToggleRepeat, Key { key: Char('~'), modifiers: KeyModifiers(0x0) }: ShowHelp, Key { key: Char('4'), modifiers: KeyModifiers(0x0) }: SwitchToTab(TabName("Albums")), Key { key: Char('b'), modifiers: KeyModifiers(0x0) }: SeekBack, Key { key: Char('<'), modifiers: KeyModifiers(0x0) }: PreviousTrack, Key { key: Char('>'), modifiers: KeyModifiers(0x0) }: NextTrack, Key { key: Char('f'), modifiers: KeyModifiers(0x0) }: SeekForward, Key { key: Char('O'), modifiers: KeyModifiers(SHIFT) }: ShowOutputs, Key { key: BackTab, modifiers: KeyModifiers(SHIFT) }: PreviousTab, Key { key: Char('1'), modifiers: KeyModifiers(0x0) }: SwitchToTab(TabName("Queue")), Key { key: Tab, modifiers: KeyModifiers(0x0) }: NextTab, Key { key: Char('6'), modifiers: KeyModifiers(0x0) }: SwitchToTab(TabName("Search")), Key { key: Char('q'), modifiers: KeyModifiers(0x0) }: Quit, Key { key: Char('p'), modifiers: KeyModifiers(0x0) }: TogglePause, Key { key: Char('2'), modifiers: KeyModifiers(0x0) }: SwitchToTab(TabName("Directories")), Key { key: Char('x'), modifiers: KeyModifiers(0x0) }: ToggleRandom, Key { key: Char('s'), modifiers: KeyModifiers(0x0) }: Stop, Key { key: Char('3'), modifiers: KeyModifiers(0x0) }: SwitchToTab(TabName("Artists"))}, navigation: {Key { key: Char('r'), modifiers: KeyModifiers(0x0) }: Rename, Key { key: Char('c'), modifiers: KeyModifiers(CONTROL) }: Close, Key { key: Char('k'), modifiers: KeyModifiers(CONTROL) }: PaneUp, Key { key: Enter, modifiers: KeyModifiers(0x0) }: Confirm, Key { key: Char('k'), modifiers: KeyModifiers(0x0) }: Up, Key { key: Char('G'), modifiers: KeyModifiers(SHIFT) }: Bottom, Key { key: Char('j'), modifiers: KeyModifiers(0x0) }: Down, Key { key: Char('A'), modifiers: KeyModifiers(SHIFT) }: AddAll, Key { key: Char('j'), modifiers: KeyModifiers(CONTROL) }: PaneDown, Key { key: Up, modifiers: KeyModifiers(0x0) }: Up, Key { key: Char('i'), modifiers: KeyModifiers(0x0) }: FocusInput, Key { key: Right, modifiers: KeyModifiers(0x0) }: Right, Key { key: Char('l'), modifiers: KeyModifiers(0x0) }: Right, Key { key: Char('h'), modifiers: KeyModifiers(0x0) }: Left, Key { key: Char('h'), modifiers: KeyModifiers(CONTROL) }: PaneLeft, Key { key: Char('a'), modifiers: KeyModifiers(0x0) }: Add, Key { key: Esc, modifiers: KeyModifiers(0x0) }: Close, Key { key: Char('K'), modifiers: KeyModifiers(SHIFT) }: MoveUp, Key { key: Char('D'), modifiers: KeyModifiers(SHIFT) }: Delete, Key { key: Char('g'), modifiers: KeyModifiers(0x0) }: Top, Key { key: Char('u'), modifiers: KeyModifiers(CONTROL) }: UpHalf, Key { key: Left, modifiers: KeyModifiers(0x0) }: Left, Key { key: Char('N'), modifiers: KeyModifiers(SHIFT) }: PreviousResult, Key { key: Char('l'), modifiers: KeyModifiers(CONTROL) }: PaneRight, Key { key: Char('n'), modifiers: KeyModifiers(0x0) }: NextResult, Key { key: Char(' '), modifiers: KeyModifiers(0x0) }: Select, Key { key: Down, modifiers: KeyModifiers(0x0) }: Down, Key { key: Char('d'), modifiers: KeyModifiers(CONTROL) }: DownHalf, Key { key: Char('J'), modifiers: KeyModifiers(SHIFT) }: MoveDown, Key { key: Char('/'), modifiers: KeyModifiers(0x0) }: EnterSearch}, albums: {}, artists: {}, directories: {}, playlists: {}, search: {}, queue: {Key { key: Char('d'), modifiers: KeyModifiers(0x0) }: Delete, Key { key: Char('i'), modifiers: KeyModifiers(0x0) }: ShowInfo, Key { key: Char('s'), modifiers: KeyModifiers(CONTROL) }: Save, Key { key: Char('D'), modifiers: KeyModifiers(SHIFT) }: DeleteAll, Key { key: Enter, modifiers: KeyModifiers(0x0) }: Play, Key { key: Char('a'), modifiers: KeyModifiers(0x0) }: AddToPlaylist} }, enable_mouse: true, status_update_interval_ms: Some(1000), select_current_song_on_change: false, theme: UiConfig { draw_borders: true, background_color: None, header_background_color: None, background_color_modal: None, borders_style: Style { fg: Some(Blue), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }, highlighted_item_style: Style { fg: Some(Blue), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }, current_item_style: Style { fg: Some(Black), bg: Some(Blue), underline_color: None, add_modifier: BOLD, sub_modifier: NONE }, highlight_border_style: Style { fg: Some(Blue), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }, tab_bar: TabBar { enabled: true, active_style: Style { fg: Some(Black), bg: Some(Blue), underline_color: None, add_modifier: BOLD, sub_modifier: NONE }, inactive_style: Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE } }, column_widths: [20, 38, 42], symbols: SymbolsConfig { song: "S", dir: "D", marker: "M" }, progress_bar: ProgressBarConfig { symbols: ["-", ">", " "], track_style: Style { fg: Some(Rgb(30, 32, 48)), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }, elapsed_style: Style { fg: Some(Blue), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }, thumb_style: Style { fg: Some(Blue), bg: Some(Rgb(30, 32, 48)), underline_color: None, add_modifier: NONE, sub_modifier: NONE } }, scrollbar: ScrollbarConfig { symbols: ["│", "█", "▲", "▼"], track_style: Style { fg: Some(White), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }, ends_style: Style { fg: Some(White), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }, thumb_style: Style { fg: Some(Blue), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE } }, show_song_table_header: true, song_table_format: [SongTableColumn { prop: Property { kind: Property(Artist), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: Some(Property { kind: Text("Unknown"), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }) }, label: "Artist", width_percent: 20, alignment: Left }, SongTableColumn { prop: Property { kind: Property(Title), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: Some(Property { kind: Text("Unknown"), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }) }, label: "Title", width_percent: 35, alignment: Left }, SongTableColumn { prop: Property { kind: Property(Album), style: Some(Style { fg: Some(White), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: Some(Property { kind: Text("Unknown Album"), style: Some(Style { fg: Some(White), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }) }, label: "Album", width_percent: 30, alignment: Left }, SongTableColumn { prop: Property { kind: Property(Duration), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: Some(Property { kind: Text("-"), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }) }, label: "Duration", width_percent: 15, alignment: Right }], header: HeaderConfig { rows: [HeaderConfigRow { left: [Property { kind: Text("["), style: Some(Style { fg: Some(Yellow), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: None }, Property { kind: Property(Status(State)), style: Some(Style { fg: Some(Yellow), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: None }, Property { kind: Text("]"), style: Some(Style { fg: Some(Yellow), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: None }], center: [Property { kind: Property(Song(Title)), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: Some(Property { kind: Text("No Song"), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: None }) }], right: [Property { kind: Property(Widget(Volume)), style: Some(Style { fg: Some(Blue), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }] }, HeaderConfigRow { left: [Property { kind: Property(Status(Elapsed)), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }, Property { kind: Text(" / "), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }, Property { kind: Property(Status(Duration)), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }, Property { kind: Text(" ("), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }, Property { kind: Property(Status(Bitrate)), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }, Property { kind: Text(" kbps)"), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }], center: [Property { kind: Property(Song(Artist)), style: Some(Style { fg: Some(Yellow), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: Some(Property { kind: Text("Unknown"), style: Some(Style { fg: Some(Yellow), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }), default: None }) }, Property { kind: Text(" - "), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }, Property { kind: Property(Song(Album)), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: Some(Property { kind: Text("Unknown Album"), style: Some(Style { fg: None, bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }) }], right: [Property { kind: Property(Widget(States { active_style: Style { fg: Some(White), bg: None, underline_color: None, add_modifier: BOLD, sub_modifier: NONE }, separator_style: Style { fg: Some(White), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE } })), style: Some(Style { fg: Some(DarkGray), bg: None, underline_color: None, add_modifier: NONE, sub_modifier: NONE }), default: None }] }] }, default_album_art: [u8; 58599] }, album_art: AlbumArtConfig { method: Kitty, max_size_px: Size { width: 600, height: 600 } }, on_song_change: None, search: Search { case_sensitive: false, mode: Contains, tags: [SearchableTag { label: "Any Tag", value: "any" }, SearchableTag { label: "Artist", value: "artist" }, SearchableTag { label: "Album", value: "album" }, SearchableTag { label: "Album Artist", value: "albumartist" }, SearchableTag { label: "Title", value: "title" }, SearchableTag { label: "Filename", value: "filename" }, SearchableTag { label: "Genre", value: "genre" }] }, tabs: Tabs { names: [TabName("Queue"), TabName("Directories"), TabName("Artists"), TabName("Album Artists"), TabName("Albums"), TabName("Playlists"), TabName("Search")], tabs: {TabName("Album Artists"): Tab { name: TabName("Album Artists"), panes: Pane(Pane { pane: AlbumArtists, geometry: Geometry { x: 0, y: 0, width: 100, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(5) }) }, TabName("Albums"): Tab { name: TabName("Albums"), panes: Pane(Pane { pane: Albums, geometry: Geometry { x: 0, y: 0, width: 100, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(6) }) }, TabName("Directories"): Tab { name: TabName("Directories"), panes: Pane(Pane { pane: Directories, geometry: Geometry { x: 0, y: 0, width: 100, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(3) }) }, TabName("Playlists"): Tab { name: TabName("Playlists"), panes: Pane(Pane { pane: Playlists, geometry: Geometry { x: 0, y: 0, width: 100, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(7) }) }, TabName("Artists"): Tab { name: TabName("Artists"), panes: Pane(Pane { pane: Artists, geometry: Geometry { x: 0, y: 0, width: 100, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(4) }) }, TabName("Search"): Tab { name: TabName("Search"), panes: Pane(Pane { pane: Search, geometry: Geometry { x: 0, y: 0, width: 100, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(8) }) }, TabName("Queue"): Tab { name: TabName("Queue"), panes: Split { direction: Horizontal, panes: [SubPaneWithPosition { size: Percent(40), pane: Pane(Pane { pane: AlbumArt, geometry: Geometry { x: 0, y: 0, width: 40, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: false, id: Id(1) }) }, SubPaneWithPosition { size: Percent(60), pane: Pane(Pane { pane: Queue, geometry: Geometry { x: 40, y: 0, width: 60, height: 100, taken_size_horiz: 0, taken_size_vert: 0 }, border: NONE, focusable: true, id: Id(2) }) }] } }}, active_panes: [Queue, Directories, Artists, AlbumArtists, Albums, Playlists, Search, AlbumArt] } }" 
2024-11-18T15:51:33.234337957Z DEBUG src/mpd/client.rs:139 message="MPD client initiazed" name="idle" addr="IpAndPort("127.0.0.1:6600")" version="0.23.5" handshake="OK MPD 0.23.5" 
2024-11-18T15:51:33.234429178Z INFO  src/main.rs:288 message="Application initialized successfully" 
2024-11-18T15:51:33.235223873Z DEBUG src/ui/panes/album_art.rs:82 message="Searching for album art" file=".zips/Full of Hell- Nothing - When No Birds Sang.zip/Full of Hell, Nothing - When No Birds Sang - 01 Rose Tinted World.flac" 
2024-11-18T15:51:33.242418542Z INFO  src/deps.rs:99 message="Dependency check" name="python-mutagen" installed="false" version="NOT PRESENT" 
2024-11-18T15:51:33.246508553Z DEBUG src/ui/panes/album_art.rs:84 message="Found album art" elapsed="11.285181ms" size="2876495" 
2024-11-18T15:51:33.247992123Z DEBUG src/ui/image/kitty.rs:98 message="New image received" bytes="2876495" 
2024-11-18T15:51:33.248028221Z DEBUG src/ui/image/kitty.rs:152 message="Compressing image data" bytes="2876495" 
2024-11-18T15:51:33.248081320Z DEBUG src/utils.rs:318 message="Resolved terminal size" w="496" h="480" size="WindowSize { rows: 38, columns: 156, width: 1254, height: 573 }" 
2024-11-18T15:51:33.394610951Z DEBUG src/ui/image/kitty.rs:187 message="Image data compression finished" input_bytes="2876495" compressed_bytes="451328" duration="146.576499ms" 
2024-11-18T15:51:33.394843469Z DEBUG src/ui/image/kitty.rs:288 message="Transferring compressed image data" bytes="451328" img_width="480" img_height="480" rows="32" cols="62" 
2024-11-18T15:51:33.414391107Z DEBUG src/ui/image/kitty.rs:306 message="Transfer finished" duration="19.548069ms" 

Hi,
that is because konsole has only a partial support of kitty's image protocol. It is missing support for unicode placeholders to be more specific. These placeholders are what allows for easy integration of the album art into the component flow of rmpc's tui.

Konsole also has support for sixel and iterm2 protocols which you can enable in the config, but it has issues clearing the screen when the image is supposed to hide. That might be an issue on rmpc's side, but other terminals are clearing properly...

Lastly, there is ueberzugpp which should work fine, but it has its own set of issues with it being an external process and a separate layer window on wayland.

To sum it up, sadly, terminal graphics support is unfortunately quite a mess. Kitty and terminals that support it fully (only kitty and ghostty at the moment as far as I know) are your best bet for rmpc.

ah ok, that all makes a lot of sense, thanks for the reply :) I'll close this then since there's nothing to do here.

FLchs commented

fyi rmpc works wonderfully well with the Alacrity fork with sixel support : https://github.com/ayosec/alacritty