---
title: "Instagram reel rewriter with an optional avatar video"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/f0e8729c-d1ac-48c1-9201-5c16e04b9d69"
updated: "2026-11-09"
---

# Instagram reel rewriter with an optional avatar video

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

An n8n workflow that rewrites Instagram reels from links in a Google Sheet. Apify transcribes each reel, OpenAI writes a new script, caption and overlay in the same shape, and a switched-off part makes and posts an avatar video.

Instagram reel rewriter with an optional avatar video is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 1, 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 turns Instagram reels you want to learn from into new scripts you can record. You paste reel links into a Google Sheet. Every minute it takes the first row with no script yet and has an Apify actor transcribe that reel. OpenAI’s `gpt-4.1-mini` then writes a new script on the same topic and in the same shape, with a caption and a short overlay line, and saves all three to the row. A second part ships switched off. It makes a talking avatar video from a script and posts it to Instagram. 41 nodes in all, five of them notes.

### Who it suits

Creators and social media managers who study reels that do well and want a draft in the same format to record or give to an avatar. It suits someone who reads each draft before using it. Skip it if you want finished videos with no setup. The video part needs four more services and three repairs.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Social media agencies | Content strategists | Collect a niche’s top reels in the sheet and rewrite them for a client | An agency drops ten fitness reels in on Monday and reviews a rewritten script for each. |
| Coaching and courses | Solo creators | Turn a reel that did well in their field into their own take | A business coach rewrites a list of tools into a list of her own picks. |
| Online retail | Brand marketers | Borrow a format from reels in their category for their own product | A skincare brand keeps a three-step format and fills it with its own routine. |
| Faceless channels | Channel owners who use AI avatars | Turn on the second part to make and post avatar videos | A channel owner posts a captioned avatar reel from each script they approve. |

You need some n8n for the first part: importing a file, two credentials and a token. The second part asks for much more, with four more accounts, a community node and three repairs. Its author puts setup at about 24 minutes.

### Where to use it

Any n8n that can reach Apify, OpenAI and Google runs the first part. The drafts land beside each link in your sheet.

