diff --git a/README.md b/README.md index e2084c5..1a72cbd 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@

- CI + CI PyPI Python

@@ -32,20 +32,10 @@ command line. - Upload videos from a directory using YAML sidecars for metadata and thumbnails. - Schedule, start, stop, and update YouTube livestream broadcasts, including RTMP ingest details. - Multi-channel profiles: manage several channels from one machine and switch per command. -- Comments moderation: list, reply, and moderate from the CLI. +- Comments moderation: list, approve, reject, and ban from the CLI. - Channel analytics queries via the YouTube Analytics API. - Playlists: bulk-add by search and reorder by views with one command. -## Power-user moves - -```bash -# Bulk-add to a playlist from a search query (dry-run by default) -ytstudio playlists add PL... --from-search "shorts compilation" -n 20 --execute - -# Reorder a playlist by view count, descending -ytstudio playlists reorder PL... --by views --execute -``` - ## Documentation See the [full documentation](https://jdwit.github.io/ytstudio-cli/) for installation, OAuth setup, and the command reference. diff --git a/docs/analytics.md b/docs/analytics.md index a645a78..c99d8cf 100644 --- a/docs/analytics.md +++ b/docs/analytics.md @@ -60,6 +60,7 @@ Run `ytstudio analytics --help` (or open the ## Quota -Analytics reads are cheap (1 unit per call against the Data API quota); you -can hit them often without worrying. See [API quota](api-quota.md) for the -full picture. +The YouTube Analytics API is a separate API from the YouTube Data API, with +its own query-cost based quota that is far more generous in practice, so +analytics reads do not consume your Data API budget. See +[API quota](api-quota.md) for the full picture. diff --git a/docs/index.md b/docs/index.md index 39c9bb0..1b789eb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,7 +9,7 @@ A small CLI on top of the official [YouTube Data API](https://developers.google.com/youtube/v3) and [YouTube Analytics API](https://developers.google.com/youtube/analytics) that allows for bulk video updates and uploads, scripted analytics queries, -comment moderation, and live broadcast control. +comment moderation, live broadcast control, and bulk playlist operations. ## Why it exists @@ -35,6 +35,9 @@ and plug your channel into AI agent workflows. See [Live broadcasts](livestreams.md). - **Comment moderation** at the CLI: approve, reject, or ban in bulk. See [Comments](comments.md). +- **Bulk playlist operations** including adding a search + query's worth of videos at once and reordering by views. See + [Playlists](playlists.md). - **OAuth credentials live owner-only (`0600`)** under `~/.config/ytstudio-cli/`. The `init` step is one-shot. diff --git a/docs/playlists.md b/docs/playlists.md index ec056cf..0f39dc4 100644 --- a/docs/playlists.md +++ b/docs/playlists.md @@ -96,15 +96,15 @@ All read commands take `--output table|json|csv`. CSV uses Python's `csv.writer`, so titles with commas, newlines, or quotes survive round-trips through Excel and `pandas.read_csv`. -## Power moves +## Recipes ```bash -# Curate a "watch later" from a search -ytstudio playlists add PL_watchlater --from-search "rust async" -n 30 --execute +# Build a themed playlist from a search +ytstudio playlists add PL_rust --from-search "rust async" -n 30 --execute # Move the all-time top by views to the front ytstudio playlists reorder PL_pinned --by views --execute # Promote a single video to the top of an existing playlist -ytstudio playlists add PL_pinned -v --position 0 --execute +ytstudio playlists add PL_pinned -v --position 0 --execute ``` diff --git a/docs/videos.md b/docs/videos.md index adc84ae..5c9b82e 100644 --- a/docs/videos.md +++ b/docs/videos.md @@ -12,6 +12,7 @@ ytstudio videos list # most recent uploads ytstudio videos list -n 100 -o json # 100 items, JSON ytstudio videos list --scheduled # only videos scheduled for future publish ytstudio videos show # full metadata for one video +ytstudio videos categories # category ids you can assign to uploads ``` `--scheduled` filters to private videos with a future `publishAt`, which is