# COMMANDS Quick reference for keys and commands in **Podliner**. Full in-app help: `:h` --- ## Table of contents - [Most used](#most-used) - [Key bindings](#key-bindings) - [Commands by category](#commands-by-category) - [Playback](#playback) - [Navigation](#navigation) - [Downloads](#downloads) - [Queue](#queue) - [Feeds](#feeds) - [Sort and filter](#sort-and-filter) - [Player and theme](#player-and-theme) - [Network and engine](#network-and-engine) - [OPML](#opml) - [Sync (gPodder)](#sync-gpodder) - [Misc](#misc) - [Engines guide](#engines-guide) - [OPML import and export](#opml-import-and-export) - [gPodder sync](#gpodder-sync) --- ## Most used **Playback** - `Enter`: play selected - `Space`: pause or resume - `← / →`: seek 10s backward or forward - `[ / ]`: slower or faster - `=` or `1`: reset speed to 1.0x **Navigation** - `j / k`: move selection down or up - `g / G`: seek audio to start / end - `:H / :M / :L` or `:zt / :zz / :zb`: jump selection to top / middle / bottom of the list - `/`: search in current list **Downloads** - `d`: toggle download flag or show status - `:downloads`: open downloads view **Filters and view** - `u`: toggle unplayed only - `:feed all|saved|downloaded|history|queue`: switch view **Misc** - `t`: toggle theme - `q`: quit - `:w` or `:wq`: save or save and quit --- ## Key bindings | Key | Action | Notes | |------------------------|------------------------------------------------|---------------------------------| | `Space` | Toggle play or pause | | | `← / →` | Seek -10s / +10s | | | `H / L` | Seek -60s / +60s | | | `g / G` | Seek audio to 0:00 / 100% | | | `- / +` | Volume down / up | 0 to 100 | | `[ / ]` | Slower / faster | | | `=` or `1` | Reset speed to 1.0x | | | `2 / 3` | Speed presets 1.25x / 1.5x | | | `Enter` | Play selected episode | | | `i` | Open Shownotes tab | | | `Esc` (in Shownotes) | Back to Episodes | | | `j / k` | Move selection down / up | | | `h / l` | Focus feeds / episodes | | | `J / K` | Next / previous unplayed (move item in Queue view) | Context-aware | | `m` | Toggle played flag | | | `u` | Toggle unplayed filter | | | `d` | Toggle download flag | | | `:` | Enter command mode | | | `/` | Search (Enter to apply, `n` to repeat) | | | `t` | Toggle theme | | | `F12` | Logs overlay | | | `q` | Quit | | --- ## Commands by category ### Playback - `:toggle` Toggle pause or resume. - `:seek [ +N | -N | NN% | mm:ss | hh:mm:ss ]` Seek by seconds, percentage, or timestamp. Examples: `:seek +10`, `:seek 80%`, `:seek 12:34`, `:seek 01:02:03` - `:jump ` Same syntax as `:seek`. Examples: `:jump 10%`, `:jump +90`, `:jump 00:30` - `:replay [N]` Replay from 0:00 or jump back N seconds. Examples: `:replay`, `:replay 30` - `:vol [N | +/-N]` Set or change volume (0 to 100). Examples: `:vol 70`, `:vol +5`, `:vol -10` - `:speed [S | +/-D]` Set or change speed (0.25 to 3.0). Examples: `:speed 1.0`, `:speed +0.1`, `:speed -0.25` ### Navigation - `:next` / `:prev` Select next or previous item without autoplay. - `:play-next` / `:play-prev` Play next or previous item. - `:next-unplayed` / `:prev-unplayed` Play next or previous unplayed item. - `:goto top|start|bottom|end` Select list position. Examples: `:goto top`, `:goto end` - `:now` Select the currently playing episode. - `:zt` `:zz` `:zb` (also `:H` `:M` `:L`) Jump selection to top, middle, or bottom of the current list. ### Downloads - `:download [start|cancel|rm]` (alias `:dl`) Queue the episode for download, or start, cancel or delete it. `rm` deletes the downloaded file and frees the space. Examples: `:download`, `:dl cancel`, `:dl rm` - `:downloads [retry-failed | clear-queue | open-dir]` Show downloads overview and actions. Examples: `:downloads`, `:downloads retry-failed`, `:downloads open-dir` - `:save [on|off|true|false|+|-]` Toggle or set Saved (star) for selected episode. Examples: `:save`, `:save on`, `:save -` ### Queue - `:queue add|toggle|rm|remove|clear|move |shuffle|uniq` (alias `q`) Queue operations for the selected episode or list. Examples: `:queue add` `q` `:queue move up` `:queue shuffle` `:queue uniq` `:queue clear` ### Feeds - `:add ` (alias `:a`) Add a new podcast feed. Examples: `:add https://example.com/feed.xml`, `:a https://…` - `:refresh [auto [|off]]` (aliases `:update` `:r`) Refresh all feeds now. Feeds are also fetched on their own shortly after start and then every 60 minutes; `:refresh auto ` changes that (5 minutes to a week), `:refresh auto off` stops it, `:refresh auto` shows the interval and when the last pass ran. The sidebar title shows how old the feeds are. Examples: `:refresh`, `:refresh auto 30`, `:refresh auto off` - `:remove-feed` (alias `:rm-feed`) Remove the currently selected feed. - `:feed all|saved|downloaded|history|queue` Switch to a virtual feed. Examples: `:feed all`, `:feed queue` - `:history clear | size ` History actions. Examples: `:history clear`, `:history size 500` ### Sort and filter - `:sort show | reset | reverse | by [asc|desc]` Sort the episode list. Examples: `:sort show`, `:sort reverse`, `:sort by title asc` - `:sort feeds show | reset | by [asc|desc]` Sort the feed panel. Persisted across sessions. Examples: `:sort feeds by title asc`, `:sort feeds by unplayed desc`, `:sort feeds show` - `:filter [unplayed|all|toggle]` Set or toggle unplayed filter. Examples: `:filter unplayed`, `:filter toggle` ### Player and theme - `:audioPlayer [top|bottom|toggle]` Place the player bar. Examples: `:audioPlayer top`, `:audioPlayer toggle` - `:theme [toggle|base|accent|native|user|light|auto]` Switch theme or toggle. `light` is the light theme, `user` the dark default. Examples: `:theme`, `:theme light` ### Network and engine - `:net online|offline|toggle` Set or toggle offline mode. Examples: `:net`, `:net offline`, `:net toggle` - `:play-source [auto|local|remote|show]` Prefer playback source. Examples: `:play-source`, `:play-source show`, `:play-source local` - `:engine [show|help|auto|vlc|mpv|ffplay|mediafoundation|mf|builtin|diag]` Select or inspect playback engine. `mf` is a shorthand for `mediafoundation` (Windows only). Examples: `:engine`, `:engine mpv`, `:engine mf`, `:engine help`, `:engine diag` ### OPML - `:opml import [--update-titles] | export []` Import or export OPML. Examples: `:opml import ~/feeds.opml` `:opml import feeds.opml --update-titles` `:opml export` `:opml export ~/podliner-feeds.opml` ### Sync (gPodder) - `:sync login ` Log in and store credentials. Example: `:sync login https://gpodder.net alice mypass` - `:sync logout` Remove credentials and stop syncing. - `:sync` Full sync — pull subscription changes then push pending actions. - `:sync push` Upload subscription changes and queued play actions. - `:sync pull` Download subscription changes from the server. - `:sync status` Show server URL, device ID, auto-sync state, last sync time, and pending action count. - `:sync device ` Set this device's ID (default: `podliner-`). Example: `:sync device my-laptop` - `:sync auto [on|off]` Enable or disable auto-sync on startup and exit. Omit argument to toggle. Examples: `:sync auto on`, `:sync auto off` - `:sync help` Show the in-app sync guide. ### Misc - `:help` (alias `:h`) Show this help. - `:open [site|audio]` Open episode website or audio in the system default. Examples: `:open`, `:open site`, `:open audio` - `:copy url|title|guid` Copy episode info to clipboard. Examples: `:copy`, `:copy url`, `:copy title`, `:copy guid` - `:logs [N]` Show logs overlay (tail). Examples: `:logs`, `:logs 1000` - `:osd ` Show a transient on-screen message. Example: `:osd Hello world` - `:quit` (alias `:q`) Quit application. - `:w` or `:wq` Save or save and quit. --- ## Engines guide ``` VLC (libVLC) - default - Supports seek, pause, volume, speed, local files, HTTP - Recommended. Mature and feature complete. MPV (mpv, IPC) - Supports seek, pause, volume, speed, local files, HTTP - Requires mpv in PATH. Uses IPC socket. Media Foundation (Windows only) - Supports seek, pause, volume, local files, HTTP - Built in on Windows. No extra install needed. - Speed control not supported. Built-in (builtin) - Supports seek, pause, volume, speed, local files, HTTP - Part of podliner, nothing to install. mp3 only. - Fallback on macOS; on Linux and Windows only when chosen. FFplay (limited) - Supports play and stop only - Coarse seek by restart (-ss). Speed and volume only at start. - Intended as last-resort fallback. ``` **Switching engines** ``` :engine -> show current engine and capabilities :engine help -> show this guide :engine auto -> Windows: VLC -> MediaFoundation -> MPV -> FFplay macOS: VLC -> MPV -> builtin -> FFplay Linux: VLC -> MPV -> FFplay :engine vlc|mpv|ffplay|mediafoundation|mf|builtin -> set preference :engine diag -> show active engine, caps, preference and last used ``` **Notes** - On FFplay, `:seek` restarts playback at the new position (coarse seek). - If an action is not supported by the active engine, a short OSD hint appears (e.g. `:speed` on MediaFoundation). - Linux: install `vlc`, `mpv`, `ffmpeg`. - macOS: `brew install --cask vlc && brew install mpv ffmpeg` - Windows: VLC is bundled with podliner. Install `mpv`/`ffmpeg` separately if you want them. --- ## OPML import and export **Import** ``` :opml import [--update-titles] - Reads OPML 2.0 - Default policy: • Groups are ignored (flat import) • Existing feed titles are not overwritten • No online validation ``` **Export** ``` :opml export [] - Writes a flat OPML (UTF-8) with all current feeds - If path is omitted, a sensible default is used ``` **Examples** ``` :opml import ~/feeds.opml :opml import feeds.opml --update-titles :opml export :opml export ~/podliner-feeds.opml ``` --- ## gPodder sync Sync subscriptions and play history with any gPodder API v2 compatible server. **Supported servers** - [gpodder.net](https://gpodder.net) — public, free - Any self-hosted gPodder API v2 compatible server > Nextcloud's gPodder-Sync app uses a different API path and is not supported yet. See [#6](https://github.com/timkicker/podliner/issues/6). **Quick start** ``` :sync login https://gpodder.net :sync :sync auto on ``` **Password storage** Credentials are stored in the OS keyring when available (libsecret on Linux, Keychain on macOS, Credential Store on Windows). If the keyring is unavailable, the password is saved in `gpodder.json` as a plaintext fallback with a one-time warning. **Offline behaviour** All sync operations check the network state first. If offline (`:net offline` or no connection), sync returns immediately. Pending play actions accumulate while offline and are uploaded on the next successful push. **Device ID** The default device ID is `podliner-` (max 64 characters). Change it with `:sync device ` before the first login if you want a specific name on the server.