- n8n Cloud: import the file there. The second part’s community node needs your own server, or n8n Cloud if it offers that node
- Your own n8n server: the same file and steps
- Google Sheets: each script, caption and overlay sits in the link’s row, ready to record
- Instagram: the second part posts through Mixpost, or you post a video you recorded yourself

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Start with the first part, which runs on its own.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| Apify | An API token, typed into a header |
| OpenAI | An API key that can use \`gpt-4.1-mini\` |
| Google | An account that can edit the sheet, for a Google Sheets OAuth2 credential |
| The second part | Keys for ElevenLabs, RunningHub, Submagic and Mixpost, a photo in Google Drive, and the community node \`n8n-nodes-gravitysocial\` |

The sheet

| Tab | Columns |
| --- | --- |
| \`Sheet1\` | \`ReelURL\`, \`Script\`, \`Caption\`, \`Overlay\`, \`Approved\` and \`Video Link\`. You fill \`ReelURL\`, and the workflow fills the rest except \`Approved\` |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Make the sheet and copy its ID: the long part of its address between `/d/` and `/edit`.
3. Add a Google Sheets OAuth2 credential. In `Get row` and `Update row in sheet`, select it and replace `YOUR_SHEET_ID` with the ID.
4. In `Download IG Reel`, replace `<YOUR_APIFY_TOKEN>` in the Authorization header with your token. The brackets go too.
5. Add an OpenAI credential and select it in `OpenAI Chat Model`.
6. Fix the retry loop as Good to know shows.
7. Put one reel link in `ReelURL`, save and press Execute workflow. When the row fills in, press Publish.

The second part needs the four values in `API Setup`, Google Drive and Mixpost credentials, and the photo’s ID in place of `YOUR_IMAGE_FILE_ID`. Replace `YOUR_WORKSPACE_UUID` in the three Mixpost nodes, then turn its 25 nodes on. Its trigger is `Webhook`, at the path `reel-avatar-video`, and it receives this:

```json
{
  "Script": "<the script from the sheet>",
  "Caption": "<the caption from the sheet>",
  "row": 2
}
```

### How to use it

Add a reel link to `ReelURL` on a new row. The next run picks it up, and once the actor returns the transcript, `Script`, `Caption` and `Overlay` fill in. Read the script before you record it. To make a video, send that row’s script, caption and row number to the webhook, from a button, a script or another workflow.

What to change for a different result

| To change | Where |
| --- | --- |
| The script’s length, hook and shape | The message in \`Generate Script, Caption, Overlay\` |
| The closing line | The same message, which ends every script with one fixed call to follow |
| How often it looks | \`Schedule Trigger\`, every minute now |
| The voice | \`voice\_id\` in \`API Setup\` and \`model\_id\` in \`generateAudio\` |
| The captions’ look | \`templateName\` and the B-roll settings in \`Submagic Create Task\` |

### Example

You add a reel in which a creator names three free apps for editing video. `Download IG Reel` returns its transcript, caption and hashtags. The chain answers in its parser’s shape, shown here with the content cut:

```json
{
  "Script": "…",
  "Caption": "…",
  "Overlay": "…"
}
```

The script names three other apps in the same order of hook, list and close, at about the same length, and ends on the prompt’s follow line. The caption keeps the original’s tone, with up to five hashtags. The overlay is one line of eight words or fewer.

### 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. Grey boxes are switched off, and n8n skips them. Get the top row of boxes working first, with one link. Then open `Generate Script, Caption, Overlay` in that run to read exactly what the model was sent and what it wrote.

**For experts.** The two parts share nothing but the sheet. The first runs on a schedule, and the second waits for a POST.

The services behind each step

| Node | Service or model | What to know |
| --- | --- | --- |
| \`Download IG Reel\` | Apify run-sync, actor \`3C7L8IMQOkq3isV2Y\` | One call that waits for the transcript. Its retry loop is the risk under Good to know |
| \`Generate Script, Caption, Overlay\` | \`gpt-4.1-mini\` through \`OpenAI Chat Model\` | A basic chain with a parser, with no agent and no tools |
| \`generateAudio\` | ElevenLabs text to speech, \`eleven\_multilingual\_v2\` | Returns an MP3 at 44.1 kHz and 128 kbps |
| \`createTask\` | RunningHub workflow \`1996082549246083074\` | Takes the uploaded photo and voice by their file names |
| \`Submagic Create Task\` | Submagic’s projects API | Template \`Hormozi 2\`, zooms on, B-roll on 60 percent |
| \`Create a post\` | Mixpost, through the community node | A reel post on the first Instagram account in the workspace |

### Good to know

The first part has a costly retry loop to fix before you publish, and the second has faults of its own.

- The retry loop: on a retry, \`Download IG Reel\` reads \`ReelURL\` from the actor’s reply instead of your row. Without that field the call goes out empty, fails and repeats every 2 seconds, each time a new paid run. Change its body to \`{{ $('fixURL').item.json.ReelURL }}\` first
- Overlapping runs: a transcript can take more than a minute, and the next run picks the same row again. Set \`Schedule Trigger\` to 10 minutes or more
- Executions: every minute is 1,440 runs a day, the empty ones included, so check your n8n plan
- Model shutdown: OpenAI’s deprecations page, read on 2 November 2026, lists GPT-4.1 mini for shutdown on 14 January 2027, with \`gpt-6-luna\` as its replacement
- Billing: the actor, sian.agency’s Instagram AI Transcript Extractor, listed $0.028 a reel plus $0.005 a start on its free tier that day. OpenAI bills one call a row
- The second part: \`Upload file\` fails as written, since it gets no file from \`Create a post\`. Connect it after \`Download Video\` with the field \`data\`. \`Wait6\` checks Submagic every second
- Someone else’s reel: check Instagram’s rules on reused content, and the creator’s rights, before you post a remake
- Your data: the link goes to Apify and the words to OpenAI. In the second part, the script, photo and video go to ElevenLabs, RunningHub, Submagic, Mixpost and Google Drive
- Credentials: the JSON holds none. The Apify token sits in a header and the second part’s keys in \`API Setup\`, so take them out before you share it

## README

````markdown
# Instagram reel rewriter with an optional avatar video

An n8n workflow that takes Instagram reel links from a Google Sheet and writes a new script, caption and on-screen line
for each, on the same topic and in the same shape as the original. An Apify actor transcribes the reel and OpenAI's
`gpt-4.1-mini` rewrites it. A second, switched-off part turns an approved script into a talking avatar video with
ElevenLabs and RunningHub, adds captions with Submagic and posts it to Instagram through Mixpost.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 41 nodes. Five are sticky notes that number its parts. The first part,
  eleven working nodes, is on. The other 25 working nodes are switched off, as they were in the original copy. It holds
  no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The code in `fixURL` had lost its backslashes in the original copy, so its pattern read
  `/https://www.instagram.com/[^/]+/(reel|reels|p)//`, which is not valid JavaScript, and every run failed there. It is
  back to `/https:\/\/www\.instagram\.com\/[^\/]+\/(reel|reels|p)\//`, which takes the account name out of a link such as
  `instagram.com/<name>/reel/<id>/`.
