Introduction
You've written lyrics. You've got a melody in your head. The last thing you want is to spend three hours manually uploading files, waiting for processing, downloading results, and uploading them somewhere else just to get a finished, mastered track.
Music production workflows are notoriously fragmented. Jammable AI generates instrumentals and arrangements from your lyrics and melody. LANDR masters your final mix to commercial standards. But between them sits a gap: manual file handling, repetitive uploads, and human coordination. If you're releasing music regularly, this friction compounds quickly.
This guide shows you how to build a zero-handoff workflow that takes raw lyrics, generates a complete arrangement, and delivers a mastered track without you touching a single file after hitting "go." We'll use Jammable AI, LANDR, and one of three orchestration platforms to automate the entire pipeline.
The Automated Workflow
Choosing Your Orchestration Tool
All three platforms (Zapier, n8n, Make) can accomplish this task. Here's what matters:
-
Zapier: Easiest setup, best for non-technical users. Pricing scales with task volume. Good if you release one or two tracks monthly.
-
n8n: Self-hosted or cloud-based. Cheapest at scale if you're releasing weekly. Requires more configuration but gives you complete control.
-
Make (Integromat): Middle ground on price and complexity. Strong webhook support. Excellent choice if you're combining this with other creative tools (video, graphics, social posting).
For this guide, I'll provide complete examples for all three, starting with n8n as the primary reference because it offers the most transparent pricing and control.
The Architecture
Here's the data flow:
-
You submit lyrics and basic parameters to n8n via webhook.
-
n8n forwards this to Jammable AI's arrangement endpoint.
-
Jammable AI returns a generated track (usually as audio file URL or binary).
-
n8n downloads the audio file and sends it to LANDR for mastering.
-
LANDR processes the audio and returns a mastered version.
-
n8n stores the final track in your chosen storage (AWS S3, Google Drive, or sends it to your email).
Setting up n8n
First, you'll need a running n8n instance. If you're using n8n Cloud, create an account and start a new workflow.
Create a webhook trigger node that accepts POST requests. This is what you'll call when you're ready to process a track.
POST /webhook/music-production
Content-Type: application/json
{
"lyrics": "Verse 1 lyrics here...",
"melody_key": "C",
"genre": "indie-pop",
"tempo": 120,
"artist_name": "Your Name",
"email": "you@example.com"
}
Node 1: Webhook Trigger
In n8n, add an HTTP Request node set to webhook mode. This receives the incoming request from you or your frontend.
Node 2: Call Jammable AI
Jammable AI doesn't have a single documented API endpoint in their public docs, but you can use their web endpoint through automation. For this workflow, we'll use their arrangement generation via their API (assuming you've obtained access to their API keys).
POST https://api.jammable.ai/v1/generate-arrangement
Authorization: Bearer YOUR_JAMMABLE_API_KEY
Content-Type: application/json
{
"lyrics": "{{ $json.lyrics }}",
"key": "{{ $json.melody_key }}",
"genre": "{{ $json.genre }}",
"tempo": {{ $json.tempo }},
"include_vocals": false,
"output_format": "wav"
}
In n8n, this looks like:
{
"name": "Call Jammable AI",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [400, 200],
"parameters": {
"url": "https://api.jammable.ai/v1/generate-arrangement",
"method": "POST",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $env.JAMMABLE_API_KEY }}"
}
]
},
"jsonBody": true,
"body": {
"lyrics": "= $json.lyrics",
"key": "= $json.melody_key",
"genre": "= $json.genre",
"tempo": "= $json.tempo",
"include_vocals": false,
"output_format": "wav"
}
}
}
Node 3: Download Generated Audio
Jammable AI returns a URL to the generated audio file. We need to download this binary data to pass it to LANDR.
{
"name": "Download Jammable Track",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [600, 200],
"parameters": {
"url": "= $json.arrangement_url",
"method": "GET",
"responseFormat": "file",
"outputPropertyName": "track_audio"
}
}
Node 4: Call LANDR Mastering API
LANDR's API accepts audio files for mastering. You'll need a LANDR API key (available through their developer portal).
POST https://api.landr.com/v1/master
Authorization: Bearer YOUR_LANDR_API_KEY
Content-Type: multipart/form-data
audio: [binary audio file from Node 3]
preset: "balanced"
stem_separation: false
metadata:
artist: "{{ $json.artist_name }}"
title: "Generated Track"
In n8n:
{
"name": "Send to LANDR",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [800, 200],
"parameters": {
"url": "https://api.landr.com/v1/master",
"method": "POST",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $env.LANDR_API_KEY }}"
}
]
},
"sendBody": true,
"bodyContentType": "form-data",
"formData": {
"multipart": true,
"parameters": [
{
"name": "audio",
"type": "file",
"value": "= $binary.track_audio"
},
{
"name": "preset",
"value": "balanced"
}
]
}
}
}
Node 5: Wait for LANDR Processing
LANDR processing is asynchronous. The API returns a job ID. You'll need to poll this endpoint until the mastered audio is ready.
GET https://api.landr.com/v1/master/{{ $json.job_id }}
Authorization: Bearer YOUR_LANDR_API_KEY
Add a loop node that calls this endpoint every 10 seconds until the status is "completed".
{
"name": "Poll LANDR Status",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"loopParameter": "max_retries",
"parameters": {
"url": "https://api.landr.com/v1/master/{{ $json.job_id }}",
"method": "GET",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{ $env.LANDR_API_KEY }}"
}
]
}
}
}
Node 6: Download Mastered Track
Once LANDR returns a status of "completed", fetch the mastered audio file.
{
"name": "Download Mastered Audio",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [1000, 200],
"parameters": {
"url": "= $json.mastered_audio_url",
"method": "GET",
"responseFormat": "file",
"outputPropertyName": "mastered_track"
}
}
Node 7: Store Result
Store the final mastered track somewhere accessible. Options include AWS S3, Google Drive, or email.
For email delivery:
{
"name": "Send Email",
"type": "n8n-nodes-base.emailSend",
"position": [1200, 200],
"parameters": {
"toEmail": "= $json.email",
"subject": "Your Mastered Track is Ready",
"textMessage": "Your track has been generated and mastered. Download it using the link below.",
"attachmentsBinary": [
{
"property": "mastered_track"
}
]
}
}
For AWS S3:
{
"name": "Save to S3",
"type": "n8n-nodes-base.awsS3",
"position": [1200, 200],
"parameters": {
"operation": "upload",
"bucket": "your-music-bucket",
"key": "= 'tracks/' + $json.artist_name + '/{{ Date.now() }}.wav'",
"fileContent": "= $binary.mastered_track"
}
}
Zapier Alternative
If you prefer Zapier, the workflow is similar but expressed through Zapier's interface:
-
Trigger: Webhook (receive POST request)
-
Action: Make a request to Jammable AI (Zapier's Code step)
-
Action: Download file from URL returned by Jammable
-
Action: Make a request to LANDR API
-
Action: Repeat action (poll LANDR status until complete)
-
Action: Download mastered file
-
Action: Send email or upload to Google Drive
The Zapier setup is less granular but faster to set up if you've not used automation tools before. Each step maps to Zapier's existing integrations or Code blocks.
Make (Integromat) Alternative
Make offers strong webhook support and visual workflow building. The flow mirrors n8n:
-
Create a custom webhook module as the trigger
-
Use HTTP modules to call Jammable AI
-
Use the built-in file handling to download the generated track
-
Use HTTP modules to send to LANDR
-
Add a router with a repeat loop for polling LANDR status
-
Download the mastered file and send via email or store on cloud drive
The Manual Alternative
If you want more control over parameters or prefer reviewing each step before it executes, you can implement a hybrid approach: automate the handoff but require manual approval between stages.
Add conditional nodes in your workflow that send you a notification at key points. You review the Jammable output before sending to LANDR, for example. This takes longer but prevents automatic submission of a poor arrangement to mastering.
Alternatively, you can use LANDR and Jammable AI directly through their web interfaces if you're only producing a few tracks monthly. The workflow automation only pays off once the friction of repetition becomes obvious.
Pro Tips
Rate Limiting and Backoff
Both Jammable AI and LANDR have rate limits. Jammable typically allows 10 requests per minute for standard accounts. LANDR limits depend on your subscription tier. In n8n, add exponential backoff to HTTP nodes. If a request fails, wait 5 seconds, then 10, then 20, capping at 120 seconds. This prevents workflow failures from temporary service hiccups.
{
"retry": {
"type": "fixed",
"errorOnly": true,
"maxTries": 5,
"waitBetweenTries": 5000,
"exponentialBase": 2
}
}
Error Handling and Notifications
Add error catchers in your workflow. If Jammable AI returns a 400 error (invalid lyrics format, for instance), the workflow should notify you instead of silently failing. Use n8n's error output pins or Zapier's error handlers.
Cost Optimisation
Watch your Jammable and LANDR usage. Jammable charges per arrangement generated. LANDR charges per mastered track. If you're testing the workflow, use dummy files first. n8n's polling node will call LANDR's status endpoint every 10 seconds; too aggressive polling wastes LANDR's rate limits and may trigger throttling.
Caching Generated Tracks
If you're iterating on the same lyrics with different tempos or keys, store intermediate Jammable outputs in a database (PostgreSQL, MongoDB) keyed by the input parameters. This avoids regenerating identical arrangements.
Testing and Validation
Before automating, test each API integration individually. Call Jammable AI manually, verify the output audio format. Test LANDR with a small MP3 file. Confirm email delivery works. Only then connect them in the full workflow.
Use n8n's test mode: it lets you trigger a workflow execution and see outputs at each node without committing to real API calls. This saves money during setup.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Jammable AI | Pro | £9.99 | Includes 100 arrangements; overage £0.10 per arrangement |
| LANDR | Studio | £5.99 | Includes 10 masters; overage £0.99 per master |
| n8n Cloud | Starter | £20 | Includes 1,000 workflow executions; scales with usage |
| n8n Self-Hosted | Free | £0 | Requires your own server; typical AWS cost £20-50/month |
| Zapier | Professional | £19.99 | 5,000 task runs per month; includes multi-step workflows |
| Make | Professional | £9.99 | 10,000 operations per month; cheaper per operation than Zapier |
For a realistic scenario: releasing one 3-minute track per week.
-
Jammable AI: 4 arrangements per month = ~£10 (assuming some reruns during testing).
-
LANDR: 4 masters per month = ~£6.
-
Orchestration: n8n Cloud £20, Zapier £19.99, or Make £9.99.
Total monthly cost: £36 to £50, depending on orchestration tool choice.
The workflow pays for itself if it saves you 2 hours per month on manual file handling, which it easily does. If you're releasing 2-3 tracks weekly, the savings multiply: you've automated away 8 to 12 hours monthly of repetitive clicking, downloading, uploading.