← ClaudeAtlas

wjs-uploading-videolisted

Upload one or many videos to YouTube. Use when the user wants to "上传到 YouTube", "发 YouTube", "批量上传", "upload to YouTube", "post videos to YouTube", or to publish a finished `final/` directory of MP4s. Reads per-video metadata (title / description / tags) from a sibling `UPLOAD_META.md` file when present (the user's standard markdown format), or from command-line flags. Survives behind a SOCKS/HTTP proxy by using `requests` directly for the resumable upload (the stock `google-api-python-client` MediaFileUpload stalls under this user's proxy setup).
jianshuo/claude-skills · ★ 77 · Code & Development · score 85
Install: claude install-skill jianshuo/claude-skills
# wjs-uploading-video Push finished videos to YouTube. Defaults are tuned for this user's workflow (王建硕 channel, China network with local proxy, 1080p horizontal recordings from Riverside / multicam edits). ## When to use - User has one or more finished `.mp4` files and wants them on YouTube - User points to a `final/` directory with multiple segments and an `UPLOAD_META.md` - User wants a specific privacy / playlist / scheduled publish **Don't use** for: - 微信视频号 upload (no public API; user uploads manually via web) - 抖音 / 小红书 / B 站 (different APIs, not yet implemented here) - YouTube Shorts variants from horizontal source (use `wjs-reframing-video` first to produce the 9:16 cut, then upload that via this skill) ## Prerequisites (one-time per machine) 1. **Google Cloud OAuth client**: `~/.config/youtube/credentials.json` must exist. See `references/credentials-setup.md` for the 5-minute setup if missing. 2. **Python deps**: `pip3 install google-auth-oauthlib google-api-python-client requests` (only `google-auth` + `requests` are strictly needed at upload time, but the OAuth-lib pulls them). 3. **First-ever upload** opens a browser for Google consent and writes `~/.config/youtube/token.json`. Subsequent runs reuse it silently. ## How it works (and why it's not the stock youtube-uploader) YouTube's resumable upload protocol issues a `Location:` URL after the metadata POST, then accepts the bytes in chunked `PUT` requests. The stock `google-api-python-client` runs this o