promo-writer
Promo Writer generates platform-native social media copy for album promotion across Twitter/X, Instagram, TikTok, Facebook, and YouTube by extracting themes, track concepts, and streaming lyrics into tailored posts for each platform's format and conventions. Use this skill after track concepts and lyrics are finalized but before the promo-review stage to populate promotional templates with ready-to-edit content.
git clone --depth 1 https://github.com/bitwize-music-studio/claude-ai-music-skills /tmp/promo-writer && cp -r /tmp/promo-writer/skills/promo-writer ~/.claude/skills/promo-writerSKILL.md
# Promo Writer Skill
Generate social media copy for album promotion across Twitter/X, Instagram, TikTok, Facebook, and YouTube. Produces native-feeling content for each platform from album context — themes, track concepts, and streaming lyrics.
## Purpose
Populate the `promo/` directory with platform-specific copy ready for review. Each platform gets content shaped to its format, tone, and conventions — not the same text cross-posted everywhere.
## When to Use
- After track concepts and lyrics are written (need material to pull from)
- Before release — generate copy to fill promo/ templates
- User says "write promo copy", "create social media posts", or "fill in the promo templates"
- When promo/ files exist but are still template placeholders
## Position in Workflow
```
Lyrics Written → Promo Videos (optional) → **[Promo Writer]** → [Promo Review] → Release
```
Between content completion and promo-reviewer. The promo-reviewer polishes what this skill generates.
## Supporting Files
- **[copy-formulas.md](copy-formulas.md)** — Hook formulas, CTA templates, post structures, hashtag recipes
- **[/reference/promotion/social-media-best-practices.md](/reference/promotion/social-media-best-practices.md)** — Platform strategy and content guidance
- **[/skills/promo-reviewer/platform-rules.md](/skills/promo-reviewer/platform-rules.md)** — Character limits and hashtag rules
---
## Workflow
### 1. Album Resolution
**Resolve the album from arguments:**
Use MCP `find_album` with the album name from `$ARGUMENTS`. If no album specified, check `get_session` for last album context.
**Verify readiness:**
- Album must have track concepts written
- At least some tracks should have streaming lyrics (for quotable hooks)
- If no streaming lyrics exist, warn: "No streaming lyrics found — using track concepts only. Hooks will be less specific."
### 2. Data Gathering
Gather album context in batch to minimize round-trips:
1. **Album data**: `get_album_full(album_slug, "concept,streaming,musical-direction")` — album narrative + track content
2. **Track list**: from album data — all track names, concepts, statuses
3. **Streaming lyrics**: from album data sections — pull quotable hooks from streaming lyrics (NOT Suno lyrics, which contain phonetic spellings)
4. **User preferences**: `load_override("promotion-preferences.md")` — tone, platform priorities, messaging themes, hashtag preferences, AI positioning
**Critical**: Use **streaming lyrics** for quotable hooks. Suno lyrics contain phonetic spellings (`bit-wize`, `Luh-rock-uh`) that must never appear in public-facing copy.
### 3. Generate Campaign Strategy (campaign.md)
Generate `campaign.md` first — it's the strategy foundation that informs all platform copy.
**Content to generate:**
| Section | What to Write |
|---------|---------------|
| Campaign Overview | Album name, release date (or TBD), primary platform, campaign duration |
| Key Messages | 3 core messages derived from album themes — the "why should anyone care" |
| Target Audience | 2-3 audience segments based on genre and themes |
| Schedule | Pre-release, release week, post-release calendar with specific content types |
| Hashtags | Primary (discovery + genre) and secondary (album-specific, AI if applicable) |
**Derive key messages from album data:**
- What is the album about? → Message 1 (concept hook)
- What makes it different? → Message 2 (unique angle)
- Why listen now? → Message 3 (urgency/relevance)
**Present to user for approval before proceeding to platform copy.**
### 4. Language Selection
**Before generating any copy, determine the output language(s).**
**If override exists** with a `## Language` section in `promotion-preferences.md`, use that preference without asking.
**Otherwise, ask:**
```
What language(s) should the promo copy be written in?
[1] English (default)
[2] German (Deutsch)
[3] French (Français)
[4] Spanish (Español)
[5] Bilingual — two languages per post (e.g., DE + EN, FR + EN)
[6] Other — tell me which language(s)
```
**Bilingual mode**: When two languages are selected, each post gets both versions stacked in the same code block, separated by a `---` divider. The primary language comes first, the secondary language second. Hashtags stay in English (international discovery).
**Override file addition** (`{overrides}/promotion-preferences.md`):
```markdown
## Language
- Primary: de
- Secondary: en
- Mode: bilingual
```
Store the selected language(s) and apply to all generated copy in this session.
### 5. Platform Selection
**If platform specified in arguments**, generate only that platform.
**If override exists**, follow platform priority list and skip list from `promotion-preferences.md`.
**Otherwise, ask:**
```
Which platforms should I generate copy for?
[A] All platforms (Twitter, Instagram, TikTok, Facebook, YouTube)
[1] Twitter/X
[2] Instagram
[3] TikTok
[4] Facebook
[5] YouTube
```
### 6. Per-Platform Generation
For each selected platform, generate native content following the structures in [copy-formulas.md](copy-formulas.md) and best practices from the reference guide.
**Read the promo template** for the platform first (`templates/promo/{platform}.md` or existing `promo/{platform}.md`) to match the expected heading structure.
**Per-platform content to generate:**
#### Twitter/X (`twitter.md`)
- Release announcement tweet (1-2 tweets or thread)
- Per-track promo tweets (one per track — hook + concept + link placeholder)
- Behind-the-scenes tweet (process/making-of angle)
- Engagement tweet (question or poll)
- Each tweet: show character count, verify under 280
- 1-2 hashtags per tweet, never starting with a hashtag
#### Instagram (`instagram.md`)
- Release announcement caption (hook in first 125 chars)
- 2-3 track highlight captions (story angle, personal)
- Behind-the-scenes caption
- Hashtag block (15-20 tags, separated from caption)
- Show character count for each caption
#### TikTok (`tiktok.md`)
- Release announcement cProvides information about the bitwize-music plugin, its version, and its creator. Use when the user asks about the plugin, its purpose, version, or capabilities.
Creates visual concepts for album artwork and generates AI art prompts. Use during planning for concept discussion, or after all tracks are Final for actual artwork generation.
Designs album concepts, tracklist architecture, and thematic planning through 7 structured phases. Use when planning a new album or reworking an existing album concept.
Shows a structured progress dashboard for an album with percentage complete per phase, blocking items, and status breakdown. Use for a quick visual overview of album progress.
Tracks and manages album ideas including brainstorming, planning, and status updates. Use when the user wants to add, review, or organize their album idea backlog.
Copies track content (lyrics, style prompts, streaming lyrics) to the system clipboard. Use when the user needs to paste lyrics or style prompts into Suno or other external tools.
Uploads promo videos and content to Cloudflare R2 or AWS S3. Use when the user wants to host promo content for social media or distribution.
Sets up or edits the plugin configuration file interactively. Use on first-time setup, when config is missing, or when the user wants to change settings.