Applied Module 12 · AI-Powered Music Production Workflows

The 7-Day Release Campaign Generator

What you'll learn

~25 min
  • Build a CLI campaign pack generator from a single track metadata file
  • Generate platform-specific captions for Instagram, TikTok, YouTube, and Spotify
  • Produce a 7-day posting calendar with timing strategy
  • Scaffold a deployable EPK webpage with embedded Spotify player and video

What you’re building

Release week is chaos. You need captions for Instagram, TikTok, YouTube. Hashtag packs for each platform (because they’re different). A posting schedule so you’re not dumping everything on day one. A press blurb for playlist curators. And ideally an EPK page you can send to blogs and playlist submitters.

You usually do this by… opening Notes and freestyling? Copying last release’s captions and swapping the track name? That works, but it’s inconsistent and it eats an afternoon every time.

You’re going to build a system that takes one metadata file about a new track and produces all of it in 10 seconds.

Software pattern: Template-driven document generator

Structured data (JSON) → multiple formatted documents. This pattern works for permits, lab reports, invoices — any scenario where structured data produces multiple formatted outputs.


The metadata file

First, create a simple JSON file that describes your release. This is the only input you need:

{
"artist": "moodmixformat",
"title": "JADED",
"genre": "Melodic House & Techno",
"bpm": 124,
"key": "Am",
"mood": "Driving, atmospheric, late-night",
"releaseDate": "2026-03-14",
"spotifyUrl": "https://open.spotify.com/artist/YOUR_ID",
"youtubeUrl": "https://youtube.com/@moodmixformat",
"shopUrl": "https://moodmixformat.myshopify.com",
"previousHits": ["KICK IT W/U", "LIVE IT UP", "MOOD"],
"recordedLocationsEpisode": "S2E04",
"oneLineHook": "When the night gets heavy, the bass gets deeper"
}

Save this as release.json in your project folder. Swap in your real details — real track name, real URLs, real previous hits.

💡Use your actual release

The more real data you put in here, the more useful the output. If you have a track dropping soon, use its actual metadata. The captions and EPK will be immediately usable instead of placeholder-filled templates.


The prompt

Start your AI CLI tool and paste this prompt:

