AutomationFlowsGeneral › Generate Audio From Text Scripts Using Self-hosted Bark Model and Google Drive

Generate Audio From Text Scripts Using Self-hosted Bark Model and Google Drive

ByFlavien @flavien on n8n.io

🎯 Purpose: Generate audio files from text scripts stored in Google Drive.

Event trigger★★★★☆ complexity12 nodesExecute Workflow TriggerGoogle DriveRead Write FileExecute Command
General Trigger: Event Nodes: 12 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #4241 — we link there as the canonical source.

This workflow follows the Executecommand → Readwritefile 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
{
  "id": "oGZBcAWL45us8pwq",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Audio generator",
  "tags": [],
  "nodes": [
    {
      "id": "90a47429-775e-43d5-acfb-b7f72f382894",
      "name": "Start: External Trigger",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        300,
        80
      ],
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "id_repo_audio"
            },
            {
              "name": "id_repo_script"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "415fa2d1-532f-4a46-8634-8099f820816e",
      "name": "Start: Manual Test",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        200,
        440
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "627fad9c-407d-496a-b0ff-5b58055c666c",
      "name": "Test Values",
      "type": "n8n-nodes-base.set",
      "position": [
        420,
        440
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "id_repo_audio",
              "type": "string",
              "value": "1wrnIskVWQJRAvKs04bhXavgDv2FokabG"
            },
            {
              "name": "id_repo_script",
              "type": "string",
              "value": "12tIJJuO_DfwJbtOuO72mpk2_3s9O4xZc"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e0efd839-dc9e-4d0b-b602-a6ead9e8d679",
      "name": "Aggregate Inputs",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        560,
        80
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "id_repo_audio"
            },
            {
              "fieldToAggregate": "id_repo_script"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "fea5d345-4d72-431d-bf9b-4165b9b6f605",
      "name": "Get Scripts",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        820,
        80
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "id",
            "value": "={{ $('Aggregate Inputs').item.json.id_repo_script[0] }}"
          }
        },
        "options": {},
        "resource": "fileFolder"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "0fccfd48-ca42-45ea-9eb0-75f49f4572f6",
      "name": "Loop Scripts",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1140,
        80
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "ba6ea0f9-d1d7-4f22-a817-764335132a1c",
      "name": "Download Script",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1500,
        100
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "f0f95702-4636-4810-9e42-4b3af5c13d9a",
      "name": "Save Script",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        1780,
        100
      ],
      "parameters": {
        "options": {},
        "fileName": "/tmp/script.txt",
        "operation": "write",
        "dataPropertyName": "=data"
      },
      "typeVersion": 1
    },
    {
      "id": "63cb6eb3-6693-4b34-84c9-4f6b39872752",
      "name": "Generate WAV",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        2000,
        100
      ],
      "parameters": {
        "command": "=/opt/venv/bin/python /scripts/generate_voice.py /tmp/script.txt /tmp/output_{{ $json.name.replace(/\\.txt$/, '') }}.wav"
      },
      "typeVersion": 1
    },
    {
      "id": "0d29f755-5ed2-4005-9eed-acbc9c8ff8d1",
      "name": "Read Audio",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        2220,
        100
      ],
      "parameters": {
        "options": {},
        "fileSelector": "=/tmp/output_{{ $('Loop Scripts').item.json.name.replace(/\\.txt$/, '.wav') }}"
      },
      "typeVersion": 1
    },
    {
      "id": "394dead9-49af-4187-a589-1ff751e998f8",
      "name": "Upload Audio",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2440,
        100
      ],
      "parameters": {
        "name": "={{ $json.fileName }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Aggregate Inputs').item.json.id_repo_audio[0] }}"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "95f7b0e0-980f-4beb-adac-197b4b50a84f",
      "name": "\ud83d\udcdd Workflow Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        260
      ],
      "parameters": {
        "width": 600,
        "height": 400,
        "content": "## Audio Generation Workflow\n\n1. This workflow automates the conversion of text scripts into audio files using a Python voice synthesis script.\n2. It retrieves scripts from Google Drive, generates audio with Bark-style narration, and reuploads the result.\n3. Script filenames must be .txt. Only clean plain text is supported.\n\n### Inputs:\n- id_repo_script: Google Drive folder with scripts\n- id_repo_audio: Google Drive folder to upload audio files\n\nMake sure the Python script is deployed at /scripts/generate_voice.py and has access to Bark or other required models."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "30318ca0-c87d-43db-8b74-3ec1127e1061",
  "connections": {
    "Read Audio": {
      "main": [
        [
          {
            "node": "Upload Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Scripts": {
      "main": [
        [
          {
            "node": "Loop Scripts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Script": {
      "main": [
        [
          {
            "node": "Generate WAV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Test Values": {
      "main": [
        [
          {
            "node": "Aggregate Inputs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate WAV": {
      "main": [
        [
          {
            "node": "Read Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Scripts": {
      "main": [
        [],
        [
          {
            "node": "Download Script",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Audio": {
      "main": [
        [
          {
            "node": "Loop Scripts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Script": {
      "main": [
        [
          {
            "node": "Save Script",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Inputs": {
      "main": [
        [
          {
            "node": "Get Scripts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start: Manual Test": {
      "main": [
        [
          {
            "node": "Test Values",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start: External Trigger": {
      "main": [
        [
          {
            "node": "Aggregate Inputs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

🎯 Purpose: Generate audio files from text scripts stored in Google Drive.

Source: https://n8n.io/workflows/4241/ — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

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

General

Perfect for disaster recovery or migrating between environments, this workflow automatically identifies your most recent FTP backup and provides a manual restore capability that intelligently excludes

Email Send, Ftp, Read Write File +2
General

This n8n workflow template uses community nodes and is only compatible with the self-hosted version of n8n.

Execute Command, Read Write File
General

Code. Uses manualTrigger, executeWorkflowTrigger, googleDrive, stickyNote. Event-driven trigger; 16 nodes.

Execute Workflow Trigger, Google Drive
General

N8N Workflow. Uses localFileTrigger, executeCommand, readWriteFile. Event-driven trigger; 16 nodes.

Local File Trigger, Execute Command, Read Write File
General

This workflow creates nested Google Drive folders from a path string (like ). It automatically handles the necessary folder lookups and creation steps required by Google Drive, then outputs the final

Execute Workflow Trigger, Google Drive