Générer et améliorer des vidéos IA à partir de texte ou d'images avec Sora 2/Pro et GPT-5

Avancé

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 22 nœuds.Utilise principalement des nœuds comme Form, Wait, Switch, FormTrigger, HttpRequest. Générez des vidéos IA améliorées à partir de textes ou d'images avec Sora 2/Pro et GPT-5

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API OpenAI
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
{
  "meta": {
    "instanceId": "3d7eb9567ae690bf8c9bba1cb43396e6e40c18e15eb5889cf9673ed1713da6db",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "a85d1e91-bf05-4a5a-9759-15de2b1b50e8",
      "name": "Note : Routeur de mode",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5280,
        2640
      ],
      "parameters": {
        "color": 3,
        "width": 332,
        "height": 192,
        "content": "## 🔀 Input Mode Router\n\n**Purpose:** Branches to image-to-video if file uploaded, else text-to-video with refinement.\n\n**Note:** Switch checks filename; ensures GPT-5 processes text prompts."
      },
      "typeVersion": 1
    },
    {
      "id": "eda124e2-e1aa-4064-96a7-c31cbde19521",
      "name": "Note : Téléchargement d'image",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5744,
        2080
      ],
      "parameters": {
        "color": 6,
        "width": 332,
        "height": 192,
        "content": "## 🖼️ Temp Image Upload\n\n**Purpose:** Uploads reference image to tmpfiles.org for Sora image-to-video.\n\n**Note:** Multipart POST; swaps URL to /dl/ for direct API access."
      },
      "typeVersion": 1
    },
    {
      "id": "1c76b2c1-9778-4f10-a078-6ce8eba97641",
      "name": "Note : Affineur de prompt",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5488,
        2928
      ],
      "parameters": {
        "color": 5,
        "width": 332,
        "height": 192,
        "content": "## 🤖 Prompt Refiner\n\n**Purpose:** Uses GPT-5 to enhance text prompts for Sora 2 text-to-video mode.\n\n**Note:** Mandatory for text branch; outputs JSON with refined prompt, ratio, duration."
      },
      "typeVersion": 1
    },
    {
      "id": "707ea9aa-81eb-47d1-b000-eb3238c70b94",
      "name": "Note : Analyseur JSON",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5920,
        2944
      ],
      "parameters": {
        "color": 3,
        "width": 332,
        "height": 192,
        "content": "## 🔍 JSON Output Parser\n\n**Purpose:** Validates GPT-5 response against schema for clean API params.\n\n**Note:** Ensures prompt (50-4000 chars), ratio (16:9/9:16), duration (4/8/12)."
      },
      "typeVersion": 1
    },
    {
      "id": "c474d947-6610-4731-bc3b-af7c09f926be",
      "name": "Note : Texte-vers-Vidéo",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6288,
        2752
      ],
      "parameters": {
        "color": 5,
        "width": 332,
        "height": 192,
        "content": "## 🎥 Text-to-Video Call\n\n**Purpose:** Submits refined prompt to fal.ai Sora 2 text endpoint (pro if selected).\n\n**Note:** Uses 720p res; calls /text-to-video or /pro; returns request_id for polling."
      },
      "typeVersion": 1
    },
    {
      "id": "607e987b-df5f-4d7a-8d49-b79440c62962",
      "name": "Note : Image-vers-Vidéo",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6240,
        2144
      ],
      "parameters": {
        "color": 5,
        "width": 332,
        "height": 192,
        "content": "## 🖼️ Image-to-Video Call\n\n**Purpose:** Sends raw prompt + image URL to fal.ai Sora 2 image endpoint.\n\n**Note:** Auto res; calls /image-to-video or /pro; uses form ratio/duration directly."
      },
      "typeVersion": 1
    },
    {
      "id": "f50b63a0-dee7-4783-bcff-8b5d5b75949b",
      "name": "Formulaire de saisie vidéo",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        5392,
        2448
      ],
      "webhookId": "45e6e98c-ff89-46c5-b143-c5d4c9dab16f",
      "parameters": {
        "options": {
          "appendAttribution": false
        },
        "formTitle": "Create a Video using Sora 2",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Prompt",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Aspect Ratio",
              "fieldOptions": {
                "values": [
                  {
                    "option": "9:16 (vertical)"
                  },
                  {
                    "option": "16:9 (Horizontal)"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "checkbox",
              "fieldLabel": "Model",
              "fieldOptions": {
                "values": [
                  {
                    "option": "sora-2"
                  },
                  {
                    "option": "sora-2-pro"
                  }
                ]
              },
              "requiredField": true,
              "limitSelection": "exact"
            },
            {
              "fieldType": "checkbox",
              "fieldLabel": "Lenght",
              "fieldOptions": {
                "values": [
                  {
                    "option": "4s"
                  },
                  {
                    "option": "8s"
                  },
                  {
                    "option": "12s"
                  }
                ]
              },
              "requiredField": true,
              "limitSelection": "exact"
            },
            {
              "fieldType": "file",
              "fieldLabel": "Image",
              "multipleFiles": false,
              "acceptFileTypes": ".jpg,.jpeg,.png"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "0c7ab4d0-5a34-41c1-9ea8-5a145056cee6",
      "name": "Affineur de prompt",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        5840,
        2592
      ],
      "parameters": {
        "text": "=User Query: {{ $json.Prompt }}\n\nApect Ratio: {{ $json['Aspect Ratio'] }}\n\nLenght: {{ $json.Lenght[0] }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an expert AI video prompt engineer specializing in OpenAI's Sora 2 video generation model. Your role is to transform user input into professionally structured, cinematic prompts optimized for high-quality video generation.\n\n## Core Principles\n\n1. **Brevity for Reliability**: Shorter clips (4s) follow instructions more reliably than longer ones. Recommend 4s duration unless user specifically needs longer content.\n\n2. **Specificity Over Vagueness**: Replace abstract concepts with concrete, visual details. Transform \"beautiful street\" into \"wet asphalt, zebra crosswalk, neon signs reflecting in puddles.\"\n\n3. **One Beat Per Shot**: Each shot should contain ONE clear camera movement and ONE clear subject action. Avoid cramming multiple complex actions into a single clip.\n\n4. **Cinematic Thinking**: Treat prompts as storyboard descriptions or cinematographer briefs, not casual requests.\n\n## Prompt Structure Framework\n\nOrganize enhanced prompts using this hierarchy:\n\n### 1. Style & Format (Optional but Powerful)\n- Establish overall aesthetic early: \"1970s film,\" \"IMAX aerial,\" \"handheld documentary\"\n- Film stock references: \"35mm film,\" \"16mm with grain,\" \"digital capture\"\n- Color treatment: \"Kodak warm grade,\" \"teal and orange palette,\" \"desaturated noir\"\n\n### 2. Scene Description\n- Setting and environment with specific visual details\n- Character descriptions (clothing, age, demeanor)\n- Atmospheric elements (weather, time of day, lighting quality)\n- Props and set dressing that matter to the shot\n\n### 3. Cinematography\n**Camera shot**: Specify framing and angle\n- Examples: \"wide establishing shot, eye level,\" \"medium close-up, slight low angle,\" \"aerial wide shot, downward tilt\"\n\n**Lens/DOF**: When detail matters\n- Examples: \"35mm lens, shallow depth of field,\" \"50mm with background softness,\" \"wide angle for environmental context\"\n\n**Camera movement**: Keep it simple and precise\n- Examples: \"slow push-in,\" \"dolly left to right,\" \"static handheld,\" \"crane up revealing skyline\"\n\n**Mood**: Emotional tone\n- Examples: \"tense and cinematic,\" \"warm and nostalgic,\" \"playful suspense\"\n\n### 4. Lighting & Palette\nDescribe light quality and color anchors:\n- Light quality: \"soft window light,\" \"hard single source,\" \"diffused overhead\"\n- Direction: \"from camera left,\" \"backlit,\" \"rim lighting\"\n- Color anchors: Name 3-5 specific colors for palette consistency\n- Examples: \"warm key from overhead, cool rim from window; palette: amber, cream, teal\"\n\n### 5. Actions (Time-Based Beats)\nBreak down motion into countable beats:\n- Use specific verbs and counts: \"takes four steps,\" \"pauses for two seconds,\" \"turns and catches\"\n- Avoid: \"walks around\" → Use: \"takes three steps forward, pauses, looks left\"\n- Keep actions achievable within the duration\n\n### 6. Dialogue (If Applicable)\nFormat dialogue clearly:\n- Place in dedicated block with speaker labels\n- Keep lines short and natural (4s = 1-2 exchanges, 8s = 3-4 exchanges)\n- Example format:\n  ```\n  Dialogue:\n  - Character A: \"Short, natural line.\"\n  - Character B: \"Response that fits timing.\"\n  ```\n\n### 7. Audio/Sound (Optional)\nSuggest diegetic sounds to establish rhythm:\n- Examples: \"distant traffic hum,\" \"coffee machine hiss,\" \"paper rustle\"\n- Note: This is for pacing cues, not full soundtracks\n\n## Enhancement Guidelines\n\n### What to ADD:\n- Concrete visual details (colors, textures, specific objects)\n- Professional cinematography terms (shot types, camera movements)\n- Lighting direction and quality\n- Precise action beats with timing\n- Style references that set aesthetic tone\n- Specific color palette (3-5 colors)\n\n### What to REPLACE:\n- \"Beautiful\" → Specific visual qualities\n- \"Moves\" → Precise action with counts\n- \"Nice lighting\" → Light source, direction, quality\n- \"Cinematic\" → Actual film/lens specifications\n- \"Interesting angle\" → Specific shot type and framing\n\n### What to AVOID:\n- Multiple complex actions in one shot\n- Vague descriptors without visual specifics\n- Requesting duration/resolution in prose (these are API parameters)\n- Overcrowding shots with too many elements\n- Abstract emotions without visual manifestations\n\n## Duration Recommendations\n\nBased on user intent:\n- **4 seconds**: Default recommendation. Most reliable for instruction following. Best for single clear action.\n- **8 seconds**: When user needs slightly more development. Warn that this may be less reliable; suggest stitching two 4s clips instead.\n- **12 seconds**: Only when explicitly requested. Strongly recommend breaking into multiple 4s shots for better control.\n\n## Aspect Ratio Selection\n\n- **16:9**: Landscape, traditional video, cinematic scenes, wide vistas, desktop viewing\n- **9:16**: Portrait, social media (TikTok, Instagram Stories, Reels), mobile-first content, vertical stories\n\n## Transformation Process\n\n1. **Analyze** user input for core intent\n2. **Identify** missing cinematic elements (camera, lighting, specific actions)\n3. **Expand** vague descriptions into concrete visuals\n4. **Structure** using the framework above\n5. **Optimize** for the chosen duration\n6. **Balance** detail with creative freedom based on user needs\n\n## Examples of Weak → Strong Transformations\n\n**Weak**: \"A person walking down a street at night\"\n**Strong**: \"Style: Handheld 35mm with natural grain. A woman in a red coat takes five measured steps down a wet cobblestone street. Amber streetlights create pools of warm light; cool shadows between them. Camera: medium tracking shot, following from behind at shoulder level. Mood: solitary, urban noir. Lighting: practical streetlights only; reflections in puddles.\"\n\n**Weak**: \"Make it look cinematic\"\n**Strong**: \"Camera: wide shot, slow dolly-in. Lens: 40mm spherical with shallow DOF. Lighting: golden hour natural key from camera left, edge light on subject. Palette: warm amber, deep teal, cream. Mood: nostalgic, intimate.\"\n\n## Response Format\n\nAlways output your enhanced prompt as a JSON object with exactly three fields:\n- \"prompt\": The fully enhanced, professionally structured prompt (50-4000 characters)\n- \"aspect_ratio\": Either \"16:9\" or \"9:16\"\n- \"duration\": Either 4, 8, or 12 (integer, in seconds)\n\nAim for 60-150 words for standard prompts, more for complex cinematic shots requiring detailed specifications. Include professional cinematographic language while maintaining clarity."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "2cfdf665-263a-441a-abef-07136a766458",
      "name": "Analyseur de sortie JSON",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        5984,
        2768
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Sora2VideoGenerationRequest\",\n  \"description\": \"Simplified schema for Sora 2 video generation with enhanced prompts\",\n  \"type\": \"object\",\n  \"required\": [\"prompt\", \"aspect_ratio\", \"duration\"],\n  \"properties\": {\n    \"prompt\": {\n      \"type\": \"string\",\n      \"description\": \"The fully enhanced, professionally structured prompt optimized for Sora 2 video generation with cinematography details, specific actions, lighting, and visual specifics\",\n      \"minLength\": 50,\n      \"maxLength\": 4000\n    },\n    \"aspect_ratio\": {\n      \"type\": \"string\",\n      \"enum\": [\"16:9\", \"9:16\"],\n      \"description\": \"Video aspect ratio. 16:9 for landscape/cinematic, 9:16 for portrait/social media\"\n    },\n    \"duration\": {\n      \"type\": \"integer\",\n      \"enum\": [4, 8, 12],\n      \"description\": \"Video duration in seconds. 4s is most reliable, 8s and 12s may have reduced instruction-following accuracy\"\n    }\n  }\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e857b653-7894-43d8-8598-8d6998076a65",
      "name": "Téléchargement d'image temporaire",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        5888,
        2320
      ],
      "parameters": {
        "url": "=https://tmpfiles.org/api/v1/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "Image"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e8760386-b433-473d-9099-bb2f03c7c3aa",
      "name": "Appel Texte-vers-Vidéo",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        6144,
        2592
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/sora-2/text-to-video{{ $('Video Input Form').item.json.Model[0] === 'sora-2-pro' ? '/pro' : '' }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": \"{{ JSON.stringify($('Prompt Refiner').item.json.output.prompt.replaceAll(/\\\\n/g, '')).slice(1, -1) }}\",\n  \"resolution\": \"720p\",\n  \"aspect_ratio\": \"{{ $('Prompt Refiner').item.json.output.aspect_ratio }}\",\n  \"duration\": {{ $('Prompt Refiner').item.json.output.duration }}\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "KvEry5tdcrr9vqqw",
          "name": "Vapi - Zephoric"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2d84b59f-4c4e-4fac-968a-81eb6482c04e",
      "name": "Routeur de mode d'entrée",
      "type": "n8n-nodes-base.switch",
      "position": [
        5600,
        2448
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Image to Video",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "dfdd231a-d2f6-4973-a068-ac13f2bbd506",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.Image.filename }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Text to Video ",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "68ac0648-f33e-4394-805d-a8a9b788f1df",
                    "operator": {
                      "type": "string",
                      "operation": "empty",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.Image.filename }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "eef5e174-4d2a-450f-8bac-dd343865ad6b",
      "name": "Appel Image-vers-Vidéo",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        6064,
        2320
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/sora-2/image-to-video{{ $('Video Input Form').item.json.Model[0] === 'sora-2-pro' ? '/pro' : '' }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": \"{{ JSON.stringify($('Video Input Form').item.json.Prompt.replaceAll(/\\\\n/g, '')).slice(1, -1) }}\",\n  \"resolution\": \"auto\",\n  \"aspect_ratio\": \"{{ $('Video Input Form').item.json['Aspect Ratio'].replaceAll(' (vertical)', '').replaceAll(' (Horizontal)', '') }}\",\n  \"duration\": {{ $('Video Input Form').item.json.Lenght[0].replaceAll('s', '') }},\n  \"image_url\": \"{{ $json.data.url.replaceAll('.org/', '.org/dl/') }}\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "KvEry5tdcrr9vqqw",
          "name": "Vapi - Zephoric"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c07d5074-c4b7-4f43-a0d7-f26e2cd37137",
      "name": "Attente 60 secondes",
      "type": "n8n-nodes-base.wait",
      "position": [
        6336,
        2416
      ],
      "webhookId": "caad73e3-58d8-4fbd-a3e9-c42424f2d1ee",
      "parameters": {
        "amount": 60
      },
      "typeVersion": 1.1
    },
    {
      "id": "557e1785-4e6c-4f2e-a9a4-3098b1d638cb",
      "name": "Vérification de statut",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        6544,
        2416
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/sora-2/requests/{{ $json.request_id }}/status",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "KvEry5tdcrr9vqqw",
          "name": "Vapi - Zephoric"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "320c2ee0-767d-4106-a605-b03bd1a80631",
      "name": "Routeur de statut",
      "type": "n8n-nodes-base.switch",
      "position": [
        6752,
        2416
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Done",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "d8b8dbdc-1ad9-4ab9-8b2d-e76fd5db0899",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "COMPLETED"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Progress",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "9c10982c-5f8c-4eec-9b8a-f4b42e99ecf9",
                    "operator": {
                      "type": "string",
                      "operation": "notEquals"
                    },
                    "leftValue": "={{ $json.status }}",
                    "rightValue": "COMPLETED"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "cfa44af4-e910-40cf-b581-1acee757871d",
      "name": "Récupération de la vidéo",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        6944,
        2400
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/sora-2/requests/{{ $json.request_id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "KvEry5tdcrr9vqqw",
          "name": "Vapi - Zephoric"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6ce27f08-cae8-4a9b-bac3-2e01fa31c864",
      "name": "Redirection vidéo",
      "type": "n8n-nodes-base.form",
      "position": [
        7152,
        2400
      ],
      "webhookId": "7b9192c7-c2ff-47b1-b893-bfbea42dd268",
      "parameters": {
        "options": {},
        "operation": "completion",
        "redirectUrl": "={{ $json.video.url }}",
        "respondWith": "redirect"
      },
      "typeVersion": 2.3
    },
    {
      "id": "d110e220-883b-4e3f-bbda-cd195ddf23dd",
      "name": "Note d'aperçu 8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4528,
        1984
      ],
      "parameters": {
        "color": 4,
        "width": 696,
        "height": 1184,
        "content": "# 🎬 Sora 2 Video Generator via Fal with GPT-5 Refinement\n\n## 📋 What This Template Does\nGenerate videos using OpenAI's Sora 2 via fal.ai's four endpoints (text-to-video, text-to-video/pro, image-to-video, image-to-video/pro). Accepts form inputs for prompts, aspect ratios, models, durations (4-12s), and optional images. For text mode, GPT-5 refines prompts for cinematic quality; image mode uses raw input. Polls status asynchronously and redirects to the final video.\n\n## 🔧 Prerequisites\n- n8n with HTTP Request and LangChain nodes\n- fal.ai account\n- OpenAI account (GPT-5 access)\n\n## 🔑 Required Credentials\n\n### fal.ai API Setup\n1. fal.ai → Dashboard → API Keys\n2. Generate key with sora-2 permissions\n3. n8n: Header Auth (\"fal.ai\", Header: \"Authorization\", Value: \"Key [Your Key]\")\n\n### OpenAI API Setup\n1. platform.openai.com → API Keys → Create secret key\n2. n8n: OpenAI API credential (paste key, select GPT-5)\n\n## ⚙️ Configuration Steps\n1. Import JSON (Settings → Import)\n2. Assign creds to HTTP/LLM nodes\n3. Activate—use form URL from trigger\n4. Test prompt; check executions\n5. Tune polling for longer clips\n\n## 🎯 Use Cases\n- Social: 9:16 Reels from refined text (e.g., product anims)\n- Marketing: Image-to-8s promos (e.g., logo intros)\n- Education: 4s explainers (e.g., science demos)\n- Dev: Backend for app video gen\n\n## ⚠️ Troubleshooting\n- Quota fail: Check fal.ai usage; upgrade/add waits\n- Refinement error: Verify GPT-5 schema output\n- Image reject: JPG/PNG <10MB; test tmpfiles\n- Poll timeout: Bump wait to 120s; add retry IF"
      },
      "typeVersion": 1
    },
    {
      "id": "6dad83d5-6cb1-4dca-90a1-c12048b5b544",
      "name": "Note : Déclencheur de formulaire 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5248,
        2176
      ],
      "parameters": {
        "color": 6,
        "width": 332,
        "height": 192,
        "content": "## 📝 Video Input Form\n\n**Purpose:** Captures user prompt, ratio, model, duration, and optional image via web form.\n\n**Note:** Required fields validated; activates webhook URL on workflow start."
      },
      "typeVersion": 1
    },
    {
      "id": "6e91faf7-a3c5-48ce-94d6-a993ea8e5d8e",
      "name": "Note : Boucle d'interrogation 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6688,
        2640
      ],
      "parameters": {
        "color": 2,
        "width": 332,
        "height": 192,
        "content": "## ⏳ Status Polling Loop\n\n**Purpose:** Waits 60s, checks Sora status, loops until COMPLETED.\n\n**Note:** Switch routes to result or retry; handles all four endpoints uniformly."
      },
      "typeVersion": 1
    },
    {
      "id": "ad9eadd7-1e7f-4922-8ca7-6a673812ffd0",
      "name": "Modèle d'affinage",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        5840,
        2768
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "gpt-5"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "ymMvgDroJHalwvRf",
          "name": "OpenAI"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "557e1785-4e6c-4f2e-a9a4-3098b1d638cb": {
      "main": [
        [
          {
            "node": "320c2ee0-767d-4106-a605-b03bd1a80631",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ad9eadd7-1e7f-4922-8ca7-6a673812ffd0": {
      "ai_languageModel": [
        [
          {
            "node": "0c7ab4d0-5a34-41c1-9ea8-5a145056cee6",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "320c2ee0-767d-4106-a605-b03bd1a80631": {
      "main": [
        [
          {
            "node": "cfa44af4-e910-40cf-b581-1acee757871d",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "c07d5074-c4b7-4f43-a0d7-f26e2cd37137",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0c7ab4d0-5a34-41c1-9ea8-5a145056cee6": {
      "main": [
        [
          {
            "node": "e8760386-b433-473d-9099-bb2f03c7c3aa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cfa44af4-e910-40cf-b581-1acee757871d": {
      "main": [
        [
          {
            "node": "6ce27f08-cae8-4a9b-bac3-2e01fa31c864",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c07d5074-c4b7-4f43-a0d7-f26e2cd37137": {
      "main": [
        [
          {
            "node": "557e1785-4e6c-4f2e-a9a4-3098b1d638cb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f50b63a0-dee7-4783-bcff-8b5d5b75949b": {
      "main": [
        [
          {
            "node": "2d84b59f-4c4e-4fac-968a-81eb6482c04e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2d84b59f-4c4e-4fac-968a-81eb6482c04e": {
      "main": [
        [
          {
            "node": "e857b653-7894-43d8-8598-8d6998076a65",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "0c7ab4d0-5a34-41c1-9ea8-5a145056cee6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e857b653-7894-43d8-8598-8d6998076a65": {
      "main": [
        [
          {
            "node": "eef5e174-4d2a-450f-8bac-dd343865ad6b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2cfdf665-263a-441a-abef-07136a766458": {
      "ai_outputParser": [
        [
          {
            "node": "0c7ab4d0-5a34-41c1-9ea8-5a145056cee6",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "e8760386-b433-473d-9099-bb2f03c7c3aa": {
      "main": [
        [
          {
            "node": "c07d5074-c4b7-4f43-a0d7-f26e2cd37137",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "eef5e174-4d2a-450f-8bac-dd343865ad6b": {
      "main": [
        [
          {
            "node": "c07d5074-c4b7-4f43-a0d7-f26e2cd37137",
            "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é - Création de contenu, IA Multimodale

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

Générer des paroles et de la musique à partir de invites textuelles avec OpenAI et Fal.ai Minimax
Utiliser OpenAI et Fal.ai Minimax pour générer des paroles et de la musique à partir de invites textuelles
Set
Wait
Switch
+
Set
Wait
Switch
17 NœudsDaniel Nkencho
Création de contenu
Version professionnelle de l'automatisation de blog WordPress (recherche approfondie) v2.1 sur le marché
Automatisation de la création de blog optimisé pour le SEO avec GPT-4o, Perplexity AI et support multilingue
If
Set
Xml
+
If
Set
Xml
125 NœudsDaniel Ng
Création de contenu
Générateur de VEO3 VSL : workflow vidéo automatisé pour Meta
Générez des lettres de vente vidéo IA avec Google VEO3, les sous-titres de Creatomate et les fonctionnalités de publication Facebook
Jwt
Set
Wait
+
Jwt
Set
Wait
30 NœudsLukaszB
Création de contenu
Processus de scraping et de contact Apollo 1 ✅
Génération automatisée de prospects avec Apollo, analyse IA et suivi par e-mail programmé
If
Code
Wait
+
If
Code
Wait
39 NœudsDeniz
Création de contenu
Créer des campagnes publicitaires Meta générées par l'IA à partir d'URL de produits en utilisant OpenAI et Firecrawl
Créer des campagnes publicitaires Meta générées par l'IA à partir d'URL de produits avec OpenAI et Firecrawl
If
Set
Code
+
If
Set
Code
40 NœudsAdam Crafts
Création de contenu
Créer de vrais publicités vidéo UGC en synchronisation labiale avec GPT-4o, ElevenLabs et WaveSpeed
Créer des publicités vidéo UGC authentiques avec synchronisation labiale GPT-4o, ElevenLabs et WaveSpeed
If
Set
Wait
+
If
Set
Wait
38 NœudsMuhammad Farooq Iqbal
Création de contenu
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds22
Catégorie2
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Daniel Nkencho

Daniel Nkencho

@daniel-automates

AI Automation Consultant | Helping Business Owners Implement AI Systems for Growth and Lead Gen

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34