yt-upload
Skill3 starsChanged 34 days agoMITView on GitHub
Upload a video to YouTube with the right options: title, description, tags, language, privacy, thumbnail; asks about made-for-kids.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- tylerprogramming/claude-skillstheir own version, first seen Aug 9, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- tylerprogramming/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository50 other files it gives its agents.
- automationsSkill
- commentsSkill
- hooksSkill
- ig-auditSkill
- ig-captionSkill
- ig-carouselSkill
- ig-dmSkill
- ig-humanSkill
- ig-profileSkill
- ig-reelSkill
- ig-storySkill
- ig-viralSkill
- inboxSkill
- linkedin-comment-drafterSkill
- linkedin-content-plannerSkill
- linkedin-employee-advocacySkill
- linkedin-engager-analyticsSkill
- linkedin-hook-extractorSkill
- linkedin-humanizerSkill
- linkedin-interviewerSkill
- linkedin-post-writerSkill
- linkedin-profile-optimizerSkill
- linkedin-reply-handlerSkill
- linkedin-repurposerSkill
- linkedin-thread-monitorSkill
- naver-ai-citeSkill
- naver-draftsSkill
- naver-engageSkill
- naver-keywordsSkill
- naver-postSkill
- performance-reviewSkill
- publishSkill
- repurposeSkill
- schedule-weekSkill
- setupSkill
- threadsSkill
- troubleshootSkill
- voice-profileSkill
- yt-auditSkill
- yt-benchmarkSkill
- yt-chaptersSkill
- yt-commentSkill
- yt-editSkill
- yt-packageSkill
- yt-planSkill
- yt-retentionSkill
- yt-scriptSkill
- yt-seoSkill
- yt-shortsSkill
- yt-viralSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
Call select_channels with scope youtube.
- Very specific: line 14
If a call answers workspace_required, show the workspaces it lists, ask which one, and pass workspaceId on every later call, publish …
- Very specific: line 15
If a voice file exists at ~/.uplika/<workspace-slug>/voice.md, write the title and description in that voice.
- Distinctive: line 37
Ask which time zone the person means.
- Very specific: line 43
No shell and the file is on the person's device: media_upload_link, give them the link, and poll media_upload_status until it is ready.
- Very specific: line 63
Call get_help with the error code and pass its answer and link on (for example youtube_title_required, youtube_title_too_long or …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
yt-upload
One video to the person's connected YouTube channel, with every option set on purpose. Use it whenever a video goes to YouTube through Uplika: a finished long video, a Short (yt-shorts sends the file here), or a slot from yt-plan. For the title and thumbnail use yt-package first; for the description and tags, yt-seo.
Before you start
- Read YouTube's rules from
list_platforms(the YouTube entry), never from memory: the title limit and how it is counted, the description limit and how it is counted, the accepted video files, theshortsrule, andoptions, the schema of everyoptions.youtubefield. (Uplika's publish-options tool is for TikTok only; it does not apply to YouTube.) - Call
select_channelswith scopeyoutube. It returns theaccountIdsto pass topublish, andskippedwith a sentence and a reconnect link when the connection has expired. Nothing connected: send the person to https://uplika.com/dashboard/connections. - If a call answers
workspace_required, show the workspaces it lists, ask which one, and passworkspaceIdon every later call,publishincluded. - If a voice file exists at
~/.uplika/<workspace-slug>/voice.md, write the title and description in that voice; if not, thevoice-profileskill can create it.
The options
The post's content is the video description. Everything else goes in options.youtube:
| Field | What to do |
options.youtube.title | Required. Write it with yt-package if the person has none |
options.youtube.tags | Search tags. The list has a total length limit (list_platforms). Tags barely matter; yt-seo says which are worth having |
options.youtube.categoryId | Leave it out unless the person names a category |
options.youtube.defaultLanguage | The language the title and description are written in, one BCP-47 code such as en-US or ko. Left out, none is sent |
options.youtube.privacyStatus | public, unlisted or private. Ask. Left out, the video goes up private and the result says so |
options.youtube.madeForKids | Ask every time the person has not said whether the video is made for kids, and send true or false only from their answer. Never send it on your own. If they will not say, leave it out: the channel's own default applies, and if the channel has none either, YouTube Studio will not save other edits to the video until someone picks an audience, so tell them |
options.youtube.containsSyntheticMedia | true when the video has realistic altered or AI-generated people, places or events; ask when it might. A media id uploaded with aiGenerated turns it on unless you send false |
options.youtube.thumbnailMediaId | A JPEG or PNG media id. Long-form only, and only on a verified channel: a Short takes no custom thumbnail (the shorts rule in list_platforms) |
options.youtube.publishAt | YouTube's own release time: the video uploads now as private and YouTube makes it public then. Only with options.youtube.privacyStatus private, on a video that was never public |
When it goes out
scheduledAton the post (ISO 8601 with a time zone offset): Uplika keeps the file and uploads it at that time, the way it schedules every channel. Use it when the video should go out together with posts on other channels.options.youtube.publishAt: the upload happens now and YouTube makes it public later, so the video is processed and can be checked in YouTube Studio before it goes live.- Ask which time zone the person means; do not guess.
The file
- With a shell (Claude Code, Codex, OpenClaw, Hermes) and a local file:
media_presignwith the file name, content type, size andaiGeneratedwhen it applies; PUT the bytes to the returneduploadUrlwith curl and the same content type; thenmedia_complete. - A file at a public https address:
media_from_url. Google Drive and Dropbox share links are preview pages, not files; ask for a direct link. - No shell and the file is on the person's device:
media_upload_link, give them the link, and pollmedia_upload_statusuntil it is ready. - A thumbnail image goes through the same steps; its media id goes in
options.youtube.thumbnailMediaId, not inmediaIds. mediaIdsholds the one video file: a YouTube post carries no images.
Confirm, then upload
- Show the person everything that will go out: the channel and handle, the title, the full description, tags, language, privacy, the made-for-kids answer, the synthetic-media flag, the thumbnail, and when (now,
scheduledAtorpublishAt, with the time zone). - Upload only after they approve:
publishwithaccountIds,content,mediaIds,options, andwait: true, plusscheduledAtfor a later time. Before several uploads in a row,get_quotashows how much of today's allowance is already used. - A wait that runs out is not a failure: a video takes time. Check with
get_postinstead of uploading again.
Report
Call get_post with the returned id: the status, the link and the warning. Read the warning out as it is: it says when YouTube applied a different privacy than you asked for, when the video went up private because no privacy was set, when a thumbnail could not be applied, and when the channel's audience is not set. Do not tell the person the video is public until the result says so.
After it is up
update_post changes the title, description, tags, language, privacy (private to public, for example) or thumbnail of the same video, at the same link; pass wait: true. Always send options.youtube.title (on a video uploaded through Uplika, options replaces what Uplika has on record and YouTube needs a title) and the full current description as content, so an edit made in YouTube Studio is not overwritten. The file itself cannot be replaced (youtube_video_not_replaceable): a new cut is a new upload.
When something fails
Call get_help with the error code and pass its answer and link on (for example youtube_title_required, youtube_title_too_long or media_expired). account_disconnected and reconsent_required go to the troubleshoot skill.
A target that ends with youtube_daily_cap, or a call that answers youtube_quota_exhausted, means Uplika's daily YouTube limit, which everyone on Uplika shares, ran out: stop and do not repeat the call, tell the person when it refills (resetsAt, or the time in the message), and do not ask them to reconnect, because it is not their account (faq:youtube-daily-limit). Nothing went out, so send the video again after that time, not before; get_quota shows paused while it lasts.
Tools
list_platforms: YouTube's rules and theoptions.youtubeschemaselect_channels: the YouTube account to upload tomedia_presign: upload slot when you can PUT the file yourselfmedia_complete: confirm that uploadmedia_from_url: a video or thumbnail at a public https addressmedia_upload_link: let the person upload from their devicemedia_upload_status: wait until that upload is readypublish: upload the approved video, now or atscheduledAtget_quota: today's upload allowance before several uploadsget_post: status, link and warningsupdate_post: change the title, description, tags, privacy or thumbnail afterwardsget_help: the answer for an error code
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