- The Authorization header of `Download IG Reel` read `Bearer <token>`. It now reads `Bearer <YOUR_APIFY_TOKEN>`.
- The author's sheet is gone. `Get row`, `Update row in sheet` and `Update row in sheet1` ask for `YOUR_SHEET_ID` and use
  the tab `Sheet1`.
- `getImage` pointed at a photo in the author's Google Drive. It now asks for `YOUR_IMAGE_FILE_ID`.
- `Webhook` had a random path from the author's n8n. It is now `reel-avatar-video`.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An Apify account and its API token.
- An OpenAI API key that can use `gpt-4.1-mini`.
- A Google account, and a Google Sheet (below).
- Only for the switched-off part: a Google Drive photo of the person the avatar shows, and accounts with ElevenLabs,
  RunningHub, Submagic and Mixpost. Its Mixpost nodes come from the community package `n8n-nodes-gravitysocial`, which
  must be installed under Settings, Community nodes. Install it before you import, or n8n shows those three nodes as
  unknown.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Make the sheet below, then copy its ID: the long part of its address between `/d/` and `/edit`.
3. Add a Google Sheets OAuth2 credential. In `Get row` and `Update row in sheet`, select it and replace `YOUR_SHEET_ID`
   with the ID.
4. In `Download IG Reel`, replace `<YOUR_APIFY_TOKEN>` in the Authorization header with your token. The brackets go too.
5. Add an OpenAI credential and select it in `OpenAI Chat Model`.
6. Fix the retry loop as Good to know shows.
7. Put one reel link in `ReelURL` on the sheet's second row and leave the other columns empty.
8. Save and press Execute workflow. When `Script`, `Caption` and `Overlay` fill in, press Publish.

### The switched-off part

1. Install `n8n-nodes-gravitysocial` if you have not.
2. In `API Setup`, replace `YOUR_API_KEY` with your ElevenLabs key, `YOUR_VOICE_ID` with an ElevenLabs voice,
   `YOUR_RUNNINGHUB_API` with your RunningHub key and `YOUR_SUBMAGIC_API` with your Submagic key.
3. Add a Google Drive OAuth2 credential. Select it in `getImage` and `Upload file`, and put the photo's file ID in
   `getImage` in place of `YOUR_IMAGE_FILE_ID`.
4. Add a Mixpost credential and select it in `Upload video`, `Get many accounts` and `Create a post`. Replace
   `YOUR_WORKSPACE_UUID` in all three with your Mixpost workspace.
5. Select your Google Sheets credential in `Update row in sheet1` and replace `YOUR_SHEET_ID` there.
6. Select the 25 switched-off nodes and turn them on (the D key), then save.

## The sheet

One tab, `Sheet1`, with these headers in its first row: `ReelURL`, `Script`, `Caption`, `Overlay`, `Approved` and
`Video Link`. Put a reel link in `ReelURL` and leave the rest empty. The first part fills `Script`, `Caption` and
`Overlay`, and the second part fills `Video Link`. No node reads `Approved`, so use it as your own mark of which scripts
should become videos.

## How a run goes

1. `Schedule Trigger` starts a run every minute. `Get row` reads the rows whose `Script` is empty, and `Limit` keeps the
   first one.
2. `fixURL` cleans the link, and `Download IG Reel` calls the Apify actor `3C7L8IMQOkq3isV2Y` and waits for its reply:
   the reel's `transcript`, `caption`, `hashtags` and a `status`.
3. `Check Status` goes on when `status` is `success`. Any other answer goes to `Wait`, which pauses 2 seconds and calls
   the actor again (read Good to know before you publish).
4. `Generate Script, Caption, Overlay` sends the transcript, caption and hashtags to `gpt-4.1-mini`. It asks for a script
   of about 60 to 75 words in the same shape. It also wants a caption with up to five hashtags and an overlay line of at
   most eight words. `Structured Output Parser` holds the reply to `Script`, `Caption` and `Overlay`.
5. `Update row in sheet` writes the three into the same row, found by its row number.

The switched-off part starts at its own trigger, `Webhook`, so nothing in the first part calls it. Send it a POST, from
a button, a script or another workflow, with the row's new script and caption and its row number:

```json
{
  "Script": "<the script from the sheet>",
  "Caption": "<the caption from the sheet>",
  "row": 2
}
```

1. `API Setup` holds the four keys. `getImage` downloads the avatar photo, and `generateAudio` has ElevenLabs read
   `Script` aloud with `eleven_multilingual_v2`.
