| name | ve-publish-shorts |
| description | 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. |
ve-publish-shorts — Stages 6–7
What this skill does
Re-verifies the Bible-compliance gates that need the actually-rendered video (script judge already ran at Stage 5a.5). Presents 3 shorts to the user for approval. On approval, uploads all 3 to YouTube Shorts, Instagram Reels, and TikTok — staggered so each gets a clean cold-start. Ends by telling the user to wait 24 hours before invoking ve-analyze.
Stage 6: Shorts pre-publish gate (visual-only re-verification)
Script-level coherence was already gated at Stage 5a.5 in ve-produce — don't re-run it. Stage 6 re-checks only gates that require the rendered output:
- Gate 1: first-frame thumb-stop
- Gate 6: captions baked in
- Gate 7: no foreign watermarks
- Gate 8: safe-zone + no text-clipping at edges
- Gate 9: all three covers rendered cleanly, no garbled AI typography
A single Agent invocation per angle is enough. Pass:
- Full text of
references/shorts_script_judge_rubric.md
- This angle's
shorts/<angle>/images/001.png (first frame), all three shorts/<angle>/covers/*.png
- Final video duration in seconds (from
audio_timings.json)
- This angle's entry in
packages.md (hook concept, length strategy, loop technique declaration)
- Explicit instruction: Read each PNG file into visual context.
The judge runs Phase A (9 binary gates) then Phase B (0–10 retention prediction). Per-angle gate:
- ≥7/10 with all Phase A gates passed → ready to publish
- 5–6/10 → re-cut once targeting the lowest sub-item, re-judge
- <5/10 → escalate to user
If any short fails, stop the pipeline. Show the user the failed short's scorecard and ask whether to re-cut or override.
Checkpoint: present all 3 finished shorts to the user (file paths to videos + scorecards + first-frame thumbnails). User approves the publish or pulls back to fix something.
Stage 7: Publish all 3 natively
ve-publish-shorts <slug> --all --privacy public
Uploads each angle's video.mp4 to all three platforms:
- YouTube Shorts via Google Data API v3 (with
set_thumbnail for cover_shorts.png)
- Instagram Reels via Upload-Post (
POST /api/upload with platform[]=instagram)
- TikTok via Upload-Post (
POST /api/upload with platform[]=tiktok)
Posts are staggered ~15 minutes by default to give each angle a clean cold-start. Required env vars: UPLOADPOST_API_KEY + UPLOADPOST_USER — both verified by ve-doctor. The first invocation of YT machinery will auto-detect missing scopes (e.g., adding yt-analytics.readonly) and prompt re-auth in the browser.
Per-angle records land in $EPISODES_DIR/<slug>/upload_result.json:
{
"shorts": {
"A": {
"youtube": {"video_id": "...", "url": "...", ...},
"instagram": {"request_id": "...", "platform_post_id": "...", "url": "..."},
"tiktok": {"request_id": "...", "platform_post_id": "...", "url": "..."}
},
"B": {...},
"C": {...}
}
}
The request_id is the Upload-Post identifier — ve-analyze-shorts uses it to pull per-post analytics 24 hours later.
Handoff
After Stage 7 completes, start a 24-hour timer. The user can do other work; the algorithm is doing the picking.
Tell the user: "All 3 shorts published. Wait 24h from the last upload, then invoke ve-analyze to see which won and whether to promote to long-form."