Agent skill

Wjs Uploading Video

by jianshuo in jianshuo/claude-skills

Upload one or many videos to YouTube. An agent skill from jianshuo/claude-skills.

MITAuto-check passedMedia & Creative

Install Wjs Uploading Video

skills CLI
$ npx skills add jianshuo/claude-skills --skill wjs-uploading-video -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jianshuo/claude-skills wjs-uploading-video --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jianshuo/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/wjs-uploading-video .claude/skills/wjs-uploading-video && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
wjs-uploading-video
GitHub stars
131
Token cost
~2.1k tokens
SKILL.md length
1,006 words
Files
3 (incl. scripts, references)
Skills in repo
38
Repo updated
First seen
Licence
MIT

At a glance

Upload one or many videos to YouTube. An agent skill from jianshuo/claude-skills.

  • Works in 3 steps: Google Cloud OAuth client:… → Python deps: pip3 install… → First-ever upload opens a browser for…
  • The user wants to 上传到 YouTube
  • SKILL.md covers When to use, Prerequisites (one-time per…, How it works (and why it's not… and Usage, plus 5 more sections
  • Runs Python scripts from its folder; calls python3, uvx and pip3; reaches upload.googleapis.com

What it does

Wjs Uploading Video is an agent skill from jianshuo/claude-skills. 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 UPLOADMETA.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…

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts and reference files (for example `references/credentials-setup.md` and `scripts/upload_youtube.py`).

It sits in Media & Creative. It works with YouTube and Python. The repository describes itself as: 13 Claude Code skills for video production (transcribe / translate / dub / multicam / subtitles / reframe) + WeChat publishing. Compatible with Claude Code, OpenAI Codex CLI… The licence is MIT.

When your agent uses it

  • The user wants to 上传到 YouTube
  • Upload to YouTube
  • Post videos to YouTube
  • Publish a finished final/ directory of MP4s

Example prompts

  • “上传到 YouTube”
  • “发 YouTube”
  • “upload to YouTube”
  • “/wjs-uploading-video”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Google Cloud OAuth client: ~/.config/youtube/credentials.json must exist. See references/credentials-setup.md for the 5-minute setup if…
  2. Python deps: pip3 install google-auth-oauthlib google-api-python-client requests (only google-auth + requests are strictly needed at…
  3. First-ever upload opens a browser for Google consent and writes ~/.config/youtube/token.json. Subsequent runs reuse it silently.

What it can do on your machine

Read from SKILL.md and the folder at commit b2690f5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python3
    • uvx
    • pip3
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • upload.googleapis.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Wjs Uploading Video loads about 2.1k tokens when it runs, and up to ~2.8k if it reads all its reference files. Until then it costs about 143 tokens; SKILL.md has 1,006 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~143
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from jianshuo/claude-skills at commit b2690f5, republished under its MIT licence (© jianshuo). 1,006 words, ~2,144 tokens.

Download SKILL.mdSave it as .claude/skills/wjs-uploading-video/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
wjs-uploading-video
description
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).

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 over httplib2, which under this user's local SOCKS+HTTP proxy stack throws [Errno 65] No route to host or socket.timeout on those follow-up PUTs and stalls indefinitely.

This skill bypasses httplib2: it does OAuth via google-auth, then drives the resumable upload manually with requests, passing the proxy explicitly. 8 MB chunks (not the stock 256 KB) — fewer round-trips through the proxy. Exponential-backoff retry on socket.timeout / ConnectionError / 5xx.

If you're tempted to "just call the YouTube API client directly," don't — it'll fail in this environment.

ModuleNotFoundError: No module named 'google.oauth2' — Homebrew 升级 Python 大版本后 site-packages 会丢(2026-08 从 3.13→3.14 实际发生过)。别重新 pip install,直接用 uvx 带依赖跑(已验证):

bash
uvx --with google-auth --with requests python \
  ~/.claude/skills/wjs-uploading-video/scripts/upload_youtube.py --dir "/path/to/final"

Usage

Batch upload a final/ directory
bash
python3 ~/.claude/skills/wjs-uploading-video/scripts/upload_youtube.py \
  --dir "/path/to/final" \
  --meta "/path/to/final/UPLOAD_META.md"

The script:

  1. Reads UPLOAD_META.md and pairs each ## NN · filename.mp4 block to a video file in --dir
  2. Skips videos already in --results-file (default <dir>/.youtube_upload_results.json) — safe to re-run after failures
  3. Uploads sequentially with progress every 8 MB
  4. Writes the final URL list to --results-file
Single file
bash
python3 ~/.claude/skills/wjs-uploading-video/scripts/upload_youtube.py \
  --video /path/to/clip.mp4 \
  --title "My Title" \
  --description "Body text" \
  --tags "tag1,tag2,tag3"
Common overrides
FlagDefaultNotes
--privacypublicprivate / unlisted / public
--category2828 = Science & Tech. 27 = Education. 24 = Entertainment.
--made-for-kidsfalseYouTube requires this declaration
--playlist <ID>noneAdd each uploaded video to a playlist
--publish-at <ISO8601>noneSchedule publish (requires --privacy private)
--credentials~/.config/youtube/credentials.jsonOAuth client JSON
--token~/.config/youtube/token.jsonCached OAuth token
--chunk-mb8Smaller chunks if uploads keep failing mid-flight
--dry-runoffParse meta + list what would upload, don't touch network

UPLOAD_META.md format

The parser expects the user's standard structure:

## 01 · segment_01_no-bugs.mp4

**短标题**
代码没有错误,只有意图不一致

**视频描述**
AI 时代屎山的重新定义...

—— 王建硕 × 任鑫《...》第 1 集

#王建硕 #AI编程 #ClaudeCode

---

Mapping:

  • ## NN · <filename> → which video this block describes
  • **短标题** (or **Title**) block → YouTube title, verbatim. Short titles work but consider that YouTube allows up to 100 chars — if you want a richer title with series name, write it that way in **短标题**
  • **视频描述** (or **Description**) block → YouTube description, verbatim, with the #tag hashtags retained at the bottom
  • All #word tokens in the 视频描述 → comma-separated YouTube tags (each # is stripped; the user's channel name 王建硕 is auto-prepended per global instructions)

Filename in the heading must match an actual file in --dir. If a file exists but has no meta block, the script errors loudly — pass --allow-missing-meta to upload it with --title <basename> and empty description.

Sensible defaults this skill bakes in

  • Privacy = public: videos go live immediately and appear in subscriber feeds + search. Override per call with --privacy unlisted (link-only) or --privacy private (owner-only) when you want to review first
  • Category = 28 (Science & Tech): matches 王建硕 channel's main content; override with --category per upload
  • selfDeclaredMadeForKids = false: YouTube requires this; the user's content is adult-targeted
  • Chunk size = 8 MB: validated working size through this user's local proxy (256 KB stalled)
  • Skip already-uploaded: results file is the source of truth; deleting it forces re-upload
Show full SKILL.md (368 more words)Show less

Channel-name CTA rule

If you write description footers, signatures, or "subscribe to me" lines into a video's metadata, use 王建硕 (the user's channel name). Don't put a guest's name there — guests like 任鑫 belong inside the description body when they're the conversation partner, never in the channel-CTA slot.

Troubleshooting

SymptomFix
access_denied 403 on consent screenAdd user's Google account to the OAuth client's Test users list in Google Cloud Console
[Errno 65] No route to host mid-uploadAlmost always a proxy issue — verify curl --max-time 10 https://upload.googleapis.com/upload/youtube/v3/videos returns a 4xx (any 4xx = proxy reachable); if 000, the proxy is down
Upload stalls with no progress linesThe proxy is silently buffering. Lower --chunk-mb 4 or restart the proxy daemon
quotaExceeded (API units)YouTube Data API default quota is 10,000 units/day, each upload is 1,600 units — so ~6 uploads/day. Request a quota bump in Google Cloud Console, or split uploads across days
429 rateLimitExceeded · Video Uploads per dayA DIFFERENT, separate limit from API units — YouTube's per-project daily video-upload count (anti-abuse, tied to project verification status; can be very low). When hit, every upload in the batch fails init session failed: 429, none succeed. It is NOT a proxy/auth problem and can't be worked around. It resets at midnight US Pacific Time (not your local midnight). Options: wait for the PT reset and re-run (the results file was cleared so all retry); or upload via the YouTube Studio web UI, which does NOT consume this API limit; or get the GCP project verified to raise the cap. Earlier uploads the same PT-day (even manual API ones) eat into this count.
Token refresh failsDelete ~/.config/youtube/token.json and re-run; OAuth browser flow restarts

After uploading

  • Results saved to --results-file (JSON: file, title, video id, URL)
  • Echo the URL list back to the user in a markdown table
  • Videos are public by default — they're live the moment the upload completes. If the user wanted a review buffer, mention they can re-upload with --privacy unlisted (or flip back to unlisted in YouTube Studio)
  • If they mentioned a 合集 / series, offer to create a YouTube playlist and batch-add the new uploads (the user must give a playlist ID or let you create one)

© jianshuo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts, references) in wjs-uploading-video of jianshuo/claude-skills.

  • SKILL.md
  • references/credentials-setup.md
  • scripts/upload_youtube.py

