YouTube

YouTube

YouTube

gog youtube (alias gog yt) reads public YouTube data with an API key or uses account OAuth for private reads and mutations.

#Configure access

For public channel, video, activity, playlist, comment, and search reads, enable YouTube Data API v3 and store an API key:

gog config set youtube_api_key YOUR_API_KEY
gog yt videos list --chart mostPopular --region US --max 5

Account reads use the default youtube.readonly scope:

gog auth add you@gmail.com --services youtube
gog yt activities list --mine --account you@gmail.com

Subscription and playlist mutations require the explicit youtube.force-ssl extra scope:

gog auth add you@gmail.com --services youtube \
  --extra-scopes https://www.googleapis.com/auth/youtube.force-ssl \
  --force-consent

The account must already have a YouTube channel. If the API returns youtubeSignupRequired, initialize the channel once at youtube.com and retry.

#Read playlists and liked videos

List the playlists owned by a channel or by the authenticated user:

gog yt playlists list --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw
gog yt playlists list --mine --account you@gmail.com

List the videos inside a playlist with playlists items list. Public playlists work with an API key; private playlists and the special LL (liked videos) playlist need account OAuth. Use --all to page through large playlists:

gog yt playlists items list --playlist-id PLAYLIST_ID --all
gog yt playlists items list --playlist-id LL --account you@gmail.com --all

Read your liked (or disliked) videos directly with videos list --my-rating. This is a per-user read, so it always uses account OAuth:

gog yt videos list --my-rating like --account you@gmail.com --max 50
gog yt videos list --my-rating dislike --account you@gmail.com --json

Both reads work with the default youtube.readonly scope; no extra scope is required.

#Manage subscriptions

List one page or fetch every page:

gog yt subscriptions list --max 50 --account you@gmail.com
gog yt subscriptions list --all --account you@gmail.com --json

Subscribe with a channel ID:

gog yt subscriptions subscribe \
  --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \
  --account you@gmail.com

Unsubscribe using either the subscription ID returned by subscriptions list or a channel ID. Channel-ID removal performs the subscription lookup for you:

gog yt subscriptions unsubscribe --id SUBSCRIPTION_ID \
  --account you@gmail.com --force
gog yt subscriptions unsubscribe --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \
  --account you@gmail.com --force

#Manage playlists

New playlists default to private. Set --privacy unlisted or --privacy public only when broader visibility is intended.

gog yt playlists create --title "Research" \
  --description "Videos to review" \
  --account you@gmail.com --json

gog yt playlists add --playlist-id PLAYLIST_ID --video-id VIDEO_ID \
  --position 0 --account you@gmail.com

Remove a known playlist item directly, or let gog find the item by playlist and video ID:

gog yt playlists remove --item-id PLAYLIST_ITEM_ID \
  --account you@gmail.com --force
gog yt playlists remove --playlist-id PLAYLIST_ID --video-id VIDEO_ID \
  --account you@gmail.com --force

Delete a playlist:

gog yt playlists delete PLAYLIST_ID --account you@gmail.com --force

#Automation and safety

Every subscription and playlist mutation supports --dry-run. Dry runs do not create an API service or make a network request:

gog yt playlists add --playlist-id PLAYLIST_ID --video-id VIDEO_ID \
  --account you@gmail.com --dry-run --json

Unsubscribe, playlist-item removal, and playlist deletion prompt before the mutation. Use --force only after checking the target, or combine --no-input --force in deliberate automation.

Use --json for structured output or --plain for stable TSV. Human progress, prompts, and warnings remain on stderr.

See the generated references for youtube subscriptions and youtube playlists for every flag.