plex-tui 0.2.0__tar.gz → 0.2.1__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 (44) hide show
  1. plex_tui-0.2.1/.github/workflows/aur.yml +49 -0
  2. plex_tui-0.2.1/.github/workflows/ci.yml +33 -0
  3. plex_tui-0.2.1/.github/workflows/publish-pypi.yml +45 -0
  4. plex_tui-0.2.1/.github/workflows/publish-testpypi.yml +38 -0
  5. {plex_tui-0.2.0 → plex_tui-0.2.1}/.gitignore +1 -0
  6. {plex_tui-0.2.0 → plex_tui-0.2.1}/AGENTS.md +5 -0
  7. {plex_tui-0.2.0 → plex_tui-0.2.1}/CHANGELOG.md +24 -0
  8. plex_tui-0.2.1/PACKAGING.md +102 -0
  9. {plex_tui-0.2.0 → plex_tui-0.2.1}/PKG-INFO +73 -18
  10. {plex_tui-0.2.0 → plex_tui-0.2.1}/README.md +72 -17
  11. plex_tui-0.2.1/RELEASE.md +126 -0
  12. plex_tui-0.2.1/ROADMAP.md +32 -0
  13. {plex_tui-0.2.0 → plex_tui-0.2.1}/config.example.toml +3 -0
  14. plex_tui-0.2.1/packaging/aur/.SRCINFO +23 -0
  15. plex_tui-0.2.1/packaging/aur/PKGBUILD +43 -0
  16. plex_tui-0.2.1/packaging/aur/README.md +41 -0
  17. plex_tui-0.2.1/packaging/homebrew/README.md +33 -0
  18. {plex_tui-0.2.0 → plex_tui-0.2.1}/pyproject.toml +1 -1
  19. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/__init__.py +1 -1
  20. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/app.py +820 -105
  21. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/artwork.py +26 -8
  22. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/auth.py +1 -0
  23. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/config.py +14 -0
  24. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_app_helpers.py +155 -5
  25. plex_tui-0.2.1/tests/test_app_navigation.py +1434 -0
  26. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_artwork.py +22 -1
  27. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_config.py +15 -1
  28. plex_tui-0.2.0/PACKAGING.md +0 -108
  29. plex_tui-0.2.0/RELEASE.md +0 -67
  30. plex_tui-0.2.0/ROADMAP.md +0 -34
  31. plex_tui-0.2.0/tests/test_app_navigation.py +0 -609
  32. {plex_tui-0.2.0 → plex_tui-0.2.1}/LICENSE +0 -0
  33. {plex_tui-0.2.0 → plex_tui-0.2.1}/Makefile +0 -0
  34. {plex_tui-0.2.0 → plex_tui-0.2.1}/docs/assets/grid-view.png +0 -0
  35. {plex_tui-0.2.0 → plex_tui-0.2.1}/docs/assets/list-view.png +0 -0
  36. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/__main__.py +0 -0
  37. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/models.py +0 -0
  38. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/player.py +0 -0
  39. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/plex_service.py +0 -0
  40. {plex_tui-0.2.0 → plex_tui-0.2.1}/src/plextui/smoke.py +0 -0
  41. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_auth.py +0 -0
  42. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_cli.py +0 -0
  43. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_player.py +0 -0
  44. {plex_tui-0.2.0 → plex_tui-0.2.1}/tests/test_plex_service.py +0 -0
