Communitygithub.com

lalomorales22/toonkit-shorts

Install ToonKit Shorts (Python deps, ffmpeg, free Piper voices, whisper timing model, YtKit) and, only if the user wants uploads, walk them through the free Google Cloud OAuth setup for their own YouTube channel. Use when the user installs the plugin, asks to set it up, or uploads fail with auth errors.

What is toonkit-shorts?

toonkit-shorts is a Claude Code agent skill that install ToonKit Shorts (Python deps, ffmpeg, free Piper voices, whisper timing model, YtKit) and, only if the user wants uploads, walk them through the free Google Cloud OAuth setup for their own YouTube channel. Use when the user installs the plugin, asks to set it up, or uploads fail with auth errors.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lalomorales22/toonkit-shorts/tree/HEAD/skills/setup

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

ToonKit Shorts: setup

Everything here is $0. Rendering needs no accounts at all. Uploading needs the user's own Google account.

1. Render stack (no accounts)

  1. Need: python3 3.10+, ffmpeg with libass (brew install ffmpeg / sudo apt install ffmpeg), Node 18+ only for uploads.
  2. From the plugin root: ./setup.sh (or SKIP_YTKIT=1 ./setup.sh for render-only). It creates toonkit/.venv, installs toonkit/requirements.txt, downloads every Piper voice named in toonkit/look.yaml and toonkit/looks/*.yaml into toonkit/voices/ (from huggingface.co/rhasspy/piper-voices), caches faster-whisper small.en, npm installs YtKit, and creates toonkit/look.yaml from the mort-and-blitz preset if missing.
  3. Verify: ./test.sh (renders the sample episode offline, then a DRY_RUN upload). It must print ALL TESTS PASSED.

2. YouTube uploads (optional, the user's own Google account)

Walk the user through this in their browser. Never ask them to paste secrets into chat.

  1. https://console.cloud.google.com → create a project (e.g. ytkit). "No organization" is fine for personal accounts.
  2. APIs & Services → Library → enable YouTube Data API v3.
  3. Google Auth Platform (OAuth consent screen) → Branding: fill ALL of App name, User support email, Application home page, Privacy policy link (any public page they own, e.g. their GitHub profile/repo, works for a personal app). Publishing is blocked until these are filled.
  4. Audience → User type External → click PUBLISH APP (move to In production). This is critical: while the app is in Testing, Google refresh tokens EXPIRE AFTER 7 DAYS and the daily upload silently breaks every week. The "unverified app" warning is expected for a personal app; no verification is needed for your own channel.
  5. Clients → Create client → Desktop app → download JSON → save as ~/.ytkit/client_secret.json (never commit it).
  6. cd ytkit && npx tsx src/cli.ts auth → browser opens → on "Google hasn't verified this app" click Advanced → Go to (app name) → pick the right channel (brand channels show up separately) → allow all scopes. Token lands in ~/.ytkit/token.json.
  7. npx tsx src/cli.ts whoami must print the channel title.
  8. Optional playlist: npx tsx src/cli.ts playlist ensure "My Show" then set upload.playlist in look.yaml.

Troubleshooting: invalid_grant = token expired/revoked (usually the app was still in Testing): publish the app, re-run auth. Custom thumbnails need a phone-verified channel; thumbnail set exit 3 means "not eligible yet" and the upload is still fine.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Related Skills