---
title: "Instagram profile animation from a photo and a screenshot"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "2"
url: "https://mindket.com/p/ae41771d-71eb-42f0-ba4d-7b3482b10b49"
updated: "2026-11-09"
---

# Instagram profile animation from a photo and a screenshot

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that turns your photo and a screenshot of your Instagram profile into a vertical video of you stepping out of a glass profile screen. Nano Banana Edit composes the picture, Veo 3 Fast animates it and WaveSpeedAI swaps your face back in.

Instagram profile animation from a photo and a screenshot is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 2, last updated on 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow makes a short vertical video from two images: a photo of you and a screenshot of an Instagram profile. A form takes both, and Cloudinary stores them at public addresses. Kie.ai’s Nano Banana Edit then composes a 9:16 picture of the person stepping out of a glowing glass Instagram screen that shows the profile’s details. Veo 3 Fast on Kie.ai animates that picture with a slow push-in and floating hearts and comments. Last, WaveSpeedAI’s video face swap puts the face from your original photo onto the person in the clip, and the final node downloads the video. Each service is polled until it reports a result.

### Who it suits

Creators and small brands that want one striking vertical clip of themselves for Reels, Shorts or TikTok, and the social media managers who make it for them. It works with your own face and your own profile, or with someone who has agreed to both.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Social creators | Instagram creators | Send a portrait and a screenshot of their profile | A creator posts the clip as a Reel to mark a follower milestone. |
| Coaching and consulting | Coaches and solo experts | Open an ad or an intro with a clip of themselves | A coach starts a promo video with the clip, then cuts to the offer. |
| Podcasts and music | Hosts and artists | Announce a new account with a visual of their face | A podcaster introduces the show’s new profile with the clip on launch day. |
| Small brands | Founders who front their brand | Show the brand’s page with its founder in front | A founder opens a launch story with the clip. |
| Agencies | Social media managers | Make a launch clip for a client who has agreed | A manager sends a client the form and gets a draft clip back to review. |

You need some n8n: importing a file, pasting keys into six nodes and swapping a few placeholders. If that is new and you would rather not learn it, skip this one. The page it came from estimates 11 minutes, which assumes the three accounts already exist.

### Where to use it

Any n8n you run will do, as long as it can reach Cloudinary, Kie.ai and WaveSpeedAI.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file, the same steps
- Instagram Reels, TikTok and YouTube Shorts: the clip is 9:16, so it fits all three once you have saved the file
- A video editor: trim it or add a caption before you post

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Have these ready before you import it.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Cloudinary | An account with an upload preset whose signing mode is Unsigned |
| Kie.ai | An API key, for the image and the video |
| WaveSpeedAI | An API key, for the face swap |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. In `Upload Photo` and `Upload Screenshot`, put your cloud name in the address where it says `<YOUR_CLOUD_NAME>`. Swap `YOUR_PRESET_NAME` for your preset and `YOUR_FOLDER_NAME` for a folder.
3. In the Authorization header of `nano-banana-edit`, `nano-banana-result`, `veo3-video` and `veo3-video-status`, swap `<YOUR_KIE_KEY>` for your Kie.ai key and keep the word Bearer and its space.
4. Do the same in `video-faceswap-submit` and `video-faceswap-result` with `<YOUR_WAVESPEED_KEY>`.
5. Save, send a photo and a profile screenshot through the form’s test address, then press Publish.

The page it came from tells you to create credentials and pick them in an Authentication field. The file holds no such setting, so the keys go in the header fields. If you would rather keep them in credentials, create an HTTP Header Auth credential for each service, select it in those nodes and delete their Authorization header.

### How to use it

Open the form from `On form submission` and attach two images, each a jpg, jpeg or png. Both are required: a clear photo of the person, and a screenshot of the profile to show. The form confirms at once and the run goes on behind it: image, then video, then face swap, each checked every few seconds until it is done. The finished video is downloaded by the last node, `final result`, and sits in the run’s data. Open the run under Executions to see it.

What to change for a different result

