Workflow n8n

Automatisation vidéo avec n8n : conversion dynamique d'orthographiques

Ce workflow n8n permet de transformer des projections orthographiques en vidéos dynamiques, offrant ainsi une solution innovante pour les professionnels de la création visuelle. Idéal pour les designers et les studios d'animation, ce processus automatisé facilite la génération de contenus vidéo à partir d'images statiques, réduisant ainsi le temps de production. Le workflow débute par un déclencheur manuel, permettant à l'utilisateur de tester le flux à tout moment. Ensuite, il envoie une requête HTTP pour générer une vidéo Kling, suivie d'une autre requête pour récupérer la vidéo générée. Une vérification de l'état de la tâche est effectuée pour s'assurer que la vidéo est prête. Les vues avant et latérale sont générées via des appels API à GPT-4o, et les URL des images correspondantes sont extraites à l'aide de scripts JavaScript. Une attente est intégrée pour garantir que la vidéo est complètement générée avant de passer à l'étape finale. Ce workflow d'automatisation n8n permet non seulement de gagner du temps, mais aussi d'améliorer la qualité des productions vidéo, rendant le processus plus efficace et moins sujet aux erreurs humaines.

Tags clés :automatisationvidéon8ncréation de contenuAPI
Catégorie: Manual · Tags: automatisation, vidéo, n8n, création de contenu, API0