Build a Node.js CLI tool called campaign-gen.js that reads a release metadata JSON
file and generates a complete 7-day release campaign pack.
INPUT: A JSON file path as the first argument (e.g., release.json) containing:
artist, title, genre, bpm, key, mood, releaseDate, spotifyUrl, youtubeUrl, shopUrl,
previousHits (array), recordedLocationsEpisode, oneLineHook
OUTPUT DIRECTORY: ./campaign-pack/ (create if needed)
GENERATE THESE FILES:
1. captions.md — Platform-specific captions:
- Instagram (3 variations: teaser, release day, post-release)
- TikTok (short, punchy, hook-first, with trending format suggestions)
- YouTube (community post for release day)
- Spotify bio update paragraph
Each caption should reference the track's mood and BPM naturally. Include the
one-line hook. Reference previous hits where it feels natural (e.g., "From the
artist behind KICK IT W/U...").
2. hashtags.md — Platform-specific hashtag packs:
- Instagram: 30 hashtags, mix of broad (#melodichouse) and niche (#melodictechno124bpm)
- TikTok: 5-8 hashtags, trend-aware format
- YouTube: 15 tags for video metadata
Group by platform with copy-paste-ready blocks.
3. calendar.md — 7-day posting calendar:
- Day -3 to Day +3 relative to release date
- Each day: platform, content type, time (ET), caption reference, asset needed
- Include strategic notes (e.g., "Day -1: teaser clip drives pre-save")
4. press-blurb.md — A 150-word press/curator blurb:
- Third person, professional tone
- References previous tracks and the RECORDED LOCATIONS series
- Suitable for playlist submission or blog pitch
5. epk/index.html — A single-page EPK website:
- Dark theme matching the artist's aesthetic (bg #0a0a0a, text #e5e5e5)
- Sections: Hero with track title and hook, About (2 paragraphs), Latest Release
with embedded Spotify iframe, Video section with YouTube embed, Press blurb,
Links (Spotify, YouTube, Merch shop)
- Clean, minimal design. Sans-serif font. No images required (text-only is fine).
- The Spotify embed should use the standard iframe embed format
- Mobile-responsive
STYLE GUIDELINES:
- All copy should feel authentic to an independent electronic music artist
- No corporate marketing language. No "leveraging synergies" or "elevating your brand"
- Use the mood and genre to set the tone naturally
- Captions should sound like they were written by the artist, not a social media manager

What you get

After your AI CLI tool finishes, you’ll have:

Starting points, not final copy

The generated captions and press blurb are first drafts based on your release.json data. They’ll need your voice and personality. Read every caption out loud — if it doesn’t sound like something you’d actually post, iterate with follow-up prompts like “make the Instagram captions more casual, like a late-night studio story” until the tone is right.

campaign-pack/
captions.md
hashtags.md
calendar.md
press-blurb.md
epk/
index.html

Verify each file

captions.md — Open it and read through the Instagram variations. Do they sound like you? Does the tone match your brand? If something sounds too corporate or too generic, that’s your iteration target.

hashtags.md — Check the Instagram block. Are there 30 hashtags? Do they mix broad reach tags with niche genre tags? Copy the block and paste it into a draft post to verify formatting.

calendar.md — Does the 7-day schedule make sense? Is the teaser before release day? Is there post-release content planned? Check the suggested times.

press-blurb.md — Read it out loud. Does it sound like a real press bio, or does it sound like AI wrote it? This is the file you’ll iterate on the most.

epk/index.html — Open it in your browser. Check:

  • Does the dark theme look clean?
  • Is it mobile-responsive? (Resize your browser window.)
  • Do the Spotify and YouTube embeds load? (They’ll need real URLs.)
The EPK is deployable

That epk/index.html file is a real website. You can deploy it to Netlify or Vercel with one command (Module 11 covers deployment). Send the URL to playlist curators, blogs, or venues. It’s a professional EPK that you built in minutes.


If something is off

ProblemFollow-up prompt
Captions sound too corporateThe captions sound like a social media agency wrote them. Rewrite them in a more casual, authentic voice. Think late-night studio Instagram story, not brand campaign.
Hashtags are too genericThe hashtags are all broad (#music #newrelease). Add more niche genre tags like #melodichouse, #progressivehouse, #deepmelodictechno, #undergroundtechno. Mix in city-based tags like #virginiamusic.
EPK Spotify embed brokenThe Spotify embed isn't loading. Use the standard Spotify iframe format: <iframe src="https://open.spotify.com/embed/artist/ARTIST_ID" width="100%" height="352" frameBorder="0" allowtransparency="true" allow="encrypted-media"></iframe>
Calendar dates are wrongThe calendar dates are off. The release date is 2026-03-14 (a Saturday). Day -3 should be Wednesday March 11, Day 0 should be Saturday March 14.

Customize it

Add a Linktree-style page

Add a links.html file to the epk folder. It should be a simple Linktree-style page
with the artist name at the top and buttons linking to: Spotify, Apple Music,
YouTube, SoundCloud, Merch Shop, and Instagram. Same dark theme as the EPK.
Each button should be full-width, rounded, with a subtle border. Mobile-first design.

Generate email templates

Add an emails.md file with 3 email templates:
1. Playlist curator pitch (subject line + 100-word body)
2. Blog/press outreach (subject line + 150-word body)
3. Fan newsletter announcement (casual tone, 100 words)
Each should reference the new track, include the EPK link placeholder, and feel
authentic to an independent artist -- not a mass marketing template.

Automate the whole release

Add a run-all.sh script that:
1. Runs the resize-assets tool (from Lesson 1) on a cover art image
2. Runs this campaign generator on the release.json
3. Copies the generated assets into the epk folder
4. Opens preview.html and the EPK in the browser
Accept the cover art path and release.json path as arguments.
🔍Chaining tools together

That last customization — the run-all.sh script — is where things get powerful. You’re connecting the image resizer from Lesson 1 with the campaign generator from this lesson into a single command.

This is the orchestrator mindset from Module 2 in action. You’re not doing the creative work (writing captions, resizing images). You’re not doing the technical work (writing JavaScript, learning sharp). You’re directing AI tools to handle both, and connecting them into workflows that save hours per release.

By the time you finish this module, you’ll have a complete release pipeline: art assets, campaign copy, YouTube metadata, and analytics — all triggered by a few commands.


🔧

When Things Go Wrong

Use the Symptom → Evidence → Request pattern: describe what you see, paste the error, then ask for a fix.

Symptom
The captions reference tracks that aren't mine
Evidence
The Instagram caption mentions 'Blinding Lights' and 'Midnight City' which are not in my previousHits array
What to ask the AI
"The captions are referencing tracks that aren't in my catalog. Only reference tracks listed in the previousHits array from my release.json. Don't make up or assume any other track names."
Symptom
The EPK page is a blank white page
Evidence
Opening epk/index.html shows nothing. Viewing page source shows the HTML is there but the body background is white and text is white
What to ask the AI
"The EPK has white text on a white background. Set the body background to #0a0a0a and make sure the CSS is applied inline or in a style tag inside the HTML file."
Symptom
The hashtags contain spaces and special characters
Evidence
Some hashtags are formatted as '# melodic house' with spaces, which won't work on Instagram
What to ask the AI
"Some hashtags have spaces in them (like '# melodic house'). Remove all spaces from hashtags and make sure each one starts with # immediately followed by the tag with no spaces. CamelCase multi-word tags like #MelodicHouse."
Symptom
The calendar uses wrong day-of-week names
Evidence
The calendar says March 14 is a Tuesday but it's actually a Saturday
What to ask the AI
"The day-of-week labels in the calendar are wrong. March 14, 2026 is a Saturday. Recalculate all 7 days (Day -3 through Day +3) with correct day-of-week names."

Try it yourself

  1. Create a release.json with your real (or upcoming) track metadata.
  2. Paste the main prompt into your AI CLI tool.
  3. Run the tool and open each generated file.
  4. Open the EPK in your browser — this is a real website you can deploy.
  5. Pick one customization and add it.

The first time you generate a complete campaign pack in 10 seconds instead of spending an afternoon in Notes and Canva, you’ll understand why this matters.


Key takeaways

  • One metadata file drives everything — a single JSON file with your track details generates captions, hashtags, a calendar, press copy, and a full EPK.
  • Platform-specific output matters — Instagram captions are different from TikTok hooks. Hashtag strategy varies by platform. The tool handles this automatically.
  • The EPK is a deployable artifact — you end this lesson with a real website you can host and send to curators.
  • Chaining tools is the power move — connecting the asset engine (Lesson 1) with the campaign generator creates a full release pipeline.
  • Authentic voice requires iteration — the first draft of captions will sound generic. One follow-up prompt about tone fixes it.

KNOWLEDGE CHECK

You generated captions but they sound too corporate and generic. What's the most effective fix?


What’s next

In the next lesson, you’ll build a RECORDED LOCATIONS Episode Builder — a folder-to-publish workflow for your YouTube series. Point it at a folder of episode notes and clips, and it generates titles, timestamps, descriptions, thumbnail concepts, and a publishing checklist.