Is your feature request related to a problem? Please describe.
Lua plugins can register full-screen custom views, read synchronized lyrics, and react to playback, but API v5 custom screens can only render vertically stacked paragraph, list, and gauge widgets. Plugins cannot reuse Spotatui's already-downloaded in-memory cover art or place widgets side by side.
This prevents plugins from building customizable now-playing screens such as cover art beside synchronized lyrics. The current alternatives are maintaining a native fork, downloading the same image again and writing terminal graphics commands directly to /dev/tty, or using a text-only approximation.
Describe the solution you'd like
Expose Spotatui-managed cover art as a plugin screen widget, backed by the existing in-memory CoverArt state rather than another network download. For example:
{
type = "cover_art",
source = "current",
fit = "contain",
height = 20,
}
For full customization, also support composable row/column containers (or an equivalent grid API), for example:
{
type = "row",
children = {
{ type = "cover_art", source = "current", width_percent = 40 },
{ type = "paragraph", lines = lyrics, width_percent = 60 },
},
}
The app should retain ownership of downloading, decoding, terminal-protocol selection, resizing, placement, and cleanup. Plugins would only declare where the current image should appear.
This could be introduced in a new scripting API version while keeping the current widget format compatible.
Describe alternatives you've considered
- A built-in combined cover-art/lyrics view. This solves one layout but does not enable broader plugin customization.
- A plugin that independently downloads artwork and writes Kitty graphics protocol escapes to
/dev/tty. This duplicates downloads and can conflict with Ratatui rendering and cleanup.
- A text/half-block approximation, which loses the quality of the existing image renderer.
- Maintaining a custom native fork, which complicates normal Homebrew updates.
Additional context
A motivating plugin would combine current cover art with spotatui.get_lyrics() in a responsive now-playing screen. More generally, image widgets could support dashboards, album details, notifications, and source-specific views without requiring each idea to become a built-in route.
Spotatui already stores separate playbar and fullscreen image protocol state, so a plugin-specific render state may fit the existing ownership model.
thanks for taking a look, any feedback is appreciated!
Is your feature request related to a problem? Please describe.
Lua plugins can register full-screen custom views, read synchronized lyrics, and react to playback, but API v5 custom screens can only render vertically stacked
paragraph,list, andgaugewidgets. Plugins cannot reuse Spotatui's already-downloaded in-memory cover art or place widgets side by side.This prevents plugins from building customizable now-playing screens such as cover art beside synchronized lyrics. The current alternatives are maintaining a native fork, downloading the same image again and writing terminal graphics commands directly to
/dev/tty, or using a text-only approximation.Describe the solution you'd like
Expose Spotatui-managed cover art as a plugin screen widget, backed by the existing in-memory
CoverArtstate rather than another network download. For example:{ type = "cover_art", source = "current", fit = "contain", height = 20, }For full customization, also support composable row/column containers (or an equivalent grid API), for example:
{ type = "row", children = { { type = "cover_art", source = "current", width_percent = 40 }, { type = "paragraph", lines = lyrics, width_percent = 60 }, }, }The app should retain ownership of downloading, decoding, terminal-protocol selection, resizing, placement, and cleanup. Plugins would only declare where the current image should appear.
This could be introduced in a new scripting API version while keeping the current widget format compatible.
Describe alternatives you've considered
/dev/tty. This duplicates downloads and can conflict with Ratatui rendering and cleanup.Additional context
A motivating plugin would combine current cover art with
spotatui.get_lyrics()in a responsive now-playing screen. More generally, image widgets could support dashboards, album details, notifications, and source-specific views without requiring each idea to become a built-in route.Spotatui already stores separate playbar and fullscreen image protocol state, so a plugin-specific render state may fit the existing ownership model.
thanks for taking a look, any feedback is appreciated!