This workflow follows the Agent → Google Sheets 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 →
{
"active": false,
"connections": {
"\u23f0 Planificateur d\u2019Id\u00e9es (n8n Schedule)": {
"main": [
[
{
"node": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udcca Enregistre l\u2019Id\u00e9e": {
"main": [
[
{
"node": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes",
"type": "main",
"index": 0
}
]
]
},
"\ud83e\udde9 S\u00e9pare les Sc\u00e8nes (n8n Code Node)": {
"main": [
[
{
"node": "\ud83c\udfa5 Cr\u00e9e les Clips Vid\u00e9o (Wavespeed - seedance-v1-pro-t2v)",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udce6 Formate les Sc\u00e8nes": {
"ai_outputParser": [
[
{
"node": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes_old",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83c\udfa5 Cr\u00e9e les Clips Vid\u00e9o (Wavespeed - seedance-v1-pro-t2v)": {
"main": [
[
{
"node": "\u23f3 Attente G\u00e9n\u00e9ration des Clips",
"type": "main",
"index": 0
}
]
]
},
"\u23f3 Attente G\u00e9n\u00e9ration des Clips": {
"main": [
[
{
"node": "\ud83d\udce5 R\u00e9cup\u00e8re les Clips",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udce5 R\u00e9cup\u00e8re les Clips": {
"main": [
[
{
"node": "\ud83d\udd0a Cr\u00e9e les Sons ASMR (fal-ai - mmaudio-v2)",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udd0a Cr\u00e9e les Sons ASMR (fal-ai - mmaudio-v2)": {
"main": [
[
{
"node": "\u23f3 Attente G\u00e9n\u00e9ration des Sons",
"type": "main",
"index": 0
}
]
]
},
"\u23f3 Attente G\u00e9n\u00e9ration des Sons": {
"main": [
[
{
"node": "\ud83d\udce5 R\u00e9cup\u00e8re les Sons ",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udce5 R\u00e9cup\u00e8re les Sons ": {
"main": [
[
{
"node": "\ud83d\udcc3 Liste les Clips Vid\u00e9o",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udcc3 Liste les Clips Vid\u00e9o": {
"main": [
[
{
"node": "\ud83c\udfac Monte la Vid\u00e9o Finale (fal-ai - ffmpeg-api/compose",
"type": "main",
"index": 0
}
]
]
},
"\ud83c\udfac Monte la Vid\u00e9o Finale (fal-ai - ffmpeg-api/compose": {
"main": [
[
{
"node": "\u23f3 Attente Vid\u00e9o Finale",
"type": "main",
"index": 0
}
]
]
},
"\u23f3 Attente Vid\u00e9o Finale": {
"main": [
[
{
"node": "\ud83d\udce5 R\u00e9cup\u00e8re la Vid\u00e9o Finale",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udce5 R\u00e9cup\u00e8re la Vid\u00e9o Finale": {
"main": [
[
{
"node": "\u2705 Enregistre la Vid\u00e9o Finale",
"type": "main",
"index": 0
}
]
]
},
" \ud83e\udd16 Mod\u00e8le GPT-4.1 (OpenAI API)": {
"ai_languageModel": [
[]
]
},
" \ud83e\udde0 Think Tool Linker": {
"ai_tool": [
[
{
"node": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale_old",
"type": "ai_tool",
"index": 0
},
{
"node": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes_old",
"type": "ai_tool",
"index": 0
}
]
]
},
"\ud83e\udd16 Mod\u00e8le Saunet 3.7 (Anthropic API)": {
"ai_languageModel": [
[
{
"node": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale_old",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes_old",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\ud83d\udce6 Formate les Sc\u00e8nes1": {
"ai_outputParser": [
[
{
"node": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale_old": {
"main": [
[
{
"node": "\ud83d\udcca Enregistre l\u2019Id\u00e9e",
"type": "main",
"index": 0
}
]
]
},
"\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale": {
"main": [
[
{
"node": "\ud83d\udcca Enregistre l\u2019Id\u00e9e",
"type": "main",
"index": 0
}
]
]
},
"\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes_old": {
"main": [
[
{
"node": "\ud83e\udde9 S\u00e9pare les Sc\u00e8nes (n8n Code Node)",
"type": "main",
"index": 0
}
]
]
},
"\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes": {
"main": [
[
{
"node": "\ud83e\udde9 S\u00e9pare les Sc\u00e8nes (n8n Code Node)",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"\ud83d\udcdd Formate l\u2019Id\u00e9e_old": {
"ai_outputParser": [
[
{
"node": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale_old",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"\ud83d\udcdd Formate l\u2019Id\u00e9e": {
"ai_outputParser": [
[
{
"node": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale",
"type": "ai_outputParser",
"index": 0
}
]
]
}
},
"createdAt": "2025-06-25T08:22:14.048Z",
"id": "M24JDLL1dkUkC11t",
"isArchived": false,
"meta": {
"templateCredsSetupCompleted": true
},
"name": "ASMR",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
380,
200
],
"id": "c953d45b-eddb-4c0c-a788-b50a9feabc36",
"name": "\u23f0 Planificateur d\u2019Id\u00e9es (n8n Schedule)"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "1GgYaWHWrhQp8Zi975F4HT-dMcLmAldWXgNkFGOZLeSc",
"mode": "list",
"cachedResultName": "ASMR",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GgYaWHWrhQp8Zi975F4HT-dMcLmAldWXgNkFGOZLeSc/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Feuille 1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GgYaWHWrhQp8Zi975F4HT-dMcLmAldWXgNkFGOZLeSc/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"ID": "=ROW()-1",
"Caption": "={{ $json.output[0].Caption }}",
"Idea": "={{ $json.output[0].Idea }}",
"Environment": "={{ $json.output[0].Environment }}",
"Sound": "={{ $json.output[0].Sound }}",
"Status": "={{ $json.output[0].Status }}"
},
"matchingColumns": [
"id"
],
"schema": [
{
"id": "ID",
"displayName": "ID",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Caption",
"displayName": "Caption",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Idea",
"displayName": "Idea",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Environment",
"displayName": "Environment",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Sound",
"displayName": "Sound",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "URL",
"displayName": "URL",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Status",
"displayName": "Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
1060,
200
],
"id": "2f533dd9-af14-4107-b1f7-2a7af542b405",
"name": "\ud83d\udcca Enregistre l\u2019Id\u00e9e",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "function findSceneEntries(obj) {\n const scenes = [];\n\n for (const [key, value] of Object.entries(obj)) {\n if (key.toLowerCase().startsWith(\"scene\") && typeof value === \"string\") {\n scenes.push(value);\n } else if (typeof value === \"object\" && value !== null) {\n scenes.push(...findSceneEntries(value));\n }\n }\n\n return scenes;\n}\n\nlet output = [];\n\ntry {\n const inputData = items[0].json;\n const scenes = findSceneEntries(inputData);\n\n if (scenes.length === 0) {\n throw new Error(\"No scene keys found at any level.\");\n }\n\n output = scenes.map(scene => ({ description: scene }));\n} catch (e) {\n throw new Error(\"Could not extract scenes properly. Details: \" + e.message);\n}\n\nreturn output;\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2260,
200
],
"id": "26c5acd2-3161-4ad9-968c-84538169ec9d",
"name": "\ud83e\udde9 S\u00e9pare les Sc\u00e8nes (n8n Code Node)"
},
{
"parameters": {
"jsonSchemaExample": "{\n \"Idea\": \"An obsidian rock being sliced with a shimmering knife\",\n \"Environment\": \"Clean studio table, subtle light reflections\",\n \"Sound\": \"Crisp slicing, deep grinding, and delicate crumbling\",\n \"Scene 1\": \"Extreme macro shot: a razor-sharp, polished knife blade presses into the dark, granular surface of an obsidian rock, just beginning to indent.\",\n \"Scene 2\": \"Close-up: fine, iridescent dust particles erupt from the point of contact as the blade cuts deeper into the obsidian, catching the studio light.\",\n \"Scene 3\": \"Mid-shot: the knife, held perfectly steady, has formed a shallow, clean groove across the obsidian's shimmering surface, revealing a new, smooth texture.\"\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
2100,
500
],
"id": "8405878f-4fba-4ea0-8ec5-ecd260c510b7",
"name": "\ud83d\udce6 Formate les Sc\u00e8nes"
},
{
"parameters": {
"method": "POST",
"url": "https://api.wavespeed.ai/api/v3/bytedance/seedance-v1-pro-t2v-480p",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"contentType": "raw",
"rawContentType": "application/json",
"body": "={\n \"aspect_ratio\": \"9:16\",\n \"duration\": 10,\n \"prompt\": \"VIDEO THEME: {{ $('\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale').last().json.values()[0][0][\"Idea\"] }} | WHAT HAPPENS IN THE VIDEO: {{ $json.description }} | WHERE THE VIDEO IS SHOT: {{ $('\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale').last().json.values()[0][0][\"Environment\"] }}\"\n}\n",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 3000
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
2660,
200
],
"id": "a4da2776-b823-413f-be80-627085b75259",
"name": "\ud83c\udfa5 Cr\u00e9e les Clips Vid\u00e9o (Wavespeed - seedance-v1-pro-t2v)",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"amount": 240
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
2880,
200
],
"id": "d3eb03e0-73d4-4c0b-88cd-8f50e6e12843",
"name": "\u23f3 Attente G\u00e9n\u00e9ration des Clips"
},
{
"parameters": {
"url": "=https://api.wavespeed.ai/api/v3/predictions/{{ $json.data.id }}/result",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
3100,
200
],
"id": "6a6f787f-f4ef-447d-8650-ec479f58f42f",
"name": "\ud83d\udce5 R\u00e9cup\u00e8re les Clips",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://queue.fal.run/fal-ai/mmaudio-v2 ",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"contentType": "raw",
"rawContentType": "application/json",
"body": "= {\n \"prompt\": \"ASMR Soothing sound effects. {{ $('\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale').last().json.values()[0][0][\"Sound\"] }}\",\n \"duration\": 10,\n \"video_url\": \"{{ $json.data.outputs[0] }}\"\n }\n",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 2000
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
3460,
200
],
"id": "ce33465a-1f65-47b5-a751-402cc3e2e871",
"name": "\ud83d\udd0a Cr\u00e9e les Sons ASMR (fal-ai - mmaudio-v2)",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"amount": 60
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
3680,
200
],
"id": "3a161b94-cf9c-4a6c-8974-2b6707cfe13b",
"name": "\u23f3 Attente G\u00e9n\u00e9ration des Sons"
},
{
"parameters": {
"url": "=https://queue.fal.run/fal-ai/mmaudio-v2/requests/{{ $json.request_id }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
3900,
200
],
"id": "eaaf9ba8-2910-47cd-b284-e8169ec3ec56",
"name": "\ud83d\udce5 R\u00e9cup\u00e8re les Sons ",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "return [\n {\n video_urls: items.map(item => item.json.video.url)\n }\n];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
4260,
200
],
"id": "1f2e321b-ea14-48bc-89f3-353d5992fb59",
"name": "\ud83d\udcc3 Liste les Clips Vid\u00e9o"
},
{
"parameters": {
"method": "POST",
"url": "https://queue.fal.run/fal-ai/ffmpeg-api/compose",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"contentType": "raw",
"rawContentType": "application/json",
"body": "={\n \"tracks\": [\n {\n \"id\": \"1\",\n \"type\": \"video\",\n \"keyframes\": [\n { \"url\": \"{{ $json.video_urls[0] }}\", \"timestamp\": 0, \"duration\": 10 },\n { \"url\": \"{{ $json.video_urls[1] }}\", \"timestamp\": 10, \"duration\": 10 },\n { \"url\": \"{{ $json.video_urls[2] }}\", \"timestamp\": 20, \"duration\": 10 }\n ]\n }\n ]\n}",
"options": {
"batching": {
"batch": {
"batchSize": 1,
"batchInterval": 2000
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
4480,
200
],
"id": "77db2731-33be-43c9-84d8-ec320458ce06",
"name": "\ud83c\udfac Monte la Vid\u00e9o Finale (fal-ai - ffmpeg-api/compose",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"amount": 60
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
4700,
200
],
"id": "6a9f6f3f-6f6e-4af7-9663-9c874a390696",
"name": "\u23f3 Attente Vid\u00e9o Finale"
},
{
"parameters": {
"url": "=https://queue.fal.run/fal-ai/ffmpeg-api/requests/{{ $json.request_id }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
5080,
200
],
"id": "2d64836a-a8e2-4544-a7f8-db992d181f02",
"name": "\ud83d\udce5 R\u00e9cup\u00e8re la Vid\u00e9o Finale",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "update",
"documentId": {
"__rl": true,
"value": "1GgYaWHWrhQp8Zi975F4HT-dMcLmAldWXgNkFGOZLeSc",
"mode": "list",
"cachedResultName": "ASMR",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GgYaWHWrhQp8Zi975F4HT-dMcLmAldWXgNkFGOZLeSc/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "Feuille 1",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1GgYaWHWrhQp8Zi975F4HT-dMcLmAldWXgNkFGOZLeSc/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Idea": "={{ $('\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale').last().json.values()[0][0][\"Idea\"] }}",
"URL": "={{ $json.video_url }}"
},
"matchingColumns": [
"Idea"
],
"schema": [
{
"id": "ID",
"displayName": "ID",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Caption",
"displayName": "Caption",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Idea",
"displayName": "Idea",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Environment",
"displayName": "Environment",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Sound",
"displayName": "Sound",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "URL",
"displayName": "URL",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "Status",
"displayName": "Status",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "row_number",
"displayName": "row_number",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"readOnly": true,
"removed": true
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
5300,
200
],
"id": "6cf13cb5-054e-411a-bd57-499ca25d40ea",
"name": "\u2705 Enregistre la Vid\u00e9o Finale",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4.1",
"mode": "list",
"cachedResultName": "gpt-4.1"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
1620,
520
],
"id": "f2eefb24-423e-42c8-b233-5aecc4a654ac",
"name": " \ud83e\udd16 Mod\u00e8le GPT-4.1 (OpenAI API)",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.toolThink",
"typeVersion": 1,
"position": [
1320,
520
],
"id": "5c1727e1-db2e-47d0-bb3b-3372b258bcea",
"name": " \ud83e\udde0 Think Tool Linker"
},
{
"parameters": {
"content": "## \u23f0 D\u00e9clencheur Automatique\n\nCe n\u0153ud lance automatiquement le workflow selon une planification d\u00e9finie. \nIl permet de g\u00e9n\u00e9rer de nouveaux contenus \u00e0 intervalles r\u00e9guliers (par exemple : chaque jour, semaine\u2026).\n",
"height": 500,
"width": 380,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"position": [
220,
-60
],
"typeVersion": 1,
"id": "21718b41-f2c0-4a3d-9d83-5d17a7480a14",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## \ud83c\udf9e\ufe0f G\u00e9n\u00e9ration de Prompts Cin\u00e9matographiques\n\nL'IA d\u00e9compose l'id\u00e9e principale en 13 sc\u00e8nes ultra-visuelles, d\u00e9taillant :\n- l'objet \u00e0 couper,\n- le d\u00e9cor,\n- la texture du mat\u00e9riau,\n- les mouvements du couteau.\n\nCes sc\u00e8nes serviront \u00e0 g\u00e9n\u00e9rer des clips vid\u00e9o coh\u00e9rents.\n",
"height": 500,
"width": 1060,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"position": [
1420,
-60
],
"typeVersion": 1,
"id": "add54145-34cd-4f71-a350-f14be0cac079",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## \ud83d\udca1 G\u00e9n\u00e9ration d'Id\u00e9e Virale\n\nUne id\u00e9e visuelle et originale est g\u00e9n\u00e9r\u00e9e par une IA (GPT-4) \u00e0 partir d\u2019un prompt syst\u00e8me. \nL\u2019id\u00e9e est format\u00e9e en JSON, enregistr\u00e9e dans un Google Sheet, et utilis\u00e9e comme base pour la cr\u00e9ation de vid\u00e9os et de sons.\n",
"height": 500,
"width": 640,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"position": [
660,
-60
],
"typeVersion": 1,
"id": "03917666-1797-4e06-aed0-fbbebc76489d",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## \ud83c\udfa5 Cr\u00e9ation des Clips Vid\u00e9o\n\nChaque sc\u00e8ne est envoy\u00e9e \u00e0 Wavespeed pour cr\u00e9er une vid\u00e9o courte (10 sec). \nUne pause est n\u00e9cessaire pour attendre le rendu avant de r\u00e9cup\u00e9rer les vid\u00e9os.\n\n\ud83c\udf00 **Service utilis\u00e9** : [Wavespeed](https://wavespeed.ai/center/default/invites/O3bd381704e0a4dbd984bf6ec496f2af1JaxNpJmiWIsKcFAP) \n(n\u00e9cessite un compte et une cl\u00e9 API)\n\nLes clips seront ensuite assembl\u00e9s ensemble.\n",
"height": 500,
"width": 700
},
"type": "n8n-nodes-base.stickyNote",
"position": [
2580,
-60
],
"typeVersion": 1,
"id": "72a45d5c-2e04-49e7-9988-ddf163061947",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "## \ud83d\udd0a G\u00e9n\u00e9ration des Sons ASMR\n\nUn son r\u00e9aliste est g\u00e9n\u00e9r\u00e9 pour accompagner les vid\u00e9os, selon la description sonore produite par l\u2019IA.\n\nfal.ai est utilis\u00e9 ici pour cr\u00e9er une ambiance sonore immersive.\n",
"height": 500,
"width": 660,
"color": 2
},
"type": "n8n-nodes-base.stickyNote",
"position": [
3400,
-60
],
"typeVersion": 1,
"id": "31b8cd35-bdd5-4701-85c5-5a34f7d324e7",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "## \ud83c\udfac Montage de la Vid\u00e9o Finale\n\nLes clips sont assembl\u00e9s en une seule vid\u00e9o \u00e0 l\u2019aide de fal.ai (via l\u2019API FFmpeg). \nChaque clip est positionn\u00e9 pr\u00e9cis\u00e9ment sur la timeline pour former une s\u00e9quence fluide.\n\nUne attente est n\u00e9cessaire avant de r\u00e9cup\u00e9rer le rendu final.\n",
"height": 500,
"width": 700,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"position": [
4180,
-60
],
"typeVersion": 1,
"id": "7260577f-4322-46c7-a18a-fa8492aa03c5",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "## \u2705 Enregistrement de la Vid\u00e9o Finale\n\nLa vid\u00e9o produite est ajout\u00e9e dans un Google Sheet pour archivage. \nCela permet de suivre facilement quelles id\u00e9es ont \u00e9t\u00e9 trait\u00e9es et produites.\n\nTu peux ensuite la publier ou l\u2019analyser plus tard.\n",
"height": 500,
"width": 580,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
4980,
-60
],
"typeVersion": 1,
"id": "d98bf447-1b65-4a49-9ffc-4e6c5ff91ce0",
"name": "Sticky Note6"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "claude-3-7-sonnet-20250219",
"mode": "list",
"cachedResultName": "Claude Sonnet 3.7"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1.3,
"position": [
580,
560
],
"id": "b8853967-5dff-41b1-b5a9-6241325da225",
"name": "\ud83e\udd16 Mod\u00e8le Saunet 3.7 (Anthropic API)",
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": "openai/gpt-4.1",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
1800,
480
],
"id": "c11a9471-7f3d-4217-871d-50b4fab3bd06",
"name": "OpenRouter Chat Model",
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsonSchemaExample": "{\n \"Idea\": \"Spider-Man battles Doctor Strange across shifting portals and city rooftops\",\n \"Environment\": \"City skyline at dusk, swirling mystic portals, energized air, cinematic realism\",\n \"Sound\": \"Whoosh of portals, web thwips, crackling magic energy, distant city noise\",\n \"Scene 1\": \"Wide aerial shot: Spider-Man swings between skyscrapers as glowing circular portals open in midair. Doctor Strange emerges, cloak billowing, summoning an orange glyph. Tension ripples the air; city lights reflect off glass surfaces.\",\n \"Scene 2\": \"Tight angle: Spider-Man launches a web but Strange redirects it with a swirling shield. Energy sparks fly from the collision point, warping the web as light distorts around the portal edge. Shoes scrape concrete as both adjust stance.\",\n \"Scene 3\": \"Dynamic tracking: Strange twists reality, rooftop bricks floating. Spider-Man somersaults, evading thrown debris; his suit taut and reflective under magic light. Strange\u2019s hand gestures cast shimmering sigils, fragments swirling, energy resonating.\"\n}"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
2380,
-160
],
"id": "45469679-d091-456a-ba47-95afa95c38da",
"name": "\ud83d\udce6 Formate les Sc\u00e8nes1"
},
{
"parameters": {
"promptType": "define",
"text": "Give me an idea about \n\n[[\na random hard material or element that has the shape of an aliment being sliced with a sharp knife - have your idea be in this format: \"(color) (material) shaped like a (random aliment)\". Examples for your inspiration: glass shaped like a strawberry, crystal shaped like a candy, dry ice shaped like a chocolate bar, diamond shaped like a cherry, etc. \n]]\n\nUse the Think tool to review your output",
"hasOutputParser": true,
"options": {
"systemMessage": "=**Role**: You are an AI designed to generate 1 immersive, realistic idea based on a user-provided topic. Your output must be formatted as a JSON array (single line) and follow all the rules below exactly.\n\n***\nRULES:\n\nOnly return 1 idea at a time.\n\nThe user will provide a key topic (e.g. \"glass cutting ASMR,\" \"wood carving sounds,\" \"satisfying rock splits\").\n\nThe Idea must:\n\nBe under 13 words.\n\nDescribe an interesting and viral-worthy moment, action, or event related to the provided topic.\n\nCan be as surreal as you can get, doesn't have to be real-world!\n\nThe Caption must be:\n\nShort, punchy, and viral-friendly.\n\nInclude one relevant emoji.\n\nInclude exactly 12 hashtags in this order:\n** 4 topic-relevant hashtags\n** 4 all-time most popular hashtags\n** 4 currently trending hashtags (based on live research)\n\nAll hashtags must be lowercase.\n\nSet Status to \"for production\" (always).\n\nThe Environment must:\n\nBe under 20 words.\n\nMatch the action in the Idea exactly.\n\nClearly describe:\n\nWhere the event is happening (e.g. clean studio table, rough natural terrain, laboratory bench)\n\nKey visuals or background details (e.g. dust particles, polished surface, subtle light reflections)\n\nStyle of scene (e.g. macro close-up, cinematic slow-motion, minimalist, abstract)\n\nOk with fictional settings.\n\nThe Sound must:\n\nBe under 15 words.\n\nDescribe the primary sound that makes sense to happen in the video. This will be fed to a sound model later on.\n\n\n***\nOUTPUT FORMAT (single-line JSON array):\n\n[\n {\n \"Caption\": \"Short viral title with emoji #4_topic_hashtags #4_all_time_popular_hashtags #4_trending_hashtags\",\n \"Idea\": \"Short idea under 13 words\",\n \"Environment\": \"Brief vivid setting under 20 words matching the action\",\n \"Sound\": \"Primary sound description under 15 words\",\n \"Status\": \"for production\"\n }\n]"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
700,
200
],
"id": "1669b008-faaa-4e9c-8b65-377b8f2afcd3",
"name": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale_old"
},
{
"parameters": {
"promptType": "define",
"text": "Give me an idea about\n\n[[\na unique Marvel Cinematic Universe superhero duel between two characters \u2014 format the idea as: \"(Hero 1) vs (Hero 2) in/at (distinct MCU setting or event)\". Examples for your inspiration: Spider-Man vs Black Panther on the Wakandan plains, Doctor Strange vs Scarlet Witch in the Mirror Dimension, Iron Man vs Thor atop Stark Tower, Captain Marvel vs Hulk during a S.H.I.E.L.D. helicarrier invasion, etc.\n]]\n\nUse the Think tool to review your output",
"hasOutputParser": true,
"options": {
"systemMessage": "=**Role**: You are an AI designed to generate 1 immersive, MCU-superhero-duel idea based on a user-provided topic. Your output must be formatted as a JSON array (single line) and follow all the rules below exactly.\n\n***\nRULES:\n\nOnly return 1 idea at a time.\n\nThe user will provide a key topic (e.g. \"Iron Man vs Captain America duel,\" \"wanda vs doctor strange.\")\n\nThe Idea must:\n\n- Be under 13 words.\n- Describe an intense, visually striking or viral-worthy duel sequence between two MCU super-heroes.\n- Can be MCU-canon or completely original as long as the characters are from the MCU.\n\nThe Caption must be:\n\n- Short, punchy, and viral-friendly.\n- Include one relevant emoji.\n- Include exactly 12 hashtags in the following order:\n * 4 topic-specific hashtags (MCU, hero names, duel, powers)\n * 4 all-time most popular hashtags\n * 4 currently trending hashtags (fictional or based on recent MCU buzz)\n\n- All hashtags in lowercase.\n\nSet Status to \"for production\" (always).\n\nThe Environment must:\n\n- Be under 20 words.\n- Clearly set the duel location (epic or iconic MCU setting, can be fictional).\n- Mention key visuals or background cues (e.g. flickering debris, shattered glass, neon reflections).\n- Style of scene (e.g. cinematic wide shot, slow-motion close-up, atmospheric fog, energy storms).\n\nThe Sound must:\n\n- Be under 15 words.\n- Describe the primary sound or combination of duel sounds.\n\n***\nOUTPUT FORMAT (single-line JSON array):\n\n[\n {\n \"Caption\": \"Short viral title with emoji #4_topic_hashtags #4_all_time_popular_hashtags #4_trending_hashtags\",\n \"Idea\": \"Short MCU duel idea under 13 words\",\n \"Environment\": \"Brief, vivid setting under 20 words matching the duel\",\n \"Sound\": \"Primary sound (or blend) for the scene, under 15 words\",\n \"Status\": \"for production\"\n }\n]\n***\nRULES:\n\nOnly return 1 idea at a time.\n\nThe user will provide a key topic (e.g. \"glass cutting ASMR,\" \"wood carving sounds,\" \"satisfying rock splits\").\n\nThe Idea must:\n\nBe under 13 words.\n\nDescribe an interesting and viral-worthy moment, action, or event related to the provided topic.\n\nCan be as surreal as you can get, doesn't have to be real-world!\n\nThe Caption must be:\n\nShort, punchy, and viral-friendly.\n\nInclude one relevant emoji.\n\nInclude exactly 12 hashtags in this order:\n** 4 topic-relevant hashtags\n** 4 all-time most popular hashtags\n** 4 currently trending hashtags (based on live research)\n\nAll hashtags must be lowercase.\n\nSet Status to \"for production\" (always).\n\nThe Environment must:\n\nBe under 20 words.\n\nMatch the action in the Idea exactly.\n\nClearly describe:\n\nWhere the event is happening (e.g. clean studio table, rough natural terrain, laboratory bench)\n\nKey visuals or background details (e.g. dust particles, polished surface, subtle light reflections)\n\nStyle of scene (e.g. macro close-up, cinematic slow-motion, minimalist, abstract)\n\nOk with fictional settings.\n\nThe Sound must:\n\nBe under 15 words.\n\nDescribe the primary sound that makes sense to happen in the video. This will be fed to a sound model later on.\n\n\n***\nOUTPUT FORMAT (single-line JSON array):\n\n[\n {\n \"Caption\": \"Short viral title with emoji #4_topic_hashtags #4_all_time_popular_hashtags #4_trending_hashtags\",\n \"Idea\": \"Short idea under 13 words\",\n \"Environment\": \"Brief vivid setting under 20 words matching the action\",\n \"Sound\": \"Primary sound description under 15 words\",\n \"Status\": \"for production\"\n }\n]"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
680,
-320
],
"id": "6c244daa-c2bb-4c22-86f9-23e6b9b2d702",
"name": "\ud83d\udca1 G\u00e9n\u00e8re une Id\u00e9e Virale"
},
{
"parameters": {
"promptType": "define",
"text": "=Give me 3 video prompts based on the previous idea\n\nUse the Think tool to review your output",
"hasOutputParser": true,
"options": {
"systemMessage": "=Role: You are a prompt-generation AI specializing in cinematic, ASMR-style video prompts. Your task is to generate a multi-scene video sequence that vividly shows a sharp knife actively cutting through a specific object in a clean, high-detail setting.\n\nYour writing must follow this style:\n\nSharp, precise cinematic realism.\n\nMacro-level detail with tight focus on the blade interacting with the object.\n\nThe knife must always be in motion \u2014 slicing, splitting, or gliding through the material. Never idle or static.\n\nCamera terms are allowed (e.g. macro view, tight angle, over-the-blade shot).\n\nEach scene must contain all of the following, expressed through detailed visual language:\n\n\u2705 The main object or subject (from the Idea)\n\n\u2705 The cutting environment or surface (from the Environment)\n\n\u2705 The texture, structure, and behavior of the material as it\u2019s being cut\n\n\u2705 A visible, sharp blade actively cutting\n\nDescriptions should show:\n\nThe physical makeup of the material \u2014 is it translucent, brittle, dense, reflective, granular, fibrous, layered, or fluid-filled?\n\nHow the material responds to the blade \u2014 resistance, cracking, tearing, smooth separation, tension, vibration.\n\nThe interaction between the blade and the surface \u2014 light reflection, buildup of particles, contact points, residue or dust.\n\nAny ASMR-relevant sensory cues like particle release, shimmer, or subtle movement, but always shown visually \u2014 not narrated.\n\nTone:\n\nClean, clinical, visual.\n\nNo poetic metaphors, emotion, or storytelling.\n\nAvoid fantasy or surreal imagery.\n\nAll description must feel physically grounded and logically accurate.\n\nLength:\n\nEach scene must be between 1,000 and 2,000 characters.\n\nNo shallow or repetitive scenes \u2014 each must be immersive, descriptive, and specific.\n\nEach scene should explore a distinct phase of the cutting process, a different camera perspective, or a new behavior of the material under the blade.\n\nInputs:\n\nIdea: \"{{ $json.Idea }}\"\nEnvironment: \"{{ $json.Environment }}\"\nSound: \"{{ $json.Sound }}\"\n\nFormat:\n\nIdea: \"...\"\nEnvironment: \"...\"\nSound: \"...\"\n\nScene 1: \"...\"\nScene 2: \"...\"\nScene 3: \"...\"\nScene 4: \"...\"\nScene 5: \"...\"\nScene 6: \"...\"\nScene 7: \"...\"\nScene 8: \"...\"\nScene 9: \"...\"\nScene 10: \"...\"\nScene 11: \"...\"\nScene 12: \"...\"\nScene 13: \"...\"\n\n"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
1860,
200
],
"id": "c7d8fc5b-cc80-474b-86fc-14db49b40b78",
"name": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes_old"
},
{
"parameters": {
"promptType": "define",
"text": "=Give me 3 video prompts based on the previous idea\n\nUse the Think tool to review your output",
"hasOutputParser": true,
"options": {
"systemMessage": "=Role: You are a prompt-generation AI specializing in cinematic, hyperrealistic, action video prompts. Your task is to generate a multi-scene video sequence that vividly depicts an active duel between two specific MCU superheroes, in a clean, high-detail environment.\n\nYour writing must follow this style:\n\nSharp, precise cinematic realism.\n\nMacro-level detail with tight focus on key moments of action, interaction, and power usage.\n\nBoth superheroes must always be in active motion \u2013 attacking, defending, countering, or maneuvering. No idle poses.\n\nCamera terms are allowed (e.g. tracking shot, top-down view, tight close-up, over-the-shoulder perspective, slow-motion insert).\n\nEach scene must include all of the following elements, captured in detailed visual language:\n\n\u2705 The two opposing MCU superheroes (from the Idea)\n\n\u2705 The environment, arena, or battleground (from the Environment)\n\n\u2705 The physical interaction of powers, costumes, and physical attacks \u2013 impacts, energy discharges, debris, light effects, motion blur, contact, and damage\n\n\u2705 The dynamic body language, gear, and specific abilities as they are used in the scene\n\nDescriptions should show:\n\nHow each superhero\u2019s power or technique is physically visualized \u2013 energy type, material, luminosity, force, distortion, or residue.\n\nThe detailed response of the environment and each opponent to every attack or defensive move \u2013 surface cracks, splintering, flying debris, shield impact, kinetic rebound, dissipating sparks, or concussive force.\n\nThe interaction of suits, gear, or weapons with surroundings \u2013 scuff marks, blast residue, trailing energy, deformation.\n\nAny ASMR-relevant sensory cues such as heat shimmer, energy pulse, rainfall, or tactile impact shown visually \u2014 never narrated.\n\nTone:\n\nClean, clinical, visual.\n\nNo storytelling, no internal dialog, no emotional subtext.\n\nNo fantasy or surreal elements \u2014 all effects should match MCU physics and power depiction.\n\nAll description must be grounded in logical, MCU-consistent physicality.\n\nLength:\n\nEach scene must be between 1,000 and 2,000 characters.\n\nNo shallow or repetitive scenes \u2014 every scene must be immersive, descriptive, and specific.\n\nEach scene should explore a distinct phase of combat, a different camera perspective, or a new use of power/ability.\n\nInputs:\n\nIdea: \"{{ $json.Idea }}\"\nEnvironment: \"{{ $json.Environment }}\"\nSound: \"{{ $json.Sound }}\"\n\nFormat:\n\nIdea: \"...\"\nEnvironment: \"...\"\nSound: \"...\"\n\nScene 1: \"...\"\nScene 2: \"...\"\nScene 3: \"...\""
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
1860,
-280
],
"id": "a33bf233-0d66-4005-a16d-4b57a68940d1",
"name": "\ud83c\udf9e\ufe0f G\u00e9n\u00e8re les Prompts de Sc\u00e8nes"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "claude-3-7-sonnet-20250219",
"mode": "list",
"cachedResultName": "Claude Sonnet 3.7"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1.3,
"position": [
660,
0
],
"id": "0d375814-39cf-407a-ae37-32b1d0eb3b28",
"name": "Anthropic Chat Model",
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": "openai/gpt-4.1",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
1880,
-60
],
"id": "33d26afb-8811-465f-a8a8-0f9bf469e3fc",
"name": "OpenRouter Chat Model1",
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsonSchemaExample": "[\n {\n \"Caption\": \"Diver Removes Nets Off Whale \ud83d\udc0b #whalerescue #marinelife #oceanrescue #seahelpers #love #nature #instagood #explore #viral #savenature #oceanguardians #cleanoceans\",\n \"Idea\": \"Diver carefully cuts tangled net from distressed whale in open sea\",\n \"Environment\": \"Open ocean, sunlight beams through water, diver and whale, cinematic realism\",\n \"Sound\": \"Primary sound description under 15 words\",\n \"Status\": \"for production\"\n }\n]\n"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
960,
560
],
"id": "19a647ca-faf4-4bdc-9fc6-5e9010e9fabe",
"name": "\ud83d\udcdd Formate l\u2019Id\u00e9e_old"
},
{
"parameters": {
"jsonSchemaExample": "[\n {\n \"Caption\": \"Iron Man vs Thor Showdown \u26a1\ufe0f #ironman #thor #marvelduel #mcuheroes #love #nature #instagood #explore #marvel #superheroes #avengers #trendingnow\",\n \"Idea\": \"Iron Man and Thor clash with lightning and repulsor blasts in mid-air\",\n \"Environment\": \"Rooftop at dusk, cracked concrete, glowing city lights, sparks fly, cinematic wide shot\",\n \"Sound\": \"Thunder crashes, metal clangs, repulsor blasts echo\",\n \"Status\": \"for production\"\n }\n]"
},
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.2,
"position": [
1060,
-80
],
"id": "36675a77-be9a-4651-ac69-9bf76d9c3ced",
"name": "\ud83d\udcdd Formate l\u2019Id\u00e9e"
}
],
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"tags": [],
"triggerCount": 0,
"updatedAt": "2025-06-25T14:17:36.000Z",
"versionId": "8c3b69d4-1477-45de-89f2-1f9027427b3f"
}
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.
anthropicApigoogleSheetsOAuth2ApihttpHeaderAuthopenAiApiopenRouterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
ASMR. Uses googleSheets, outputParserStructured, httpRequest, lmChatOpenAi. Scheduled trigger; 35 nodes.
Source: https://github.com/Festen78/N8N-Backup/blob/2133d945109be62c0516644be8c2dee3a67327e6/workflows/M24JDLL1dkUkC11t.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Generate creative ASMR cutting video concepts with GPT-5.1, create high-quality video clips using Sora v2, stitch them together with Cloudinary, and automatically post to Twitter/X—transforming ideas
//ASMR AI Workflow
**Content engine that ships fresh, SEO-ready articles every single day. **
This template is ideal for content creators, social media managers, YouTubers, and digital marketers who want to generate high-quality videos daily using AI and distribute them effortlessly across mul
If you teach on Udemy at any meaningful scale, you already know the problem: 80% of student messages are variations of the same handful of questions, but every one of them needs a thoughtful reply to