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.