Open the folder on GitHubat commit b2690f5

Compare with similar skills

Wjs Uploading Video next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Wjs Uploading Video compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Wjs Uploading Video this skilljianshuo/claude-skills131—~2.1kAutomated safety check: PassMIT
Youtube Clipperop7418/Youtube-clipper-skill2.2k—~1.6kAutomated safety check: NotesMIT
Ffmpeg Skillkajisho5/ffmpeg-skill1.9k—~7.4kAutomated safety check: PassMIT
Claude Real VideoHUANGCHIHHUNGLeo/claude-real-video2.2k—~639Automated safety check: PassMIT
Video To Subtitle Summaryimlewc/video-to-subtitle-summary-skill218—~4.6kAutomated safety check: NotesMIT
Video To NotesKIRVO-REPORTING/video-to-notes105—~1.5kAutomated safety check: PassMIT

Similar skills

  • Youtube Clipper

    op7418/Youtube-clipper-skill

    YouTube 视频智能剪辑工具。下载视频和字幕,AI 分析生成精细章节(几分钟级别), 用户选择片段后自动剪辑、翻译字幕为中英双语、烧录字幕到视频,并生成总结文案。

    2.2k GitHub stars~1.6k tokensUpdated 8 mo ago
    Media & CreativeAuto-check: notes
  • Ffmpeg Skill

    kajisho5/ffmpeg-skill

    Edit video and audio with local FFmpeg from natural-language requests: cut, trim, join, resize/reframe (9:16, 1:1), speed change, captions and subtitles (SRT/ASS, animated, karaoke), logos and text…

    1.9k GitHub stars~7.4k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Claude Real Video

    HUANGCHIHHUNGLeo/claude-real-video

    Watch a video for the user. An agent skill from HUANGCHIHHUNGLeo/claude-real-video.

    2.2k GitHub stars~639 tokensUpdated 2 days ago
    Media & CreativeAuto-check passed
  • Video To Subtitle Summary

    imlewc/video-to-subtitle-summary-skill

    A skill your agent uses when user provides a short video platform URL or local video/audio file and wants subtitles/AI summary, or when user asks to list their own AI Douyin historical tasks.

    218 GitHub stars~4.6k tokensUpdated 2 mo ago
    Media & CreativeAuto-check: notes
  • Video To Notes

    KIRVO-REPORTING/video-to-notes

    Use immediately for any bare YouTube or YouTube Shorts URL, youtu.be link, Bilibili or b23.tv link, or other video URL; do not ask what the user wants.

    105 GitHub stars~1.5k tokensUpdated 1 mo ago
    Media & CreativeAuto-check passed
  • Claude Real Video

    HUANGCHIHHUNGLeo/claude-real-video

    幫 Leo 看影片。當 Leo 丟影片連結(YouTube/IG/TikTok)或本機影片檔,要摘要、分析、拆解對標時使用——Claude 不能直接吃影片,先用這個工具抽關鍵幀+逐字稿+運鏡節奏+聲音/語氣/手勢時間軸再讀。

    2.2k GitHub stars~559 tokensUpdated 2 days ago
    Media & CreativeAuto-check passed

