Applied Module 12 · AI-Powered Music Production Workflows

The Release Asset Engine

What you'll learn

~20 min
  • Build a CLI tool that takes cover art and generates platform-sized versions
  • Understand image aspect ratios across Spotify, Instagram, YouTube, and SoundCloud
  • Use iterative prompting to enforce your minimalist brand aesthetic
  • Create a reusable workflow you can run for every future release

What you’re building

Every release means the same grind: take your cover art, open Photoshop or Canva, resize it for Spotify Canvas (9:16), Instagram Reels (9:16), YouTube Shorts (9:16), YouTube Community (1200x900), SoundCloud banner (2480x520) — five-plus crops of the same image, every single time.

You’re going to build a tool that does all of that in one command.

💬This is your proof-of-concept

This module isn’t just practice — it’s building real tools for your actual workflow. By the end of these four lessons, you’ll have a release asset engine, a campaign generator, a YouTube publishing workflow, and an analytics dashboard — all built around your brand, your catalog, and your data. These are artifacts you use on your next release, not homework you throw away.

About the examples in this module

These lessons use a fictional artist called “moodmixformat” as the running example. Replace all artist names, track titles, and metadata with your own throughout. The tools and techniques are universal — only the details change.

Point your AI CLI tool at a single piece of cover art and watch it generate a folder of platform-ready assets — properly sized, centered, with clean padding that preserves your minimalist aesthetic. No stretching, no cropping your artwork awkwardly. Just clean, platform-ready files.

The platform specs

Here’s what you’re targeting:

PlatformDimensionsAspect RatioUse
Spotify Canvas720 x 12809:16Looping video/image on track page
Instagram Reels1080 x 19209:16Stories and Reels cover
YouTube Shorts1080 x 19209:16Shorts thumbnail
YouTube Community1200 x 9004:3Community tab posts
SoundCloud Banner2480 x 520~4.8:1Profile header
Open Graph1200 x 630~1.9:1Link previews (social sharing)

Your cover art is probably square (3000x3000 for Spotify/Apple Music). The tool needs to place that square image onto backgrounds of different aspect ratios without distortion.

Software pattern: Batch media processor

One input → multiple formatted outputs. This pattern works for product photos, document exports, video transcoding — anywhere you need the same content in multiple formats.


The prompt

Open your terminal, navigate to a project folder, start your AI CLI tool, and paste this prompt:

