Publish to YouTube
reelson publish <slug> uploads the rendered video to channels listed under "channels" in
reelson.config.json. reelson channels init adds starter ones.
"channels": { "youtube": { "type": "youtube", "privacy": "unlisted", "playlist": "PL…", "footer": "https://acme.test" }, "shorts": { "type": "youtube", "format": "portrait", "privacy": "public", "tags": ["acme"] }}formatpicks the render:landscape(the default),portraitorsquare. Render it first.- The title comes from
video.json. The description is the subtitle plus the numbered steps, then the channel’sfooter. To word them yourself, usevideo.json"publish": { "title", "description", "tags" }. - The
.srtcaptions go up too ("captions": falseskips them), and the video is added toplaylist. channelId(UC…) guards against signing in to the wrong channel.
Set up YouTube once
Section titled “Set up YouTube once”-
In a Google Cloud project, enable the YouTube Data API v3.
-
Set up the OAuth consent screen and add yourself as a test user.
-
Create an OAuth client of type Desktop app. Put its id and secret in the
.envnext toreelson.config.json:.env YOUTUBE_CLIENT_ID=….apps.googleusercontent.comYOUTUBE_CLIENT_SECRET=… -
Sign in through the browser (pick the brand channel if the account has several):
Terminal window reelson channels login youtubereelson channels # who each channel is logged in as
Sign-ins are kept in ~/.config/reelson/credentials/, never in the project.
Publish, replace, update
Section titled “Publish, replace, update”reelson publish <slug> --dry-run # what would go upreelson publish <slug> --to youtube,shorts # or --all-channels; asks without eitherWhat went where is kept in the demo’s published.json (commit it). Publishing again skips those
channels unless you pass one of these:
| Flag | Does |
|---|---|
--replace |
After a re-record: uploads the new render and makes the old video private (never deletes it). YouTube can’t swap the file behind a URL, so the id changes. Link through a URL of your own and point it at the new id. |
--update |
Fixes the words: rewrites the title, description, tags, captions and playlist. The URL, views and comments stay, and the video file and privacy are untouched. |
--again |
Uploads a second copy. |