More from jianshuo/claude-skills

All 38 skills in this repo
  • Wjs Segmenting Video

    jianshuo/claude-skills

    A skill your agent uses when the user has a long-form video (interview / lecture / podcast / conversation) and a transcript SRT, and wants to extract 3–6 stand-alone topical short clips from it.

    131 GitHub stars~3.5k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Converting Wp To Hugo

    jianshuo/claude-skills

    A skill your agent uses when migrating a WordPress site to a Hugo static site on GitHub Pages from a WXR export (.xml) plus the wp-content/uploads folder — preserving /archives/<id/ URLs, localizing…

    131 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Burning Subtitles

    jianshuo/claude-skills

    A skill your agent uses when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track.

    131 GitHub stars~3k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Cleaning Spam

    jianshuo/claude-skills

    A skill your agent uses when the user complains about spam on his X/Twitter posts — 同城面付 / 寻固炮 / 线下上门 / 免费破处 这类引流号在他推文下刷的 emoji 垃圾回复 — and wants them removed.

    131 GitHub stars~532 tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Creating Video Book

    jianshuo/claude-skills

    A skill your agent uses when the user wants a book turned into YouTube chapter videos — 每章用 VoiceDrop 读书的有声书 mp3 做音轨,配 GPT Image 2 画面和中心思想大字,输出 1920×1080 横屏视频发 YouTube。Triggers — "把这本书做成视频"…

    131 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Wjs Looping Feedback

    jianshuo/claude-skills

    A skill your agent uses when the user wants to add an in-site feedback loop to a website repo — a floating "提个建议" button where allowlisted visitors submit suggestions that become a GitHub Issue…

    131 GitHub stars~760 tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about Wjs Uploading Video

