Created
January 6, 2026 16:19
-
-
Save seedprod/e6399d01d405aefa51a08fec841a871c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: video-publish-workflow | |
| description: Complete YouTube video publishing workflow that chains thumbnail generation, upload, transcript extraction, and content repurposing. Use when user says "publish video", "full video workflow", "upload and repurpose", or provides a video file with title for end-to-end YouTube publishing with content distribution. | |
| --- | |
| # Video Publish Workflow | |
| Orchestrate the complete video publishing pipeline by chaining existing skills. | |
| ## Required Inputs | |
| | Input | Required | Description | | |
| |-------|----------|-------------| | |
| | Video file | Yes | Path to the video file | | |
| | Title | Yes | Video title | | |
| | Transcript | No | If provided, skip transcript extraction step | | |
| | Description hints | No | Key points to emphasize in description | | |
| ## Workspace Setup | |
| **Before starting the workflow**, create a dedicated workspace directory: | |
| ``` | |
| ~/Videos/workflows/{YYYY-MM-DD}-{title-slug}/ | |
| ``` | |
| Example: `~/Videos/workflows/2024-12-05-how-to-build-landing-page/` | |
| All workflow outputs go in this directory: | |
| ``` | |
| workspace/ | |
| ├── thumbnail.png # Generated thumbnail (original) | |
| ├── thumbnail.jpg # Compressed thumbnail (uploaded) | |
| ├── transcript.txt # Full transcript | |
| ├── description.txt # YouTube description | |
| ├── blog.md # Blog post draft | |
| ├── linkedin.md # LinkedIn post draft | |
| └── tweet.md # Twitter thread draft | |
| ``` | |
| **When invoking other skills, save all outputs to the workspace directory** instead of default /tmp locations. This preserves outputs from previous workflow runs. | |
| ## Workflow Decision Tree | |
| ``` | |
| Has transcript provided? | |
| ├─ Yes → Use provided transcript | |
| └─ No → Extract locally with local-transcribe (fast, ~10 seconds) | |
| └─ Fallback: youtube-transcript if local fails | |
| ``` | |
| ## Workflow A: Transcript Provided | |
| Execute sequentially: | |
| 1. **Generate thumbnail** → `youtube-thumbnail-generator` skill | |
| - Input: video title | |
| - Output: thumbnail image (PNG) | |
| - **Compress to JPEG <2MB** before upload (YouTube limit) | |
| ```python | |
| from PIL import Image | |
| img = Image.open('thumbnail.png') | |
| img.convert('RGB').save('thumbnail.jpg', 'JPEG', quality=85, optimize=True) | |
| ``` | |
| 2. **Generate description** from transcript | |
| - Extract key points, timestamps if video >5 min | |
| - Include hooks and CTAs | |
| - Keep under 5000 characters | |
| 3. **Upload to YouTube** → `youtube-upload` skill | |
| - **Use venv**: `~/.claude/skills/youtube-upload/venv/bin/python` | |
| - Input: video file, title, description, thumbnail (compressed .jpg) | |
| - Privacy: start with `unlisted` unless user specifies | |
| - Output: video URL, video ID | |
| 4. **Repurpose content** → `content-repurpose` skill | |
| - Input: transcript, video URL | |
| - Output: blog post draft, Twitter thread, LinkedIn post | |
| 5. **Present results** to user: | |
| - Video URL | |
| - Content drafts for review | |
| - Suggested next steps | |
| ## Workflow B: No Transcript (Recommended Flow) | |
| Execute sequentially: | |
| 1. **Extract transcript locally** → `local-transcribe` skill | |
| - **Use venv**: `~/.claude/skills/local-transcribe/venv/bin/python scripts/transcribe.py` | |
| - Input: video file path | |
| - **Use `--timestamps` flag** for chapter generation in description | |
| - Output: timestamped transcript (~10 seconds for most videos) | |
| - Save to: `workspace/transcript.txt` | |
| - Fallback: If local transcription fails, proceed with upload and use `youtube-transcript` after | |
| 2. **Generate thumbnail** → `youtube-thumbnail-generator` skill | |
| - Input: video title | |
| - Output: thumbnail image (PNG) | |
| - **Compress to JPEG <2MB** before upload (YouTube limit) | |
| 3. **Generate rich description** from transcript | |
| - Include timestamps, key points, CTAs | |
| - Save to: `workspace/description.txt` | |
| 4. **Upload to YouTube** → `youtube-upload` skill | |
| - **Use venv**: `~/.claude/skills/youtube-upload/venv/bin/python` | |
| - Input: video file, title, full description, thumbnail (compressed .jpg) | |
| - Privacy: `unlisted` unless user specifies | |
| - Output: video URL, video ID | |
| 5. **Repurpose content** → `content-repurpose` skill | |
| - Input: transcript, video URL | |
| - Output: blog post draft, Twitter thread, LinkedIn post | |
| 6. **Present results** to user | |
| ## Description Generation Guidelines | |
| When generating video descriptions from transcript: | |
| ``` | |
| [Hook - 1-2 compelling sentences] | |
| [Main content summary - 2-3 paragraphs] | |
| ⏱️ Timestamps: | |
| 0:00 - Intro | |
| [Extract key sections from transcript] | |
| 🔗 Links: | |
| [Relevant links if mentioned] | |
| #hashtags #relevant #totopic | |
| ``` | |
| Keep descriptions: | |
| - Under 5000 characters | |
| - Front-loaded with important info (first 150 chars show in search) | |
| - Include 3-5 relevant hashtags at end | |
| ## Example Usage | |
| **User says:** "Publish this video: /path/to/video.mp4 with title 'How to Build a Landing Page in 10 Minutes'" | |
| **Execute:** | |
| 1. Create workspace: `~/Videos/workflows/2024-12-05-how-to-build-landing-page/` | |
| 2. Extract transcript locally (~10 sec) → save to `workspace/transcript.txt` | |
| 3. Generate thumbnail → save to `workspace/thumbnail.png`, compress to `workspace/thumbnail.jpg` | |
| 4. Generate full description with timestamps → save to `workspace/description.txt` | |
| 5. Upload video as unlisted with full description and thumbnail | |
| 6. Repurpose into blog/Twitter/LinkedIn → save to `workspace/*.md` | |
| 7. Present all outputs to user with workspace path | |
| ## Skill Dependencies | |
| This workflow requires these skills to be available: | |
| | Skill | Purpose | | |
| |-------|---------| | |
| | `local-transcribe` | Extract transcript locally (primary, fast) | | |
| | `youtube-thumbnail-generator` | Generate video thumbnail | | |
| | `youtube-upload` | Upload video, set thumbnail, update metadata | | |
| | `youtube-transcript` | Extract transcript from YouTube (fallback only) | | |
| | `content-repurpose` | Create blog/Twitter/LinkedIn content | | |
| ## Error Handling | |
| - **Local transcription fails**: Fall back to `youtube-transcript` skill after upload (will need to wait 5-10 min for YouTube processing) | |
| - **Thumbnail generation fails**: Proceed with upload, user can set thumbnail manually | |
| - **Upload fails**: Report error, do not proceed | |
| - **YouTube transcript unavailable**: Wait and retry, or ask user to provide transcript | |
| - **Repurpose fails**: Still report successful upload, note repurpose issue | |
| ## Post-Workflow | |
| After workflow completes, present a summary: | |
| ``` | |
| Workflow Complete! | |
| Video: https://youtu.be/{video_id} | |
| Status: Unlisted (change to public when ready) | |
| Workspace: ~/Videos/workflows/{date}-{slug}/ | |
| ├── thumbnail.jpg ✓ | |
| ├── transcript.txt ✓ | |
| ├── description.txt ✓ | |
| ├── blog.md ✓ | |
| ├── linkedin.md ✓ | |
| └── tweet.md ✓ | |
| Next steps: | |
| 1. Review content drafts in workspace | |
| 2. Post to blog/Twitter/LinkedIn manually | |
| 3. Change video to public when ready | |
| ``` | |
| All outputs are preserved in the workspace for future reference or re-use. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment