Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 2 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
</p>

<p align="center">
<a href="https://github.com/jdwit/ytstudio/actions/workflows/ci.yml"><img src="https://github.com/jdwit/ytstudio/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<a href="https://github.com/jdwit/ytstudio-cli/actions/workflows/ci.yml"><img src="https://github.com/jdwit/ytstudio-cli/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
<a href="https://pypi.org/project/ytstudio-cli/"><img src="https://img.shields.io/pypi/v/ytstudio-cli" alt="PyPI"></a>
<a href="https://pypi.org/project/ytstudio-cli/"><img src="https://img.shields.io/pypi/pyversions/ytstudio-cli" alt="Python"></a>
</p>
Expand All @@ -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.
Expand Down
7 changes: 4 additions & 3 deletions docs/analytics.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
5 changes: 4 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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.

Expand Down
8 changes: 4 additions & 4 deletions docs/playlists.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <new-banger> --position 0 --execute
ytstudio playlists add PL_pinned -v <video-id> --position 0 --execute
```
1 change: 1 addition & 0 deletions docs/videos.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <video-id> # 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
Expand Down