| To change | Where |
| --- | --- |
| The picture’s scene | \`nanoB\_prompt\` in \`nano-banana setup\`. It names a white hoodie, black shorts and sneakers |
| The motion | \`veo3\_prompt\` in \`veo3 setup\`. It describes a young man walking toward the viewer |
| Shape of the picture and the clip | \`image\_size\` in \`nano-banana-edit\` and \`aspectRatio\` in \`veo3-video\`, both 9:16 |
| How often a task is checked | \`Wait\` and \`Wait1\` are 30 seconds and \`Wait2\` is 10. The file stores no unit for them, and Mindket wrote seconds into it |
| The face swap | \`max\_duration\`, \`target\_gender\` and \`target\_index\` in \`video-faceswap-submit\`, set to 0, all and 0 |

### Example

The two images sent through the form:

```text
Upload your photo: portrait.jpg
Upload your screenshot: profile-screenshot.png
```

Nano Banana Edit gets both pictures and its prompt, which asks to keep the face and to copy the screenshot’s username, bio, posts and follower counts into the glass screen. Veo 3 Fast animates the result. WaveSpeedAI then receives this request, which puts your original face on the person in the clip:

```json
{
  "face_image": "<your photo’s Cloudinary address>",
  "max_duration": 0,
  "target_gender": "all",
  "target_index": 0,
  "video": "<the Veo clip’s address>"
}
```

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Here three services take a while to finish, so the workflow waits, asks how the job is going and loops until the answer is done. Run the form from its test address first. Open that run under Executions and each node shows what it received and what it sent, which is where a wrong key or a failed task turns up.

**For experts.** Each of the three services reports its progress in its own words, and a Switch node reads it.

The three jobs and how each is checked

| Job | Model | Status read by the Switch | Wait |
| --- | --- | --- | --- |
| \`nano-banana-edit\` | \`google/nano-banana-edit\`, a 9:16 PNG | \`data.state\`: fail, generating and success | \`Wait\`, 30 seconds |
| \`veo3-video\` | \`veo3\_fast\`, 9:16, started from the picture | \`data.successFlag\`: 0 generating, 1 success, 2 and 3 failed | \`Wait1\`, 30 seconds |
| \`video-faceswap-submit\` | WaveSpeedAI \`video-face-swap\` | \`data.status\`: failed, completed and processing | \`Wait2\`, 10 seconds |

A failed job ends in a No Operation node, so the run finishes without an error and without a clip. None of the three loops has a retry cap. Set a workflow timeout in n8n’s settings if you want an upper bound.

### Good to know

Each run costs money, and the clip is a face swap, so mind whose face it is.

- Billing: Kie.ai bills the picture and the video, and WaveSpeedAI the face swap
- Whose face: use your own face and a profile you run, or ones whose owner agreed. A swapped face in a public clip is not something to do to someone unasked
- Fixed look: the prompts describe a young man in a white hoodie, black shorts and sneakers, so edit both prompts for anyone else
- Quiet failures: a failed job ends the run without an error, so check the last node that ran
- Open form: once it is published, anyone with the form’s address can start a run on your keys, so turn on the form trigger’s basic authentication or keep the address private
- The images: both uploads become public Cloudinary addresses and go to Kie.ai and WaveSpeedAI, and a profile screenshot shows a name, a bio and numbers
- Keys: they sit in header fields of six nodes, so they travel with any export of the workflow
- A repair: the page says the three waits are 30, 30 and 10 seconds, but the file gave them no unit and n8n would fill in its own default. Mindket wrote seconds into each
- Credentials: the JSON holds none, and nothing from its author’s account

## README

```markdown
# Instagram profile animation from a photo and a screenshot

An n8n workflow. Send its form a photo of a person and a screenshot of an Instagram profile. It returns a short
vertical video of that person stepping out of a glass profile screen.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 25 nodes, four of them sticky notes. It holds no credential. The
  Cloudinary values and the two API keys are left as placeholders.
