Publish a finished lesson MP4 from ~/Movies/lpm-lessons/<slug>/ to the lpm YouTube channel through Chrome (YouTube Studio): search-optimized title and description with chapters, tags, category, the title-card thumbnail, Public, then added to the lesson playlist. Use when the user asks to upload, publish or post a video to YouTube.
Scanned 9/20/2026
Install to Claude Code
npx -y skills add gug007/lpm --skill youtube-upload --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Youtube Upload?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gug007-youtube-upload)More formats (shields.io, HTML) on the badges page.
---
name: youtube-upload
version: 1.1.0
argument-hint: "<lesson-slug>"
description: "Publish a finished lesson MP4 from ~/Movies/lpm-lessons/<slug>/ to the lpm YouTube channel through Chrome (YouTube Studio): search-optimized title and description with chapters, tags, category, the title-card thumbnail, Public, then added to the lesson playlist. Use when the user asks to upload, publish or post a video to YouTube."
---
Upload a lesson video to YouTube and publish it.
- run `node scripts/prepare.js <slug> <scratchpad-dir>` first: it copies the MP4 into the session scratchpad under the video title (the file name becomes the initial title in Studio), extracts the title-card thumbnail (1280x720 JPEG, taken inside the opening card) next to it and into the lesson folder, and prints the chapter candidates (each narration line's start as m:ss). Chrome's `file_upload` only accepts files inside the scratchpad and under 10,000,000 bytes; when the master is larger, prepare.js writes a 1080p HEVC two-pass copy that fits instead (H.264 at that bitrate smears terminal text). YouTube gets the smaller copy; the master stays in the lesson folder.
- thumbnail: always the video's own opening title card (the beige text screen), never an app screenshot or YouTube's auto-pick; prepare.js extracts it and it is uploaded in the Thumbnail step.
- title: the lesson title from `lesson.json`, nothing appended (no "(Mac Tutorial)"), brand is lowercase `lpm`, 100 characters max.
- description: a two-line keyword hook (what the video shows, for whom), one line on what lpm is (starts, stops, duplicates and switches between local dev projects on a Mac, with a built-in terminal for AI coding agents such as Claude Code and Codex), the link `https://lpm.cx` (never the demo link `lpm.cx/demo`, user rule 2026-09-19), "What you'll learn" bullets, "Chapters" (first at 0:00, at least three, each 10 s or longer, from prepare.js), one series line, 5–6 hashtags (#lpm #macOS #devtools …). No `@` anywhere (it opens a mention popup) and no next-lesson teaser.
- tags: 15–20 comma-separated (lpm, lpm.cx, the lesson's own verbs and nouns, Claude Code, Codex, mac dev tools, tutorial), under 500 characters. Category Science & Technology. Audience "No, it's not made for kids". Visibility Public. Playlist: the one in `YOUTUBE_PLAYLIST.md` (repo root: heading = playlist title, then its URL, then the lesson titles in series order).
- browser (Claude in Chrome MCP on the user's logged-in Chrome; channel "LPM"): `navigate https://www.youtube.com/upload` → `find` the file input → `file_upload` the MP4 → wait ~5 s → `find` the title and description textboxes, click + `type` → Thumbnail "Upload file" input → `file_upload` the JPEG → Audience radio → "Show more" → Tags textbox (type a comma after every tag) → Category: open the menu, take a full-scale screenshot, click the option by coordinate and `zoom` to verify (a click by `find` ref lands on the hovered row) → Playlists box (coordinate click) → tick the playlist → Done → Next ×3 → Public radio → Publish → copy the link from the "Video published" dialog.
- replacing a published lesson: YouTube cannot swap the file on an existing video, so upload the new cut as a new video (same title, description recipe and thumbnail), then set the old one to Private on `studio.youtube.com/video/<id>/edit` (Visibility box → Private → Done → Save; the Save button stays active until the change is saved). Deleting the old video is the user's call.
- never press Escape inside the upload dialog: it closes the dialog. The upload is already saved as a private draft; reopen it with "Edit draft" on the row. Later edits go through `studio.youtube.com/video/<id>/edit`, then Save.
- playlist, after Publish: the video must end up in the playlist from `YOUTUBE_PLAYLIST.md`, at the position its title has in that list. Preferred path is inside the upload dialog's Details step: the Playlists box ("Select") sits under the description; open it with a coordinate click (a ref click after `scroll_to` did not open it), tick the playlist, Done. If it was skipped, use `studio.youtube.com/video/<id>/edit` → Playlists → tick → Done → Save. The playlist is manually sorted and a new video is appended last, so uploading in series order needs nothing more; otherwise open `https://www.youtube.com/playlist?list=<id>` on the logged-in account, and use the row's ⋮ menu (Move to top / Move to bottom) or drag the ≡ handle until the order matches the file. Then append the lesson title as a new `- ` line at the end of `YOUTUBE_PLAYLIST.md` (or insert it at its series position) — that file is the order of record. Studio's playlist page (`studio.youtube.com/playlist/<id>/videos`) lists and removes videos but cannot reorder them.
- verify before reporting: the row in Channel content shows Public, the thumbnail is the beige title card, the title has no suffix, and the playlist page shows the video in the right position. Report the youtu.be link, the title, the description text and the playlist position. External links stay plain text until the channel completes YouTube's one-time verification (a phone step only the user can do); say so once.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!