@@ -0,0 +1,49 @@
1
+ name: AUR Package
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ paths:
7
+ - ".github/workflows/aur.yml"
8
+ - "packaging/aur/**"
9
+ pull_request:
10
+ branches: ["main"]
11
+ paths:
12
+ - ".github/workflows/aur.yml"
13
+ - "packaging/aur/**"
14
+ workflow_dispatch:
15
+
16
+ jobs:
17
+ makepkg:
18
+ runs-on: ubuntu-latest
19
+ container: archlinux:base-devel
20
+
21
+ steps:
22
+ - name: Install runner dependencies
23
+ run: |
24
+ pacman -Syu --noconfirm git namcap sudo
25
+
26
+ - name: Check out repository
27
+ uses: actions/checkout@v4
28
+
29
+ - name: Create build user
30
+ run: |
31
+ useradd --create-home --shell /bin/bash builder
32
+ echo "builder ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/builder
33
+ chown -R builder:builder "$GITHUB_WORKSPACE"
34
+
35
+ - name: Build and check package
36
+ working-directory: packaging/aur
37
+ run: |
38
+ sudo -u builder makepkg --clean --syncdeps --noconfirm --check
39
+
40
+ - name: Generate .SRCINFO
41
+ working-directory: packaging/aur
42
+ run: |
43
+ sudo -u builder makepkg --printsrcinfo > .SRCINFO.generated
44
+ diff -u .SRCINFO .SRCINFO.generated
45
+
46
+ - name: Run namcap
47
+ working-directory: packaging/aur
48
+ run: |
49
+ namcap PKGBUILD ./*.pkg.tar.*
@@ -0,0 +1,33 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+ branches: ["main"]
8
+
9
+ jobs:
10
+ check:
11
+ name: Python ${{ matrix.python-version }}
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ python-version: ["3.11", "3.13"]
17
+
18
+ steps:
19
+ - name: Check out repository
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+
27
+ - name: Install package and test dependencies
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ python -m pip install -e ".[dev]"
31
+
32
+ - name: Run checks
33
+ run: make PYTHON=python check
@@ -0,0 +1,45 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ ref:
7
+ description: "Git ref to publish, such as v0.2.0"
8
+ required: true
9
+ type: string
10
+ release:
11
+ types: ["published"]
12
+
13
+ permissions:
14
+ contents: read
15
+ id-token: write
16
+
17
+ jobs:
18
+ publish:
19
+ runs-on: ubuntu-latest
20
+ environment: pypi
21
+
22
+ steps:
23
+ - name: Check out repository
24
+ uses: actions/checkout@v4
25
+ with:
26
+ ref: ${{ github.event.release.tag_name || inputs.ref }}
27
+
28
+ - name: Set up Python
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: "3.13"
32
+
33
+ - name: Install build tools
34
+ run: |
35
+ python -m pip install --upgrade pip
36
+ python -m pip install build twine
37
+
38
+ - name: Build package
39
+ run: python -m build
40
+
41
+ - name: Check package metadata
42
+ run: python -m twine check dist/*
43
+
44
+ - name: Publish package
45
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,38 @@
1
+ name: Publish to TestPyPI
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ permissions:
7
+ contents: read
8
+ id-token: write
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ environment: testpypi
14
+
15
+ steps:
16
+ - name: Check out repository
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.13"
23
+
24
+ - name: Install build tools
25
+ run: |
26
+ python -m pip install --upgrade pip
27
+ python -m pip install build twine
28
+
29
+ - name: Build package
30
+ run: python -m build
31
+
32
+ - name: Check package metadata
33
+ run: python -m twine check dist/*
34
+
35
+ - name: Publish package to TestPyPI
36
+ uses: pypa/gh-action-pypi-publish@release/v1
37
+ with:
38
+ repository-url: https://test.pypi.org/legacy/
@@ -1,4 +1,5 @@
1
1
  .venv/
2
+ .venv*/
2
3
  __pycache__/
3
4
  *.py[cod]
4
5
  .pytest_cache/
@@ -11,6 +11,9 @@ through `mpv`.
11
11
  - `player.py`: `mpv` launch, stream selection, and playback diagnostics.
12
12
  - `config.py`, `auth.py`, `artwork.py`, `models.py`: supporting modules.
13
13
  - `tests/`: pytest suite, split by app helpers/navigation and service modules.
