AutomationFlowsData & Sheets › Audio Upload Pipeline

Audio Upload Pipeline

01 - Audio Upload Pipeline. Uses httpRequest, postgres. Webhook trigger; 6 nodes.

Webhook trigger★★★★☆ complexity6 nodesHTTP RequestPostgres
Data & Sheets Trigger: Webhook Nodes: 6 Complexity: ★★★★☆ Added:

This workflow follows the HTTP Request → Postgres recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "01 - Audio Upload Pipeline",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "audio-uploaded",
        "responseMode": "onReceived",
        "responseData": "{ \"status\": \"processing\" }"
      },
      "name": "Webhook: audio.uploaded",
      "type": "n8n-nodes-base.webhook",
      "position": [
        250,
        300
      ],
      "id": "node-webhook-audio-uploaded"
    },
    {
      "parameters": {
        "url": "={{ $env.DJ_SERVICE_URL }}/process",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "track_id",
              "value": "={{ $json.track_id }}"
            },
            {
              "name": "r2_url_raw",
              "value": "={{ $json.r2_url_raw }}"
            },
            {
              "name": "operations",
              "value": [
                "transcode",
                "stems",
                "analyze",
                "vibe"
              ]
            }
          ]
        },
        "options": {
          "timeout": 120000
        }
      },
      "name": "dj-service: Full Process",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        500,
        300
      ],
      "id": "node-dj-process"
    },
    {
      "parameters": {
        "url": "={{ $env.VIBE_ENGINE_URL }}/classify",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "audio_features",
              "value": "={{ $json.audio_features }}"
            }
          ]
        }
      },
      "name": "Vibe Engine: Classify",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        750,
        300
      ],
      "id": "node-vibe-classify"
    },
    {
      "parameters": {
        "url": "={{ $env.MESHTOOL_API_URL }}/v1/tools/imagegen",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "prompt",
              "value": "Album cover art: {{ $json.vibe_packet.primary_vibe }} music, {{ $json.vibe_packet.emotion }} mood, {{ $json.vibe_packet.mood_tags.join(', ') }}"
            },
            {
              "name": "style",
              "value": "music album cover, professional, cinematic"
            }
          ]
        }
      },
      "name": "MeshTool: Generate Cover Art",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1000,
        200
      ],
      "id": "node-cover-art"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO tracks (id, creator_id, title, bpm, key, vibe_packet, r2_url_raw, r2_url_processed, stems) VALUES ('{{ $json.track_id }}', '{{ $json.creator_id }}', '{{ $json.title }}', {{ $json.audio_features.bpm }}, '{{ $json.audio_features.key }}', '{{ JSON.stringify($json.vibe_packet) }}'::jsonb, '{{ $json.r2_url_raw }}', '{{ $json.r2_url_processed }}', '{{ JSON.stringify($json.stems) }}'::jsonb) ON CONFLICT (id) DO UPDATE SET vibe_packet = EXCLUDED.vibe_packet, r2_url_processed = EXCLUDED.r2_url_processed, stems = EXCLUDED.stems;"
      },
      "name": "Neon DB: Write Track Record",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1000,
        400
      ],
      "id": "node-neon-write"
    },
    {
      "parameters": {
        "url": "={{ $env.BRAIN_URL }}/events/core",
        "method": "POST",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "event",
              "value": "audio.processed"
            },
            {
              "name": "payload",
              "value": "={{ { track_id: $json.track_id, creator_id: $json.creator_id, vibe_packet: $json.vibe_packet, title: $json.title } }}"
            }
          ]
        }
      },
      "name": "Brain: Emit audio.processed",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1250,
        300
      ],
      "id": "node-brain-emit"
    }
  ],
  "connections": {
    "Webhook: audio.uploaded": {
      "main": [
        [
          {
            "node": "dj-service: Full Process",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dj-service: Full Process": {
      "main": [
        [
          {
            "node": "Vibe Engine: Classify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Vibe Engine: Classify": {
      "main": [
        [
          {
            "node": "MeshTool: Generate Cover Art",
            "type": "main",
            "index": 0
          },
          {
            "node": "Neon DB: Write Track Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Neon DB: Write Track Record": {
      "main": [
        [
          {
            "node": "Brain: Emit audio.processed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "tags": [
    "disco-bass",
    "audio",
    "pipeline"
  ]
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

01 - Audio Upload Pipeline. Uses httpRequest, postgres. Webhook trigger; 6 nodes.

Source: https://github.com/think-zone/creator-os/blob/main/n8n-workflows/01-audio-upload-pipeline.json — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

CMM. Uses httpRequest, postgres, redis. Webhook trigger; 90 nodes.

HTTP Request, Postgres, Redis
Data & Sheets

Scraping. Uses httpRequest, postgres, @apify/n8n-nodes-apify, respondToWebhook. Webhook trigger; 61 nodes.

HTTP Request, Postgres, @Apify/N8N Nodes Apify
Data & Sheets

Workflow B — AI Listing Engine. Uses httpRequest, postgres, errorTrigger. Webhook trigger; 47 nodes.

HTTP Request, Postgres, Error Trigger
Data & Sheets

LogSentinel Workflow. Uses postgres, emailSend, httpRequest. Webhook trigger; 44 nodes.

Postgres, Email Send, HTTP Request
Data & Sheets

Post-Prayer. Uses postgres, httpRequest. Webhook trigger; 44 nodes.

Postgres, HTTP Request