Workflow n8n vidéo, création de contenu : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n vidéo, création de contenu : détail des nœuds

  • When clicking ‘Test workflow’

    Déclenche le workflow manuellement lorsque l'utilisateur clique sur 'Test workflow'.

  • Generate Kling Video

    Envoie une requête HTTP pour générer une vidéo Kling avec les paramètres spécifiés.

  • Get Kling Video

    Effectue une requête HTTP pour récupérer une vidéo Kling existante.

  • Verify Task Status

    Vérifie le statut d'une tâche en utilisant des conditions définies.

  • Get Final Video

    Exécute un code JavaScript pour obtenir la vidéo finale.

  • GPT-4o Generator: Front View

    Envoie une requête HTTP pour générer une vue de face avec GPT-4o.

  • GPT-4o Generator: Side View

    Envoie une requête HTTP pour générer une vue de côté avec GPT-4o.

  • Get Image URL of Front Image

    Exécute un code JavaScript pour obtenir l'URL de l'image de la vue de face.

  • Get Image URL of Side Image

    Exécute un code JavaScript pour obtenir l'URL de l'image de la vue de côté.

  • Verify Generation Status of Front View

    Vérifie le statut de génération de la vue de face en utilisant des conditions définies.

  • Verify Generation Status of Side View

    Vérifie le statut de génération de la vue de côté en utilisant des conditions définies.

  • Wait for Video Generation

    Met en pause le workflow pendant un certain temps en attendant la génération de la vidéo.

  • Basic Params

    Définit des paramètres de base pour le workflow, incluant le mode et les options.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "KWFLpcJytH7qjheD",
  "meta": {
    "instanceId": "1e003a7ea4715b6b35e9947791386a7d07edf3b5bf8d4c9b7ee4fdcbec0447d7"
  },
  "name": "(Not published) Three-View Orthographic Projection to Dynamic Video Conversion",
  "tags": [],
  "nodes": [
    {
      "id": "442e12af-531d-4000-9e74-d9bfaa3515ca",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1960,
        -160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "39c46540-7dee-4237-921e-3b6bd9821302",
      "name": "Generate Kling Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -400,
        0
      ],
      "parameters": {
        "url": "https://api.piapi.ai/api/v1/task",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"model\": \"kling\",\n    \"task_type\": \"video_generation\",\n    \"input\": {\n        \"version\": \"1.6\",\n        \"mode\": \"pro\",\n        \"image_url\": \"{{ $('Get Image URL of Front Image').item.json.image_url }}\",\n        \"image_tail_url\": \"{{ $json.image_url }}\",\n        \"duration\":5,\n        \"prompt\": \"The character rotates smoothly, stay original facial expression. Apply anticlockwise rotation\"\n    }\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "={{ $('Basic Params').item.json[\"x-api-key\"] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "cfc726ee-e6f2-4016-a4fe-7123a4520fda",
      "name": "Get Kling Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -220,
        0
      ],
      "parameters": {
        "url": "=https://api.piapi.ai/api/v1/task/{{ $json.data.task_id }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-api-key",
              "value": "72858adea87ad16865d5b0a24c3d9b9f58a6e7b1a8a8a8a0d6b81a9f3a9812f3"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "90d1cc4f-3d74-4a2a-9b02-3255ec9fc553",
      "name": "Verify Task Status",
      "type": "n8n-nodes-base.if",
      "position": [
        -40,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f36fa981-22e0-46db-af8c-c2ac55242c27",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.status }}",
              "rightValue": "completed"
            },
            {
              "id": "637ea756-1ad9-434c-b6b2-b100ee4c3cad",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6931c1b2-c4f4-47d6-9ff4-e6019e465c3e",
      "name": "Get Final Video",
      "type": "n8n-nodes-base.code",
      "position": [
        260,
        140
      ],
      "parameters": {
        "jsCode": "// Process the entire response\nreturn {\n  video_url: $input.all()[0].json.data.output.video_url,\n  watermark_free_url: $input.all()[0].json.data.output.works[0].video.resource_without_watermark\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "adae02a4-dedc-4415-9409-88193090e2dc",
      "name": "GPT-4o Generator: Front View",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1560,
        20
      ],
      "parameters": {
        "url": "https://api.piapi.ai/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"model\": \"gpt-4o-image-preview\",\n    \"messages\": [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": \"{{ $json.image_url }}\"\n                    }\n                },\n                {\n                    \"type\": \"text\",\n                    \"text\": \"Capture front view of the image, then split them into two separate images for me.\"\n                }\n            ]\n        }\n    ],\n    \"stream\": true\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $json[\"x-api-key\"] }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "fsJeCNd9BkJ1CIrt",
          "name": "Header Auth account 2"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "63320b08-62bc-4faf-a3ff-4069785c41f5",
      "name": "GPT-4o Generator: Side View",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1000,
        320
      ],
      "parameters": {
        "url": "https://api.piapi.ai/v1/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"model\": \"gpt-4o-image-preview\",\n    \"messages\": [\n        {\n            \"role\": \"user\",\n            \"content\": [\n                {\n                    \"type\": \"image_url\",\n                    \"image_url\": {\n                        \"url\": \"{{ $('Basic Params').item.json.image_url }}\"\n                    }\n                },\n                {\n                    \"type\": \"text\",\n                    \"text\": \"Generate side view of the image\"\n                }\n            ]\n        }\n    ],\n    \"stream\": true\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Basic Params').item.json[\"x-api-key\"] }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8fd1fb74-a149-4af6-9da5-e0dc3daa91c9",
      "name": "Get Image URL of Front Image",
      "type": "n8n-nodes-base.code",
      "position": [
        -1380,
        20
      ],
      "parameters": {
        "jsCode": "const chunks = $input.first().json.data.split('\\n\\n');\n\nlet imageUrl = null;\n\nfor (let i = chunks.length - 1; i >= 0; i--) {\n    const chunk = chunks[i];\n    \n    if (!chunk.startsWith('data: ')) continue;\n    \n    try {\n        const jsonStr = chunk.substring(6); \n        if (jsonStr.trim() === '[DONE]') continue;\n        \n        const data = JSON.parse(jsonStr);\n        \n\n        if (data.choices && data.choices[0].delta.content) {\n            const content = data.choices[0].delta.content;\n            const urlMatch = content.match(/!\\[.*?\\]\\((https?:\\/\\/[^\\s]+)\\)/);\n            \n            if (urlMatch && urlMatch[1]) {\n                imageUrl = urlMatch[1];\n                break;\n            }\n        }\n    } catch (e) {\n        continue;\n    }\n}\n\nreturn {\n    image_url: imageUrl,\n    finish_reason: imageUrl ? \"success\" : \"not_found\"\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "b5b41a20-aba1-4fbb-aaf9-47d18a38a727",
      "name": "Get Image URL of Side Image",
      "type": "n8n-nodes-base.code",
      "position": [
        -800,
        320
      ],
      "parameters": {
        "jsCode": "const chunks = $input.first().json.data.split('\\n\\n');\n\nlet imageUrl = null;\n\n// 反向遍历 chunks (从最新数据开始检查)\nfor (let i = chunks.length - 1; i >= 0; i--) {\n    const chunk = chunks[i];\n    \n    if (!chunk.startsWith('data: ')) continue;\n    \n    try {\n        const jsonStr = chunk.substring(6); // 去掉 \"data: \" 前缀\n        if (jsonStr.trim() === '[DONE]') continue;\n        \n        const data = JSON.parse(jsonStr);\n        \n        // 检查是否包含图片标记(Markdown 图片语法)\n        if (data.choices && data.choices[0].delta.content) {\n            const content = data.choices[0].delta.content;\n            const urlMatch = content.match(/!\\[.*?\\]\\((https?:\\/\\/[^\\s]+)\\)/);\n            \n            if (urlMatch && urlMatch[1]) {\n                imageUrl = urlMatch[1];\n                break;\n            }\n        }\n    } catch (e) {\n        continue;\n    }\n}\n\nreturn {\n    image_url: imageUrl,\n    finish_reason: imageUrl ? \"success\" : \"not_found\"\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "6428385c-19ac-478c-af87-904de1e35b61",
      "name": "Verify Generation Status of Front View",
      "type": "n8n-nodes-base.if",
      "position": [
        -1160,
        20
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "08a2ebe6-dc95-4b8a-ada1-1173645cc3f4",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.finish_reason }}",
              "rightValue": "not_found"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "395dbc5c-89e7-4eb7-a726-617250ebd02f",
      "name": "Verify Generation Status of Side View",
      "type": "n8n-nodes-base.if",
      "position": [
        -600,
        320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "08a2ebe6-dc95-4b8a-ada1-1173645cc3f4",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.finish_reason }}",
              "rightValue": "not_found"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "7287b4a9-8309-4984-8328-ecc569d4aa00",
      "name": "Wait for Video Generation",
      "type": "n8n-nodes-base.wait",
      "position": [
        -20,
        240
      ],
      "webhookId": "c7b2590d-96a3-4c7c-8821-3023fead254b",
      "parameters": {
        "amount": 20
      },
      "typeVersion": 1.1
    },
    {
      "id": "9ed98c97-6a73-4f74-9cbd-5e19179aba9d",
      "name": "Basic Params",
      "type": "n8n-nodes-base.set",
      "position": [
        -1760,
        -160
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"x-api-key\":\"\",\n  \"image_url\": \"\"\n}\n"
      },
      "typeVersion": 3.4
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "71081f7e-7805-497b-9167-eba0b3a7c0e4",
  "connections": {
    "Basic Params": {
      "main": [
        [
          {
            "node": "GPT-4o Generator: Front View",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Kling Video": {
      "main": [
        [
          {
            "node": "Verify Task Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Task Status": {
      "main": [
        [
          {
            "node": "Get Final Video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait for Video Generation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Kling Video": {
      "main": [
        [
          {
            "node": "Get Kling Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Video Generation": {
      "main": [
        [
          {
            "node": "Get Kling Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4o Generator: Side View": {
      "main": [
        [
          {
            "node": "Get Image URL of Side Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Image URL of Side Image": {
      "main": [
        [
          {
            "node": "Verify Generation Status of Side View",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4o Generator: Front View": {
      "main": [
        [
          {
            "node": "Get Image URL of Front Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Image URL of Front Image": {
      "main": [
        [
          {
            "node": "Verify Generation Status of Front View",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Basic Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Generation Status of Side View": {
      "main": [
        [
          {
            "node": "GPT-4o Generator: Side View",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate Kling Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Generation Status of Front View": {
      "main": [
        [
          {
            "node": "GPT-4o Generator: Front View",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "GPT-4o Generator: Side View",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n vidéo, création de contenu : pour qui est ce workflow ?

Ce workflow s'adresse aux studios d'animation, aux graphistes et aux entreprises de création de contenu qui cherchent à automatiser la conversion d'images en vidéos. Les utilisateurs devraient avoir des compétences techniques de base pour interagir avec des API et des outils d'automatisation.

Workflow n8n vidéo, création de contenu : problème résolu

Ce workflow résout le problème de la lenteur et de la complexité de la création de vidéos à partir d'images statiques. En automatisant le processus, il élimine les frustrations liées à la génération manuelle de vidéos, réduit les risques d'erreurs et permet aux utilisateurs de se concentrer sur des tâches plus créatives. Le résultat est une production vidéo rapide et efficace, avec une qualité améliorée.

Workflow n8n vidéo, création de contenu : étapes du workflow

Étape 1 : Le flux est déclenché manuellement par l'utilisateur.

  • Étape 1 : Une requête HTTP est envoyée pour générer une vidéo Kling.
  • Étape 2 : Une autre requête HTTP est effectuée pour récupérer la vidéo générée.
  • Étape 3 : Le statut de la tâche est vérifié pour s'assurer que la vidéo est prête.
  • Étape 4 : Les vues avant et latérale sont générées via des appels API à GPT-4o.
  • Étape 5 : Les URL des images correspondantes sont extraites à l'aide de scripts JavaScript.
  • Étape 6 : Une attente est intégrée pour garantir que la vidéo est complètement générée avant de passer à l'étape finale.

Workflow n8n vidéo, création de contenu : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier les paramètres de l'URL dans les nœuds HTTP pour pointer vers vos propres API de génération vidéo. Assurez-vous également d'ajuster les scripts JavaScript pour extraire les données spécifiques dont vous avez besoin. Si vous souhaitez intégrer d'autres outils, vous pouvez ajouter des nœuds supplémentaires pour envoyer les vidéos générées vers des plateformes de partage ou de stockage. Pensez à sécuriser vos appels API avec des authentifications appropriées et à surveiller le flux pour détecter d'éventuelles erreurs.