- `README.md`: these notes.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A Cloudinary account with an upload preset whose signing mode is Unsigned.
- A Kie.ai API key, for the picture and the video.
- A WaveSpeedAI API key, for the face swap.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Open `Upload Photo` and `Upload Screenshot`. In each address, put your cloud name where it says
   `<YOUR_CLOUD_NAME>`. Then swap `YOUR_PRESET_NAME` for your preset and `YOUR_FOLDER_NAME` for a folder.
3. In the Authorization header of `nano-banana-edit`, `nano-banana-result`, `veo3-video` and `veo3-video-status`, swap
   `<YOUR_KIE_KEY>` for your Kie.ai key. Keep the word Bearer and the space after it.
4. Do the same in `video-faceswap-submit` and `video-faceswap-result` with `<YOUR_WAVESPEED_KEY>`.
5. Save, send a photo and a profile screenshot through the form's test address, then press Publish at the top of the
   canvas (or Shift+P).

The page this came from tells you to create credentials and pick them in an Authentication field. The file holds no
such setting, so the keys go in the header fields. To keep them in credentials instead, create an HTTP Header Auth
credential for each service, select it in those nodes and delete their Authorization header.

## How a run goes

- The form takes two images, each a jpg, jpeg or png, and both required. Cloudinary stores them and `Merge` hands the
  two addresses on.
- `nano-banana setup` holds the picture prompt, `nanoB_prompt`. `nano-banana-edit` sends it with both images to Kie.ai's
  `google/nano-banana-edit` for a vertical PNG. `Wait` pauses 30 seconds, `nano-banana-result` asks how it went and
  `Switch` loops back until the state is success. A failure ends the run.
- `veo3 setup` holds the motion prompt, `veo3_prompt`. `veo3-video` starts Veo 3 Fast (`veo3_fast`) from the picture.
  `Wait1`, `veo3-video-status` and `Switch1` loop the same way, on `successFlag`.
- `faceswap setup` pairs your original photo with the clip. `video-faceswap-submit` starts WaveSpeedAI's face swap with
  `max_duration` 0, `target_gender` all and `target_index` 0. `Wait2`, `video-faceswap-result` and `Switch2` loop on
  `status`, and `final result` downloads the finished video. It sits in the run's data under Executions.

## Change the look

- The picture's scene: `nanoB_prompt` in `nano-banana setup`. It names a white hoodie, black shorts and sneakers.
- The motion: `veo3_prompt` in `veo3 setup`. It describes a young man walking toward the viewer.
- Shape: `image_size` in `nano-banana-edit` and `aspectRatio` in `veo3-video` are both 9:16.
- Polling: `Wait` and `Wait1` are 30 seconds, `Wait2` is 10 seconds.
- The face swap: `max_duration`, `target_gender` and `target_index` in `video-faceswap-submit`.

## Good to know

- The file gave the three Wait nodes an amount and no unit, and the page says seconds. n8n would fill in its own
  default unit, so Mindket wrote `seconds` into each.
- A failed job ends in a No Operation node. The run finishes without an error and without a clip, so check the last
  node that ran. None of the three loops has a retry cap. Set a workflow timeout in n8n's settings for an upper bound.
- This is a face swap. Use your own face and a profile you run, or ones whose owner agreed.
- The prompts describe a young man, so edit both of them for anyone else.
- Once the workflow is published, anyone with the form's address can start a run that spends your Kie.ai and
  WaveSpeedAI credits. The form trigger can ask for a username and password.
- Both uploads become public Cloudinary addresses and go to Kie.ai and WaveSpeedAI. A profile screenshot shows a name,
  a bio and numbers.
- The keys sit in header fields of six nodes, so they travel with any export of the workflow. Take them out before you
  share it.
```

## What is in it

2 files, 33 KB, downloaded as a zip.

```text
README.md  4 KB
workflow.json  29 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 21 steps, starting on a form
- AI: No step calls an AI model
- Sign-ins: Signs in to: Kie.ai and WaveSpeedAI
- API keys: No API key is left in the file; 2 blanks in it for your own key
- Step types: Mindket’s checker reads all 7 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/ae41771d-71eb-42f0-ba4d-7b3482b10b49)
- [Its page on Mindket](https://mindket.com/p/ae41771d-71eb-42f0-ba4d-7b3482b10b49)