14
+ - `.github/workflows/`: CI plus PyPI/TestPyPI/AUR validation workflows.
15
+ - `packaging/`: Homebrew and AUR maintenance notes; `packaging/aur/` contains
16
+ the source copy of `PKGBUILD` and `.SRCINFO`.
14
17
  - `README.md`, `PACKAGING.md`, `RELEASE.md`, `ROADMAP.md`: user and release docs.
15
18
  - `config.example.toml`: example user configuration.
16
19
 
@@ -59,6 +62,8 @@ make smoke
59
62
  ```
60
63
 
61
64
  For packaging or metadata changes, also run `make check-package` or `make check`.
65
+ For AUR package changes, run the `AUR Package` workflow or validate with
66
+ `makepkg` on Arch.
62
67
 
63
68
  ## Commit & Pull Request Guidelines
64
69
 
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 0.2.1 - 2026-06-11
6
+
7
+ - Added GitHub Actions CI and PyPI Trusted Publishing workflow scaffolding.
8
+ - Added a manual TestPyPI Trusted Publishing workflow.
9
+ - Published `plex-tui` to PyPI and updated install documentation.
10
+ - Published the Homebrew tap and updated install documentation.
11
+ - Added Arch package validation workflow scaffolding.
12
+ - Published the Arch AUR package and updated install documentation.
13
+ - Added Arch AUR packaging files and Homebrew packaging notes.
14
+ - Refreshed documentation for current install, packaging, and release workflows.
15
+ - Added a Settings diagnostics action for recent `debug.log` output and playback error details with log context.
16
+ - Clarified Settings rows with action-type tags and per-row detail-pane guidance.
17
+ - Improved grid browsing smoothness by debouncing detail reloads, throttling artwork prefetch, and avoiding cached-artwork rendering during selection redraws.
18
+ - Made grid detail reloads idle-aware so rapid selection movement no longer starts stale Plex reload workers.
19
+ - Made grid artwork appear progressively as each card renders and added stronger focused-pane styling.
20
+ - Added an explicit `[FOCUS]` marker to the active pane title.
21
+ - Kept focus markers in sync when using Tab navigation and refocused the visible browser after list/grid view changes.
22
+ - Made Tab navigation cycle explicitly through Libraries, Media, and Details panes.
23
+ - Added a short idle debounce for list detail reloads to reduce detail-pane churn during fast row movement.
24
+ - Increased the list detail debounce to further reduce repeated artwork loads during row navigation.
25
+ - Split detail text refresh from detail artwork loading so artwork waits for a longer stable selection window.
26
+
3
27
  ## 0.2.0 - 2026-06-11
4
28
 
5
29
  - Improved README structure and expanded the post-0.1.0 roadmap.
@@ -0,0 +1,102 @@
1
+ # Packaging
2
+
3
+ plex-tui is distributed through PyPI, a Homebrew tap, and the Arch AUR. The
4
+ source repository remains the canonical place for versioning, release notes,
5
+ and validation.
6
+
7
+ ## Supported Channels
8
+
9
+ ### PyPI
10
+
11
+ Recommended cross-platform install:
12
+
13
+ ```bash
14
+ pipx install plex-tui
15
+ ```
16
+
17
+ PyPI publishing uses GitHub Actions Trusted Publishing:
18
+
19
+ - Workflow: `.github/workflows/publish-pypi.yml`
20
+ - PyPI environment: `pypi`
21
+ - Trigger: GitHub Release publication, or manual workflow dispatch with a ref
22
+
23
+ TestPyPI uses a separate manual workflow:
24
+
25
+ - Workflow: `.github/workflows/publish-testpypi.yml`
26
+ - TestPyPI environment: `testpypi`
27
+
28
+ Install tests from TestPyPI need PyPI as a dependency fallback:
29
+
30
+ ```bash
31
+ python -m pip install \
32
+ --index-url https://test.pypi.org/simple/ \
33
+ --extra-index-url https://pypi.org/simple/ \
34
+ plex-tui
35
+ ```
36
+
37
+ ### Homebrew
38
+
39
+ Tap repository:
40
+
41
+ ```text
42
+ https://github.com/so1omon563/homebrew-plex-tui
43
+ ```
44
+
45
+ User install:
46
+
47
+ ```bash
48
+ brew tap so1omon563/plex-tui
49
+ brew install plex-tui
50
+ ```
51
+
52
+ The formula depends on `mpv` and `python@3.13`, then installs the Python app in
53
+ a Homebrew-managed virtualenv. The first install can take several minutes
54
+ because native Python resources such as `pillow` are built from source.
55
+
56
+ Validation commands:
57
+
58
+ ```bash
59
+ brew test so1omon563/plex-tui/plex-tui
60
+ brew audit --strict --online so1omon563/plex-tui/plex-tui
61
+ ```
62
+
63
+ ### Arch AUR
64
+
65
+ AUR package:
66
+
67
+ ```text
68
+ https://aur.archlinux.org/packages/plex-tui
69
+ ```
70
+
71
+ User install:
72
+
73
+ ```bash
74
+ paru -S plex-tui
75
+ ```
76
+
77
+ The source copy for AUR metadata lives in `packaging/aur/`. The package uses
78
+ Arch system dependencies, including `mpv`, `python-textual`, `python-pillow`,
79
+ `python-plexapi`, `python-platformdirs`, and `python-rich`.
80
+
81
+ Validation is handled by `.github/workflows/aur.yml`, which runs inside
82
+ `archlinux:base-devel` and checks:
83
+
84
+ - `makepkg --clean --syncdeps --noconfirm --check`
85
+ - `.SRCINFO` is in sync with `PKGBUILD`
86
+ - `namcap PKGBUILD ./*.pkg.tar.*`
87
+
88
+ ## Release Maintenance
89
+
90
+ For each new app release:
91
+
92
+ 1. Publish and validate PyPI.
93
+ 2. Update the Homebrew tap formula URL/hash and Python resources.
94
+ 3. Update `packaging/aur/PKGBUILD` and `packaging/aur/.SRCINFO`.
95
+ 4. Run packaging validation workflows.
96
+ 5. Push the AUR package repo update after the workflow passes.
97
+
98
+ ## Known Follow-Up
99
+
100
+ - Automate Homebrew tap updates after PyPI publishing.
101
+ - Investigate faster Homebrew installs without compromising formula quality.
102
+ - Consider standalone artifacts only after the app behavior stabilizes.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plex-tui
3
- Version: 0.2.0
3
+ Version: 0.2.1
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
@@ -39,9 +39,9 @@ Description-Content-Type: text/markdown
39
39
  A standalone Python/Textual terminal UI for browsing Plex and launching playback
40
40
  through `mpv`.
41
41
 
42
- plex-tui is currently an early release. It supports Plex login, server
43
- selection, paged library browsing, search, list/grid views, stream preferences,
44
- terminal poster artwork, and playback progress reporting.
42
+ plex-tui is an early release. It supports Plex login, server selection, paged
43
+ library browsing, search, list/grid views, stream preferences, terminal poster
44
+ artwork, and playback progress reporting.
45
45
 
46
46
  ## Screenshots
47
47
 
@@ -59,7 +59,8 @@ terminal poster artwork, and playback progress reporting.
59
59
  - `mpv` available on `PATH`
60
60
  - A Plex account/server
61
61
 
62
- Install `mpv` with your platform package manager:
62
+ When installing with PyPI or from GitHub, install `mpv` with your platform
63
+ package manager:
63
64
 
64
65
  ```bash
65
66
  # macOS
@@ -75,25 +76,52 @@ sudo dnf install mpv
75
76
  sudo pacman -S mpv
76
77
  ```
77
78
 
78
- ## Install
79
+ ## Installation
79
80
 
80
- The README tracks the current `main` branch. Tagged releases are available on
81
- the GitHub Releases page.
82
-
83
- The recommended install path for the latest `main` branch is `pipx`:
81
+ ### PyPI
84
82
 
85
83
  ```bash
86
- pipx install "git+https://github.com/so1omon563/plex-tui.git"
84
+ pipx install plex-tui
87
85
  plex-tui --smoke
88
86
  plex-tui
89
87
  ```
90
88
 
91
- To install the latest tagged release instead:
89
+ This is the recommended cross-platform install path. It keeps Python
90
+ dependencies isolated, but you still need to install `mpv` separately.
91
+ If `pipx` is not installed, install it with your platform package manager first
92
+ or follow the pipx installation guide.
93
+
94
+ ### Homebrew
95
+
96
+ ```bash
97
+ brew tap so1omon563/plex-tui
98
+ brew install plex-tui
99
+ plex-tui --smoke
100
+ ```
101
+
102
+ The Homebrew formula installs `mpv` automatically. The first install can take
103
+ several minutes because native Python dependencies such as `pillow` are built
104
+ from source.
105
+
106
+ ### Arch Linux
107
+
108
+ ```bash
109
+ paru -S plex-tui
110
+ plex-tui --smoke
111
+ ```
112
+
113
+ The AUR package depends on `mpv`. Any AUR helper can be used; `paru` is only an
114
+ example.
115
+
116
+ ### GitHub
92
117
 
93
118
  ```bash
94
- pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.2.0"
119
+ pipx install "git+https://github.com/so1omon563/plex-tui.git"
120
+ pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.2.1"
95
121
  ```
96
122
 
123
+ Use this path for testing `main` before a tagged/PyPI release.
124
+
97
125
  Useful CLI checks:
98
126
 
99
127
  ```bash
@@ -120,6 +148,9 @@ On first run, plex-tui starts a Plex browser login and asks which server
120
148
  connection to save. If a browser cannot be opened, use the login URL shown in
121
149
  the terminal.
122
150
 
151
+ The login flow writes a config file with the selected server URL and token. Use
152
+ the Settings screen or `plex-tui --config-path` to find the active file.
153
+
123
154
  You can also configure a server manually. macOS config path:
124
155
 
125
156
  ```bash
@@ -150,6 +181,13 @@ export PLEX_TUI_TOKEN="your-plex-token"
150
181
 
151
182
  See `config.example.toml` for optional settings.
152
183
 
184
+ ## Playback
185
+
186
+ Playback is launched through `mpv`; plex-tui does not embed a video player.
187
+ While playback is active, Plex progress is updated in the background. Saved
188
+ audio/subtitle language preferences are applied when matching streams are
189
+ available, and the details pane shows the effective playback choices.
190
+
153
191
  ## Key Bindings
154
192
 
155
193
  | Key | Action |
@@ -182,7 +220,8 @@ See `config.example.toml` for optional settings.
182
220
  - Audio and subtitle pickers with saved language preferences.
183
221
  - Plex resume support and playback progress reporting.
184
222
  - Settings screen for stream preferences, artwork modes, grid density, page
185
- size, auto-load threshold, media view, and `mpv` window size.
223
+ size, auto-load threshold, grid artwork prefetching, media view, and `mpv`
224
+ window size.
186
225
 
187
226
  ## Artwork
188
227
 
@@ -191,22 +230,38 @@ terminals without Kitty, iTerm2, or Sixel support. Native terminal image output
191
230
  is disabled for now because Kitty protocol rendering conflicts with Textual's
192
231
  screen renderer in practice.
193
232
 
194
- Grid view prefetches artwork for the visible page immediately and the next page
195
- after selection settles. Compact, comfortable, and large density modes adjust
196
- card and poster sizing. The artwork cache is bounded and stored in the app cache
197
- directory shown in Settings.
233
+ Grid view prefetches artwork for the visible page immediately and, by default,
234
+ prepares three pages ahead in the background. `grid_prefetch_pages` can be set
235
+ from `0` to `5`; use `0` to fetch only the visible page on slower systems.
236
+ Compact, comfortable, and large density modes adjust card and poster sizing. The
237
+ artwork cache is bounded and stored in the app cache directory shown in
238
+ Settings.
198
239
 
199
240
  ## Diagnostics
200
241
 
201
242
  Playback diagnostics are written to `debug.log` in the app config directory.
202
243
  Tokens are redacted from logged `mpv` arguments.
203
244
 
245
+ Useful paths:
246
+
247
+ ```bash
248
+ plex-tui --config-path
249
+ plex-tui --debug-log-path
250
+ ```
251
+
204
252
  Enable browsing performance timings before launch:
205
253
 
206
254
  ```bash
207
255
  PLEX_TUI_PERF_LOG=1 plex-tui
208
256
  ```
209
257
 
258
+ Verbose grid artwork internals are quieter by default. Include them only when
259
+ debugging poster loading:
260
+
261
+ ```bash
262
+ PLEX_TUI_PERF_LOG=1 PLEX_TUI_ARTWORK_LOG=1 plex-tui
263
+ ```
264
+
210
265
  ## Development
211
266
 
212
267
  Common commands:
@@ -3,9 +3,9 @@
3
3
  A standalone Python/Textual terminal UI for browsing Plex and launching playback
4
4
  through `mpv`.
5
5
 
6
- plex-tui is currently an early release. It supports Plex login, server
7
- selection, paged library browsing, search, list/grid views, stream preferences,
8
- terminal poster artwork, and playback progress reporting.
6
+ plex-tui is an early release. It supports Plex login, server selection, paged
7
+ library browsing, search, list/grid views, stream preferences, terminal poster
8
+ artwork, and playback progress reporting.
9
9
 
10
10
  ## Screenshots
11
11
 
@@ -23,7 +23,8 @@ terminal poster artwork, and playback progress reporting.
23
23
  - `mpv` available on `PATH`
24
24
  - A Plex account/server
25
25
 
26
- Install `mpv` with your platform package manager:
26
+ When installing with PyPI or from GitHub, install `mpv` with your platform
27
+ package manager:
27
28
 
28
29
  ```bash
29
30
  # macOS
@@ -39,25 +40,52 @@ sudo dnf install mpv
39
40
  sudo pacman -S mpv
40
41
  ```
41
42
 
42
- ## Install
43
+ ## Installation
43
44
 
44
- The README tracks the current `main` branch. Tagged releases are available on
45
- the GitHub Releases page.
46
-
47
- The recommended install path for the latest `main` branch is `pipx`:
45
+ ### PyPI
48
46
 
49
47
  ```bash
50
- pipx install "git+https://github.com/so1omon563/plex-tui.git"
48
+ pipx install plex-tui
51
49
  plex-tui --smoke
52
50
  plex-tui
53
51
  ```
54
52
 
55
- To install the latest tagged release instead:
53
+ This is the recommended cross-platform install path. It keeps Python
54
+ dependencies isolated, but you still need to install `mpv` separately.
55
+ If `pipx` is not installed, install it with your platform package manager first
56
+ or follow the pipx installation guide.
57
+
58
+ ### Homebrew
59
+
60
+ ```bash
61
+ brew tap so1omon563/plex-tui
62
+ brew install plex-tui
63
+ plex-tui --smoke
64
+ ```
65
+
66
+ The Homebrew formula installs `mpv` automatically. The first install can take
67
+ several minutes because native Python dependencies such as `pillow` are built
68
+ from source.
69
+
70
+ ### Arch Linux
71
+
72
+ ```bash
73
+ paru -S plex-tui
74
+ plex-tui --smoke
75
+ ```
76
+
77
+ The AUR package depends on `mpv`. Any AUR helper can be used; `paru` is only an
78
+ example.
79
+
80
+ ### GitHub
56
81
 
57
82
  ```bash
58
- pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.2.0"
83
+ pipx install "git+https://github.com/so1omon563/plex-tui.git"
84
+ pipx install "git+https://github.com/so1omon563/plex-tui.git@v0.2.1"
59
85
  ```
60
86
 
87
+ Use this path for testing `main` before a tagged/PyPI release.
88
+
61
89
  Useful CLI checks:
62
90
 
63
91
  ```bash
@@ -84,6 +112,9 @@ On first run, plex-tui starts a Plex browser login and asks which server
84
112
  connection to save. If a browser cannot be opened, use the login URL shown in
85
113
  the terminal.
86
114
 
115
+ The login flow writes a config file with the selected server URL and token. Use
116
+ the Settings screen or `plex-tui --config-path` to find the active file.
117
+
87
118
  You can also configure a server manually. macOS config path:
88
119
 
89
120
  ```bash
@@ -114,6 +145,13 @@ export PLEX_TUI_TOKEN="your-plex-token"
114
145
 
115
146
  See `config.example.toml` for optional settings.
116
147
 
148
+ ## Playback
149
+
150
+ Playback is launched through `mpv`; plex-tui does not embed a video player.
151
+ While playback is active, Plex progress is updated in the background. Saved
152
+ audio/subtitle language preferences are applied when matching streams are
153
+ available, and the details pane shows the effective playback choices.
154
+
117
155
  ## Key Bindings
118
156
 
119
157
  | Key | Action |
@@ -146,7 +184,8 @@ See `config.example.toml` for optional settings.
146
184
  - Audio and subtitle pickers with saved language preferences.
147
185
  - Plex resume support and playback progress reporting.
148
186
  - Settings screen for stream preferences, artwork modes, grid density, page
149
- size, auto-load threshold, media view, and `mpv` window size.
187
+ size, auto-load threshold, grid artwork prefetching, media view, and `mpv`
188
+ window size.
150
189
 
151
190
  ## Artwork
152
191
 
@@ -155,22 +194,38 @@ terminals without Kitty, iTerm2, or Sixel support. Native terminal image output
155
194
  is disabled for now because Kitty protocol rendering conflicts with Textual's
156
195
  screen renderer in practice.
157
196
 
158
- Grid view prefetches artwork for the visible page immediately and the next page
159
- after selection settles. Compact, comfortable, and large density modes adjust
160
- card and poster sizing. The artwork cache is bounded and stored in the app cache
161
- directory shown in Settings.
197
+ Grid view prefetches artwork for the visible page immediately and, by default,
198
+ prepares three pages ahead in the background. `grid_prefetch_pages` can be set
199
+ from `0` to `5`; use `0` to fetch only the visible page on slower systems.
200
+ Compact, comfortable, and large density modes adjust card and poster sizing. The
201
+ artwork cache is bounded and stored in the app cache directory shown in
202
+ Settings.
162
203
 
163
204
  ## Diagnostics
164
205
 
165
206
  Playback diagnostics are written to `debug.log` in the app config directory.
166
207
  Tokens are redacted from logged `mpv` arguments.
167
208
 
209
+ Useful paths:
210
+
211
+ ```bash
212
+ plex-tui --config-path
213
+ plex-tui --debug-log-path
214
+ ```
215
+
168
216
  Enable browsing performance timings before launch:
169
217
 
170
218
  ```bash
171
219
  PLEX_TUI_PERF_LOG=1 plex-tui
172
220
  ```
173
221
 
222
+ Verbose grid artwork internals are quieter by default. Include them only when
223
+ debugging poster loading:
224
+
225
+ ```bash
226
+ PLEX_TUI_PERF_LOG=1 PLEX_TUI_ARTWORK_LOG=1 plex-tui
227
+ ```
228
+
174
229
  ## Development
175
230
 
176
231
  Common commands: