AutomationFlowsWeb Scraping › Transform Old Photos Into Animated Videos with Flux & Kling AI for Social Media

Transform Old Photos Into Animated Videos with Flux & Kling AI for Social Media

ByJuan Carlos Cavero Gracia @carlosgracia on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Event trigger★★★★☆ complexity19 nodesForm TriggerHTTP RequestGoogle DriveN8N Nodes Upload Post
Web Scraping Trigger: Event Nodes: 19 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #5755 — we link there as the canonical source.

This workflow follows the Form Trigger → Google Drive recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "NkkWMHiRAY5uPHmf",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Convert Old Photos to AI Videos And Auto-Publish in FB, IG, YT & X",
  "tags": [],
  "nodes": [
    {
      "id": "b9ae8c3f-21f4-4aaf-9352-824d2abcf430",
      "name": "Photo Upload Form",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -60,
        120
      ],
      "parameters": {
        "path": "animate-photo-form",
        "options": {},
        "formTitle": "Colorize and Animate Old Photos",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "Upload Old Photo",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Custom Animation Description (Optional)",
              "placeholder": "Describe how you'd like the photo to be animated (e.g., 'make the person smile and blink')"
            }
          ]
        },
        "formDescription": "Upload an old photo to colorize and animate it with AI"
      },
      "typeVersion": 2.1
    },
    {
      "id": "6bb93365-9c3d-4c18-a1cc-328d45b70b2f",
      "name": "Workflow Description",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -740
      ],
      "parameters": {
        "color": 3,
        "width": 740,
        "height": 280,
        "content": "# Colorize and Animate Old Photos with AI\n\nThis workflow allows users to **upload old photos** and automatically:\n1. **Colorize and enhance** them using FLUX Kontext\n2. **Animate** them using Kling Video AI\n3. **Save** the final video to Google Drive\n\nSimply upload your old photo through the form and get back a colorized, animated video!"
      },
      "typeVersion": 1
    },
    {
      "id": "fb20fbac-63ea-41ef-8f6a-1aacf3e92245",
      "name": "Colorize Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        480,
        120
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/flux-pro/kontext",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": \"Colorize this old black and white or sepia photograph. Make it look natural and vibrant with realistic colors. Remove any noise, scratches, or artifacts. Enhance the image quality and make it crystal clear. Keep all the original details and people exactly as they are, just add beautiful, realistic colors and improve the overall quality\",\n  \"image_url\": \"{{ $json.data.url }}\",\n  \"num_images\": 1\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "76d9b93e-9823-47cb-8d66-d158fd8b2b37",
      "name": "Wait for Colorization",
      "type": "n8n-nodes-base.wait",
      "position": [
        700,
        120
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "ca65341f-ad21-4707-831f-c873ef770cc6",
      "name": "Check Colorization Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        920,
        120
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/flux-pro/requests/{{ $('Colorize Image').item.json.request_id }}/status",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7d556144-538a-462d-a153-1971efcef011",
      "name": "Colorization Completed?",
      "type": "n8n-nodes-base.if",
      "position": [
        1140,
        120
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "colorize-completed",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "COMPLETED"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d1f4426a-c830-4402-91b4-389338f81c39",
      "name": "Get Colorized Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1360,
        120
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/flux-pro/requests/{{ $('Colorize Image').item.json.request_id }}",
        "options": {},
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0397aef0-a837-4cfe-8029-d1c495bf6689",
      "name": "Animate Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1580,
        120
      ],
      "parameters": {
        "url": "https://queue.fal.run/fal-ai/kling-video/v2.1/standard/image-to-video",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"prompt\": \"{{ $('Photo Upload Form').item.json['Custom Animation Description (Optional)'] ? $('Photo Upload Form').item.json['Custom Animation Description (Optional)'] : 'Animate this colorized vintage photograph. If there are multiple people, make them interact naturally - perhaps talking, smiling, or making subtle gestures. If there\\'s only one person, animate them with natural movements like breathing, blinking, slight head movements, or gentle smiling. Keep the animation subtle and realistic, maintaining the vintage charm. The movement should feel natural and bring the photo to life. Do not move the camera' }}\",\n  \"image_url\": \"{{ $('Get Colorized Image').item.json.images[0].url }}\",\n  \"duration\": 5,\n  \"quality\": \"standard\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3406b890-4fe5-42f9-a52e-f67abab2720c",
      "name": "Wait for Animation",
      "type": "n8n-nodes-base.wait",
      "position": [
        1800,
        120
      ],
      "parameters": {
        "amount": 60
      },
      "typeVersion": 1.1
    },
    {
      "id": "58103cde-9884-41d4-886a-99ba7bd0072a",
      "name": "Check Animation Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2020,
        120
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/kling-video/requests/{{ $('Animate Image').item.json.request_id }}/status",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e42474db-7881-4a0a-8ea0-d04e139c4740",
      "name": "Animation Completed?",
      "type": "n8n-nodes-base.if",
      "position": [
        2240,
        120
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "animation-completed",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "COMPLETED"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6db3f757-5748-4be6-917c-ddcd86621f2b",
      "name": "Get Animated Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2460,
        120
      ],
      "parameters": {
        "url": "=https://queue.fal.run/fal-ai/kling-video/requests/{{ $('Animate Image').item.json.request_id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "48d00cac-27d7-4b3b-aed2-f53bea846ecb",
      "name": "Download Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2680,
        120
      ],
      "parameters": {
        "url": "={{ $('Get Animated Video').item.json.video.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "37a98a23-46f0-41a6-89df-f3f542abdc16",
      "name": "Upload to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2900,
        120
      ],
      "parameters": {
        "name": "=animated-photo-{{ $now.format('yyyyMMdd-HHmmss') }}.mp4",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "root",
          "cachedResultUrl": "https://drive.google.com/drive",
          "cachedResultName": "/ (Root folder)"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "7d0232ed-e8cd-421f-a9c6-70e3eb26b4cd",
      "name": "Final Results",
      "type": "n8n-nodes-base.set",
      "position": [
        3140,
        120
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "success-flag",
              "name": "success",
              "type": "boolean",
              "value": true
            },
            {
              "id": "message",
              "name": "message",
              "type": "string",
              "value": "Your old photo has been successfully colorized and animated!"
            },
            {
              "id": "colorized-image",
              "name": "colorized_image_url",
              "type": "string",
              "value": "={{ $('Get Colorized Image').item.json.images[0].url }}"
            },
            {
              "id": "animated-video",
              "name": "animated_video_url",
              "type": "string",
              "value": "={{ $('Get Animated Video').item.json.video.url }}"
            },
            {
              "id": "google-drive",
              "name": "google_drive_url",
              "type": "string",
              "value": "={{ $('Upload to Google Drive').item.json.webViewLink }}"
            },
            {
              "id": "processing-time",
              "name": "processing_time",
              "type": "string",
              "value": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2d3c6a3a-6ef2-47cd-8823-46c45361cb5f",
      "name": "Usage Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -420
      ],
      "parameters": {
        "width": 740,
        "height": 200,
        "content": "## How to Use:\n\n1. **Click 'Execute workflow'** to start the process\n2. **Upload your old photo** in the form that appears\n3. The photo will be **colorized and enhanced** using FLUX Kontext\n4. Then **animated** using Kling Video AI\n5. Finally **saved to Google Drive**\n\n**Required:** Image file (JPG, PNG)\n**Optional:** Custom animation description"
      },
      "typeVersion": 1
    },
    {
      "id": "8b09bed7-a5f1-4e4c-8b08-0cb9807cf6fa",
      "name": "Setup Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -180
      ],
      "parameters": {
        "width": 740,
        "height": 260,
        "content": "## Setup Required:\n1. **api.imgbb.com**: Get api token (it's free)\n2. **FAL.AI API Key**: Get from fal.ai and set in HTTP Request credentials\n3. **Google Drive**: Connect your Google Drive account\n4. **Test the workflow**: Click 'Test workflow' to start\n\n**API Endpoints Used:**\n- Upload image: api.imgbb.com\n- FLUX Kontext: Image enhancement and colorization\n- Kling Video: Image to video animation"
      },
      "typeVersion": 1
    },
    {
      "id": "4be63f77-8fca-46a3-84b9-4b5b30055a96",
      "name": "Upload Image to imgbb",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        240,
        120
      ],
      "parameters": {
        "url": "=https://api.imgbb.com/1/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "image",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "=Upload_Old_Photo"
            },
            {
              "name": "key",
              "value": "generate_token_and_add"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "5fa469e9-cd6e-448f-843f-b82553216476",
      "name": "Upload Post",
      "type": "n8n-nodes-upload-post.uploadPost",
      "position": [
        3340,
        120
      ],
      "parameters": {
        "user": "ADD_UPLOAD_POST_USER",
        "title": "This video was uploaded with the upload-post api",
        "video": "={{ $('Get Animated Video').item.json.video.url }}",
        "platform": [
          "instagram",
          "x",
          "youtube",
          "facebook"
        ],
        "operation": "uploadVideo",
        "instagramMediaType": "REELS"
      },
      "credentials": {
        "uploadPostApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "2559ee00-f7d3-4ee6-bde7-0156eaa87741",
  "connections": {
    "Animate Image": {
      "main": [
        [
          {
            "node": "Wait for Animation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Final Results": {
      "main": [
        [
          {
            "node": "Upload Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Colorize Image": {
      "main": [
        [
          {
            "node": "Wait for Colorization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Video": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Photo Upload Form": {
      "main": [
        [
          {
            "node": "Upload Image to imgbb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Animated Video": {
      "main": [
        [
          {
            "node": "Download Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Animation": {
      "main": [
        [
          {
            "node": "Check Animation Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Colorized Image": {
      "main": [
        [
          {
            "node": "Animate Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Animation Completed?": {
      "main": [
        [
          {
            "node": "Get Animated Video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait for Animation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Image to imgbb": {
      "main": [
        [
          {
            "node": "Colorize Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for Colorization": {
      "main": [
        [
          {
            "node": "Check Colorization Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Animation Status": {
      "main": [
        [
          {
            "node": "Animation Completed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Google Drive": {
      "main": [
        [
          {
            "node": "Final Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Colorization Completed?": {
      "main": [
        [
          {
            "node": "Get Colorized Image",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait for Colorization",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Colorization Status": {
      "main": [
        [
          {
            "node": "Colorization Completed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Source: https://n8n.io/workflows/5755/ — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

The Sora 2 API allows seamless generation of CGI ads, turning text prompts into stunning videos. This workflow automates the entire process from video generation to upload, notification, and file shar

Form Trigger, HTTP Request, Email Send +1
Web Scraping

Formtrigger Workflow. Uses formTrigger, googleDrive, httpRequest, stopAndError. Event-driven trigger; 28 nodes.

Form Trigger, Google Drive, HTTP Request +1
Web Scraping

Create CGI ads effortlessly by integrating the Google Veo3 API for video generation and uploading to Google Drive with seamless email notifications. On form submission: Triggers the workflow when a fo

Form Trigger, HTTP Request, Email Send +1
Web Scraping

This workflow automates the process of generating videos using the Veo 3 Fast API, uploading the video to Google Drive, and notifying the user via email. All tasks are executed seamlessly, ensuring a

Form Trigger, HTTP Request, Email Send +1
Web Scraping

This automation template is a revolutionary AI-powered interior design and product visualization workflow that allows users to seamlessly place any object or artwork into real spaces using artificial

HTTP Request, Form Trigger, N8N Nodes Upload Post