2. `uploadImage` and `uploadAudio` send both files to RunningHub, and `Merge2` with `Aggregate` puts the two replies in
   one list.
3. `createTask` starts RunningHub workflow `1996082549246083074` with the photo, the voice and a centered crop.
   `checkStatus` and `Switch` check it, after 6 seconds and then once a minute through `Wait2`, until it reads `SUCCESS`.
4. `getOutput` fetches the video's address, and `Submagic Create Task` sends it to Submagic with the `Hormozi 2` caption
   template, zooms and B-roll on 60 percent of it. `Check status` and `Switch1` poll Submagic through `Wait6` until it
   reads `completed`.
5. `Download Video` fetches the result. `Upload video` gives it to Mixpost, `Get many accounts` finds the workspace's
   Instagram account, and `Create a post` makes a reel post with the caption.
6. `Upload file` is meant to save the video to the top of your Google Drive, and `Update row in sheet1` to write its
   link into `Video Link`.

## Change the look

- The script's rules: the message in `Generate Script, Caption, Overlay`. It sets the length, the hook, the shape, a
  closing call to follow and an example of the avatar's way of speaking. Every script ends with the same follow line,
  so change that line to your own.
- The caption and the overlay: steps 2 and 3 of the same message.
- How often it looks for new links: `Schedule Trigger`.
- The voice: `voice_id` in `API Setup`, and `model_id` in `generateAudio`.
- The captions' style: `templateName`, `magicZooms`, `magicBrolls` and `magicBrollsPercentage` in `Submagic Create Task`,
  and its fixed `title`, which reads `My Awesome Video`.

## Good to know

- The retry loop: on a retry, `Download IG Reel` reads `ReelURL` from the item in front of it, which is then the actor's
  reply and not your row. Unless that reply has a `ReelURL` field, the call goes out with an empty address, fails again
  and repeats every 2 seconds, each time as a new paid actor run. Before you publish, change the address in its body to
  `{{ $('fixURL').item.json.ReelURL }}`, or point the false branch of `Check Status` at a stop.
- Overlapping runs: the actor can take more than a minute to transcribe a reel, and the row's `Script` stays empty until
  the end. The next minute's run then picks the same row and pays for it again. Set `Schedule Trigger` to a longer gap,
  such as 10 minutes.
- Executions: a trigger every minute is 1,440 runs a day, the empty ones included. Check your n8n plan's allowance.
- Model shutdown: OpenAI's deprecations page, read on 2 November 2026, lists GPT-4.1 mini for shutdown on 14 January 2027,
  with `gpt-6-luna` as its replacement.
- Cost of a reel: the actor is sian.agency's Instagram AI Transcript Extractor. Its free tier listed $0.028 for each
  transcribed reel plus $0.005 for each start, read on 2 November 2026. OpenAI bills one `gpt-4.1-mini` call a row.
- The switched-off part has three faults to fix before you rely on it. First, the file field of `Upload file` is an
  expression that returns the video itself, not a field name. Its input also comes from `Create a post`, which carries
  no file, so it fails as written. Connect it after `Download Video` with the field `data`. Second, `Wait6` waits only
  1 second between Submagic checks. Third, a RunningHub or Submagic status the two Switch nodes do not name stops the run
  with an error.
- Someone else's reel: the prompt keeps the original's topic and structure and changes the words. Check Instagram's rules
  on reused content, and the creator's rights, before you post a remake.
- Your data: the reel's link goes to Apify and its words to OpenAI. In the second part, the script goes to ElevenLabs,
  the photo and the voice to RunningHub, and the video to Submagic, Mixpost and Google Drive.
- Keys: in the second part the four keys sit in `API Setup`, a plain node, so take them out before you share the
  workflow. The Apify token sits in a header of `Download IG Reel`.
````

## What is in it

2 files, 48 KB, downloaded as a zip.

```text
README.md  9 KB
workflow.json  39 KB
```

## Workflow check

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

- Steps: 9 steps, starting on a schedule
- Not reached: 25 nodes no run reaches: createTask, uploadImage, uploadAudio, Merge2, Aggregate and 20 more
- AI: 1 step calls an AI model: Generate Script, Caption, Overlay
- Sign-ins: Signs in to: Google Sheets, OpenAI and Apify
- API keys: No API key is left in the file; 1 blank in it for your own key
- Community nodes: Needs the community node package n8n-nodes-gravitysocial
- Step types: Mindket’s checker reads all 8 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/f0e8729c-d1ac-48c1-9201-5c16e04b9d69)
- [Its page on Mindket](https://mindket.com/p/f0e8729c-d1ac-48c1-9201-5c16e04b9d69)
