Batch-Verbesserung der Bildqualität von Porträtfotos mit Real-ESRGAN AI, Google Drive und Airtable

Fortgeschritten

Dies ist ein Content Creation, Multimodal AI-Bereich Automatisierungsworkflow mit 12 Nodes. Hauptsächlich werden Code, Airtable, GoogleDrive, HttpRequest, ManualTrigger und andere Nodes verwendet. Massenverbesserung der Bildqualität von Porträtfotos mit Real-ESRGAN AI, Google Drive und Airtable

Voraussetzungen
  • Airtable API Key
  • Google Drive API-Anmeldedaten
  • Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "9e721f64f4f5b8df656a4e0e1b663225a53ad0de7655a0878df9764d30956485",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "3a204dbb-8945-4fd1-8d09-9980a664128f",
      "name": "Bei Klick auf 'Workflow ausführen'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1024,
        -848
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1d9e1318-89b1-436f-abf1-0ea269f35644",
      "name": "Ordner erstellen",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -768,
        -848
      ],
      "parameters": {
        "name": "=< Folder Name >",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "resource": "folder"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "AKldzSoqKzegF8kI",
          "name": "Vertical Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "f44f1434-e002-4478-bbd5-498dff5a8e40",
      "name": "Über Elemente iterieren",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -64,
        -848
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "af7d12c5-fd15-4ed3-8bf4-11901dc21f89",
      "name": "In Google Drive hochladen",
      "type": "n8n-nodes-base.googleDrive",
      "onError": "continueRegularOutput",
      "position": [
        832,
        -848
      ],
      "parameters": {
        "name": "={{ 'Upscaled_Picture' + $now.format('yyyy-MM-dd_HH-mm-ss') + '.png' }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.gdriveUploadFolderId }}"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "AKldzSoqKzegF8kI",
          "name": "Vertical Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "6bab8092-e2a1-4640-acf5-07e4e15d656f",
      "name": "Hochskalierte Version herunterladen",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        384,
        -928
      ],
      "parameters": {
        "url": "={{ $json.output }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "444a3467-8416-4dfd-ad89-1be387ea4613",
      "name": "Porträt-URLs aus Airtable-Ausgabe extrahieren",
      "type": "n8n-nodes-base.code",
      "position": [
        -288,
        -848
      ],
      "parameters": {
        "jsCode": "// N8N Code Node - Extract Portrait Photo URLs from Airtable Output\n\n// Input data from Airtable\nconst airtableData = $input.all()[0].json;\n\n// Get Google Drive folder ID from previous node\nconst folderId = $node[\"Create folder\"].json.id;\n\n// Extract URLs from PortraitFotoAuswahl array\nconst portraitUrls = [];\n\nif (airtableData.PortraitFotoAuswahl && Array.isArray(airtableData.PortraitFotoAuswahl)) {\n airtableData.PortraitFotoAuswahl.forEach((item, index) => {\n   if (item.url) {\n     portraitUrls.push({\n       index: index,\n       url: item.url,\n       filename: item.filename || `portrait_${index}`,\n       size: item.size || null,\n       width: item.width || null,\n       height: item.height || null,\n       gdriveUploadFolderId: folderId\n     });\n   }\n });\n}\n\n// Return array of URLs with folder ID\nreturn portraitUrls.map(item => ({\n json: {\n   url: item.url,\n   index: item.index,\n   filename: item.filename,\n   size: item.size,\n   width: item.width,\n   height: item.height,\n   gdriveUploadFolderId: item.gdriveUploadFolderId\n }\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "5868126e-c299-4574-9170-ce02655a59ad",
      "name": "Replicate Upscaler",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        160,
        -928
      ],
      "parameters": {
        "url": "https://api.replicate.com/v1/predictions",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"version\": \"nightmareai/real-esrgan:f121d640bd286e1fdc67f9799164c1d5be36ff74576ee11c803ae5b665dd46aa\",\n  \"input\": {\n    \"image\": \"{{ $json.url }}\",\n    \"scale\": 2,\n    \"face_enhance\": false\n  }\n} ",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Prefer",
              "value": "wait"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "FovFPj60gDUn3HP0",
          "name": "Replicate"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "94532da7-1ca5-4d71-b906-677964f0490f",
      "name": "GDrive-Upload-Ordner-ID setzen",
      "type": "n8n-nodes-base.code",
      "position": [
        608,
        -928
      ],
      "parameters": {
        "jsCode": "// Set Node JavaScript Code\nconst currentItem = $input.all()[0];\nconst loopData = $node[\"Loop Over Items\"].json;\n\nreturn [{\n  json: {\n    gdriveUploadFolderId: loopData.gdriveUploadFolderId,\n    originalFilename: loopData.filename,\n    originalIndex: loopData.index\n  },\n  binary: currentItem.binary\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "711fea9d-9b12-48cb-b66f-2fa75b014142",
      "name": "Notizzettel",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1568,
        -976
      ],
      "parameters": {
        "color": 4,
        "width": 304,
        "height": 368,
        "content": "## Information\n\nThis Node will Upscale Multiple Pictures from A Dataspace in Airtable \n\n1. it will create A folder in Drive\n2. it will take pictures stored in the airtable Dataspace\n3. It will run over Items to upscale in Replicate the pictures\n4. It will store the pictures in Drive\n\nPlease Upload the Pictures in Airtable in a column: PortraitFotoAuswahl "
      },
      "typeVersion": 1
    },
    {
      "id": "97297413-8022-4966-8117-944edf4736fc",
      "name": "Datensatz aus Bildern abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -496,
        -848
      ],
      "parameters": {
        "id": "=< enter Record ID >",
        "base": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": ""
        },
        "options": {}
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "yPMIQY5qCFGtB5FX",
          "name": "Book your fantasy Airtable"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "45e45d37-8afc-48a2-ab4b-557b985c9741",
      "name": "Notizzettel 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        -960
      ],
      "parameters": {
        "height": 352,
        "content": "## Enter Record from Stored Data\n"
      },
      "typeVersion": 1
    },
    {
      "id": "73b660f8-f518-42d8-8970-234a956f412a",
      "name": "Notizzettel 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -960
      ],
      "parameters": {
        "height": 352,
        "content": "##  Add Folder Name"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "1d9e1318-89b1-436f-abf1-0ea269f35644": {
      "main": [
        [
          {
            "node": "97297413-8022-4966-8117-944edf4736fc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f44f1434-e002-4478-bbd5-498dff5a8e40": {
      "main": [
        [],
        [
          {
            "node": "5868126e-c299-4574-9170-ce02655a59ad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6bab8092-e2a1-4640-acf5-07e4e15d656f": {
      "main": [
        [
          {
            "node": "94532da7-1ca5-4d71-b906-677964f0490f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5868126e-c299-4574-9170-ce02655a59ad": {
      "main": [
        [
          {
            "node": "6bab8092-e2a1-4640-acf5-07e4e15d656f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "af7d12c5-fd15-4ed3-8bf4-11901dc21f89": {
      "main": [
        [
          {
            "node": "f44f1434-e002-4478-bbd5-498dff5a8e40",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "97297413-8022-4966-8117-944edf4736fc": {
      "main": [
        [
          {
            "node": "444a3467-8416-4dfd-ad89-1be387ea4613",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "94532da7-1ca5-4d71-b906-677964f0490f": {
      "main": [
        [
          {
            "node": "af7d12c5-fd15-4ed3-8bf4-11901dc21f89",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3a204dbb-8945-4fd1-8d09-9980a664128f": {
      "main": [
        [
          {
            "node": "1d9e1318-89b1-436f-abf1-0ea269f35644",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "444a3467-8416-4dfd-ad89-1be387ea4613": {
      "main": [
        [
          {
            "node": "f44f1434-e002-4478-bbd5-498dff5a8e40",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Content-Erstellung, Multimodales KI

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes12
Kategorie2
Node-Typen7
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Autor
Robert Schröder

Robert Schröder

@saits

I'm a self-taught n8n automation specialist from Zürich with 2 years of intensive experience building complex workflows. My focus lies in creating practical, production-ready workflows that solve real business challenges - from AI-powered content generation to data management and process automation. Each workflow I share reflects tested, optimized solutions that deliver measurable results.

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34