bitwize-music-studio/promo-director
Generates 15-second vertical promo videos for social media from mastered audio. Use after mastering is complete and before release, when the user wants social media content.
npx skills add https://github.com/bitwize-music-studio/claude-ai-music-skills --skill promo-director
Generate professional promo videos for social media from mastered audio. Creates 15-second vertical videos (9:16, 1080x1920) optimized for Instagram Reels, Twitter, and TikTok.
After mastering audio, generate promotional videos that combine:
Generate → Master → **[Promo Videos]** → Release
Optional step between mastering-engineer and release-director.
Check ffmpeg:
ffmpeg -filters | grep showwaves
Required filters: showwaves, showfreqs, drawtext, gblur
If missing:
Error: ffmpeg not found or missing required filters
Install ffmpeg:
macOS: brew install ffmpeg
Linux: apt install ffmpeg
After installing, run this command again.
Check Python dependencies:
Call get_python_command() to verify the venv exists. If venv_exists is false, show the warning and suggest /bitwize-music:setup.
Resolve audio path via MCP:
Call resolve_path("audio", album_slug) — returns the full audio directory path including artist folder.
Example result: ~/bitwize-music/audio/artists/bitwize/albums/electronic/sample-album/
Verify contents:
If artwork missing:
Error: No album artwork found in {audio_root}/artists/{artist}/albums/{genre}/{album}/
Expected: album.png or album.jpg
Options:
1. Use /bitwize-music:import-art to place artwork
2. Specify path manually: --artwork /path/to/art.png
Which option?
Check config defaults first:
Read promotion section from ~/.bitwize-music/config.yaml for defaults:
promotion.default_style - Default visualization stylepromotion.duration - Default clip durationpromotion.include_sampler - Whether to generate album sampler by defaultpromotion.sampler_clip_duration - Seconds per track in samplerIf config section doesn't exist, use built-in defaults (pulse, 15s, sampler enabled, 12s clips).
Ask: What to generate?
Options (default from config or "both"):
Ask: Visualization style?
Default from promotion.default_style or pulse if not set.
| Style | Best For | Description |
|-------|----------|-------------|
| pulse | Electronic, hip-hop | Oscilloscope/EKG style with heavy glow (default) |
| bars | Pop, rock | Fast reactive spectrum bars |
| line | Acoustic, folk | Classic clean waveform |
| mirror | Ambient, chill | Mirrored waveform with symmetry |
| mountains | EDM, bass-heavy | Dual-channel spectrum (looks like mountains) |
| colorwave | Indie, alternative | Clean waveform with subtle glow |
| neon | Synthwave, 80s | Sharp waveform with punchy neon glow |
| dual | Experimental | Two separate waveforms (dominant + complementary colors) |
| circular | Abstract, experimental | Vectorscope (wild circular patterns) |
Default recommendation:
pulsebarslinemirrorAsk: Custom duration?
Default: 15 seconds (optimal for Instagram/Twitter)
Options:
For sampler:
Default: 12 seconds per track
Calculate total:
Total duration = (tracks * clip_duration) - ((tracks - 1) * crossfade)
Twitter limit: 140 seconds
If over 140s:
WARNING: Expected duration {duration}s exceeds Twitter limit (140s)
Recommendation: Reduce --clip-duration to {140 / tracks}s
Individual track promos:
generate_promo_videos(album_slug, style="pulse", duration=15)
Single track only:
generate_promo_videos(album_slug, style="pulse", track_filename="01-track-name.wav")
Album sampler:
generate_album_sampler(album_slug, clip_duration=12, crossfade=0.5)
Handle errors:
Common issues:
Report generated files:
## Promo Videos Generated
**Location:** {audio_root}/artists/{artist}/albums/{genre}/{album}/
**Individual Track Promos:**
- {audio_root}/artists/{artist}/albums/{genre}/{album}/promo_videos/
- 10 videos generated
- Format: 1080x1920 (9:16), H.264, 15s each
- Style: pulse
- File size: ~10-12 MB per video
**Album Sampler:**
- {audio_root}/artists/{artist}/albums/{genre}/{album}/album_sampler.mp4
- Duration: 114.5s (under Twitter 140s limit ✓)
- Format: 1080x1920 (9:16), H.264
- File size: 45.2 MB
**Next Steps:**
1. Review videos: Open promo_videos/ folder
2. Test on phone: Transfer one video and verify quality
3. Populate social copy: Fill in promo/ templates (twitter.md, instagram.md, etc.)
4. [Optional] Upload to cloud: /bitwize-music:cloud-uploader {album}
5. Ready for release workflow: /bitwize-music:release-director {album}
See technical-reference.md for:
Take bitwize-music-studio/promo-director from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference brew.
Without those the skill loads but fails at the first command.