Create a Google Cloud project
At console.cloud.google.com, create a new project for your channel.
Purffle / PurffleShorts / Guides
Rendering is the easy half. Publishing without touching YouTube Studio means an API project, an OAuth login and a daily quota. Here is how each piece works, and how to set it up once.
There is no scraping and no browser automation. Uploads go through the official YouTube Data API v3, using an API project you own and a one-time OAuth sign-in to your channel. PurffleShorts keeps the token locally and reuses it for every upload.
YouTube treats a vertical video of up to three minutes as a Short. PurffleShorts renders 1080×1920 at your chosen
length (--duration 45, for example), so every upload lands in the Shorts feed.
At console.cloud.google.com, create a new project for your channel.
In APIs & Services → Library, find YouTube Data API v3 and enable it.
Configure the OAuth consent screen, then create an OAuth client ID of type Desktop app.
Download the client JSON and save it in the PurffleShorts folder as credentials.json. Keep it out of any public repository.
Run the command below and sign in with the Google account that owns the channel:
python -m purffle_shorts authauth, or publish the consent screen. And YouTube's API terms
say videos uploaded from unverified API projects created after 28 July 2020 are restricted to private
viewing until the project passes a compliance audit. Check Google's current wording before you rely on public
uploads.Every API project gets a default of 10,000 units a day. One upload costs 1,600.
10,000 ÷ 1,600 = 6.25 → 6 uploads a day
That is why PurffleShorts defaults to YT_DAILY_LIMIT=6. It can render more than that; extra videos wait
in a queue and upload after the quota resets at midnight Pacific time. On autopilot the queue is
drained first, and production waits instead of piling up.
Instead of publishing the moment a render finishes, give it time slots:
PUBLISH_TIMES=09:00,14:00,19:00
TIMEZONE=Asia/Kolkata
Each video is uploaded as private and scheduled into the next free slot. Render a week in one sitting, review it,
and let it release on its own. For a one-off, YT_PRIVACY accepts public,
unlisted or private.
SYNTHETIC_MEDIA=true sets YouTube's altered or synthetic content disclosure.
MADE_FOR_KIDS and PLAYLIST_ID are set too.short.mp4, cover.jpg, captions.srt,
script.json and metadata.json — ready to post to TikTok or Reels by hand. Auto-upload is
YouTube only.--env-file .env.channel2.| What you see | Why | Fix |
|---|---|---|
Videos stay queued | The day's quota is used up. | They upload after midnight Pacific. upload --pending retries now. |
| Sign-in stops working after a week | OAuth app still in Testing status. | Run auth again, or publish the consent screen. |
| Uploads stay private | Unverified API project. | Apply for the YouTube API compliance audit. |
| Not sure what is wrong | Run doctor — it checks the YouTube setup along with everything else. |
python -m purffle_shorts history lists everything made so far, with links.