Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Lesson Publish

ASecurity

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 lesson video to YouTube. Vertical videos from ~/Movies/lpm-lessons/tiktok/ go to YouTube Shorts through short-publish instead.

152 stars
0 votes
0 copies
0 views
Added 10/7/2026
developmentgonode

Works with

claude codeterminalclimcp

Security Analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned 10/7/2026

$npx -y skills add gug007/lpm --skill lesson-publish --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lesson Publish?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Lesson Publish
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/gug007-lesson-publish/badge)](https://www.skillsdirectory.com/skills/gug007-lesson-publish)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: lesson-publish
version: 1.2.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 lesson video to YouTube. Vertical videos from ~/Movies/lpm-lessons/tiktok/ go to YouTube Shorts through short-publish instead."
---

Upload a lesson video to YouTube and publish it.

- run `node scripts/prepare.js <slug or lesson folder> <scratchpad-dir>` first. It refuses a lesson whose checks failed or are older than the MP4 (`qa/report.json`, written by lesson's `make.js`); show the user the FAIL lines, and only with their go-ahead pass `--accept "<their reason>"`. It copies the MP4 into the scratchpad under the video title (the file name becomes the initial title in Studio; it warns when that dropped a ":" to retype), the thumbnail (the opening card, rendered by `make.js`), the captions (`<slug>.srt`), and writes `<slug>-description.txt` and `<slug>-tags.txt`, and prints the chapters. 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.
- the description and tags come from `lesson.json` `"youtube": { "hook": [two lines], "learn": [...], "tags": [...], "hashtags": [...] }`: write that block first when the lesson has none (prepare.js says so), then run prepare.js again, so a replacement upload reuses the same words.
- captions: in the Details step's "Subtitles" (or later under Subtitles in Studio), Add language → English → Add subtitles → Upload file → With timing → the `.srt` from the scratchpad → Publish. They carry the script's own words (`lpm`, `Claude Code`, `Codex`), which YouTube's auto-captions get wrong. In the current dialog Subtitles sits under Video elements and its Add stays greyed until Details → Show more → Video language is set (English); after "With timing", do not press Continue (it opens the macOS file picker): `file_upload` the `.srt` into the `#captions-file-loader` input, then Done.
- thumbnail: the lesson's own `thumbnail.jpg`, never YouTube's auto-pick: with a `cover` in `lesson.json` it is that cover (words beside a crop of the take on the card canvas, approved 2026-09-30), otherwise the opening title card; prepare.js copies it and it is uploaded in the Thumbnail step. A new channel gets a few custom thumbnails a day; past that the upload answers "Build your channel history" and nothing is set: leave the video a private draft (untick the playlist so no private row shows) and publish the next day with the thumbnail, unless the user says otherwise.
- title: the lesson title from `lesson.json`, nothing appended (no "(Mac Tutorial)"), brand is lowercase `lpm`, 100 characters max.
- description: prepare.js assembles it in this order: 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: topic cards and `"chapter"` narration lines in lesson.json), 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 run `node scripts/register.js <slug> <youtu.be link>`: it records the upload in the lesson folder (`published.json`), puts the link on the lesson's line in `YOUTUBE_PLAYLIST.md` (appending the line when it is missing; move it to its series position if needed) — that file is the order of record — and prints the entry for `website/lib/youtube-lessons.ts`; add it there and link it from the page about that feature. 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.

Attribution

gug007gug007
View sourceSee grades on GitHubMore from gug007 →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Clean Code

Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments

304955 votes

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

286712 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2222 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Writing Plans

Use when you have a spec or requirements for a multi-step task, before touching code

2927051 votes
View all in development →