{
  "id": "ehdJCsJyErJC1jtK",
  "name": "7. Generate 3D Models & Textures from Images with Hunyuan3D AI",
  "tags": [],
  "nodes": [
    {
      "id": "2f62f2a8-13d0-44d2-8b81-fedc9b2a703c",
      "name": "On clicking 'execute'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -272,
        -32
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "733f09b8-cbcb-40d1-a453-f181eafe0b56",
      "name": "Set API Key",
      "type": "n8n-nodes-base.set",
      "position": [
        -64,
        -32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "64cd57c7-2224-48a6-88df-c37b310f8eb3",
              "name": "replicate_api_key",
              "type": "string",
              "value": "YOUR_REPLICATE_API_KEY"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "84d49ec1-b81f-430f-977e-a246e70c7196",
      "name": "Create Prediction",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        176,
        -32
      ],
      "parameters": {
        "url": "https://api.replicate.com/v1/predictions",
        "method": "POST",
        "options": {
          "timeout": 60000
        },
        "jsonBody": "{\n  \"version\": \"70d0d816b74578a2ee5e7906284ab8bd26cf4f6a3fb7797dcd58059b803ae75f\",\n  \"input\": {\n    \"image\": \"https://example.com/input.other\",\n    \"seed\": 1234,\n    \"steps\": 50,\n    \"num_chunks\": 8000,\n    \"max_facenum\": 20000,\n    \"guidance_scale\": 7.5,\n    \"generate_texture\": true,\n    \"remove_background\": true\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Set API Key').item.json.replicate_api_key }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "db470338-596d-4b1e-b34a-d6559ee22fec",
      "name": "Extract Prediction ID",
      "type": "n8n-nodes-base.code",
      "position": [
        384,
        -32
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Extract prediction ID and initial status\\nconst prediction = $input.item.json;\\nconst predictionId = prediction.id;\\nconst initialStatus = prediction.status;\\n\\n// Store the prediction ID for polling\\nreturn {\\n  predictionId: predictionId,\\n  status: initialStatus,\\n  predictionUrl: `https://api.replicate.com/v1/predictions/${predictionId}`\\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "a92796bf-b794-4c3e-a277-00319cd5dc33",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        608,
        -32
      ],
      "parameters": {
        "unit": "seconds",
        "amount": 2
      },
      "typeVersion": 1
    },
    {
      "id": "05d9be59-6e59-4326-b897-c658e6cb5311",
      "name": "Check Prediction Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        832,
        -32
      ],
      "parameters": {
        "url": "={{ $json.predictionUrl }}",
        "options": {},
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "={{ 'Bearer ' + $('Set API Key').item.json.replicate_api_key }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0e8f8825-9556-4d68-b2ee-b7c71922b8f2",
      "name": "Check If Complete",
      "type": "n8n-nodes-base.if",
      "position": [
        1056,
        -32
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.status }}",
              "value2": "succeeded"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "91e21baf-7044-42f0-a899-49aca23f730d",
      "name": "Process Result",
      "type": "n8n-nodes-base.code",
      "position": [
        1296,
        -144
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Process the completed prediction\\nconst result = $input.item.json;\\n\\nreturn {\\n  status: result.status,\\n  output: result.output,\\n  metrics: result.metrics,\\n  created_at: result.created_at,\\n  completed_at: result.completed_at,\\n  model: 'ndreca/hunyuan3d-2.1-test',\\n  other_url: result.output\\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "2a4b07d5-0691-48e8-8247-84f604db01ca",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        -912
      ],
      "parameters": {
        "color": 2,
        "width": 438,
        "height": 1087,
        "content": "## \u26a1 **Section 1: Trigger & Setup**\n\n### \u2699\ufe0f **Nodes**\n\n1\ufe0f\u20e3 **On Clicking \u201cExecute\u201d**\n\n* **What it does:** Starts the workflow manually in n8n.\n* **Why it\u2019s useful:** Great for testing or one-off runs before automation.\n\n2\ufe0f\u20e3 **Set API Key**\n\n* **What it does:** Stores your **Replicate API Key**.\n* **Why it\u2019s useful:** Keeps authentication secure and reusable across HTTP nodes.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* No coding needed \u2014 just paste your API key once.\n* Easy to test: press **Execute**, and you\u2019re live.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f6f876d7-0419-4f67-97b9-eb343c390afb",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2112,
        -576
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "dbd692e5-b0d5-4652-adc6-893eeb6d2882",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2112,
        -240
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 4094,
        "content": "# Generate 3D Models & Textures from Images with Hunyuan3D AI\n\nThis workflow connects **n8n \u2192 Replicate API** to generate 3D-like outputs using the **ndreca/hunyuan3d-2.1-test** model. It handles everything: sending the request, waiting for processing, checking status, and returning results.\n\n---\n\n## \u26a1 **Section 1: Trigger & Setup**\n\n### \u2699\ufe0f **Nodes**\n\n1\ufe0f\u20e3 **On Clicking \u201cExecute\u201d**\n\n* **What it does:** Starts the workflow manually in n8n.\n* **Why it\u2019s useful:** Great for testing or one-off runs before automation.\n\n2\ufe0f\u20e3 **Set API Key**\n\n* **What it does:** Stores your **Replicate API Key**.\n* **Why it\u2019s useful:** Keeps authentication secure and reusable across HTTP nodes.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* No coding needed \u2014 just paste your API key once.\n* Easy to test: press **Execute**, and you\u2019re live.\n\n---\n\n## \ud83e\udd16 **Section 2: Send Job to Replicate**\n\n### \u2699\ufe0f **Nodes**\n\n3\ufe0f\u20e3 **Create Prediction (HTTP Request)**\n\n* **What it does:** Sends a **POST request** to Replicate\u2019s API with:\n\n  * Model version (`70d0d816...ae75f`)\n  * Input image URL\n  * Parameters like `steps`, `seed`, `generate_texture`, `remove_background`\n* **Why it\u2019s useful:** This kicks off the AI generation job on Replicate\u2019s servers.\n\n4\ufe0f\u20e3 **Extract Prediction ID (Code)**\n\n* **What it does:** Grabs the **prediction ID** from the API response and builds a status-check URL.\n* **Why it\u2019s useful:** Every job has a unique ID \u2014 this lets us track progress later.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* You don\u2019t need to worry about JSON parsing \u2014 the workflow extracts the ID automatically.\n* Everything is reusable if you run multiple generations.\n\n---\n\n## \u23f3 **Section 3: Poll Until Complete**\n\n### \u2699\ufe0f **Nodes**\n\n5\ufe0f\u20e3 **Wait (2s)**\n\n* **What it does:** Pauses for 2 seconds before checking the job status.\n* **Why it\u2019s useful:** Prevents spamming the API with too many requests.\n\n6\ufe0f\u20e3 **Check Prediction Status (HTTP Request)**\n\n* **What it does:** GET request to see if the job is finished.\n\n7\ufe0f\u20e3 **Check If Complete (IF Node)**\n\n* **What it does:**\n\n  * If `status = succeeded` \u2192 process results.\n  * If not \u2192 loops back to **Wait** and checks again.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* Handles waiting logic for you \u2014 no manual refreshing needed.\n* Keeps looping until the AI job is really done.\n\n---\n\n## \ud83d\udce6 **Section 4: Process the Result**\n\n### \u2699\ufe0f **Nodes**\n\n8\ufe0f\u20e3 **Process Result (Code)**\n\n* **What it does:** Extracts:\n\n  * `status`\n  * `output` (final generated file/URL)\n  * `metrics` (performance stats)\n  * Timestamps (`created_at`, `completed_at`)\n  * Model info\n* **Why it\u2019s useful:** Packages the response neatly for storage, email, or sending elsewhere.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* Get clean, structured data ready for saving or sending.\n* Can be extended easily: push output to **Google Drive, Notion, or Slack**.\n\n---\n\n## \ud83d\udcca **Workflow Overview**\n\n| Section               | What happens                      | Key Nodes                     | Benefit                           |\n| --------------------- | --------------------------------- | ----------------------------- | --------------------------------- |\n| \u26a1 Trigger & Setup     | Start workflow + set API key      | Manual Trigger, Set           | Easy one-click start              |\n| \ud83e\udd16 Send Job           | Send input & get prediction ID    | Create Prediction, Extract ID | Launches AI generation            |\n| \u23f3 Poll Until Complete | Waits + checks status until ready | Wait, Check Status, IF        | Automated loop, no manual refresh |\n| \ud83d\udce6 Process Result     | Collects output & metrics         | Process Result                | Clean result for next steps       |\n\n---\n\n## \ud83c\udfaf **Overall Benefits**\n\n\u2705 Fully automates Replicate model runs\n\u2705 Handles waiting, retries, and completion checks\n\u2705 Clean final output with status + metrics\n\u2705 Beginner-friendly \u2014 just add API key + input image\n\u2705 Extensible: connect results to Google Sheets, Gmail, Slack, or databases\n\n---\n\n\u2728 In short: This is a **no-code AI image-to-3D content generator** powered by **Replicate** and automated by **n8n**.\n\n---\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f6237bb8-0a60-4774-86fa-9dcde7311164",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -1088
      ],
      "parameters": {
        "color": 5,
        "width": 406,
        "height": 1263,
        "content": "## \ud83e\udd16 **Section 2: Send Job to Replicate**\n\n### \u2699\ufe0f **Nodes**\n\n3\ufe0f\u20e3 **Create Prediction (HTTP Request)**\n\n* **What it does:** Sends a **POST request** to Replicate\u2019s API with:\n\n  * Model version (`70d0d816...ae75f`)\n  * Input image URL\n  * Parameters like `steps`, `seed`, `generate_texture`, `remove_background`\n* **Why it\u2019s useful:** This kicks off the AI generation job on Replicate\u2019s servers.\n\n4\ufe0f\u20e3 **Extract Prediction ID (Code)**\n\n* **What it does:** Grabs the **prediction ID** from the API response and builds a status-check URL.\n* **Why it\u2019s useful:** Every job has a unique ID \u2014 this lets us track progress later.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* You don\u2019t need to worry about JSON parsing \u2014 the workflow extracts the ID automatically.\n* Everything is reusable if you run multiple generations.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ad7e485f-02c1-4716-a59d-d8624fef1473",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        -1024
      ],
      "parameters": {
        "color": 6,
        "width": 614,
        "height": 1199,
        "content": "## \u23f3 **Section 3: Poll Until Complete**\n\n### \u2699\ufe0f **Nodes**\n\n5\ufe0f\u20e3 **Wait (2s)**\n* **What it does:** Pauses for 2 seconds before checking the job status.\n* **Why it\u2019s useful:** Prevents spamming the API with too many requests.\n\n6\ufe0f\u20e3 **Check Prediction Status (HTTP Request)**\n\n* **What it does:** GET request to see if the job is finished.\n\n7\ufe0f\u20e3 **Check If Complete (IF Node)**\n\n* **What it does:**\n\n  * If `status = succeeded` \u2192 process results.\n  * If not \u2192 loops back to **Wait** and checks again.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* Handles waiting logic for you \u2014 no manual refreshing needed.\n* Keeps looping until the AI job is really done.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a34db2ed-539b-461f-99e3-8f5fdef3e750",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1200,
        -928
      ],
      "parameters": {
        "color": 3,
        "width": 310,
        "height": 1103,
        "content": "## \ud83d\udce6 **Section 4: Process the Result**\n\n### \u2699\ufe0f **Nodes**\n\n8\ufe0f\u20e3 **Process Result (Code)**\n\n* **What it does:** Extracts:\n\n  * `status`\n  * `output` (final generated file/URL)\n  * `metrics` (performance stats)\n  * Timestamps (`created_at`, `completed_at`)\n  * Model info\n* **Why it\u2019s useful:** Packages the response neatly for storage, email, or sending elsewhere.\n\n---\n\n\ud83d\udca1 **Beginner Benefit**\n\n* Get clean, structured data ready for saving or sending.\n* Can be extended easily: push output to **Google Drive, Notion, or Slack**.\n\n---\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "413b414a-ffc1-4e47-9272-4f1e1d136bd0",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Check Prediction Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set API Key": {
      "main": [
        [
          {
            "node": "Create Prediction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Complete": {
      "main": [
        [
          {
            "node": "Process Result",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Prediction": {
      "main": [
        [
          {
            "node": "Extract Prediction ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Prediction ID": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On clicking 'execute'": {
      "main": [
        [
          {
            "node": "Set API Key",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Prediction Status": {
      "main": [
        [
          {
            "node": "Check If Complete",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}