Template-Jsoncut image en vidéo-nocodb
Avancé
Ceci est uncontenant 32 nœuds.Utilise principalement des nœuds comme If, Code, Wait, Merge, NocoDb. Créer des vidéos d'histoires virales à partir de textes avec GPT, Gemini et JsonCut
Prérequis
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API OpenAI
Nœuds utilisés (32)
Catégorie
-
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
"id": "FeATxwI6wsWxI9FS",
"meta": {
"instanceId": "9d644af8fe730dfb972042f018ed45ff1dc2e7905a9737d59584dbe5b8c7f571",
"templateCredsSetupCompleted": true
},
"name": "Template-Jsoncut-images-to-video-nocodb",
"tags": [
{
"id": "4f5HsQRwHRxYIUuf",
"name": "jsoncut",
"createdAt": "2025-10-12T07:39:06.742Z",
"updatedAt": "2025-10-12T07:39:06.742Z"
}
],
"nodes": [
{
"id": "efbe1b62-900e-4b67-9269-b260fab0fa93",
"name": "Attendre",
"type": "n8n-nodes-base.wait",
"position": [
1808,
-304
],
"webhookId": "4dbe100a-7853-4e41-aca9-e85575d1782a",
"parameters": {
"unit": "seconds",
"amount": 3
},
"typeVersion": 1
},
{
"id": "c6ecd939-fca4-495f-ba6e-e4942d840729",
"name": "If Success",
"type": "n8n-nodes-base.if",
"position": [
2224,
-304
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.data.status }}",
"value2": "COMPLETED"
}
]
}
},
"typeVersion": 1
},
{
"id": "913331fc-3926-4fce-b727-f1ef610d9ae3",
"name": "If Error",
"type": "n8n-nodes-base.if",
"position": [
2240,
-64
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.data.status }}",
"value2": "FAILED"
},
{
"value1": "={{ $json.data.status }}",
"value2": "CANCELLED"
}
]
}
},
"typeVersion": 1
},
{
"id": "c89e1256-72cd-4346-9043-4b7630e45626",
"name": "Download Image",
"type": "n8n-nodes-base.httpRequest",
"position": [
2400,
-320
],
"parameters": {
"url": "=https://api.jsoncut.com/api/v1/files/{{ $json.data.outputFileId }}/download",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/octet-stream"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.1
},
{
"id": "c1b3af1d-fab0-4c91-88ef-8d5fbae01823",
"name": "Error Stop",
"type": "n8n-nodes-base.stopAndError",
"position": [
2432,
-64
],
"parameters": {
"errorMessage": "Failed to generate image"
},
"typeVersion": 1
},
{
"id": "1c23012e-a186-4174-bd63-8e05bea44b81",
"name": "Agréger",
"type": "n8n-nodes-base.aggregate",
"position": [
1376,
-304
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "upload_results"
},
"typeVersion": 1
},
{
"id": "d9dbc3a6-e2d1-47a3-979e-014ba6f2e26b",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
-608
],
"parameters": {
"width": 432,
"height": 896,
"content": "### Upload Files to JsonCut API"
},
"typeVersion": 1
},
{
"id": "1a9195a4-e997-4d80-9abb-99a96ee3ab9c",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
-400
],
"parameters": {
"color": 4,
"width": 1104,
"height": 576,
"content": "### Create Job with Jsoncut API and wait for the result\nAlternatively, the JsonCut Community node can also be used (https://github.com/jsoncut/n8n-nodes-jsoncut)."
},
"typeVersion": 1
},
{
"id": "116c4e0b-2533-4ef1-bee3-8c90d15b1527",
"name": "Create JsonCut Job",
"type": "n8n-nodes-base.httpRequest",
"position": [
1584,
-304
],
"parameters": {
"url": "https://api.jsoncut.com/api/v1/jobs",
"method": "POST",
"options": {},
"jsonBody": "={\n \"type\": \"video\",\n \"config\": {\n \"width\": 1080,\n \"height\": 1920,\n \"fps\": 25,\n \"format\": \"mp4\",\n \"audioTracks\": [\n {\n \"path\": \"{{ $json.upload_results[1].body.data.storageUrl }}\",\n \"mixVolume\": 0.8,\n \"start\": 1,\n \"cutFrom\": 0,\n \"cutTo\": {{ $('calculate audio duration').item.json.duration_seconds }}\n },\n {\n \"path\": \"{{ $json.upload_results[2].data.storageUrl }}\",\n \"mixVolume\": 0.2,\n \"start\": 0,\n \"cutFrom\": 0\n }\n ],\n \"defaults\": {\n \"layer\": {\n \"googleFont\": \"Montserrat:700\",\n \"textColor\": \"#ffffff\",\n \"fontSize\": 54\n }\n },\n \"clips\": [\n {\n \"duration\": {{ $('calculate audio duration').item.json.duration_seconds + 2 }},\n \"layers\": [\n {\n \"type\": \"fill-color\",\n \"color\": \"#000000\"\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"{{ $json.upload_results[0].storageUrl[0] }}\",\n \"start\": 1,\n \"stop\": {{ 1 + ($('calculate audio duration').item.json.duration_seconds / 5) }},\n \"zoomDirection\": \"in\",\n \"zoomAmount\": 0.15,\n \"height\": 1,\n \"opacity\": 0.9\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"{{ $json.upload_results[0].storageUrl[1] }}\",\n \"start\": {{ 1 + ($('calculate audio duration').item.json.duration_seconds / 5) }},\n \"stop\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 5) * 2 ) }},\n \"zoomDirection\": \"right\",\n \"zoomAmount\": 0.15,\n \"height\": 1,\n \"opacity\": 0.9\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"{{ $json.upload_results[0].storageUrl[2] }}\",\n \"start\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 5) * 2 ) }},\n \"stop\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 5) * 3 ) }},\n \"zoomDirection\": \"left\",\n \"zoomAmount\": 0.15,\n \"height\": 1,\n \"opacity\": 0.9\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"{{ $json.upload_results[0].storageUrl[3] }}\",\n \"start\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 5) * 3 ) }},\n \"stop\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 5) * 4 ) }},\n \"zoomDirection\": \"out\",\n \"zoomAmount\": 0.15,\n \"height\": 1,\n \"opacity\": 0.9\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"{{ $json.upload_results[0].storageUrl[4] }}\",\n \"start\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 5) * 4 ) }},\n \"stop\": {{ $('calculate audio duration').item.json.duration_seconds + 1 }},\n \"zoomDirection\": \"in\",\n \"zoomAmount\": 0.15,\n \"height\": 1,\n \"opacity\": 0.9\n },\n {\n \"type\": \"image-overlay\",\n \"path\": \"{{ $json.upload_results[3].data.storageUrl }}\",\n \"start\": 1,\n \"stop\": {{ $('calculate audio duration').item.json.duration_seconds + 1 }},\n \"position\": \"bottom\",\n \"width\": 0.1,\n \"height\": 0.1,\n \"zoomDirection\": null\n },\n {\n \"type\": \"title\",\n \"text\": \"{{ $('Generate content and Image Prompt').item.json.message.content.text_segments[0] }}\",\n \"start\": 1,\n \"stop\": {{ 1 + ($('calculate audio duration').item.json.duration_seconds / 4) }},\n \"position\": \"center\",\n \"zoomDirection\": null\n },\n {\n \"type\": \"title\",\n \"text\": \"{{ $('Generate content and Image Prompt').item.json.message.content.text_segments[1] }}\",\n \"start\": {{ 1 + ($('calculate audio duration').item.json.duration_seconds / 4) }},\n \"stop\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 4) * 2 ) }},\n \"position\": \"center\",\n \"zoomDirection\": null\n },\n {\n \"type\": \"title\",\n \"text\": \"{{ $('Generate content and Image Prompt').item.json.message.content.text_segments[2] }}\",\n \"start\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 4) * 2 ) }},\n \"stop\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 4) * 3 ) }},\n \"position\": \"center\",\n \"zoomDirection\": null\n },\n {\n \"type\": \"title\",\n \"text\": \"{{ $('Generate content and Image Prompt').item.json.message.content.text_segments[3] }}\",\n \"start\": {{ 1 + ( ($('calculate audio duration').item.json.duration_seconds / 4) * 3 ) }},\n \"stop\": {{ $('calculate audio duration').item.json.duration_seconds + 1 }},\n \"position\": \"center\",\n \"zoomDirection\": null\n }\n ]\n }\n ]\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.1
},
{
"id": "8368485d-a6e4-4376-8f7f-b5633844dba3",
"name": "Check JsonCut job Status",
"type": "n8n-nodes-base.httpRequest",
"position": [
2032,
-304
],
"parameters": {
"url": "=https://api.jsoncut.com/api/v1/jobs/{{ $('Create JsonCut Job').item.json.data.jobId }}",
"options": {},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.1
},
{
"id": "e5750b7b-8b1c-4abd-9ffe-7e474991c710",
"name": "Generate content and Image Prompt",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-96,
-448
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-5-mini",
"cachedResultName": "GPT-5-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=You are a creative video director and scriptwriter for short-form social media videos (Instagram, TikTok, YouTube Shorts). \nYour task is to generate **cohesive and emotionally consistent content** based on a given *theme*:\n\n```\n{{ $json['Video Theme'] }}\n```\nand the *setting* (ignore if empty):\n```\n{{ $json['Video Setting'] || \"\"}}\n```\n\nUse the following Style for the background images (if not empty). Also keep the full style for each image prompt (e.g. is it a painting or photo?):\n```\n{{ $json['Image Style'] || \"\"}}\n```\n\n---\n\n### GOAL\nCreate a concept for a 20–40 second video with consistent **visual style, tone, and lighting**, including:\n1. **5 detailed prompts** for AI-generated background images \n2. **1 full narration text** (to be spoken by a narrator) \n3. **4 sequential text segments** that align perfectly with the narration (each about the same length, representing the same story flow) \n4. **1 short caption** for a social media post promoting this video \n\n---\n\n### IMAGE PROMPT GUIDELINES\n- Each image prompt should clearly describe the **scene**, **style**, **setting**, **mood**, **lighting**, and **color tone**. \n- All 5 images must feel visually and emotionally consistent. \n- Choose an appropriate general lighting mood (e.g. bright and hopeful, dark and moody, colorful and energetic, monochrome and calm). \n- Example structure for each image prompt: \n *“A cinematic photo of [subject/scene], [lighting type], [environment details], [emotion/feeling], [color palette/style].”* \n- Style examples: “cinematic”, “soft focus”, “warm tones”, “volumetric light”, “dreamy atmosphere”, etc. \n\n---\n\n### TEXT CREATION GUIDELINES\n- The full text should sound natural when spoken by a narrator. \n- It should flow smoothly and build emotional or motivational impact. \n- The 4 text segments should represent logical parts of the full narration (e.g. setup, reflection, climax, resolution). \n- Keep tone consistent with the image prompts (motivational, dramatic, peaceful, etc.).\n- Do not use \"-\" or \"—\" (thinking / pause )\n\n---\n\n### OUTPUT FORMAT (JSON)\nReturn the result **only** as valid JSON structured like this:\n\n```json\n{\n \"image_prompts\": [\n \"Prompt 1\",\n \"Prompt 2\",\n \"Prompt 3\",\n \"Prompt 4\",\n \"Prompt 5\"\n ],\n \"full_text\": \"Complete narration text here.\",\n \"text_segments\": [\n \"Part 1 text\",\n \"Part 2 text\",\n \"Part 3 text\",\n \"Part 4 text\"\n ],\n \"caption\": \"Short social media caption here.\"\n}\n```\n\nexample output:\n{\n \"image_prompts\": [\n \"A cinematic sunrise over misty mountains, golden light, hopeful tone, warm color palette\",\n \"A lone runner on a foggy trail, morning light breaking through clouds, determination and focus\",\n \"Close-up of hands tying running shoes, soft golden backlight, texture-rich realism\",\n \"Runner pushing through rain, dramatic contrast lighting, resilience mood\",\n \"A victorious silhouette at the mountain peak, glowing sky, triumphant energy\"\n ],\n \"full_text\": \"Every dream begins as a whisper. Most give up before the echo returns. But those who keep moving, step by step, turn the whisper into a roar. Keep going, your sunrise is closer than you think.\",\n \"text_segments\": [\n \"Every dream begins as a whisper.\",\n \"Most give up before the echo returns.\",\n \"But those who keep moving, step by step, turn the whisper into a roar.\",\n \"Keep going... your sunrise is closer than you think.\"\n ],\n \"caption\": \"Don’t stop now, your sunrise is coming. 🌅 #motivation #dreambig\"\n}\n"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "nthYYcpDIou7MYYb",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "9b178dec-c384-4706-9bb2-0ff6e20c6842",
"name": "Upload logo",
"type": "n8n-nodes-base.httpRequest",
"position": [
752,
112
],
"parameters": {
"url": "https://api.jsoncut.com/api/v1/files/upload",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.1
},
{
"id": "731fba29-88e3-49be-b923-761fed1852fa",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
80
],
"parameters": {
"color": 3,
"width": 272,
"height": 208,
"content": "### Download external ressources"
},
"typeVersion": 1
},
{
"id": "4489772b-903b-429a-bedf-f56acae3d07a",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-608
],
"parameters": {
"color": 3,
"width": 752,
"height": 432,
"content": "### Generate Script and Background Image Prompts"
},
"typeVersion": 1
},
{
"id": "9b384086-9370-445c-a405-be429a6e6850",
"name": "Download Watermark",
"type": "n8n-nodes-base.httpRequest",
"position": [
-80,
128
],
"parameters": {
"url": "https://img.icons8.com/?size=100&id=532&format=png&color=000000",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "35542d13-b584-439c-9b4b-793b3f026a56",
"name": "Get List of background Audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
-48,
-112
],
"parameters": {
"url": "https://api.openverse.engineering/v1/audio/",
"options": {},
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "ambiente"
},
{
"name": "license",
"value": "cc0,by,by-sa"
},
{
"name": "format",
"value": "json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "6c959a7f-82b0-4180-ac6b-a929eca0c5d2",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-160
],
"parameters": {
"color": 3,
"width": 480,
"height": 224,
"content": "### download Random Background music"
},
"typeVersion": 1
},
{
"id": "1d248ef1-3fe8-40ec-9289-b606895934a7",
"name": "Download MP3",
"type": "n8n-nodes-base.httpRequest",
"position": [
160,
-112
],
"parameters": {
"url": "={{ $json.results[Math.floor(Math.random() * $json.results.length)].url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "e5c524c4-3741-49ca-b1b6-e18d3755f16b",
"name": "Upload Background Music",
"type": "n8n-nodes-base.httpRequest",
"position": [
752,
-112
],
"parameters": {
"url": "https://api.jsoncut.com/api/v1/files/upload",
"method": "POST",
"options": {
"redirect": {
"redirect": {}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.2
},
{
"id": "86c12a83-8f1e-45e3-88d9-7c34c8f24a29",
"name": "Split Image Prompts",
"type": "n8n-nodes-base.splitOut",
"position": [
256,
-528
],
"parameters": {
"options": {},
"fieldToSplitOut": "message.content.image_prompts"
},
"typeVersion": 1
},
{
"id": "87c26b9e-1553-4ed4-973d-a81b11a3a519",
"name": "Generate an image",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
464,
-528
],
"parameters": {
"prompt": "=Generate in the format 9:16 (no text in image): {{ $json['message.content.image_prompts'] }}",
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/imagen-4.0-generate-001",
"cachedResultName": "models/imagen-4.0-generate-001"
},
"options": {},
"resource": "image"
},
"credentials": {
"googlePalmApi": {
"id": "5rD55sSvtNJ9AlHH",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "a5d687a8-bc65-4bac-915d-deccdc2c8098",
"name": "Generate audio",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
256,
-336
],
"parameters": {
"input": "={{ $json.message.content.full_text }}",
"voice": "echo",
"options": {},
"resource": "audio"
},
"credentials": {
"openAiApi": {
"id": "nthYYcpDIou7MYYb",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "5f471cee-9b78-4cb0-8711-dfcbb4897d01",
"name": "Upload Background Images",
"type": "n8n-nodes-base.httpRequest",
"position": [
752,
-528
],
"parameters": {
"url": "https://api.jsoncut.com/api/v1/files/upload",
"method": "POST",
"options": {
"redirect": {
"redirect": {}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.2
},
{
"id": "4c4efcd6-0224-4003-85b6-3269359085df",
"name": "Upload Voice Audio",
"type": "n8n-nodes-base.httpRequest",
"position": [
752,
-320
],
"parameters": {
"url": "https://api.jsoncut.com/api/v1/files/upload",
"method": "POST",
"options": {
"redirect": {
"redirect": {}
},
"response": {
"response": {
"fullResponse": true
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "file",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "SX6i9sHw3AcKihne",
"name": "JsonCut API Key"
}
},
"typeVersion": 4.2
},
{
"id": "bd711a93-ab0c-4dba-bdf2-d149030decdb",
"name": "Background Image Urls",
"type": "n8n-nodes-base.aggregate",
"position": [
976,
-528
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "data.storageUrl"
}
]
}
},
"typeVersion": 1
},
{
"id": "fa3bd8e1-a251-4fa0-a2f8-6c6ec83801b2",
"name": "Fusionner all uploads",
"type": "n8n-nodes-base.merge",
"position": [
1232,
-336
],
"parameters": {
"numberInputs": 4
},
"typeVersion": 3.2
},
{
"id": "4f0167a3-e215-4524-b606-7e70835796da",
"name": "calculate audio duration",
"type": "n8n-nodes-base.code",
"position": [
464,
-336
],
"parameters": {
"mode": "runOnceForEachItem",
"language": "python",
"pythonCode": "import base64\n\n# Get binary MP3 data from the input item\nbinary_data = _input.item.binary['data']\nbuffer = base64.b64decode(binary_data['data'])\n\ndef get_bitrate(bitrate_index, version, layer):\n bitrates = {\n 'V1L3': [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320],\n 'V2L3': [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],\n }\n table = bitrates['V1L3'] if version == 3 else bitrates['V2L3']\n return table[bitrate_index] * 1000\n\nbitrate = 0\nfile_size = len(buffer)\n\n# Scan for first MP3 frame header (starts with 0xFFE)\nfor i in range(len(buffer) - 4):\n if buffer[i] == 0xFF and (buffer[i + 1] & 0xE0) == 0xE0:\n version_bits = (buffer[i + 1] >> 3) & 0x03\n layer_bits = (buffer[i + 1] >> 1) & 0x03\n bitrate_index = (buffer[i + 2] >> 4) & 0x0F\n\n version = 3 if version_bits == 3 else 2\n layer = 3 - (layer_bits - 1)\n\n bitrate = get_bitrate(bitrate_index, version, layer)\n if bitrate > 0:\n break\n\nif bitrate == 0:\n _input.item.json['duration_seconds'] = None\n _input.item.json['error'] = 'Could not detect bitrate'\n return _input.item\n\n# Calculate duration: file size (bits) / bitrate\nduration_seconds = (file_size * 8) / bitrate\n\n# Write results into JSON\n_input.item.json['duration_seconds'] = round(duration_seconds, 2)\n_input.item.json['duration_minutes'] = round(duration_seconds / 60, 2)\n_input.item.json['bitrate'] = bitrate\n_input.item.json['file_size_bytes'] = file_size\n\nreturn _input.item\n"
},
"typeVersion": 2
},
{
"id": "efd1bde6-0c7e-41df-80ec-de2e7b80bfb4",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-384,
-272
],
"webhookId": "d3afd952-d50b-4e19-8eb5-9e37816d355a",
"parameters": {
"options": {},
"formTitle": "Social Video Production Input",
"formFields": {
"values": [
{
"fieldType": "textarea",
"fieldLabel": "Video Theme",
"placeholder": "Enter the main theme or motto for your video (e.g., ‘Embrace the small wins’ for a motivational video).",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Video Setting",
"placeholder": "Describe the setting or mood of the video (e.g., a calm, cozy evening with soft lighting for a relaxed, reflective feel).",
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Image Style",
"placeholder": "Optional: Define the style of the background images (e.g. Watercolor Painting)"
}
]
},
"formDescription": "Provide the core idea and the setting for your video. These details will guide the generation of a polished, ready-to-publish social media video."
},
"typeVersion": 2.2
},
{
"id": "01a424d4-17f9-4d47-8921-d231c3f1d7f3",
"name": "Save Video in NocoDB",
"type": "n8n-nodes-base.nocoDb",
"position": [
2688,
-320
],
"parameters": {
"table": "mu9r5htgfwxolb2",
"fieldsUi": {
"fieldValues": [
{
"fieldName": "Theme",
"fieldValue": "={{ $('On form submission').item.json['Video Theme'] }}"
},
{
"fieldName": "Setting",
"fieldValue": "={{ $('On form submission').item.json['Video Setting'] || \"\" }}"
},
{
"fieldName": "Style",
"fieldValue": "={{ $('On form submission').item.json['Image Style'] || \"\" }}"
},
{
"fieldName": "Output",
"binaryData": true,
"binaryProperty": "data"
}
]
},
"operation": "create",
"projectId": "prcn8tlyu7dbn60",
"authentication": "nocoDbApiToken"
},
"credentials": {
"nocoDbApiToken": {
"id": "JQaKWA6ljHUEheIi",
"name": "NocoDB Local"
}
},
"typeVersion": 3
},
{
"id": "d341edf1-f747-43c5-8192-56900d04da04",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-800,
-528
],
"parameters": {
"color": 6,
"width": 560,
"height": 416,
"content": "## Exmpe Form Input\n\n1. General Video Theme:\nOvercoming struggles / personal growth\n\n2. Video Setting:\nIntrospective, deep thinking, sunrise or twilight moments, emotional reflection\n\n3. Background Image Style: \nWatercolor painting with muted colors, low light"
},
"typeVersion": 1
},
{
"id": "763a2957-3e11-4f38-872e-ed58b84a9378",
"name": "Note adhésive6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2640,
-576
],
"parameters": {
"color": 6,
"width": 480,
"height": 464,
"content": "## Stores the final output in a new Table Row\n\n### Row Content:\n1. Theme\n2. Setting\n3. Style\n4. Output Video File"
},
"typeVersion": 1
},
{
"id": "5be95991-a680-4363-8f1b-7e0b1c7a18a1",
"name": "Note adhésive8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2640,
-80
],
"parameters": {
"color": 6,
"width": 480,
"height": 128,
"content": "## Example Output\n\n[📹 View Video (Google Drive)](https://drive.google.com/file/d/1Cl0KwgRgcuBPVdGgL-nqAcheyvfVXttD/preview)\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "826504f6-36f9-4c5b-83d8-1a1f30d8f248",
"connections": {
"Wait": {
"main": [
[
{
"node": "8368485d-a6e4-4376-8f7f-b5633844dba3",
"type": "main",
"index": 0
}
]
]
},
"913331fc-3926-4fce-b727-f1ef610d9ae3": {
"main": [
[
{
"node": "c1b3af1d-fab0-4c91-88ef-8d5fbae01823",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "116c4e0b-2533-4ef1-bee3-8c90d15b1527",
"type": "main",
"index": 0
}
]
]
},
"c6ecd939-fca4-495f-ba6e-e4942d840729": {
"main": [
[
{
"node": "c89e1256-72cd-4346-9043-4b7630e45626",
"type": "main",
"index": 0
}
],
[
{
"node": "913331fc-3926-4fce-b727-f1ef610d9ae3",
"type": "main",
"index": 0
}
]
]
},
"9b178dec-c384-4706-9bb2-0ff6e20c6842": {
"main": [
[
{
"node": "Merge all uploads",
"type": "main",
"index": 3
}
]
]
},
"1d248ef1-3fe8-40ec-9289-b606895934a7": {
"main": [
[
{
"node": "e5c524c4-3741-49ca-b1b6-e18d3755f16b",
"type": "main",
"index": 0
}
]
]
},
"c89e1256-72cd-4346-9043-4b7630e45626": {
"main": [
[
{
"node": "01a424d4-17f9-4d47-8921-d231c3f1d7f3",
"type": "main",
"index": 0
}
]
]
},
"a5d687a8-bc65-4bac-915d-deccdc2c8098": {
"main": [
[
{
"node": "4f0167a3-e215-4524-b606-7e70835796da",
"type": "main",
"index": 0
}
]
]
},
"87c26b9e-1553-4ed4-973d-a81b11a3a519": {
"main": [
[
{
"node": "5f471cee-9b78-4cb0-8711-dfcbb4897d01",
"type": "main",
"index": 0
}
]
]
},
"Merge all uploads": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"116c4e0b-2533-4ef1-bee3-8c90d15b1527": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"9b384086-9370-445c-a405-be429a6e6850": {
"main": [
[
{
"node": "9b178dec-c384-4706-9bb2-0ff6e20c6842",
"type": "main",
"index": 0
}
]
]
},
"efd1bde6-0c7e-41df-80ec-de2e7b80bfb4": {
"main": [
[
{
"node": "e5750b7b-8b1c-4abd-9ffe-7e474991c710",
"type": "main",
"index": 0
},
{
"node": "35542d13-b584-439c-9b4b-793b3f026a56",
"type": "main",
"index": 0
},
{
"node": "9b384086-9370-445c-a405-be429a6e6850",
"type": "main",
"index": 0
}
]
]
},
"4c4efcd6-0224-4003-85b6-3269359085df": {
"main": [
[
{
"node": "Merge all uploads",
"type": "main",
"index": 1
}
]
]
},
"86c12a83-8f1e-45e3-88d9-7c34c8f24a29": {
"main": [
[
{
"node": "87c26b9e-1553-4ed4-973d-a81b11a3a519",
"type": "main",
"index": 0
}
]
]
},
"01a424d4-17f9-4d47-8921-d231c3f1d7f3": {
"main": [
[]
]
},
"bd711a93-ab0c-4dba-bdf2-d149030decdb": {
"main": [
[
{
"node": "Merge all uploads",
"type": "main",
"index": 0
}
]
]
},
"e5c524c4-3741-49ca-b1b6-e18d3755f16b": {
"main": [
[
{
"node": "Merge all uploads",
"type": "main",
"index": 2
}
]
]
},
"8368485d-a6e4-4376-8f7f-b5633844dba3": {
"main": [
[
{
"node": "c6ecd939-fca4-495f-ba6e-e4942d840729",
"type": "main",
"index": 0
}
]
]
},
"5f471cee-9b78-4cb0-8711-dfcbb4897d01": {
"main": [
[
{
"node": "bd711a93-ab0c-4dba-bdf2-d149030decdb",
"type": "main",
"index": 0
}
]
]
},
"4f0167a3-e215-4524-b606-7e70835796da": {
"main": [
[
{
"node": "4c4efcd6-0224-4003-85b6-3269359085df",
"type": "main",
"index": 0
}
]
]
},
"35542d13-b584-439c-9b4b-793b3f026a56": {
"main": [
[
{
"node": "1d248ef1-3fe8-40ec-9289-b606895934a7",
"type": "main",
"index": 0
}
]
]
},
"e5750b7b-8b1c-4abd-9ffe-7e474991c710": {
"main": [
[
{
"node": "86c12a83-8f1e-45e3-88d9-7c34c8f24a29",
"type": "main",
"index": 0
},
{
"node": "a5d687a8-bc65-4bac-915d-deccdc2c8098",
"type": "main",
"index": 0
}
]
]
}
}
}Foire aux questions
Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Modèle-Jsoncut-rss-Republication
Créer des publications pour les médias sociaux générées par l'IA à partir de sources RSS avec GPT-5 et JsonCut
If
Wait
Merge
+
If
Wait
Merge
24 Nœuds8Automator
Template-Jsoncut-Watermark
Créer des filigranes d'image professionnels en utilisant l'API JSONCut
If
Wait
Merge
+
If
Wait
Merge
14 NœudsKev
Création de contenu
PDF vers commande
Utiliser l'IA pour automatiser la conversion des commandes d'achat PDF en commandes de vente Adobe Commerce
If
Set
Code
+
If
Set
Code
96 NœudsJKingma
Extraction de documents
Générateur de contenu WordPress v3
Générateur de contenu WordPress v3
If
Set
Code
+
If
Set
Code
102 NœudsAlex Kim
Intelligence Artificielle
Explorer les nœuds n8n dans la bibliothèque de références visuelles
Explorer les nœuds n8n dans la base de références visuelles
If
Ftp
Set
+
If
Ftp
Set
113 NœudsI versus AI
Autres
Découverte des lacunes en matière de recherche de marché et de référencement (SEO) par analyse du contenu concurrent
utilisation InfraNodus GraphRAG analyse竞争对手网站contenu空白,助力 SEO
If
Code
Wait
+
If
Code
Wait
37 NœudsInfraNodus
Intelligence Artificielle
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds32
Catégorie-
Types de nœuds13
Description de la difficulté
Auteur
8Automator
@kesim0Liens externes
Voir sur n8n.io →
Partager ce workflow