(Non publié) Conversion de projections orthogonales en trois vues en vidéo dynamique

Intermédiaire

Ceci est unDesign, AIworkflow d'automatisation du domainecontenant 13 nœuds.Utilise principalement des nœuds comme If, Set, Code, Wait, HttpRequest, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Convertir des vues en trois dimensions en vidéo 360° avec GPT-4o-Image et Kling API

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "KWFLpcJytH7qjheD",
  "meta": {
    "instanceId": "1e003a7ea4715b6b35e9947791386a7d07edf3b5bf8d4c9b7ee4fdcbec0447d7"
  },
  "name": "(Not published) Three-View Orthographic Projection to Dynamic Video Conversion",
  "tags": [],
  "nodes": [
    {
      "id": "442e12af-531d-4000-9e74-d9bfaa3515ca",
      "name": "Lors du clic sur 'Test workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1960,
        -160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "39c46540-7dee-4237-921e-3b6bd9821302",
      "name": "Générer une vidéo Kling",
      "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": "Obtenir la vidéo Kling",
      "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": "Vérifier l'état de la tâche",
      "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": "Obtenir la vidéo finale",
      "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 : Vue de face",
      "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 : Vue de côté",
      "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": "Obtenir l'URL de l'image de face",
      "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": "Obtenir l'URL de l'image de côté",
      "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": "Vérifier l'état de génération de la vue de face",
      "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": "Vérifier l'état de génération de la vue de côté",
      "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": "Attendre la génération de la vidéo",
      "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": "Paramètres de base",
      "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": {
    "9ed98c97-6a73-4f74-9cbd-5e19179aba9d": {
      "main": [
        [
          {
            "node": "adae02a4-dedc-4415-9409-88193090e2dc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cfc726ee-e6f2-4016-a4fe-7123a4520fda": {
      "main": [
        [
          {
            "node": "90d1cc4f-3d74-4a2a-9b02-3255ec9fc553",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "90d1cc4f-3d74-4a2a-9b02-3255ec9fc553": {
      "main": [
        [
          {
            "node": "6931c1b2-c4f4-47d6-9ff4-e6019e465c3e",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "7287b4a9-8309-4984-8328-ecc569d4aa00",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "39c46540-7dee-4237-921e-3b6bd9821302": {
      "main": [
        [
          {
            "node": "cfc726ee-e6f2-4016-a4fe-7123a4520fda",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7287b4a9-8309-4984-8328-ecc569d4aa00": {
      "main": [
        [
          {
            "node": "cfc726ee-e6f2-4016-a4fe-7123a4520fda",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "63320b08-62bc-4faf-a3ff-4069785c41f5": {
      "main": [
        [
          {
            "node": "b5b41a20-aba1-4fbb-aaf9-47d18a38a727",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b5b41a20-aba1-4fbb-aaf9-47d18a38a727": {
      "main": [
        [
          {
            "node": "395dbc5c-89e7-4eb7-a726-617250ebd02f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "adae02a4-dedc-4415-9409-88193090e2dc": {
      "main": [
        [
          {
            "node": "8fd1fb74-a149-4af6-9da5-e0dc3daa91c9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8fd1fb74-a149-4af6-9da5-e0dc3daa91c9": {
      "main": [
        [
          {
            "node": "6428385c-19ac-478c-af87-904de1e35b61",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "442e12af-531d-4000-9e74-d9bfaa3515ca": {
      "main": [
        [
          {
            "node": "9ed98c97-6a73-4f74-9cbd-5e19179aba9d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "395dbc5c-89e7-4eb7-a726-617250ebd02f": {
      "main": [
        [
          {
            "node": "63320b08-62bc-4faf-a3ff-4069785c41f5",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "39c46540-7dee-4237-921e-3b6bd9821302",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6428385c-19ac-478c-af87-904de1e35b61": {
      "main": [
        [
          {
            "node": "adae02a4-dedc-4415-9409-88193090e2dc",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "63320b08-62bc-4faf-a3ff-4069785c41f5",
            "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é ?

Intermédiaire - Design, Intelligence Artificielle

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.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds13
Catégorie2
Types de nœuds6
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34