What does Wjs Uploading Video do?

Upload one or many videos to YouTube. An agent skill from jianshuo/claude-skills. Wjs Uploading Video is an agent skill from jianshuo/claude-skills. Upload one or many videos to YouTube.

When should I use Wjs Uploading Video?

Wjs Uploading Video fits situations like: the user wants to 上传到 YouTube; upload to YouTube; post videos to YouTube; publish a finished final/ directory of MP4s.

How do I install Wjs Uploading Video in Claude Code?

Run `npx skills add jianshuo/claude-skills --skill wjs-uploading-video -a claude-code`. Or copy the skill folder (wjs-uploading-video in jianshuo/claude-skills) into .claude/skills/wjs-uploading-video in your project. Claude Code loads it when a task matches its description.

How do I install Wjs Uploading Video in Codex?

Run `npx skills add jianshuo/claude-skills --skill wjs-uploading-video -a codex`. Or copy the skill folder (wjs-uploading-video in jianshuo/claude-skills) into .agents/skills/wjs-uploading-video in your project. Codex loads it when a task matches its description.

Can I use Wjs Uploading Video in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jianshuo/claude-skills --skill wjs-uploading-video -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wjs-uploading-video, .gemini/skills/wjs-uploading-video, .github/skills/wjs-uploading-video and .opencode/skills/wjs-uploading-video in your project.

What does Wjs Uploading Video need to run?

Going by SKILL.md and its folder, Wjs Uploading Video needs Python for the scripts in its folder and the command-line tools its instructions call (python3, uvx, pip3 and curl). Our summary lists: Python 3.

Does Wjs Uploading Video access the network?

SKILL.md names 1 domain. In commands or code: upload.googleapis.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Wjs Uploading Video safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Wjs Uploading Video use?

Wjs Uploading Video is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Wjs Uploading Video use?

About 2.1k tokens (SKILL.md is roughly 8.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 660 tokens, read only when the agent opens those files.

What are the alternatives to Wjs Uploading Video?

Skills that share tags, products or a category with Wjs Uploading Video: Youtube Clipper (op7418/Youtube-clipper-skill, 2.2k stars), Ffmpeg Skill (kajisho5/ffmpeg-skill, 1.9k stars), Claude Real Video (HUANGCHIHHUNGLeo/claude-real-video, 2.2k stars) and Video To Subtitle Summary (imlewc/video-to-subtitle-summary-skill, 218 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Wjs Uploading Video?

jianshuo (a GitHub user) maintains it in jianshuo/claude-skills, which has 131 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on August 20, 2026.

Source: jianshuo/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.