协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
media-transform【开发与工程】Generic media transformation orchestrator — download videos from any source (X/Twitter, Zoom, YouTube, web embeds), upload to YouTube, transcribe with timestamps, generate chapters, create thumbnails with GPT-Image-2, and A/B test titles. Use when the user wants to move a video from one platform to another, or asks to "download and upload this video …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Generic orchestrator for media transformation pipelines. Chains atomic skills based on source and destination, with stage-by-stage checkpoints.
Each pipeline stage is handled by a dedicated atomic skill. This orchestrator provides:
| Stage | Skill | Notes |
|---|---|---|
| Download (X/Twitter) | download-x-video | yt-dlp, --print after_move:filepath |
| Download (Zoom) | zoom-download | Browser-based, gallery view preferred |
| Download (web embeds) | download-video | Handles Vimeo, YouTube embeds, referer headers |
| Download (generic URL) | yt-dlp directly | brew install yt-dlp |
| Upload to YouTube | youtube-api | OAuth, resumable upload, tags, metadata |
| Update metadata | youtube-api | update_metadata.py — title, description, tags |
| Set thumbnail | youtube-api | set_thumbnail.py — upload custom thumbnail |
| Transcribe | transcribe-anything | Multi-backend, auto-selects best |
| Chapters (LLM titles) | podcast-publishing-assistant | High-quality chapter summaries |
download-x-video → youtube-api (upload) → transcribe-anything → youtube-api (update description)
# 1. Download
python3 download-x-video/scripts/download_x_video.py "https://x.com/user/status/123/video/1" /tmp
# 2. Upload (unlisted)
python3 youtube-api/scripts/upload_video.py \
--file /tmp/x_video_<id>.mp4 \
--title "Video Title" \
--privacy unlisted
# 3. Transcribe (prefer mlx_whisper on Apple Silicon)
mlx_whisper /tmp/x_video_<id>.mp4 \
--model mlx-community/whisper-turbo \
--output-dir /tmp --output-format json \
--word-timestamps True
# 4. Generate chapters + update description
# See Chapter Generation section below
zoom-download → youtube-api (upload + metadata + thumbnail)
Zoom recordings typically have built-in transcripts. Focus on proper titling, playlist assignment, and thumbnails.
yt-dlp download → youtube-api (upload) → transcribe-anything
For any video URL that yt-dlp supports (YouTube, Vimeo, etc.), download and re-publish.
Generate 3-5 title candidates using the LLM. Evaluate against these heuristics:
What makes a good YouTube title:
Title generation prompt template:
Generate 5 YouTube title candidates for a video about [topic].
The video is [duration] and [brief content description].
Requirements:
- Under 70 characters each
- Different angles: (1) curiosity-driven, (2) how-to/value, (3) controversial/contrarian,
(4) specific/numbers-driven, (5) question-based
- No ALL CAPS, no emoji overuse
- Titles must accurately reflect the content
YouTube Studio has native "Test & Compare" (tests up to 3 titles/thumbnails, runs up to 2 weeks, winner based on watch time share). This is NOT available via the YouTube Data API directly.
Programmatic DIY A/B testing:
Use youtube-api/scripts/update_metadata.py to rotate titles on a schedule, then analyze performance via YouTube Analytics:
# Start test: set title A
python3 youtube-api/scripts/update_metadata.py --video-id <ID> --title "Title A"
# After 24-48h: rotate to title B
python3 youtube-api/scripts/update_metadata.py --video-id <ID> --title "Title B"
# After 24-48h more: check analytics to determine winner
# Winner = higher CTR * average view duration (or just CTR for early tests)
A/B testing schedule:
GPT-Image-2 (openai/gpt-image-2) via the image_generate tool is the preferred thumbnail generator:
Key capabilities relevant to thumbnails:
Thumbnail prompt template:
YouTube thumbnail for a video titled "[TITLE]". Style: [clean/bold/minimalist/tech].
[Specific visual elements: faces, diagrams, text overlays].
Aspect ratio: 16:9. High contrast, eye-catching. No clutter.
Text on image (if any): "[KEY PHRASE]" in [position].
Post-generation:
youtube-api/scripts/set_thumbnail.py to uploadconvert -resize 1280x720 -quality 85 input.png output.jpgYouTube's native "Test & Compare" supports up to 3 thumbnails. Generate 3 distinct concepts:
yt-dlp path detection:
--print after_move:filepath for reliable final path (don't parse stdout for [download] Destination)after_move path is the final merged fileX/Twitter auth:
yt-dlp --cookies-from-browser chromeOAuth token caching:
youtube-api skill handles this: ~/.config/youtube-api/token.pickle (or Cowork path)Privacy default:
unlisted unless user explicitly asks for publicResumable uploads:
Prefer mlx_whisper on Apple Silicon (10x faster):
mlx_whisper (pipx install mlx-whisper): ~1300 frames/s → ~2 min for 27 min audioopenai-whisper CLI: ~95 frames/s → ~28 min for same audioopenai-whisper with --device mps produces NaN errors with turbo/large models — avoid, use mlx_whisper insteadTurbo model is the sweet spot:
Diarization is aspirational:
transcribe-anything with --diarize flag when availableGarbage filtering is essential:
Word-boundary truncation:
LLM titles when quality matters:
podcast-publishing-assistant or feed segments to an LLMInterval tuning:
Before each action phase, present a summary and get confirmation. This catches mismatches early:
gcloud services enable youtube.googleapis.com --project=<PROJECT_ID>
lsof -i :8080http://localhost in redirect URIsbrew install ffmpegpodcast-publishing-assistant or LLM post-processingconvert -resize 1280x720 -quality 85 input.png output.jpg