plex-tui 0.4.4__tar.gz → 0.4.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {plex_tui-0.4.4 → plex_tui-0.4.7}/CHANGELOG.md +8 -0
  2. {plex_tui-0.4.4 → plex_tui-0.4.7}/PKG-INFO +87 -44
  3. {plex_tui-0.4.4 → plex_tui-0.4.7}/README.md +86 -43
  4. {plex_tui-0.4.4 → plex_tui-0.4.7}/ROADMAP.md +7 -4
  5. plex_tui-0.4.7/docs/assets/collection-categories.png +0 -0
  6. plex_tui-0.4.7/docs/assets/collection-recommended.png +0 -0
  7. plex_tui-0.4.7/docs/assets/grid-tv-shows.png +0 -0
  8. plex_tui-0.4.7/docs/assets/grid-view.png +0 -0
  9. plex_tui-0.4.7/docs/assets/list-view.png +0 -0
  10. plex_tui-0.4.7/docs/collection-artwork-design.md +73 -0
  11. {plex_tui-0.4.4 → plex_tui-0.4.7}/docs/plex-integration-research.md +2 -1
  12. {plex_tui-0.4.4 → plex_tui-0.4.7}/packaging/aur/.SRCINFO +3 -3
  13. {plex_tui-0.4.4 → plex_tui-0.4.7}/packaging/aur/PKGBUILD +2 -2
  14. {plex_tui-0.4.4 → plex_tui-0.4.7}/pyproject.toml +1 -1
  15. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/__init__.py +1 -1
  16. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/app.py +455 -12
  17. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/plex_service.py +15 -0
  18. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_app_helpers.py +65 -8
  19. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_app_navigation.py +126 -1
  20. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_plex_service.py +57 -0
  21. plex_tui-0.4.4/docs/assets/grid-view.png +0 -0
  22. plex_tui-0.4.4/docs/assets/list-view.png +0 -0
  23. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/aur.yml +0 -0
  24. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/bump.yml +0 -0
  25. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/ci.yml +0 -0
  26. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/post-release-aur.yml +0 -0
  27. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/post-release-homebrew.yml +0 -0
  28. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/publish-aur.yml +0 -0
  29. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/publish-pypi.yml +0 -0
  30. {plex_tui-0.4.4 → plex_tui-0.4.7}/.github/workflows/publish-testpypi.yml +0 -0
  31. {plex_tui-0.4.4 → plex_tui-0.4.7}/.gitignore +0 -0
  32. {plex_tui-0.4.4 → plex_tui-0.4.7}/AGENTS.md +0 -0
  33. {plex_tui-0.4.4 → plex_tui-0.4.7}/LICENSE +0 -0
  34. {plex_tui-0.4.4 → plex_tui-0.4.7}/Makefile +0 -0
  35. {plex_tui-0.4.4 → plex_tui-0.4.7}/PACKAGING.md +0 -0
  36. {plex_tui-0.4.4 → plex_tui-0.4.7}/RELEASE.md +0 -0
  37. {plex_tui-0.4.4 → plex_tui-0.4.7}/config.example.toml +0 -0
  38. {plex_tui-0.4.4 → plex_tui-0.4.7}/docs/homebrew-install-time.md +0 -0
  39. {plex_tui-0.4.4 → plex_tui-0.4.7}/packaging/aur/README.md +0 -0
  40. {plex_tui-0.4.4 → plex_tui-0.4.7}/packaging/homebrew/README.md +0 -0
  41. {plex_tui-0.4.4 → plex_tui-0.4.7}/scripts/check_release.py +0 -0
  42. {plex_tui-0.4.4 → plex_tui-0.4.7}/scripts/measure_homebrew_install.py +0 -0
  43. {plex_tui-0.4.4 → plex_tui-0.4.7}/scripts/prepare_homebrew_bottle_assets.py +0 -0
  44. {plex_tui-0.4.4 → plex_tui-0.4.7}/scripts/stage_release.py +0 -0
  45. {plex_tui-0.4.4 → plex_tui-0.4.7}/scripts/update_aur_package.py +0 -0
  46. {plex_tui-0.4.4 → plex_tui-0.4.7}/scripts/update_homebrew_formula.py +0 -0
  47. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/__main__.py +0 -0
  48. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/artwork.py +0 -0
  49. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/auth.py +0 -0
  50. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/config.py +0 -0
  51. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/models.py +0 -0
  52. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/player.py +0 -0
  53. {plex_tui-0.4.4 → plex_tui-0.4.7}/src/plextui/smoke.py +0 -0
  54. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_artwork.py +0 -0
  55. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_auth.py +0 -0
  56. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_cli.py +0 -0
  57. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_config.py +0 -0
  58. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_homebrew_bottle_assets.py +0 -0
  59. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_player.py +0 -0
  60. {plex_tui-0.4.4 → plex_tui-0.4.7}/tests/test_release_checks.py +0 -0
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.4.7 - 2026-06-19
6
+
7
+ - Added playlist management for creating playlists from selected media, adding
8
+ selected media to existing playlists, and removing items from playlist views.
9
+ - Added intentional collection-card artwork for hub, playlist, category, and
10
+ other container grid cards, with geometric glyphs and roomier spacing for
11
+ all-container grids such as Recommended.
12
+
5
13
  ## 0.4.4 - 2026-06-18
6
14
 
7
15
  - Added a keyboard action to mark the selected playable Plex item watched or
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plex-tui
3
- Version: 0.4.4
3
+ Version: 0.4.7
4
4
  Summary: A small standalone Plex terminal UI.
5
5
  Project-URL: Homepage, https://github.com/so1omon563/plex-tui
6
6
  Project-URL: Issues, https://github.com/so1omon563/plex-tui/issues
@@ -44,23 +44,86 @@ Description-Content-Type: text/markdown
44
44
  [![Homebrew](https://shieldcn.dev/badge/Homebrew-tap-blue.png?logo=homebrew)](https://github.com/so1omon563/homebrew-plex-tui)
45
45
  [![License](https://shieldcn.dev/github/so1omon563/plex-tui/license.png)](LICENSE)
46
46
 
47
- A standalone Python/Textual terminal UI for browsing Plex and launching playback
48
- through `mpv`.
47
+ A terminal Plex client built for watching media, not managing servers.
49
48
 
50
- plex-tui is an early release. It supports Plex login, server selection, paged
51
- library browsing, search, list/grid views, stream preferences, terminal poster
52
- artwork, and playback progress reporting.
49
+ There are plenty of tools for administering Plex from the command line.
50
+ Surprisingly few are built for sitting down, browsing your library, and watching
51
+ something without leaving the terminal.
52
+
53
+ plex-tui is a standalone Textual application that brings Plex browsing, poster
54
+ artwork, collection cards, playlists, search, stream preferences, and `mpv`
55
+ playback into a keyboard-first terminal interface.
56
+
57
+ Built for people who spend their day in a terminal and would rather stay there.
58
+
59
+ ## Why?
60
+
61
+ Most terminal Plex tools are built for administration, automation, or quick
62
+ status checks. Those are useful jobs, but they are not the same as browsing a
63
+ library, comparing options, and choosing something to watch.
64
+
65
+ Meanwhile, terminal applications got better. Tools like lazygit, gitui, btop,
66
+ and modern Textual apps raised the bar for what a TUI can be: rich layouts,
67
+ keyboard-first workflows, responsive interfaces, and even artwork are no longer
68
+ unusual.
69
+
70
+ plex-tui exists because browsing Plex and choosing something to watch deserves
71
+ that same kind of terminal-native experience.
72
+
73
+ ## Project Status
74
+
75
+ plex-tui is still early, but already usable. Login, server selection, library
76
+ browsing, search, playlists, artwork, stream preferences, and playback are
77
+ working today. Expect rough edges, but expect progress too.
53
78
 
54
79
  ## Screenshots
55
80
 
56
- ### Grid view
81
+ ### Movie grid
57
82
 
58
83
  ![plex-tui grid view](docs/assets/grid-view.png)
59
84
 
85
+ ### TV show grid
86
+
87
+ ![plex-tui TV show grid view](docs/assets/grid-tv-shows.png)
88
+
89
+ ### Collection cards
90
+
91
+ ![plex-tui Recommended collection cards](docs/assets/collection-recommended.png)
92
+
93
+ ![plex-tui Categories collection cards](docs/assets/collection-categories.png)
94
+
60
95
  ### List view
61
96
 
62
97
  ![plex-tui list view](docs/assets/list-view.png)
63
98
 
99
+ ## Features
100
+
101
+ - Plex PIN login and server selection.
102
+ - Paged library browsing with automatic loading near the end of loaded items.
103
+ - Library submenu entrypoints for all items, Recommended, Collections,
104
+ Playlists, and Categories. Library rows open all items by default; Space
105
+ opens the browse-mode menu, and Settings can swap the primary and alternate
106
+ actions.
107
+ - Current-library search and bounded global search.
108
+ - List view plus configurable-density grid view with terminal poster artwork,
109
+ missing-artwork placeholders, and intentional glyph cards for collections and
110
+ hubs.
111
+ - External subtitle support and direct playback for embedded PGS/VOBSUB tracks.
112
+ - Audio and subtitle pickers with saved language preferences.
113
+ - Separate play-from-start and resume actions with Plex progress reporting.
114
+ - Watched/unwatched toggling for selected playable Plex items.
115
+ - Continue Watching episode rows show their show, season, and episode context,
116
+ and items can be removed from the Continue Watching view.
117
+ - Playlist management for creating playlists from selected media, adding media
118
+ to existing playlists, and removing items while browsing a playlist.
119
+ - Movie editions appear as distinct variants when Plex reports multiple
120
+ editions for a selected movie.
121
+ - Settings screen for stream preferences, playback mode and transcode quality,
122
+ artwork modes, grid density, page size, auto-load threshold, grid artwork
123
+ prefetching, media view, library Enter behavior, and `mpv` window size.
124
+ - App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
125
+ browsing settings.
126
+
64
127
  ## Requirements
65
128
 
66
129
  - Python 3.11 or newer
@@ -95,9 +158,9 @@ plex-tui
95
158
  ```
96
159
 
97
160
  This is the recommended cross-platform install path. It keeps Python
98
- dependencies isolated, but you still need to install `mpv` separately.
99
- If `pipx` is not installed, install it with your platform package manager first
100
- or follow the pipx installation guide.
161
+ dependencies isolated, but you still need to install `mpv` separately. If
162
+ `pipx` is not installed, install it with your platform package manager first or
163
+ follow the pipx installation guide.
101
164
 
102
165
  ### Homebrew
103
166
 
@@ -108,14 +171,11 @@ brew install plex-tui
108
171
  plex-tui --smoke
109
172
  ```
110
173
 
111
- The Homebrew formula installs `mpv` automatically. Apple Silicon macOS installs
112
- use prebuilt bottles when available so Homebrew can pour the app virtualenv
113
- instead of rebuilding native Python dependencies such as `pillow` from source.
114
- Intel macOS installs still use Homebrew's source-build path while that platform
115
- continues to be supported.
116
- Homebrew 6 requires non-official taps to be trusted before Homebrew loads
117
- formulae from them. `plex-tui` only depends on formulae from Homebrew/core, so no
118
- additional tap trust is required for its dependencies.
174
+ The Homebrew formula installs `mpv` automatically. Apple Silicon macOS uses
175
+ prebuilt bottles when available, while Intel macOS still uses Homebrew's
176
+ source-build path. Homebrew 6 requires non-official taps to be trusted before
177
+ loading formulae from them; `plex-tui` only depends on formulae from
178
+ Homebrew/core, so no additional tap trust is required for dependencies.
119
179
 
120
180
  ### Arch Linux
121
181
 
@@ -131,7 +191,7 @@ example.
131
191
 
132
192
  ```bash
133
193
  pipx install "git+https://github.com/so1omon563/plex-tui.git"
134
- pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.2.1"
194
+ pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.4.4"
135
195
  ```
136
196
 
137
197
  Use this path for testing `main` before a tagged/PyPI release.
@@ -237,35 +297,12 @@ matching track.
237
297
  | `p` | Play selected item from the beginning |
238
298
  | `r` | Resume selected item from the saved Plex position |
239
299
  | `w` | Mark selected item watched / unwatched |
240
- | `backspace` / `delete` | Remove selected item from Continue Watching |
300
+ | `P` | Add selected playable item to a playlist |
301
+ | `backspace` / `delete` | Remove selected item from Continue Watching or a playlist |
241
302
  | `a` / `s` | Choose audio / subtitle preference |
242
303
  | `A` / `S` | Clear audio preference / cycle subtitle mode |
243
304
  | `x` | Stop launched `mpv` |
244
305
 
245
- ## Features
246
-
247
- - Plex PIN login and server selection.
248
- - Paged library browsing with automatic loading near the end of loaded items.
249
- - Library submenu entrypoints for all items, Recommended, Collections,
250
- Playlists, and Categories. Library rows open all items by default; Space
251
- opens the browse-mode menu, and Settings can swap the primary and alternate
252
- actions.
253
- - Current-library search and bounded global search.
254
- - List view plus configurable-density grid view with terminal poster artwork.
255
- - External subtitle support and direct playback for embedded PGS/VOBSUB tracks.
256
- - Audio and subtitle pickers with saved language preferences.
257
- - Separate play-from-start and resume actions with Plex progress reporting.
258
- - Watched/unwatched toggling for selected playable Plex items.
259
- - Continue Watching episode rows show their show, season, and episode context,
260
- and items can be removed from the Continue Watching view.
261
- - Movie editions appear as distinct variants when Plex reports multiple
262
- editions for a selected movie.
263
- - Settings screen for stream preferences, playback mode and transcode quality,
264
- artwork modes, grid density, page size, auto-load threshold, grid artwork
265
- prefetching, media view, library Enter behavior, and `mpv` window size.
266
- - App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
267
- browsing settings.
268
-
269
306
  ## Artwork
270
307
 
271
308
  Poster artwork renders as portable colored block art by default, so it works in
@@ -277,6 +314,12 @@ charge of layout and redraws while the terminal paints the poster inside those
277
314
  cells. Outside detected Kitty-compatible terminals, `auto` falls back to block
278
315
  art; `plex-tui --diagnostics` reports the active renderer status.
279
316
 
317
+ Cards that represent collections, playlists, categories, hubs, or query shelves
318
+ use geometric glyph artwork instead of pretending to be missing posters. Rows
319
+ made entirely of those cards use roomier navigation-grid spacing. See
320
+ `docs/collection-artwork-design.md` for the design notes behind that visual
321
+ language.
322
+
280
323
  Grid view prefetches artwork for the visible page immediately and, by default,
281
324
  prepares three pages ahead in the background. `grid_prefetch_pages` can be set
282
325
  from `0` to `5`; use `0` to fetch only the visible page on slower systems.
@@ -7,23 +7,86 @@
7
7
  [![Homebrew](https://shieldcn.dev/badge/Homebrew-tap-blue.png?logo=homebrew)](https://github.com/so1omon563/homebrew-plex-tui)
8
8
  [![License](https://shieldcn.dev/github/so1omon563/plex-tui/license.png)](LICENSE)
9
9
 
10
- A standalone Python/Textual terminal UI for browsing Plex and launching playback
11
- through `mpv`.
10
+ A terminal Plex client built for watching media, not managing servers.
12
11
 
13
- plex-tui is an early release. It supports Plex login, server selection, paged
14
- library browsing, search, list/grid views, stream preferences, terminal poster
15
- artwork, and playback progress reporting.
12
+ There are plenty of tools for administering Plex from the command line.
13
+ Surprisingly few are built for sitting down, browsing your library, and watching
14
+ something without leaving the terminal.
15
+
16
+ plex-tui is a standalone Textual application that brings Plex browsing, poster
17
+ artwork, collection cards, playlists, search, stream preferences, and `mpv`
18
+ playback into a keyboard-first terminal interface.
19
+
20
+ Built for people who spend their day in a terminal and would rather stay there.
21
+
22
+ ## Why?
23
+
24
+ Most terminal Plex tools are built for administration, automation, or quick
25
+ status checks. Those are useful jobs, but they are not the same as browsing a
26
+ library, comparing options, and choosing something to watch.
27
+
28
+ Meanwhile, terminal applications got better. Tools like lazygit, gitui, btop,
29
+ and modern Textual apps raised the bar for what a TUI can be: rich layouts,
30
+ keyboard-first workflows, responsive interfaces, and even artwork are no longer
31
+ unusual.
32
+
33
+ plex-tui exists because browsing Plex and choosing something to watch deserves
34
+ that same kind of terminal-native experience.
35
+
36
+ ## Project Status
37
+
38
+ plex-tui is still early, but already usable. Login, server selection, library
39
+ browsing, search, playlists, artwork, stream preferences, and playback are
40
+ working today. Expect rough edges, but expect progress too.
16
41
 
17
42
  ## Screenshots
18
43
 
19
- ### Grid view
44
+ ### Movie grid
20
45
 
21
46
  ![plex-tui grid view](docs/assets/grid-view.png)
22
47
 
48
+ ### TV show grid
49
+
50
+ ![plex-tui TV show grid view](docs/assets/grid-tv-shows.png)
51
+
52
+ ### Collection cards
53
+
54
+ ![plex-tui Recommended collection cards](docs/assets/collection-recommended.png)
55
+
56
+ ![plex-tui Categories collection cards](docs/assets/collection-categories.png)
57
+
23
58
  ### List view
24
59
 
25
60
  ![plex-tui list view](docs/assets/list-view.png)
26
61
 
62
+ ## Features
63
+
64
+ - Plex PIN login and server selection.
65
+ - Paged library browsing with automatic loading near the end of loaded items.
66
+ - Library submenu entrypoints for all items, Recommended, Collections,
67
+ Playlists, and Categories. Library rows open all items by default; Space
68
+ opens the browse-mode menu, and Settings can swap the primary and alternate
69
+ actions.
70
+ - Current-library search and bounded global search.
71
+ - List view plus configurable-density grid view with terminal poster artwork,
72
+ missing-artwork placeholders, and intentional glyph cards for collections and
73
+ hubs.
74
+ - External subtitle support and direct playback for embedded PGS/VOBSUB tracks.
75
+ - Audio and subtitle pickers with saved language preferences.
76
+ - Separate play-from-start and resume actions with Plex progress reporting.
77
+ - Watched/unwatched toggling for selected playable Plex items.
78
+ - Continue Watching episode rows show their show, season, and episode context,
79
+ and items can be removed from the Continue Watching view.
80
+ - Playlist management for creating playlists from selected media, adding media
81
+ to existing playlists, and removing items while browsing a playlist.
82
+ - Movie editions appear as distinct variants when Plex reports multiple
83
+ editions for a selected movie.
84
+ - Settings screen for stream preferences, playback mode and transcode quality,
85
+ artwork modes, grid density, page size, auto-load threshold, grid artwork
86
+ prefetching, media view, library Enter behavior, and `mpv` window size.
87
+ - App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
88
+ browsing settings.
89
+
27
90
  ## Requirements
28
91
 
29
92
  - Python 3.11 or newer
@@ -58,9 +121,9 @@ plex-tui
58
121
  ```
59
122
 
60
123
  This is the recommended cross-platform install path. It keeps Python
61
- dependencies isolated, but you still need to install `mpv` separately.
62
- If `pipx` is not installed, install it with your platform package manager first
63
- or follow the pipx installation guide.
124
+ dependencies isolated, but you still need to install `mpv` separately. If
125
+ `pipx` is not installed, install it with your platform package manager first or
126
+ follow the pipx installation guide.
64
127
 
65
128
  ### Homebrew
66
129
 
@@ -71,14 +134,11 @@ brew install plex-tui
71
134
  plex-tui --smoke
72
135
  ```
73
136
 
74
- The Homebrew formula installs `mpv` automatically. Apple Silicon macOS installs
75
- use prebuilt bottles when available so Homebrew can pour the app virtualenv
76
- instead of rebuilding native Python dependencies such as `pillow` from source.
77
- Intel macOS installs still use Homebrew's source-build path while that platform
78
- continues to be supported.
79
- Homebrew 6 requires non-official taps to be trusted before Homebrew loads
80
- formulae from them. `plex-tui` only depends on formulae from Homebrew/core, so no
81
- additional tap trust is required for its dependencies.
137
+ The Homebrew formula installs `mpv` automatically. Apple Silicon macOS uses
138
+ prebuilt bottles when available, while Intel macOS still uses Homebrew's
139
+ source-build path. Homebrew 6 requires non-official taps to be trusted before
140
+ loading formulae from them; `plex-tui` only depends on formulae from
141
+ Homebrew/core, so no additional tap trust is required for dependencies.
82
142
 
83
143
  ### Arch Linux
84
144
 
@@ -94,7 +154,7 @@ example.
94
154
 
95
155
  ```bash
96
156
  pipx install "git+https://github.com/so1omon563/plex-tui.git"
97
- pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.2.1"
157
+ pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.4.4"
98
158
  ```
99
159
 
100
160
  Use this path for testing `main` before a tagged/PyPI release.
@@ -200,35 +260,12 @@ matching track.
200
260
  | `p` | Play selected item from the beginning |
201
261
  | `r` | Resume selected item from the saved Plex position |
202
262
  | `w` | Mark selected item watched / unwatched |
203
- | `backspace` / `delete` | Remove selected item from Continue Watching |
263
+ | `P` | Add selected playable item to a playlist |
264
+ | `backspace` / `delete` | Remove selected item from Continue Watching or a playlist |
204
265
  | `a` / `s` | Choose audio / subtitle preference |
205
266
  | `A` / `S` | Clear audio preference / cycle subtitle mode |
206
267
  | `x` | Stop launched `mpv` |
207
268
 
208
- ## Features
209
-
210
- - Plex PIN login and server selection.
211
- - Paged library browsing with automatic loading near the end of loaded items.
212
- - Library submenu entrypoints for all items, Recommended, Collections,
213
- Playlists, and Categories. Library rows open all items by default; Space
214
- opens the browse-mode menu, and Settings can swap the primary and alternate
215
- actions.
216
- - Current-library search and bounded global search.
217
- - List view plus configurable-density grid view with terminal poster artwork.
218
- - External subtitle support and direct playback for embedded PGS/VOBSUB tracks.
219
- - Audio and subtitle pickers with saved language preferences.
220
- - Separate play-from-start and resume actions with Plex progress reporting.
221
- - Watched/unwatched toggling for selected playable Plex items.
222
- - Continue Watching episode rows show their show, season, and episode context,
223
- and items can be removed from the Continue Watching view.
224
- - Movie editions appear as distinct variants when Plex reports multiple
225
- editions for a selected movie.
226
- - Settings screen for stream preferences, playback mode and transcode quality,
227
- artwork modes, grid density, page size, auto-load threshold, grid artwork
228
- prefetching, media view, library Enter behavior, and `mpv` window size.
229
- - App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
230
- browsing settings.
231
-
232
269
  ## Artwork
233
270
 
234
271
  Poster artwork renders as portable colored block art by default, so it works in
@@ -240,6 +277,12 @@ charge of layout and redraws while the terminal paints the poster inside those
240
277
  cells. Outside detected Kitty-compatible terminals, `auto` falls back to block
241
278
  art; `plex-tui --diagnostics` reports the active renderer status.
242
279
 
280
+ Cards that represent collections, playlists, categories, hubs, or query shelves
281
+ use geometric glyph artwork instead of pretending to be missing posters. Rows
282
+ made entirely of those cards use roomier navigation-grid spacing. See
283
+ `docs/collection-artwork-design.md` for the design notes behind that visual
284
+ language.
285
+
243
286
  Grid view prefetches artwork for the visible page immediately and, by default,
244
287
  prepares three pages ahead in the background. `grid_prefetch_pages` can be set
245
288
  from `0` to `5`; use `0` to fetch only the visible page on slower systems.
@@ -2,8 +2,9 @@
2
2
 
3
3
  ## App UX
4
4
 
5
- - Continue refining grid view presentation after the initial card/detail
6
- balance pass, especially against real terminal themes and wide/narrow panes.
5
+ - Continue refining grid view presentation after the collection-card artwork
6
+ pass, especially against real terminal themes, wide/narrow panes, and
7
+ screenshot refreshes.
7
8
  - Continue tuning focus, row markers, and selection affordances based on real
8
9
  terminal themes. Status hints should keep a compact context prefix such as
9
10
  `Media:`, `Grid:`, or `Settings:` so the active pane is clear at a glance.
@@ -68,8 +69,10 @@
68
69
  - In-playback audio/subtitle switching uses mpv IPC when the active stream
69
70
  exposes matching tracks; Plex-transcoded streams may still require relaunching
70
71
  with the saved preference.
71
- - Design playlist management before implementation: adding/removing media from
72
- playlists and creating playlists are intentionally out of PR #80 scope.
72
+ - Playlist management can create playlists from selected media, add selected
73
+ media to existing playlists, and remove items while browsing a playlist.
74
+ Continue design passes for bulk playlist actions and richer playlist editing
75
+ if real-library use shows those workflows are needed.
73
76
  - Later design passes: profile switching with auto sign-in.
74
77
 
75
78
  ## Technical Follow-Up
Binary file
Binary file
@@ -0,0 +1,73 @@
1
+ # Collection Artwork Design
2
+
3
+ `plex-tui` uses real Plex artwork whenever Plex provides media posters,
4
+ episode stills, season art, or collection art. The collection artwork system is
5
+ for a different state: browse cards that represent organization instead of
6
+ media.
7
+
8
+ ## Visual Language
9
+
10
+ Collection cards should feel like wayfinding and information architecture, not
11
+ fake posters. The first version uses terminal-native geometric glyphs on muted
12
+ blueprint-style panels:
13
+
14
+ - poster or still: actual media artwork;
15
+ - missing poster: quiet missing-artwork block;
16
+ - collection card: intentional glyph for a hub, playlist, category, or query.
17
+
18
+ The glyph is the dominant artwork element. A faint construction layer of corner
19
+ marks, guide dots, and center lines sits behind the glyph so the card feels like
20
+ part of a deliberate wayfinding system instead of an empty color field. Title,
21
+ type, and action remain in the normal grid-card text below the artwork so the
22
+ visual stays calm at compact terminal sizes.
23
+
24
+ ## Glyph System
25
+
26
+ Glyphs are selected from stable media metadata first, then title hints when Plex
27
+ only reports a generic hub object.
28
+
29
+ - Continue Watching: play/progress mark.
30
+ - Recently Added: plus/cross mark.
31
+ - Recently Released: burst mark.
32
+ - Recommended: connected-node constellation.
33
+ - Trending and Top shelves: upward path.
34
+ - Unwatched shelves: hollow circles.
35
+ - Actor shelves: simplified person.
36
+ - Genre and category cards: one shared family with title-derived motif
37
+ variations, such as angled marks for action, circles for comedy, diamonds for
38
+ horror, and grid marks for documentary.
39
+ - Playlist cards: layered panel.
40
+ - Collection cards: repeated diamond mark.
41
+ - Generic hubs: abstract geometric mark.
42
+
43
+ The system is intentionally small and text-based so it remains legible in
44
+ compact grids, plain terminals, Kitty/Ghostty image modes, and low-resolution
45
+ remote sessions. New glyphs should use the same line weight, centered geometry,
46
+ and blueprint layer so they read as symbols from one fictional design system,
47
+ not unrelated icons.
48
+
49
+ ## Grid Behavior
50
+
51
+ Rows made entirely of collection cards use a navigation-grid treatment instead
52
+ of poster-grid treatment. They are left aligned and separated by a blank row so
53
+ views like Recommended read as deliberate browse choices instead of a compact
54
+ cluster of failed posters.
55
+
56
+ Mixed rows or playable-media rows continue to use the centered poster-grid
57
+ presentation.
58
+
59
+ ## Screenshots
60
+
61
+ Current examples live in the README screenshot set:
62
+
63
+ - `docs/assets/collection-recommended.png`
64
+ - `docs/assets/collection-categories.png`
65
+ - `docs/assets/grid-view.png`
66
+ - `docs/assets/grid-tv-shows.png`
67
+ - `docs/assets/list-view.png`
68
+
69
+ ## Expansion Notes
70
+
71
+ Future iterations can reuse these glyphs in sidebar navigation, filters,
72
+ badges, and search result indicators. New glyphs should stay geometric,
73
+ low-detail, and readable at compact density before they are added.
@@ -56,10 +56,11 @@ Already covered:
56
56
  - Direct playback paths where possible, with transcode fallback through PlexAPI.
57
57
  - Explicit video quality/direct/transcode preference in Settings and playback.
58
58
  - Details pane metadata, audio/subtitle stream display, and playback readiness.
59
+ - Playlist management for creating playlists from selected media, adding media
60
+ to existing playlists, and removing items from playlist views.
59
61
 
60
62
  Not yet covered:
61
63
 
62
- - User/profile switching and auto sign-in.
63
64
  - Fuller profile switching and auto sign-in.
64
65
 
65
66
  ## Recommended Sequence
@@ -1,6 +1,6 @@
1
1
  pkgbase = plex-tui
2
2
  pkgdesc = Standalone Plex terminal UI with mpv playback
3
- pkgver = 0.4.3
3
+ pkgver = 0.4.4
4
4
  pkgrel = 1
5
5
  url = https://github.com/so1omon563/plex-tui
6
6
  arch = any
@@ -16,7 +16,7 @@ pkgbase = plex-tui
16
16
  depends = python-plexapi
17
17
  depends = python-rich
18
18
  depends = python-textual
19
- source = plex-tui-0.4.3.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.4.3.tar.gz
20
- sha256sums = 3e29f88b3a0822905c0a1940916a78d91d9e7c658231de2a6ebabe85d3897688
19
+ source = plex-tui-0.4.4.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.4.4.tar.gz
20
+ sha256sums = 77cddf1fa9117ae4f9030767968783e88f49300d9fc8bb01fbb5ded80993db7b
21
21
 
22
22
  pkgname = plex-tui
@@ -1,6 +1,6 @@
1
1
  # Maintainer: so1omon
2
2
  pkgname=plex-tui
3
- pkgver=0.4.3
3
+ pkgver=0.4.4
4
4
  pkgrel=1
5
5
  pkgdesc="Standalone Plex terminal UI with mpv playback"
6
6
  arch=("any")
@@ -22,7 +22,7 @@ makedepends=(
22
22
  "python-wheel"
23
23
  )
24
24
  source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
25
- sha256sums=("3e29f88b3a0822905c0a1940916a78d91d9e7c658231de2a6ebabe85d3897688")
25
+ sha256sums=("77cddf1fa9117ae4f9030767968783e88f49300d9fc8bb01fbb5ded80993db7b")
26
26
 
27
27
  build() {
28
28
  cd "$pkgname-$pkgver"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "plex-tui"
7
- version = "0.4.4"
7
+ version = "0.4.7"
8
8
  description = "A small standalone Plex terminal UI."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,3 +1,3 @@
1
1
  """Plex TUI prototype."""
2
2
 
3
- __version__ = "0.4.4"
3
+ __version__ = "0.4.7"