By robertnowell
Shorts-first video essay pipeline: three shorts enter, one wins at 24h, becomes a 10-minute long-form. Handles research, TTS, image gen, caption burn-in, multi-platform publishing, and retention-aware judging.
Stages 8–9 of the video-essay pipeline. After 24h since shorts publish, pull per-angle metrics from YouTube Shorts + Instagram Reels + TikTok, compute viral scores, pick a winner. Then user-approval checkpoint on whether to promote to long-form. Use when shorts are published ≥24h ago and shorts_metrics.json is absent or stale.
Stages 0–3 of the video-essay pipeline. Preflight credentials, confirm topic with user, run broad angles research, pick 3 meaningfully different angles, write packages.md. Use this skill when starting a fresh video-essay topic OR when an episode directory has no packages.md yet. Ends at a user-approval checkpoint on the 3-angle selection.
Stage 10 of the video-essay pipeline. Expand a winning short into a 10-minute long-form video essay. Locks title + thumbnail first, then runs deep research → script → auto-critique → audio → images + QA → video assembly → publish. Use when the winner angle is set in packages.md and long-form video.mp4 is absent.
Stages 4–5 of the video-essay pipeline. For each of 3 angles — per-angle hook research, write a short script, pre-audio judge, then audio/images/covers/captioned video. Use this skill when packages.md exists but the 3 shorts aren't all assembled yet. Runs after ve-intake, before ve-publish-shorts.
Stages 6–7 of the video-essay pipeline. Visual-only Bible-compliance gate per angle, then publish all 3 shorts natively to YouTube Shorts + Instagram Reels + TikTok with ~15 min staggering. Use when all 3 shorts have video.mp4 + covers rendered but upload_result.json is absent. Ends by starting a 24h timer.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
This plugin requires configuration values that are prompted when the plugin is enabled. Sensitive values are stored in your system keychain.
EPISODES_DIRAbsolute path where per-episode folders live. Leave blank to use the plugin's default: ~/.claude/plugins/data/video-essay/episodes (per-user, survives plugin updates). Set explicitly if you have existing episodes elsewhere (e.g. ~/Projects/video-essays/episodes). Directory will be created if missing.
${user_config.EPISODES_DIR}GEMINI_API_KEYDefault image + thumbnail provider (Gemini 2.5 Flash Image / nano-banana-pro). Get from https://aistudio.google.com/apikey.
${user_config.GEMINI_API_KEY}OPENAI_API_KEYFallback TTS and image provider. Get from https://platform.openai.com/api-keys. Only needed when you set tts_provider=openai or image_provider=openai in config.toml.
${user_config.OPENAI_API_KEY}ZAPCAP_API_KEYAnimated caption burn-in for shorts. Get from https://app.zapcap.ai (Settings → API Keys). Bible Commandment 3 — shorts without burned captions lose ~50% retention on mute-default platforms.
${user_config.ZAPCAP_API_KEY}UPLOADPOST_USERYour Upload-Post account slug (e.g. 'mktg', 'personal'). Identifies which linked account to post as.
${user_config.UPLOADPOST_USER}GOOGLE_CLIENT_IDOAuth 2.0 Client ID for YouTube uploads (Stage 7 + 10g). Required — the pipeline's terminal stage publishes to YouTube. Create at https://console.cloud.google.com/apis/credentials (type: Desktop app). GCP project must enable YouTube Data API v3 + YouTube Analytics API. Format: <numbers>-<chars>.apps.googleusercontent.com
${user_config.GOOGLE_CLIENT_ID}ELEVENLABS_API_KEYDefault TTS provider for narration. Get from https://elevenlabs.io (Profile → API Keys). A key scoped to text_to_speech is sufficient.
${user_config.ELEVENLABS_API_KEY}UPLOADPOST_API_KEYPublishes shorts to Instagram Reels + TikTok in one call, pulls analytics. Get from https://upload-post.com (Account → API Keys). Long-lived JWT.
${user_config.UPLOADPOST_API_KEY}GOOGLE_CLIENT_SECRETPaired with GOOGLE_CLIENT_ID. Shown once when you create the OAuth client. Format: GOCSPX-<chars>. Required for YouTube publishing (Stage 7 YT Shorts + Stage 10g long-form).
${user_config.GOOGLE_CLIENT_SECRET}A Claude Code plugin for making video essays. Three short-form videos enter, one wins at 24 hours, becomes a 10-minute long-form. Research → TTS → image gen → caption burn-in → multi-platform publish → retention-aware judging.
/plugin marketplace add robertnowell/video-essay
/plugin install video-essay@video-essay-marketplace
At install, Claude prompts for 7 config values — the paths + API keys the pipeline needs. All sensitive fields are stored in the OS keychain (via plugin userConfig), not in plaintext on disk. The SessionStart hook bridges them to the env var names the scripts read.
brew install [email protected])ffmpeg + ffprobe (brew install ffmpeg)GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET). First publish triggers browser OAuth; token is cached thereafter.See references/env_setup.md for the per-key reference.
Before any paid work:
ve-doctor --live
Checks every env var + binary + OAuth token, validates each API key against its vendor endpoint. Exits 0 when everything's ready.
| Invoke | Stage | Covers |
|---|---|---|
/video-essay <topic> | dispatcher | Routes based on episode state |
/ve-intake | 0–3 | Preflight, topic intake, angles research, pick 3 angles |
/ve-produce | 4–5 | Per-angle hook research, script → judge → audio → images → covers → captioned video |
/ve-publish-shorts | 6–7 | Bible-compliance visual gate, then publish to YouTube Shorts + IG Reels + TikTok (staggered) |
/ve-analyze | 8–9 | 24h metrics pull, viral scoring, winner decision |
/ve-longform | 10 | Title + thumbnail lock, deep research, script, audio, images, assemble, publish long-form |
The algorithm picks the winning short at 24h — no LLM judgment. The LLM judges only enforce Bible compliance pre-publish. See references/shorts_bible.md for the canonical short-form rules and references/shorts_script_judge_rubric.md for the two-phase script judge.
skills/ — 5 stage-aligned sub-skills + 1 dispatcher. Each is a focused SKILL.md that Claude Code auto-routes to based on episode state.pipeline/ — Python scripts that do the deterministic work (TTS, ffmpeg, API uploads). Installed as an importable package via pyproject.toml.hooks/ + hooks-handlers/ — SessionStart hook: Python check, hash-gated venv install, credential bridge from CLAUDE_PLUGIN_OPTION_* to clean env var names.bin/ — 9 ve-* shell wrappers on $PATH (ve-doctor, ve-audio, ve-images, ve-thumbnail, ve-assemble, ve-qa-images, ve-publish-shorts, ve-analyze-shorts, ve-publish-youtube).references/ — Canonical rules: Shorts Bible, judge rubrics, style guide, vendored deep-research skill, reference script examples (Wendover, PolyMatter, Tom Scott).bash tests/integration.sh
26-check regression suite: plugin manifest validation, SessionStart hook behavior, path resolution, YouTube token cascade, Phase A regression (hard-fail on missing captions key, re-run idempotency). First run ~45s (builds test venv); re-runs ~5s.
MIT.
npx claudepluginhub robertnowell/video-essay --plugin video-essayAutomated distribution pipeline for open source developer tools. Onboard a project from its README, launch to MCP Registry + directories, post to Bluesky/Dev.to/Hashnode/Mastodon, track engagement.
Language expression coach — tells you how a native speaker would actually say something, with cultural context, tone notes, and audio pronunciation. Supports 13+ languages.
Deep multi-source research with source quality evaluation and hard quality gates. Launches parallel research agents, classifies sources by tier, cross-references findings, and synthesizes structured reports.
Bakes eval-first thinking into model-output work as a habit, not a gate. Forces every plan to name what success looks like, where things can go wrong, and propose simple evals validating key assumptions.
Generate a concise monthly investor update: compile the month from your own tools (GitHub, Slack, or custom adapters), distill it to a headline-only brief, and use Kopi to turn it into an on-brand HTML email template you can send from any email platform.
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Memory compression system for Claude Code - persist context across sessions
Multi-model consensus engine integrating OpenAI Codex CLI, Gemini CLI, and Claude CLI for collaborative code review and problem-solving.
Curate auto-memory, promote learnings to CLAUDE.md and rules, extract proven patterns into reusable skills.
Standalone image generation plugin using Nano Banana MCP server. Generates and edits images, icons, diagrams, patterns, and visual assets via Gemini image models. No Gemini CLI dependency required.