DistroKid Album Loop
Drive the album-distribution wizard end to end, then stop one click short of publishing.
Reach for this when a finished, mastered album needs to go live on Spotify, Apple Music, and the rest, and you want an agent to fill the entire upload form correctly while you keep the final submit button.
This is the last loop in the pipeline. The music is written, generated, and mastered; what is left is the unglamorous, error-prone clerical work of feeding a distributor's upload form dozens of fields it is picky about. Distribution wizards re-render their per-track rows the moment you set the song count, run a hidden title validator that silently rejects perfectly reasonable titles, and bury the one field that decides how your genre shows up on Spotify three clicks deep. This loop hands all of that to your agent and keeps you as the reviewer.
The engine is the distrokid-upload-album skill, which drives the DistroKid new-album wizard at distrokid.com/new from a folder of mastered WAVs. It sets album metadata, uploads every track file to the right slot, fills per-track titles, version tags, songwriter and performer/producer credits, and pricing, and uploads the artwork. It deliberately does everything except press the final submit, because the one judgment call worth keeping human is whether this is actually ready to be permanent and public.
Two rules carry most of the value. First, song count goes in first, because setting it rewrites every track row; fill a track before it and the work evaporates. Second, the genre or style does NOT live in the title, it lives in the per-track Version field, because the platform renders the final track name as 'Title (Version)'. Put the style in the title too and you get an ugly double parenthesis; leave the Version blank and your track ships with no genre tag at all. The loop treats Version as its own non-skippable step and reads every field back to prove it landed.
It assumes a mastering loop ran upstream and produced clean, style-tagged filenames. The whole loop is platform-specific to DistroKid today; the same shape (song-count-first, validator-safe titles, style-in-version, pause-before-submit) ports to other distributors, which is the planned next direction.
Skills & actions it uses
The concrete, reusable skills this loop calls to actually do the work.
distrokid-upload-albumThe wizard automation itself: sets album metadata, uploads every track file, fills per-track titles, versions, credits and pricing, and the artwork, then stops before final submit. Fires once the album is mastered and you are logged into the distributor in your browser.album-streaming-masterThe required upstream mastering loop. Produces the loudness-normalized, style-tagged WAV filenames this loop reads to derive each track's title and version tag. Run it before this loop starts.
The loop
- 1
Confirm the album is ready and the decisions are made
This loop automates clerical work, not creative judgment. Before it runs, confirm the mastered WAV folder exists with style-tagged filenames, you are logged into the distributor in your browser, and the human-only decisions are settled.
- Mastered, style-tagged WAVs in hand (output of the mastering loop) — filenames carry both the clean title and a short style tag
- Artist name, album title, label, release date and time, genres, and pricing approved up front — these are decisions, not automations
- You are signed in to the distributor in the browser your agent controls
- If a step needs a value you have not set, the agent asks rather than guessing
- 2
Set the song count first, then album-level metadata
Open the new-album wizard and set the number of songs before anything else, because that field re-renders every per-track row. Only then fill the album-level fields. Give the long form a moment to fully load before reading or writing.
- Song count FIRST — it rebuilds the track rows, so any track field filled before it is wiped
- Album fields: artist, title, label, release date, release time, primary and secondary genre
- Two separate price fields — per-track price and the whole-album price tier — do not confuse them
- Treat any pre-filled values (artist, label, genre, or language carried over from a past upload) as suspect; verify and overwrite rather than assuming the field is blank
- 3
Fill validator-safe track titles
The platform runs a hidden title checker with both soft suggestions and hard, submit-blocking errors. Write titles that pass it the first time, and keep the style OUT of the title — it belongs in the Version field in the next step.
- No track-number-shaped prefixes (the validator rejects digits matching the track's position) — use Roman numerals, spell the number out, or drop the prefix entirely
- Use a colon for subtitles, never a dash — a dash gets soft-rejected with a suggestion to convert it
- No year or date in the title — that lives in album metadata
- No 'feat.' in the title — use the dedicated featured-artist field so the platform renders it for you
- No parenthetical subtitle if the Version field will already add parentheses — two sets of parens look broken
- For chaptered or thematic albums, a reliable pattern is 'Theme [RomanNumeral]: Title', which dodges the number validator while keeping running order
- 4
Fill the per-track Version field — the genre tag, its own step
This is the most-forgotten and highest-value step. The Version field is what makes the streaming display read 'Title (Style)'. Derive each track's style from its mastered filename, set it through the 'Other' option, and never skip it — even when the style repeats across tracks.
- Every track gets a Version, even if it duplicates a neighbor — a blank Version ships a track with no genre tag at all
- Source the style from the filename's style tag produced by the mastering loop, so titles and tags stay in sync
- Do not put the style in the title instead — that double-parens the display; Version is the single right home for it
- Read every Version value back after the bulk fill to prove it landed — this is the step most easily dropped, so treat the readback as mandatory
- 5
Fill per-track pricing, songwriters, and credits
Run the repeatable per-track cycle for the remaining clerical fields. Use any 'copy to all tracks' shortcut the form offers, but verify it actually copied rather than trusting it.
- Per-track price set consistently across the album
- Songwriter filled on every track; if the form offers 'copy songwriters to all tracks', use it but read back to confirm it took
- Performer and producer credits per track, including adding a second producer slot where needed
- Where the same control is duplicated across all tracks (e.g. an 'add another producer' link), locate this track's instance by walking out from that track's own fields, not by a shared id
- After each bulk-fill, read the values back and log them — trust readback over screenshots on this very tall, lazy-loading form
- 6
Upload all track files and the artwork
Upload every WAV to its matching track slot in track order, then upload the album artwork. Keep the audio uploads and the artwork slot strictly separate.
- Map each WAV to its correct track slot in order — do not let a WAV land in the artwork input (it triggers a wrong-format error and a wasted round trip)
- Upload the artwork last, into the dedicated image slot
- Square ~3000x3000 art is the clean target; non-square uploads are accepted but the platform nudges you to crop
- 7
Stop before submit, summarize, and hand off
Never press the final submit. Produce a summary table and pause so a human reviews the whole form in their own tab and publishes when satisfied. Be ready to iterate if the validator fires on submit.
- Summary table: track count, album title, artist, label, release date/time, per-track and album prices, genres, artwork status, credits
- If the validator rejects on submit, fix only the flagged rule via a targeted bulk-update on the titles — do not refresh the page; uploads, version tags, and credits are preserved across retries
- Final publish is always the human's click
- 8
Optional follow-up: add lyrics after release
Once the album is live, a separate pass can add plain-text lyrics so they display on the major streaming and search surfaces. Lyrics must be stripped to the distributor's plain-text rules, and the first track is verified before bulk-applying.
- Strip section markers, names, and end-of-line punctuation; capitalize each line; write repeats out in full instead of 'chorus 2x'
- Verify the first track's formatted lyrics on screen before processing the rest
- Choose the free lyrics tier unless synced lyrics are explicitly wanted
Then run it again for the next song, chapter, or track.
You end with
- A fully pre-filled distribution upload form — album metadata, all track files in their slots, per-track titles, version/style tags, credits, and pricing — sitting one click away from submission
- Validator-safe track titles that pass the platform's soft warnings and hard errors on the first or second try
- A per-track Version field on every track so each song ships with its genre/style tag visible on streaming services
- A final summary table (track count, artist, label, release date/time, prices, genres, artwork status, credits) for you to review
- A clean human-review pause: you inspect the form in your own tab and press submit when you are satisfied
Skip this loop if…
- Your album is not mastered yet — run the mastering loop first; this loop starts from finished, style-tagged WAVs.
- You distribute through a label, an aggregator, or a different service whose upload form this automation does not yet drive.
- You want a fully hands-off publish — by design this loop always stops before the final submit so a human signs off.
How it connects
Requires
Each slot needs one loop — pick whichever fits. The recommended pick is starred.
Alternatives
A competing loop for the same job — different tool, taste, or depth. Pick whichever fits you.
Pairs with
Commonly run just before or after this one in the pipeline.