publish
Skill126 starsChanged 27 days agoMITView on GitHub
Gets a finished video out on YouTube (Shorts or long), Instagram Reels and TikTok - picks the video, makes the light export for Instagram and TikTok, the cover, the caption and the YouTube title, sets the time, shows the plan, then after the creator's yes publishes through Treg on their own connected accounts (setup included), or hands a ready-to-post kit when Treg isn't set up. Use when the user says publish, post it, schedule, upload to YouTube, put it on Instagram, TikTok, publier, poster, programmer, mets-le en ligne.
- Pipes a download into a shell
60 other projects use a version of this.
Adopted by
Most recently taken up by
- jskswamy/skillstheir own version, first seen Nov 8, 2026
- ai-search-guru/getcito-worlds-first-open-source-aio-aeo-or-geo-tooltheir own version, first seen Nov 8, 2026
- Mharbulous/probanda-devtheir own version, first seen Nov 8, 2026
- hyperstructure/sandboxtheir own version, first seen Nov 8, 2026
- will-17173/telegram-clitheir own version, first seen Nov 8, 2026
- pche-broken-artist/forge-of-thoughttheir own version, first seen Nov 6, 2026
Used with
Projects with it also use create, render and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillcreate
Also in 4 projects that use this
suxrobGMSkillrender
Generate raster images (PNG, JPEG, WebP) from natural language prompts using Python rendering engines. Covers graphics, charts, layouts, and procedural art. Not for SVG output.
Also in 3 projects that use this
JaimeGBASkillingest
Digest an external source (article, paper, transcript, URL, book chapter) and integrate its content into the knowledge base
Also in 6 projects that use this
genomewalkerSkillexplore
RLM-style recursive memory exploration - dynamically navigate the memory graph
Also in 4 projects that use this
GoogleSkilltranslate
Translates a common phrase into one or more languages.
Also in 3 projects that use this
VercelSkillsetup
Set up Vercel CLI and project configuration. Use when the user says "set up Vercel", "configure Vercel", "link to Vercel", or "vercel init".
Also in 14 projects that use this
Other versions60 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 60
- code-yeongyu/oh-my-opencode★ 71ksame name
- code-yeongyu/oh-my-openagent★ 71ksame name
- garrytan/gbrain★ 32ksame name
- TencentCloud/Octop★ 12ksame name
- harbor-framework/harbor★ 6.9ksame name
- laude-institute/harbor★ 6.9ksame name
- Q00/ouroboros★ 6.3ksame name
- paean-ai/deeptide★ 1.1ksame name
- ZimoLiao/scholaraio★ 585same name
- ai-search-guru/getcito-worlds-first-open-source-aio-aeo-or-geo-tool★ 432same name
50 more not listed
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 repository12 other files it gives its agents.
- brollSkill
- clipsSkill
- codex-imagesSkill
- editingSkill
- insta-auditSkill
- outliersSkill
- short-editingSkill
- short-translateSkill
- stealSkill
- studio-scriptSkill
- studio-setupSkill
- voxSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 5 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 49 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 28
Read the format with ffprobe: vertical (a short, for YouTube Shorts, Reels and TikTok) or horizontal (a long video, YouTube only by …
- Distinctive: line 48
Connect: only the platforms they post on, each opens the platform's own login:
- Very specific: line 65
Check its size, and that it decodes: ffmpeg -v error -i <edit>/social.mp4 -f null -.
- Distinctive: line 78
TikTok caption: only when it should differ (shorter, other hashtags).
- Very specific: line 82
Run the humanize pass of studio-script (its references/humanize.md) on all of them when that skill is installed.
- Very specific: line 115
Before each call, treg catalog get <id> for the exact parameters (they change).
- Very specific: line 128
PUT social.mp4 to the returned upload_url with Content-Type: video/mp4 and Content-Range: bytes 0-<size-1>/<size>.
- Very specific: line 136
PUT <video> to the session URL it returns.
- Distinctive: line 139
No session URL in the answer: go manual for YouTube.
- Very specific: line 143
Write <edit>/published.md, one line per platform: date, time, route, and the link (https://youtube.com/shorts/<id> or …
- Distinctive: line 152
Only post videos the creator owns or has the rights to, music included.
“Common” is measured: kept by at least 6 in 10 of the 49 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Publish
One finished video out, on the creator's own accounts. Making it is /short-editing.
Nothing is posted before the creator's explicit yes on the plan of step 5. That yes covers that video only.
Talk to them in their language. <edit> = video-agent/edits/<slug>/.
1. Which video
First match wins:
- A path, a slug or a title they give:
<edit>/output/<name>.mp4(<edit>=video-agent/edits/<name>/, never the-roughcut). - The video finished in this conversation.
- Nothing: the newest
video-agent/edits/*/output/*.mp4(not-rough). Name it in the plan.
<video> below = that file; post.md sits next to it in output/.
Then check <edit>/published.md: already there with this platform, say so and stop (unless they want to post it again).
Read the format with ffprobe: vertical (a short, for YouTube Shorts, Reels and TikTok) or horizontal (a long video, YouTube only by default).
2. Setup Treg (once)
Treg posts for them on their own accounts, free. Check:
treg --version
treg connections lsEach platform they post on must show in the list with posting rights (scopes with content_publish on Instagram, video.publish on TikTok, youtube.upload or youtube on YouTube).
Missing: explain in one line, ask, then:
- Install (macOS and Linux; on Windows use the MCP:
claude mcp add --transport http treg https://treg.to/mcp/, then/mcpto sign in):curl -fsSL https://treg.to/install.sh | sh treg login - Connect only the platforms they post on, each opens the platform's own login:
Instagram needs a professional account (Creator or Business, free switch in the app's settings).treg connections connect --provider instagram --capability post treg connections connect --provider tiktok --capability post treg connections connect --provider youtube --capability post
They don't want Treg: the manual route (6a) works with no setup.
3. The files
- Master:
<video>, full quality, for YouTube. - Social export (shorts only):
<edit>/social.mp4, H.264 + AAC, under 30 MB so Treg can host it for Instagram (TikTok accepts up to 64 MB). Missing or older than the master, re-encode at a bitrate that fits (about 28 MB × 8000 ÷ duration in seconds, minus 160 kb/s of audio, in kb/s):
Check its size, and that it decodes:ffmpeg -y -i <video> -c:v libx264 -preset slow -b:v <rate>k -maxrate <rate>k -bufsize <2x rate>k -pix_fmt yuv420p -c:a aac -b:a 160k -movflags +faststart <edit>/social.mp4ffmpeg -v error -i <edit>/social.mp4 -f null -. - Cover:
<edit>/cover.jpg, always. Without one, Instagram takes frame 0, often a blink or a blank frame. Images already made with/codex-imagesin<edit>/images/: show them, the one they pick is copied as<edit>/cover.jpg. Otherwise pick it from the hook: the face with the eyes open, the hook card fully in. Contact sheet of the first 3 seconds, read it, then extract the chosen time<t>:
Vertical: keep the key visual inside the central 3:4 (y 240 to 1680), the profile grid crops to it. A long video: a 1280x720 thumbnail is better; offerffmpeg -v error -y -ss 0.1 -t 3 -i <video> -vf "fps=10,scale=270:-1,tile=6x5" -frames:v 1 video-agent/.tmp/hook-sheet.jpg ffmpeg -v error -y -ss <t> -i <video> -frames:v 1 -q:v 2 <edit>/cover.jpg/codex-imagesto make one, or use a frame.
4. The texts
From <edit>/output/post.md (written by short-editing) when it exists, else from the video's script or transcript and video-agent/voice.md, in the video's language:
- Caption (Instagram and TikTok): a first line that hooks without repeating the spoken hook word for word (the first 125 characters show before "more"), 2 to 4 short lines on what the viewer gets, the ask from voice.md, then 3 to 5 hashtags of the topic. No #fyp, no wall of emoji.
- TikTok caption only when it should differ (shorter, other hashtags).
- YouTube title: Shorts under 60 characters, long under 70, the promise of the video, true to it.
- YouTube description: the caption, the chapters for a long video (from post.md), then their links (ask once and add them to voice.md).
Run the humanize pass of studio-script (its references/humanize.md) on all of them when that skill is installed. Every name, number and claim comes from the video; none is added. Save them in <edit>/output/post.md, one heading per text.
5. The plan (mandatory)
- Platforms: a short goes to YouTube + Instagram + TikTok, a long video to YouTube, unless they name others.
- Time: the one they give (written in their local time and in UTC), else now.
- Route per platform: Treg (connected) or manual. Instagram and TikTok have no scheduling through Treg: they post now. YouTube can wait for a date (private +
publishAt). A later time on Instagram or TikTok: run/publishagain at that time, or go manual and use the app's scheduler.
Show it and wait for a clear yes:
PLAN · budget-margins · 0:47 · social.mp4 18 MB
Cover: cover.jpg (0.8 s) [shown as an image]
YouTube Shorts · Treg · 2026-10-11 18:00 Paris (16:00 UTC) · private until then
Instagram Reel · Treg · now
TikTok · manual (not connected)
Title: Your margin is lying to you
Caption: ...
Reply yes to publish, or tell me what to change.A change on the plan: apply it, show the plan again.
6a. Manual
Open the folder (macOS open <edit>, Windows explorer <edit>, Linux xdg-open <edit>), then give the steps:
- YouTube: studio.youtube.com → Create → Upload videos →
<video>→ title and description fromoutput/post.md,cover.jpgas thumbnail → Visibility → Schedule or Public. - Instagram: the app → + → Reel →
social.mp4→ the caption → Edit cover → Add from camera roll →cover.jpg→ Share (or Schedule in the advanced settings of a professional account). - TikTok: the app or tiktok.com/upload →
social.mp4→ the caption → cover at the cover time → Post (or Schedule on the web).
6b. Treg
Before each call, treg catalog get <id> for the exact parameters (they change). All of these are free on their own accounts. Keep stdout only (2>/dev/null). One platform failing never blocks the others.
Instagram reel
- Host the files (30 MB max each, 7 days):
treg host <edit>/social.mp4andtreg host <edit>/cover.jpgprint public URLs. instagram.instagram.media.container.createwithig_user_id(theresource_refof their Instagram intreg connections ls),media_type=REELS,video_url,cover_url,caption.- Poll
instagram.instagram.media.container.statusevery 10 s untilFINISHED(ERROR: show it and stop for Instagram). instagram.instagram.post.publishwith the container id. Then itspermalink(instagram.instagram.user.postswithfields=id,permalink, the newest one).
TikTok
tiktok.tiktok.creator.info: the privacy options they may use.tiktok.tiktok.video.publish.initwith the caption, aprivacy_levelfrom that list (public when it is there),video_cover_timestamp_ms= the cover time in ms (TikTok takes a frame, never an image), andsource_infoFILE_UPLOADwith the file size as one chunk.- PUT
social.mp4to the returnedupload_urlwithContent-Type: video/mp4andContent-Range: bytes 0-<size-1>/<size>. - Poll
tiktok.tiktok.publish.statusuntil it is published.
An answer unaudited_client_can_only_post_to_private_accounts (or only SELF_ONLY in the options): send it to their TikTok inbox instead with tiktok.tiktok.video.inbox.init (same upload, no caption), and tell them to open TikTok within 24 hours, paste the caption and post.
YouTube
youtube.youtube.video.uploadwithuploadType=resumable, the snippet (title, description) andstatus{"privacyStatus": "private", "selfDeclaredMadeForKids": false}plus"publishAt": "<UTC ISO time>"for a date ("public"for now).- PUT
<video>to the session URL it returns. youtube.youtube.video.thumbnail.setwithcover.jpg(works on verified YouTube accounts; a refusal is fine, say it).
No session URL in the answer: go manual for YouTube.
7. Record it
Write <edit>/published.md, one line per platform: date, time, route, and the link (https://youtube.com/shorts/<id> or https://youtu.be/<id>, the reel, the TikTok) once live. Manual route: write it when they say it is posted.
Then say what is live, the links, and offer /insta-audit in a week to see how it did.
Honest limits
- Instagram and TikTok can't be scheduled through Treg, only posted now. Their own apps can schedule.
- TikTok keeps posts from new third-party apps private until the app is audited; the inbox route works around it.
- A platform can refuse a video (length, format, music rights). The error is shown as is; the manual route always works.
- Only post videos the creator owns or has the rights to, music included.
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.

