N
n8n Store
Workflow Market
Convert viral videos into AI avatar swaps and publish on TikTok with Blotato OK vide

Convert viral videos into AI avatar swaps and publish on TikTok with Blotato OK vide

by drfirasβ€’0 views

Description

Categories

πŸ€– AI & Machine Learning

Nodes Used

n8n-nodes-base.setn8n-nodes-base.coden8n-nodes-base.waitn8n-nodes-base.waitn8n-nodes-base.waitn8n-nodes-base.waitn8n-nodes-base.mergen8n-nodes-base.mergen8n-nodes-base.mergen8n-nodes-base.telegram
PriceGratuit
Views0
Last Updated11/28/2025
workflow.json
{
  "id": "UQTsOfvLOvCjS4MB",
  "meta": {
    "instanceId": "de822f81f3a2367cef7d9549771a77783236bc9596481be2ae65c05fbcc4b4fd",
    "templateCredsSetupCompleted": true
  },
  "name": "Convert viral videos into AI avatar swaps and publish on TikTok with Blotato OK vide",
  "tags": [],
  "nodes": [
    {
      "id": "b3478644-2e4a-4689-9072-bc553dac162f",
      "name": "Telegram Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        2192,
        528
      ],
      "webhookId": "cf19aa34-f1e9-4581-bd5e-a430ae11b78c",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "TBPespUzbkdn7hk7",
          "name": "Telegram_wan"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4877475f-5ed6-4812-a104-cc66f1854348",
      "name": "Telegram Get File (Avatar)",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2400,
        496
      ],
      "webhookId": "b871c466-8ce8-4bee-9f0d-ba51a257bf40",
      "parameters": {
        "fileId": "={{ $json.message.photo[$json.message.photo.length - 1].file_id }}",
        "resource": "file",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "TBPespUzbkdn7hk7",
          "name": "Telegram_wan"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "86b820bc-7f8f-48ac-b652-c2aee001a63b",
      "name": "Extract Video URL",
      "type": "n8n-nodes-base.code",
      "position": [
        2416,
        656
      ],
      "parameters": {
        "jsCode": "const caption = $input.first().json.message.caption || '';\nreturn [{ json: { videoUrl: caption.trim() } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "797e5d1c-0519-4602-8f97-8a99b6c90c3b",
      "name": "Transform Video (FAL WAN Replace)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3760,
        432
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/wan/v2.2-14b/animate/replace",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "jsonBody": "={\n  \"video_url\": \"{{ $('Extract Video URL').first().json.videoUrl }}\",\n  \"image_url\": \"{{ $('Build Public Image URL').first().json.data.url.replace(/^http:\\/\\/tmpfiles\\.org\\/(\\d+)\\/(.*)$/i, 'https://tmpfiles.org/dl/$1/$2') }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "={{ 'Key ' + $('Workflow Configuration').first().json.falApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "1dce842e-e571-44bf-87eb-aa5721f3b79c",
      "name": "Wait Video (Job Status - WAN)",
      "type": "n8n-nodes-base.wait",
      "position": [
        3984,
        432
      ],
      "webhookId": "018b820d-9050-4d83-86f5-d8eb4ab404fb",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "15a13d40-cdfc-42d0-8ec4-b404019fe506",
      "name": "Get Video (Fetch WAN Output)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4208,
        432
      ],
      "parameters": {
        "url": "={{ $json.response_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Key ' + $('Workflow Configuration').first().json.replicateApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "693b65bb-e368-4db6-b95b-77cc636b8a9f",
      "name": "Transform Audio (FAL Chatterbox)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3760,
        624
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/chatterbox/speech-to-speech",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "jsonBody": "={\n  \"source_audio_url\": \"{{ $json.output }}\",\n  \"target_voice_audio_url\": \"{{ $('Workflow Configuration').first().json.targetVoiceAudioUrl }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "={{ 'Key ' + $('Workflow Configuration').first().json.falApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6c605e20-84ef-4424-8188-958b663253b9",
      "name": "Wait Audio (Job Status - Chatterbox)",
      "type": "n8n-nodes-base.wait",
      "position": [
        3984,
        624
      ],
      "webhookId": "4960d733-3669-405a-a76f-87b83b7fd025",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "4767517b-020d-452b-b95f-ad92f06892d2",
      "name": "Get Audio (Fetch Chatterbox Output)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4208,
        624
      ],
      "parameters": {
        "url": "={{ $json.response_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Key ' + $('Workflow Configuration').first().json.falApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ec40f3e7-3274-4997-8729-a5d3bbebabaf",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        2640,
        656
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "targetVoiceAudioUrl",
              "type": "string",
              "value": "targetVoiceAudioUrl"
            },
            {
              "id": "fb17cfbf-c623-4152-828c-2ac73d0f5bb9",
              "name": "falApiKey",
              "type": "string",
              "value": "falApiKey"
            },
            {
              "id": "061c7422-d038-4d42-9cbf-a3fbf05b4f05",
              "name": "replicateApiKey",
              "type": "string",
              "value": "replicateApiKey"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "d3be99a7-629c-4265-81b1-0e79797d18f3",
      "name": "Combine (FAL FFmpeg Merge)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4688,
        528
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/ffmpeg-api/merge-audio-video",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "jsonBody": "={\n  \"video_url\": \"{{ $json.video.url }}\",\n  \"audio_url\": \"{{ $json.audio.url }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "={{ 'Key ' + $('Workflow Configuration').first().json.falApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d69c25f7-c7e4-4092-9a09-1fa7244f494f",
      "name": "Wait Final (Job Status - FFmpeg)",
      "type": "n8n-nodes-base.wait",
      "position": [
        4912,
        528
      ],
      "webhookId": "1e1c590f-f97f-406e-b411-d92b4f8329ae",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "d30d8477-5cff-4f94-838a-56abc566039a",
      "name": "Get Final (Fetch Final Video)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5136,
        528
      ],
      "parameters": {
        "url": "={{ $json.response_url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Key ' + $('Workflow Configuration').first().json.falApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "43089646-51ec-485d-91a9-19f846c7ba73",
      "name": "OUTPUT (Google Sheet Write)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        5360,
        528
      ],
      "parameters": {
        "columns": {
          "value": {
            "url output": "={{ $json.video.url }}",
            "url original": "={{ $('Extract Video URL').first().json.videoUrl }}"
          },
          "schema": [
            {
              "id": "url original",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "url original",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url output",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "url output",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "=gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "="
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YlIXFU6zUDsqwmRG",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "74e47ce5-3f11-46fc-a648-c031afd2bcfa",
      "name": "Build Public Image URL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2640,
        496
      ],
      "parameters": {
        "url": "https://tmpfiles.org/api/v1/upload",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a06b53e8-f988-4c0f-aa3b-60f503eeea9b",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        2864,
        512
      ],
      "parameters": {
        "mode": "chooseBranch",
        "numberInputs": 3,
        "useDataOfInput": 2
      },
      "typeVersion": 3.2
    },
    {
      "id": "7fe5052e-afdc-4dad-95ac-3736537226d6",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        3312,
        528
      ],
      "webhookId": "5e8be887-1709-4732-9e34-fa2809778ff1",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "12f0795e-080f-44e3-af6b-050e6c06df5a",
      "name": "Download Audio",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3536,
        528
      ],
      "parameters": {
        "url": "={{ $json.urls.get }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "={{ 'bearer ' + $('Workflow Configuration').first().json.replicateApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e67e088e-e388-4d46-868d-6353c70e3620",
      "name": "Separate Audio (Video-to-Audio)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3088,
        528
      ],
      "parameters": {
        "url": "https://api.replicate.com/v1/models/lucataco/extract-audio/predictions",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "responseFormat": "json"
            }
          }
        },
        "jsonBody": "={\n    \"input\": {\n      \"video\": \"{{ $('Extract Video URL').first().json.videoUrl }}\",\n      \"fade_in\": 0,\n      \"fade_out\": 0,\n      \"trim_end\": 0,\n      \"trim_start\": 0,\n      \"volume_boost\": 1,\n      \"audio_quality\": \"high\",\n      \"output_format\": \"mp3\",\n      \"noise_reduction\": false,\n      \"normalize_audio\": false\n    }\n}\n",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            },
            {
              "name": "Authorization",
              "value": "={{ 'bearer ' + $('Workflow Configuration').first().json.replicateApiKey }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2ea399dd-ee49-4feb-8aa7-f4954abe2dc9",
      "name": "Merge urls",
      "type": "n8n-nodes-base.merge",
      "position": [
        4464,
        528
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "6b44da96-73c3-4f75-8b80-0d94564c2fde",
      "name": "Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1584,
        160
      ],
      "parameters": {
        "width": 512,
        "height": 1144,
        "content": "# Convert viral videos into AI avatar swaps and publish on TikTok with Blotato\n\nThis workflow transforms videos by replacing the character's face with a custom avatar and changing the voice, then outputs the final result to Google Sheets.\n\n### How it works\n1. **Receive input via Telegram**: User sends an avatar image (photo) and video URL (in message caption)\n2. **Extract audio**: Separates the audio track from the original video using Replicate API\n3. **Transform in parallel**: Simultaneously replaces the character in the video (FAL WAN API) and transforms the voice (FAL Chatterbox API)\n4. **Merge results**: Combines the transformed video and audio into a single output file (FAL FFmpeg API)\n5. **Save to Google Sheets**: Writes the original and final video URLs to a spreadsheet for tracking\n\n### Setup\n- [ ] Configure Telegram Bot credentials in the Telegram Trigger node\n- [ ] Set your FAL API key in the Workflow Configuration node (falApiKey field)\n- [ ] Set your Replicate API key in the Workflow Configuration node (replicateApiKey field)\n- [ ] Update the target voice audio URL in Workflow Configuration node (targetVoiceAudioUrl field) - this is the voice the output will sound like\n- [ ] Configure Google Sheets credentials in the OUTPUT (Google Sheet Write) node\n- [ ] Select your target Google Sheet and ensure it has columns: url original and url output\n- [ ] Test the workflow by sending a Telegram message with an avatar photo and video URL in the caption"
      },
      "typeVersion": 1
    },
    {
      "id": "947c38b0-11fe-4045-8380-77a80115bfb5",
      "name": "INPUT: TELEGRAM",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 860,
        "height": 660,
        "content": "## INPUT: TELEGRAM\n\nReceives the avatar image and source video URL from a Telegram message to start the transformation pipeline.\n\n### How it works\n1. **Telegram Trigger** listens for incoming messages with photos\n2. **Extract Video URL** parses the message caption to get the source video URL\n3. **Get Avatar File** downloads the highest resolution photo from the message\n4. **Upload to tmpfiles.org** creates a publicly accessible URL for the avatar image\n5. **Merge inputs** combines all data (video URL, avatar URL, config) before processing"
      },
      "typeVersion": 1
    },
    {
      "id": "fc52f567-0dac-489a-863c-01307f01e6ea",
      "name": "STEP 1: SEPARATE AUDIO & VIDEO",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 620,
        "height": 656,
        "content": "## STEP 1: SEPARATE AUDIO & VIDEO\n\nExtracts the audio track from the source video so it can be transformed independently from the video.\n\n### How it works\n1. **Separate Audio** calls Replicate's extract-audio API with the source video URL\n2. **Wait** pauses for 5 seconds to allow the extraction job to process\n3. **Download Audio** fetches the extracted audio file URL from the completed job\n4. The audio URL is then passed to the voice transformation step\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2ae4895a-25b0-4637-9aa4-259bdc744575",
      "name": "STEP 2: TRANSFORM",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3696,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 894,
        "height": 660,
        "content": "## STEP 2: TRANSFORM (PARALLEL)\n\nSimultaneously processes video and audio transformations to optimize workflow speed.\n\n### How it works\n1. **Transform Video** (FAL WAN Replace): Replaces the character's face in the video with the uploaded avatar image\n2. **Transform Audio** (FAL Chatterbox): Converts the extracted audio to match the target voice style\n3. Both transformations run in parallel, each with their own wait/fetch cycle\n4. **Wait & Fetch** nodes poll the APIs every 5 seconds until jobs complete\n5. **Merge URLs** combines the transformed video and audio URLs for the final merge step\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bf29c7be-6718-4716-af3a-163db37fc5e3",
      "name": "STEP 3: COMBINE",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4624,
        160
      ],
      "parameters": {
        "color": 5,
        "width": 892,
        "height": 660,
        "content": "## STEP 3: COMBINE & OUTPUT\n\nMerges the transformed video and audio into a single file and saves the result to Google Sheets.\n\n### Setup\n- [ ] Verify FAL API key is set in Workflow Configuration node for FFmpeg API access\n- [ ] Configure Google Sheets OAuth2 credentials in the OUTPUT (Google Sheet Write) node\n- [ ] Select your target spreadsheet and sheet (must have url original and url output columns)\n- [ ] The final video URL will be publicly accessible and can be downloaded or shared\n- [ ] Check Google Sheets after execution to verify the URLs were written correctly\n- [ ] If merge fails, verify both video and audio URLs from Step 2 are valid and accessible"
      },
      "typeVersion": 1
    },
    {
      "id": "b0b6fe9c-70a6-4192-a366-47193f27bc1f",
      "name": "Send Video to Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3088,
        1040
      ],
      "webhookId": "d725b4f5-0bb5-4516-b696-ea89864c6d5b",
      "parameters": {
        "file": "={{ $('Extract Video URL').first().json.videoUrl }}",
        "chatId": "={{ $('Telegram Trigger').first().json.message.chat.id }}",
        "operation": "sendVideo",
        "additionalFields": {
          "caption": "=Your video is ready! πŸŽ₯  {{ $('Extract Video URL').first().json.videoUrl }}"
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "TBPespUzbkdn7hk7",
          "name": "Telegram_wan"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3e969439-ebb1-4fda-aee8-39950091a7d9",
      "name": "Step 5 - Publishing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        896
      ],
      "parameters": {
        "color": 5,
        "width": 3372,
        "height": 404,
        "content": "# STEP 4: PUBLISHING & TRACKING\n\n### Install the Blotato [Blotato](https://blotato.com/?ref=firas) Node in n8n (Community Nodes)\n1. In n8n, open **Settings β†’ Community Nodes**.  \n2. Click **Install**, then add: `@blotato/n8n-nodes-blotato`.  \n3. Log in to **Blotato**.  \n4. Go to **Settings β†’ API Keys**.  \n5. In n8n β†’ **Credentials β†’ New**.  \n6. Choose **Blotato API** \n(provided by the community node you installed).  \n\n2. TikTok Publishing (Blotato):\n   β€’ Pre-configured to auto-publish\n   β€’ Uses caption from GPT-4\n   β€’ Privacy: Public\n   β€’ Requires Blotato API key from Step 2"
      },
      "typeVersion": 1
    },
    {
      "id": "538dc72e-fca1-42bd-a67f-13a4cfea5011",
      "name": "Upload Video to BLOTATO",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        4416,
        1040
      ],
      "parameters": {
        "mediaUrl": "={{ $('OUTPUT (Google Sheet Write)').item.json['url output'] }}",
        "resource": "media"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4f37cecd-6542-4882-9e27-7e784bca3465",
      "name": "Youtube",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "position": [
        5200,
        1104
      ],
      "parameters": {
        "options": {},
        "platform": "youtube",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "8047",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/8047",
          "cachedResultName": "DR FIRASS (Dr. Firas)"
        },
        "postContentText": "={{ $('Generate Caption with GPT-4').first().json.message.content.caption }}",
        "postContentMediaUrls": "={{ $json.url }}",
        "postCreateYoutubeOptionTitle": "={{ $('Generate Caption with GPT-4').first().json.message.content.title }}",
        "postCreateYoutubeOptionPrivacyStatus": "private",
        "postCreateYoutubeOptionShouldNotifySubscribers": false
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "cb25dc88-f6ff-4953-9542-ce3dbf33dd99",
      "name": "Tiktok",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "disabled": true,
      "position": [
        4880,
        944
      ],
      "parameters": {
        "options": {},
        "platform": "tiktok",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "2079",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/2079",
          "cachedResultName": "elitecybzcs"
        },
        "postContentText": "={{ $('Generate Caption with GPT-4').first().json.message.content.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "77df349e-01d2-4427-8456-a45544ac09e2",
      "name": "Linkedin",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "disabled": true,
      "position": [
        5040,
        944
      ],
      "parameters": {
        "options": {},
        "platform": "linkedin",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1446",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1446",
          "cachedResultName": "Samuel Amalric"
        },
        "postContentText": "={{ $('Generate Caption with GPT-4').first().json.message.content.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "041b15b3-117b-4183-afec-91826c50144b",
      "name": "Facebook",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "disabled": true,
      "position": [
        5200,
        944
      ],
      "parameters": {
        "options": {},
        "platform": "facebook",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1759",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759",
          "cachedResultName": "Firass Ben"
        },
        "facebookPageId": {
          "__rl": true,
          "mode": "list",
          "value": "101603614680195",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1759/subaccounts/101603614680195",
          "cachedResultName": "Dr. Firas"
        },
        "postContentText": "={{ $('Generate Caption with GPT-4').first().json.message.content.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "e25c57b2-68fc-4611-92c9-4cdac0d84cc3",
      "name": "Instagram",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "disabled": true,
      "position": [
        4880,
        1104
      ],
      "parameters": {
        "options": {},
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1687",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1687",
          "cachedResultName": "acces.a.vie"
        },
        "postContentText": "={{ $('Generate Caption with GPT-4').first().json.message.content.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "3c26c540-770a-4ad5-ba9f-58951d3914a2",
      "name": "Twitter (X)",
      "type": "@blotato/n8n-nodes-blotato.blotato",
      "disabled": true,
      "position": [
        5040,
        1104
      ],
      "parameters": {
        "options": {},
        "platform": "twitter",
        "accountId": {
          "__rl": true,
          "mode": "list",
          "value": "1289",
          "cachedResultUrl": "https://backend.blotato.com/v2/accounts/1289",
          "cachedResultName": "Docteur_Firas"
        },
        "postContentText": "={{ $('Generate Caption with GPT-4').first().json.message.content.caption }}",
        "postContentMediaUrls": "={{ $json.url }}"
      },
      "credentials": {
        "blotatoApi": {
          "id": "wozsYJYLfCZO37j8",
          "name": "Blotato account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "b3a53816-e484-420d-ad3d-c4e6b7222590",
      "name": "Merge1",
      "type": "n8n-nodes-base.merge",
      "position": [
        5408,
        960
      ],
      "parameters": {
        "mode": "chooseBranch",
        "numberInputs": 6
      },
      "typeVersion": 3.2
    },
    {
      "id": "e403db8e-16d0-4183-b576-bb1a2f0a7f17",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        5584,
        1024
      ],
      "webhookId": "fd7e0b37-5179-4e86-b263-e5bbc8c11db9",
      "parameters": {
        "text": "Published",
        "chatId": "={{ $('Telegram Trigger').first().json.message.chat.id }}",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "TBPespUzbkdn7hk7",
          "name": "Telegram_wan"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7ead4a83-59e6-4a08-b45f-f6e65de5ea98",
      "name": "Generate Caption with GPT-4",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3968,
        1040
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "id",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Create an engaging TikTok caption for a video:\n\nBased on these Transcription: {{ $json.text }}\n\nRequirements:\n- Catchy hook in first line\n- Include 5-8 relevant trending hashtags\n- Keep it concise and engaging\n- Optimize for TikTok algorithm\n- Return 2 informations : the caption text with hashtags, and the title nothing else"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "QmtwfFk8iBkuCXOX",
          "name": "n8n free OpenAI API credits"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "1d47fe67-9c9b-4b85-9da6-9f7c40ebd17c",
      "name": "Transcribe a recording",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3520,
        1040
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe",
        "binaryPropertyName": "=data"
      },
      "credentials": {
        "openAiApi": {
          "id": "HUbsD20wv3CFr7gN",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "bb045243-5553-42aa-937b-431faf69e1f9",
      "name": "Convert mp3 to data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3296,
        1040
      ],
      "parameters": {
        "url": "={{ $('Get Audio (Fetch Chatterbox Output)').item.json.audio.url }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "00f45e93-7ea9-4557-9ab1-49d9ef4564f3",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Download Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Separate Audio (Video-to-Audio)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tiktok": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Youtube": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 5
          }
        ]
      ]
    },
    "Facebook": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Linkedin": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Instagram": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Merge urls": {
      "main": [
        [
          {
            "node": "Combine (FAL FFmpeg Merge)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Twitter (X)": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 4
          }
        ]
      ]
    },
    "Download Audio": {
      "main": [
        [
          {
            "node": "Transform Video (FAL WAN Replace)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Transform Audio (FAL Chatterbox)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Trigger": {
      "main": [
        [
          {
            "node": "Telegram Get File (Avatar)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract Video URL",
            "type": "main",
            "index": 0
          },
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Video URL": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Convert mp3 to data": {
      "main": [
        [
          {
            "node": "Transcribe a recording",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Public Image URL": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Video to Telegram": {
      "main": [
        [
          {
            "node": "Convert mp3 to data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording": {
      "main": [
        [
          {
            "node": "Generate Caption with GPT-4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Upload Video to BLOTATO": {
      "main": [
        [
          {
            "node": "Tiktok",
            "type": "main",
            "index": 0
          },
          {
            "node": "Linkedin",
            "type": "main",
            "index": 0
          },
          {
            "node": "Facebook",
            "type": "main",
            "index": 0
          },
          {
            "node": "Instagram",
            "type": "main",
            "index": 0
          },
          {
            "node": "Twitter (X)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Youtube",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine (FAL FFmpeg Merge)": {
      "main": [
        [
          {
            "node": "Wait Final (Job Status - FFmpeg)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Get File (Avatar)": {
      "main": [
        [
          {
            "node": "Build Public Image URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Caption with GPT-4": {
      "main": [
        [
          {
            "node": "Upload Video to BLOTATO",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OUTPUT (Google Sheet Write)": {
      "main": [
        [
          {
            "node": "Send Video to Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Video (Fetch WAN Output)": {
      "main": [
        [
          {
            "node": "Merge urls",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Final (Fetch Final Video)": {
      "main": [
        [
          {
            "node": "OUTPUT (Google Sheet Write)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait Video (Job Status - WAN)": {
      "main": [
        [
          {
            "node": "Get Video (Fetch WAN Output)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Separate Audio (Video-to-Audio)": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform Audio (FAL Chatterbox)": {
      "main": [
        [
          {
            "node": "Wait Audio (Job Status - Chatterbox)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait Final (Job Status - FFmpeg)": {
      "main": [
        [
          {
            "node": "Get Final (Fetch Final Video)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform Video (FAL WAN Replace)": {
      "main": [
        [
          {
            "node": "Wait Video (Job Status - WAN)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Audio (Fetch Chatterbox Output)": {
      "main": [
        [
          {
            "node": "Merge urls",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Wait Audio (Job Status - Chatterbox)": {
      "main": [
        [
          {
            "node": "Get Audio (Fetch Chatterbox Output)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

η›Έε…³ε·₯作桁