音频关键字过滤工具 - 根据关键字配置自动识别并删除音频中的指定内容
日本語の概要は準備中です。原文の説明を表示しています。
Upload and fully manage YouTube videos and live events: metadata, thumbnails, captions, playlists, scheduled broadcasts, encoder streams, binding, lifecycle transitions, and cleanup.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Every instruction, step, and check in this SKILL.md must be followed exactly as written — no deviations allowed.
youtube-upload.ts script must be run with all required parameters. Do not simulate or manually construct API calls.First time? If
setup_complete: falseabove, run./SETUP.mdfirst, then setsetup_complete: true.
Upload videos to YouTube with full metadata control.
Use youtube-live.ts to list, inspect, schedule, update, bind, transition, and delete
YouTube Live broadcasts and encoder streams. Mutating commands support --dry-run;
destructive deletion, live/completed transitions, and stream-key disclosure require
explicit --yes. Stream keys are redacted from ordinary output.
The safe default is one dedicated named encoder stream per independent show/event.
Intentional reuse across active or upcoming broadcasts requires --allow-shared-stream.
Read references/live-streaming.md before operating a live
event. Scheduled timestamps must include an explicit timezone (Z or ±HH:MM).
The skill passes --inherit-previous before creation unless the user requests a clean
profile. The raw CLI remains deterministic and offline without that explicit flag.
An interrupted video insert is never retried inside youtube-upload.ts. Recovery must
identify exactly one recent same-title video with a verified non-zero duration. Persistent
P0D exits 42 with PERSISTENT_P0D_VIDEO_ID; unavailable or inconclusive inspection
exits 43 with AMBIGUOUS_UPLOAD_VIDEO_ID. Inspect the channel before another insert.
Caption recovery updates one exact language/name track in place or inserts a new track. It never deletes an existing caption before the replacement upload succeeds.
> in title/description is automatically rewritten to 》< in title/description is automatically rewritten to 《cd ~/.claude/skills/youtube-publisher/scripts
# First time: authenticate
npx ts-node youtube-upload.ts --auth
# Upload video
npx ts-node youtube-upload.ts \
--video /path/to/video.mp4 \
--title "My Awesome Video" \
--description "Check out this amazing content!" \
--tags "tech,ai,tutorial" \
--privacy unlisted
# Upload as YouTube Short (vertical video)
npx ts-node youtube-upload.ts \
--video /path/to/short.mp4 \
--title "Quick Tip #Shorts" \
--description "A quick tip for you!" \
--privacy public \
--short
| Option | Short | Description |
|---|---|---|
--video | -v | Video file path (required) |
--title | -t | Video title (required) |
--description | -d | Video description |
--tags | Comma-separated tags | |
--privacy | -p | Privacy: public, unlisted, private (default: unlisted) |
--category | -c | Category ID (default: 22 = People & Blogs) |
--thumbnail | Custom thumbnail image (local path or URL) | |
--subtitles | Subtitle file path (SRT/VTT) | |
--subtitle-lang | Subtitle language code (default: zh) | |
--subtitle-name | Subtitle display name (default: 中文) | |
--short | Mark as YouTube Short | |
--auth | Run OAuth2 authentication flow | |
--dry-run | Preview without uploading |
Export every public playlist owned by the authenticated channel, including ordered video IDs and thumbnails. The blog synchronizer consumes this deterministic JSON to build /series/, GitHub series pages, and the resource-site guide hub.
This command is read-only. The author manually maintains playlist membership before requesting the final notification; export-playlists.ts must never add, remove, reorder or infer playlist membership. The notification pipeline performs a fresh export, deploys the blog topic pages and verifies their public fingerprint before sending.
cd ~/.codex/skills/youtube-publisher/scripts
npm run export:playlists -- --output /absolute/path/youtube-playlists.json
| ID | Category |
|---|---|
| 1 | Film & Animation |
| 2 | Autos & Vehicles |
| 10 | Music |
| 15 | Pets & Animals |
| 17 | Sports |
| 19 | Travel & Events |
| 20 | Gaming |
| 22 | People & Blogs |
| 23 | Comedy |
| 24 | Entertainment |
| 25 | News & Politics |
| 26 | Howto & Style |
| 27 | Education |
| 28 | Science & Technology |
First-time setup requires OAuth2 authentication:
npx ts-node youtube-upload.ts --auth.youtube-token.jsonToken refreshes automatically. Re-run --auth if expired.
Create scripts/.env:
YOUTUBE_CLIENT_ID=your_client_id
YOUTUBE_CLIENT_SECRET=your_client_secret
Get credentials from Google Cloud Console:
npx ts-node youtube-upload.ts \
-v tutorial.mp4 \
-t "How to Use Claude Code - Complete Guide" \
-d "Learn everything about Claude Code in this comprehensive tutorial.
Timestamps:
00:00 Introduction
02:30 Getting Started
05:00 Advanced Features
#ClaudeCode #AI #Tutorial" \
--tags "claude code,ai,tutorial,anthropic,coding" \
--category 28 \
--privacy public
npx ts-node youtube-upload.ts \
-v short_video.mp4 \
-t "Mind-blowing AI trick! #Shorts" \
-d "This will change how you work! #AI #Tech" \
--privacy public \
--short
npx ts-node youtube-upload.ts \
-v tutorial.mp4 \
-t "Tutorial with Subtitles" \
-d "Learn step by step with subtitles" \
--thumbnail /path/to/cover.jpg \
--subtitles /path/to/subtitles.srt \
--subtitle-lang zh \
--subtitle-name "中文" \
--privacy public
npx ts-node youtube-upload.ts \
-v video.mp4 \
-t "My Video Title" \
--thumbnail "/Users/m/Downloads/shell/work/cover.jpg" \
--privacy public
Use the dedicated recovery command when the video already exists and only its custom thumbnail needs to be uploaded again. It validates the video ID and local JPG/PNG file, retries transient failures, verifies that the target video is readable, and prints structured result markers.
npx ts-node upload-thumbnail.ts \
--video-id VIDEO_ID \
--thumbnail /path/to/cover.jpg \
--attempts 3
This command never deletes or uploads a video. Do not create one-off recovery scripts with hardcoded video IDs or local paths.
On success, returns:
youtube-update-description.ts v1.8(2026-10-01)章节显示契约门禁:上传前校验描述里的章节块必须满足 YouTube 硬规则(首章 0:00 / 每章 ≥10 秒 / ≥3 章),违规拒绝上传并 exit 3(列出具体违规)。原因:任一条不满足时 YouTube 静默忽略整份章节列表——描述看着正常、播放轴却没有章节(2026-10-01 charles_schwab 0:00/0:01 相邻 1 秒,18 章全废)。描述里完全没有章节块时只打 WARN 不拦。修复用 duanku-youtube-publish/scripts/split_description_chapters.py(内置自愈)/ 复检 --validate。youtube-update-description.ts 遇到未知 -- 参数直接报错退出(exit 2),不再静默忽略。背景:当日测试 --dry-run(不存在的 flag)被静默吞掉,截断的测试文件真实上传;fail-fast 杜绝同类误操作。youtube-update-description.ts 现在会在上传前自动剥离 duanku 基线头:--description-file 内容若以 # YouTube description baseline 开头(run_pipeline v2.46+ 落盘的人工 diff 参照文件),去掉头部注释块后上传并打印 NOTE: stripped baseline header before upload (v1.7 guard)。# 注释泄漏到线上 YouTube 说明区(tello/capital_one 由用户手工清除,maya 已由本版本修复)。守卫落在上传口,此后任何调用路径都无法再把头推上线。upload-thumbnail.ts with parameter validation, bounded retry, target-video verification, and structured output.media.mimeType for better upload compatibilityまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
音频关键字过滤工具 - 根据关键字配置自动识别并删除音频中的指定内容
日本語の概要は準備中です。原文の説明を表示しています。
🔥 用 Gordon Ramsay 风格毒舌吐槽代码质量,生成搞笑且实用的代码审查报告
日本語の概要は準備中です。原文の説明を表示しています。
通用图片生成 Skill,支持多种 AI 模型(ModelScope、Gemini、RunningHub 等),可被其他 Skills 调用
日本語の概要は準備中です。原文の説明を表示しています。
Automate the full QuarkPanTool → mswnlz GitHub content publishing pipeline. Supports Quark / Baidu / Aliyun drives with multi-account rotation. Use when the user provides share URLs and wants: (1) auto-detect drive type and route to correct handler, (2) save resources with automatic account rotation, (3) clean junk files from shared folders, (4) copy promotional files into each folder, (5) generate permanent encrypted share links, (6) auto-classify items into local content dirs (book/movies/AIknowledge/tools/etc.), (7) append/update YYYYMM.md and README index, (8) local git commit, (9) send unified Telegram notifications to multiple groups, (10) rebuild site and deploy to Cloudflare Pages.
日本語の概要は準備中です。原文の説明を表示しています。
文本转语音工具 - 默认 MiniMax TTS,支持切换 Edge TTS 和 Kokoro TTS (v1.1-zh)
日本語の概要は準備中です。原文の説明を表示しています。
视频变声处理工具 - 从视频提取音频,调用 voice-changer skill 变声后合并回视频。用户要求视频变声、给视频换声音、视频音色转换或处理视频音频时使用。
日本語の概要は準備中です。原文の説明を表示しています。