Build a Node.js CLI tool called resize-assets.js that takes a single square cover
art image and generates properly sized versions for every major music platform.
REQUIREMENTS:
1. INPUT
- Accept a file path to a square image (JPG or PNG) as the first argument
- Accept an optional --output or -o flag for output directory (default: ./release-assets)
- Accept an optional --bg flag for background color (default: extract dominant
color from the image, or fall back to #0a0a0a)
2. OUTPUT FILES (generate all of these)
- spotify-canvas.jpg (720x1280, 9:16 vertical)
- instagram-reel.jpg (1080x1920, 9:16 vertical)
- youtube-shorts.jpg (1080x1920, 9:16 vertical)
- youtube-community.jpg (1200x900, 4:3 landscape)
- soundcloud-banner.jpg (2480x520, ultra-wide)
- og-image.jpg (1200x630, social sharing)
3. RESIZING STRATEGY
- For vertical formats (9:16): center the square artwork in the middle of the
canvas, scale it to fit the width, fill top/bottom with the background color
- For landscape formats: center the artwork, scale it to fit the height, fill
left/right with the background color
- For the SoundCloud banner: the artwork is very small relative to the canvas,
so center it and keep generous padding on both sides
- NEVER stretch or distort the image. NEVER crop the artwork.
- Use sharp (npm package) for image processing
4. OUTPUT
- Create the output directory if it doesn't exist
- Print each file as it's generated with dimensions
- Print total file count and output directory path when done
5. STYLE
- Clean, minimal output. No emoji. File paths and dimensions only.
- Add a --preview flag that generates an HTML file (preview.html) showing all
assets in a grid so I can visually verify them in a browser
💡Copy-paste ready

That entire block is the prompt. Paste it as-is into your your AI CLI tool session. The specificity about “never stretch, never crop” and the exact dimensions are deliberate — the more precise your requirements, the closer the first output matches what you want.


What you get

After your AI CLI tool finishes (typically 60-90 seconds), you’ll have a few files:

resize-assets.js
package.json

your AI CLI tool will likely install the sharp dependency automatically. If not, run npm install in the same folder.

Try it

Grab any square image — your latest cover art, or even a placeholder. Run it:

Terminal window
node resize-assets.js your-cover-art.jpg --preview

You should see output like:

Created release-assets/spotify-canvas.jpg (720x1280)
Created release-assets/instagram-reel.jpg (1080x1920)
Created release-assets/youtube-shorts.jpg (1080x1920)
Created release-assets/youtube-community.jpg (1200x900)
Created release-assets/soundcloud-banner.jpg (2480x520)
Created release-assets/og-image.jpg (1200x630)
Created release-assets/preview.html
6 assets generated in ./release-assets

Open preview.html in your browser. You should see all six assets displayed in a grid. Check each one:

  • Is the artwork centered?
  • Is there clean padding (not white — your background color)?
  • Is the artwork NOT stretched or cropped?
Using your real artwork

If you don’t have cover art handy, grab any square image. But the real payoff comes when you use your actual artwork. Try it with the cover from KICK IT W/U or JADED — seeing your real brand assets auto-generated is when this clicks.


If something is off

LLMs occasionally produce code with small bugs. Here are the most common issues and one-line fix prompts:

ProblemFollow-up prompt
White background instead of darkThe background is white. Change the default background color to #0a0a0a (near black). If you're extracting the dominant color, make sure it's actually running.
Artwork is tiny on the SoundCloud bannerThe artwork on the SoundCloud banner is too small. Scale it to about 400px tall and center it on the 2480x520 canvas.
sharp module not foundI'm getting "Cannot find module sharp". Add it to the package.json dependencies and run npm install.
sharp install fails on Apple Silicon (M1/M2/M3/M4)sharp is failing to compile on my Mac with an Apple Silicon chip. Install the pre-built binary instead: run npm install --platform=darwin --arch=arm64 sharp
Preview HTML doesn’t show imagesThe preview.html is showing broken images. Make sure the image paths are relative to the HTML file location.

Customize it

The base tool works, but here are follow-up prompts to make it fit your workflow better:

Add your logo watermark

Add a --watermark flag that accepts a small PNG logo file. When provided, place the
logo in the bottom-right corner of each asset at 5% of the canvas width, with 60%
opacity. This is for my "moodmixformat" wordmark on promo assets.

Add Spotify Canvas video

Add a --canvas-video flag. When set, instead of a static image for spotify-canvas,
generate an 8-second looping MP4 where the cover art slowly zooms in from 100% to
105% scale with a subtle parallax drift. Use ffmpeg (assume it's installed). Spotify
Canvas requires 720x1280, 3-8 seconds, H.264, under 8MB.

Batch process an album

Add support for passing a directory of images instead of a single file. When a
directory is given, process each image in it and create a subfolder per image in the
output directory, named after the input filename. This is for processing an entire
album's worth of singles art at once.
🔍Why CLI tools beat Canva for this

Canva is great for one-off design. But when you’re running the same resizing operation for every release, a CLI tool wins because:

  • Speed: one command vs. 10+ minutes of manual cropping
  • Consistency: every release gets identical treatment
  • Scriptable: you can chain this with your campaign generator (Lesson 2)
  • Free: no subscription needed once built
  • Customizable: add formats as platforms change their specs

The pattern here — turning repetitive creative-adjacent tasks into scripts — is one you’ll use constantly.


🔧

When Things Go Wrong

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

Symptom
The generated images have a white border instead of a clean background
Evidence
Opening spotify-canvas.jpg shows my artwork centered but surrounded by white instead of a dark background
What to ask the AI
"The background color is defaulting to white. Change the composite background to #0a0a0a for all output images. Make sure the canvas is created with this background before compositing the artwork on top."
Symptom
Images look blurry or pixelated
Evidence
The youtube-community.jpg looks soft/blurry compared to my original 3000x3000 artwork
What to ask the AI
"The image quality is too low. Set the JPEG quality to 95 in the sharp output options, and make sure you're using lanczos3 resampling when resizing."
Symptom
The script crashes on PNG input with transparency
Evidence
Error: Expected 3 channels but got 4 when processing a PNG with alpha channel
What to ask the AI
"My cover art is a PNG with transparency. Add .flatten({ background: bgColor }) before compositing so it converts RGBA to RGB properly."
Symptom
SoundCloud banner has the artwork cut off at top and bottom
Evidence
The artwork is scaled to fit the 520px height but it extends beyond the canvas edges horizontally
What to ask the AI
"The SoundCloud banner logic is scaling the artwork to fill the height, but it should scale to fit WITH padding. Scale the artwork to about 70% of the banner height (364px) and center it on the 2480x520 canvas."

How it works (the 2-minute explanation)

You don’t need to understand every line, but here’s the mental model:

  1. sharp is a Node.js image processing library (like Photoshop in code). It reads your image, lets you resize and composite it onto a canvas.
  2. For each platform, the tool creates a blank canvas at the target dimensions, fills it with your background color, then places your artwork centered on that canvas.
  3. The key math: for vertical formats (9:16), the artwork fits the width, so the height has padding. For landscape formats, the artwork fits the height, so the width has padding.
  4. The preview HTML is a simple page that displays all generated images in <img> tags so you can visually verify everything.

Try it yourself

  1. Open your AI CLI tool in an empty folder.
  2. Paste the main prompt.
  3. Run the tool with any square image.
  4. Open the preview HTML and verify all six assets.
  5. Pick one customization from the list above and add it.

If you want to go further, try feeding it the cover art from your next release. The first time you watch six platform-ready assets appear in seconds instead of spending 20 minutes in Canva, you’ll never go back.


Key takeaways

  • One prompt, one tool: a detailed prompt produces a working image resizer in under 2 minutes.
  • CLI tools automate repetitive creative work — resizing the same image for 6 platforms is busywork, not creative work.
  • Never stretch, never crop — the strategy of placing artwork on a colored canvas preserves your aesthetic across every aspect ratio.
  • Iterative customization is the pattern: get a working base, then add watermarks, video, or batch processing one prompt at a time.
  • sharp is the standard for Node.js image processing — knowing it exists means you can always extend this tool.

KNOWLEDGE CHECK

Your cover art is 3000x3000 (square) and you need a Spotify Canvas at 720x1280 (9:16). What's the correct resizing strategy?


What’s next

In the next lesson, you’ll build a 7-Day Release Campaign Generator — feed it metadata about a new track and get platform-specific captions, hashtag packs, a posting calendar, and a deployable EPK webpage. Same pattern: one prompt, one tool, then customize.