{
  "name": "Transcribe long audio files beyond 25MB limit with FileFlows and OpenAI Whisper",
  "nodes": [
    {
      "id": "64ef094b-c447-4dc3-a3c3-8b0d777b5759",
      "name": "GET Form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -2080,
        624
      ]
    },
    {
      "id": "7787660b-343e-49a0-8177-c77e263002fe",
      "name": "Make 4MiB Chunks",
      "type": "n8n-nodes-base.code",
      "position": [
        -1632,
        624
      ]
    },
    {
      "id": "fc76d2f5-8ea6-4d8e-bf64-7772d1735860",
      "name": "Upload Chunk",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -960,
        688
      ]
    },
    {
      "id": "d0277bd8-7c34-4220-9005-4f1aa00c2409",
      "name": "Result",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1184,
        384
      ]
    },
    {
      "id": "646cd48f-d686-4d8a-a477-f892c2bfbf4d",
      "name": "If succeed",
      "type": "n8n-nodes-base.if",
      "position": [
        -736,
        384
      ]
    },
    {
      "id": "9c135f4b-a927-4ed0-97c0-7e634be06668",
      "name": "Split audio file",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -512,
        240
      ]
    },
    {
      "id": "035b6116-13ae-4077-b74c-f1f0f6ee5909",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -288,
        240
      ]
    },
    {
      "id": "fbfdf35a-f759-40c0-ace6-5b92ad89dc51",
      "name": "Split Audio",
      "type": "n8n-nodes-base.code",
      "position": [
        -64,
        240
      ]
    },
    {
      "id": "138f793f-72eb-4d6b-a91e-56d26986a4ec",
      "name": "Loop Over Segments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        160,
        240
      ]
    },
    {
      "id": "2bfd6a91-ba2d-4be5-b728-5f0fb4138fea",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        608,
        336
      ]
    },
    {
      "id": "fb77ddde-81bb-4d33-ad6c-18feb4554337",
      "name": "Result transcription",
      "type": "n8n-nodes-base.noOp",
      "position": [
        384,
        144
      ]
    },
    {
      "id": "4e2d9d43-db6e-400e-b7c3-e6b9d30c28bd",
      "name": "Loop Over Chunks",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1408,
        624
      ]
    },
    {
      "id": "3bdb454b-e54e-41da-a98d-5cf2c4049830",
      "name": "Merge transcription",
      "type": "n8n-nodes-base.code",
      "position": [
        608,
        144
      ]
    },
    {
      "id": "587d7489-863d-459b-bbc6-c902f0745bae",
      "name": "Convert to File",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        832,
        144
      ]
    },
    {
      "id": "ce3854cc-d870-4a47-b931-676bdf3b2181",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        -1856,
        624
      ]
    },
    {
      "id": "290bec95-3807-4d7f-abbc-affdeb54553e",
      "name": "Filter temporary files",
      "type": "n8n-nodes-base.filter",
      "position": [
        -960,
        384
      ]
    },
    {
      "id": "114c1df2-99b8-49bc-86c5-3404d27f6718",
      "name": "Rate Limit Delay",
      "type": "n8n-nodes-base.wait",
      "position": [
        832,
        400
      ]
    },
    {
      "id": "cfebb196-a52b-4594-8725-51236e0e4e22",
      "name": "Send Email with Transcription",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1056,
        144
      ]
    },
    {
      "id": "9b1de36f-6b8f-4044-9fa2-6dd8c641a51b",
      "name": "Send Error",
      "type": "n8n-nodes-base.gmail",
      "position": [
        848,
        608
      ]
    },
    {
      "id": "e1e89a89-165d-4aa1-b15a-d5aff0d0fc4d",
      "name": "Send Error1",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -512,
        480
      ]
    },
    {
      "id": "55862df0-b4b5-4078-b90b-998c893710b9",
      "name": "Chunk",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1184,
        576
      ]
    },
    {
      "id": "d911c170-5767-49e7-8959-53cf809a7f4d",
      "name": "Segment",
      "type": "n8n-nodes-base.noOp",
      "position": [
        384,
        336
      ]
    },
    {
      "id": "2aee5e34-e10d-4149-9dfc-ea05a2d5b4a8",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2848,
        -96
      ],
      "parameters": {
        "width": 676,
        "height": 1128,
        "content": "## Long-Form Audio Transcription\n\n**Problem:** OpenAI Whisper API has a 25 MB file size limit (~20 minutes of audio)\n\n**Solution:** This workflow overcomes the limitation by:\n1. Splitting audio into 1"
      }
    },
    {
      "id": "d0b1f7d2-8819-4ec9-9d33-183051233741",
      "name": "Stage 4 Delivery",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -32
      ],
      "parameters": {
        "width": 876,
        "height": 132,
        "content": "## STEP 4: Delivery\n\nPackage transcription and email to user"
      }
    },
    {
      "id": "cc22e417-d574-4098-b4f1-50c4690f3bfe",
      "name": "Stage 3 Transcription",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        784
      ],
      "parameters": {
        "width": 800,
        "height": 152,
        "content": "## STEP 3: OpenAI Transcription\n\nTranscribe each 15-minute segment using OpenAI Whisper API"
      }
    },
    {
      "id": "5441f26c-c5df-4464-b794-e45c3199ddb5",
      "name": "Stage 2 Splitting",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        64
      ],
      "parameters": {
        "width": 720,
        "height": 140,
        "content": "## STEP 2: Audio Splitting with FileFlows\n\nSplit audio into 15-minute segments to stay under OpenAI's 25 MB limit."
      }
    },
    {
      "id": "a0c0ed38-3f9a-4237-9012-a24a03e05c3d",
      "name": "Stage 1 Upload",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2112,
        912
      ],
      "parameters": {
        "width": 1280,
        "height": 134,
        "content": "## 📤 STEP 1: Upload & Chunk to FileFlows\n\nUpload large audio files to FileFlows in manageable chunks"
      }
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Split Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chunk": {
      "main": [
        [
          {
            "node": "Upload Chunk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Rate Limit Delay",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Result": {
      "main": [
        [
          {
            "node": "Filter temporary files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Segment": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GET Form": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If succeed": {
      "main": [
        [
          {
            "node": "Split audio file",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Error1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Audio": {
      "main": [
        [
          {
            "node": "Loop Over Segments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Chunk": {
      "main": [
        [
          {
            "node": "Loop Over Chunks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Configuration": {
      "main": [
        [
          {
            "node": "Make 4MiB Chunks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Send Email with Transcription",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Chunks": {
      "main": [
        [
          {
            "node": "Result",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Chunk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Make 4MiB Chunks": {
      "main": [
        [
          {
            "node": "Loop Over Chunks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rate Limit Delay": {
      "main": [
        [
          {
            "node": "Loop Over Segments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split audio file": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Segments": {
      "main": [
        [
          {
            "node": "Result transcription",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Segment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge transcription": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Result transcription": {
      "main": [
        [
          {
            "node": "Merge transcription",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter temporary files": {
      "main": [
        [
          {
            "node": "If succeed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}