upscaler
uwg · Kit
Holds a set of image upscaling models gathered from the OpenModelDB community, for people who want to enlarge low-resolution pictures with AI on their own comp…
An n8n workflow that reads the latest Morning Brew issue through Apify, has an agent write a 40 to 60 word spoken recap. HeyGen renders it as an avatar video, checked until it is ready. One edit is needed for the avatar to speak the recap.
News recap video with a HeyGen avatar is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
{{ JSON.stringify($('Script Writer').item.json.output) }}Manual start
It starts when you press Test workflow in n8n. There is no form to fill in:
A finished HeyGen avatar video, with its link in the last status reply
What you need before you start.
AI video
Renders the avatar video and reports its status. Two more nodes list your avatars and voices.
NeedsHeyGen API key, in a Header Auth credential
Web scraping
Runs the website-content-crawler to read the newsletter page and return its text.
NeedsApify API token
Language model
Runs GPT 4.1 Mini for the Script Writer agent, which writes the spoken script.
NeedsOpenRouter API key
Checked by Mindket on 13 Nov 2026
This n8n workflow makes a short news recap video with an AI avatar. Press Test workflow and Apify reads the latest issue of the Morning Brew newsletter. An agent named Script Writer, running GPT 4.1 Mini on OpenRouter, boils it down to a spoken script of 40 to 60 words on the top two to four stories. HeyGen then renders an avatar video, and the workflow asks for the video’s status, waits a little and asks again, until the status reads completed and the file is ready to download. One thing to know before you run it: the node that sends the request to HeyGen carries a fixed placeholder line, and the script is not wired in. The setup steps show the one edit that fixes that. Four more nodes sit apart, for picking an avatar and a voice. The file has 13 working nodes and five sticky notes.
Newsletter editors, social media teams and small publishers who want a regular news clip without filming one, since the avatar reads the script and nobody has to be on camera.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Media and publishing | Newsletter editors | Turn each issue into a short clip for social media | A newsletter team posts a recap clip on the morning an issue goes out. |
| Social media | Social managers | Fill a Shorts or Reels slot with a news clip each weekday | A team publishes a clip under twenty seconds every day and never books a presenter. |
| Marketing agencies | Content producers | Point it at a client’s newsletter instead of Morning Brew | An agency swaps the address in News for the client’s page and gets a draft recap to review. |
| Education and training | Course teams | Recap a weekly digest for learners, always with the same presenter | A course team turns its Friday digest into a clip for the learners’ page. |
You need a little n8n: importing a file, adding credentials and editing one JSON body. Its author puts setup at about 11 minutes, which assumes the three accounts already exist.
Any n8n that can reach Apify, OpenRouter and HeyGen will do. It starts by hand. A Schedule Trigger in front of News is what makes it daily.
NewsGet it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Have these ready before you import it.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| HeyGen | An account with API access, its API key, and an avatar and a voice you can use |
| Apify | An account and an API token, for the website-content-crawler actor |
| OpenRouter | An API key for the chat model that writes the script |
workflow.json.X-Api-Key and your key as the value, and select it in the six HeyGen nodes.GPT 4.1 Mini.News, set Authentication to Generic Credential Type and add an HTTP Header Auth credential with the header Authorization and the value Bearer followed by your Apify token.Get Avatars and Get Voices once each with Execute step, and copy an avatar’s id and a voice’s id from what they return.Generate Video1, put those ids where the body holds avatar_id and voice_id."YOUR_SCRIPT_TEXT", quotation marks included, with the expression below, so the avatar speaks the recap.Wait and lengthen its pause, 5 seconds as exported.{{ JSON.stringify($('Script Writer').item.json.output) }}Both Wait nodes lean on n8n’s defaults. 30 Seconds stores an amount of 10 and no unit, and n8n’s default unit is seconds, so despite its name it waits 10 seconds. Wait stores nothing and pauses 5 seconds between status checks.
Press Test workflow. The run lasts as long as HeyGen takes to render. The loop asks for the video’s status, waits and asks again until it reads completed. The last reply from Get Video1 is HeyGen’s status for the finished video, and it carries the link to the file. The four loose nodes at the top are separate and run only by hand. Two list your avatars and voices. The other two send one render request and ask for its status once.
Say an issue’s top stories are a rate cut, a merger ruling and a chipmaker’s earnings. Script Writer might return a paragraph like this one, meant to be said in under 20 seconds:
Stocks rose after a rate cut, a court blocked a merger of two grocery chains, a chipmaker beat its earnings forecast and an airline announced new routes.
If you are new. n8n polls by looping. It asks HeyGen for the status, waits, and asks again. Run the workflow with the editor open and watch the loop, since each pass shows HeyGen’s reply, and do the two list nodes first, because they show your own avatar and voice ids.
For experts. Four stages carry the work. Each uses a different service.
| Stage | Node | What it uses | What to know |
|---|---|---|---|
| Read the issue | News | Apify’s website-content-crawler through its run-sync endpoint, markdown output | The body sets no page or depth limit, so add maxCrawlPages with 1 to read only the issue |
| Write the script | Script Writer | An agent on openai/gpt-4.1-mini through OpenRouter | Its system message asks for one paragraph of 40 to 60 words, with no intro, outro or call to action |
| Render | Generate Video1 | HeyGen’s v2 video/generate at 1280 by 720, avatar style normal, speed 1.1 | Size, speed and style live in its JSON body |
| Wait for it | 30 Seconds, Get Video1, If, Wait | HeyGen’s v1 video_status.get | Only completed ends the loop, and there is no branch for failed |
Each run spends HeyGen credits, Apify usage and a few OpenRouter tokens.
An n8n workflow. It reads the latest Morning Brew issue with Apify, has an agent write a short spoken recap, asks HeyGen
to render an avatar video and checks until the video is ready. The original's setup note names Nate Herk as its author.
workflow.json: the workflow as n8n exports it, 18 nodes: 13 that work and five sticky notes. It holds no credential.YOUR_SCRIPT_TEXT, and avatar_id and voice_id are placeholders as theyREADME.md: these notes.workflow.json.X-Api-Key and your key as the value. Select it inGenerate Video, Generate Video1, Get Video, Get Video1, Get Avatars and Get Voices.GPT 4.1 Mini.News. It has no authentication yet. Set Authentication to Generic Credential Type and add an HTTP Header AuthAuthorization and the value Bearer followed by your Apify token.Get Avatars and Get Voices once, each on its own with Execute step, and copy an avatar's id and a voice's idGenerate Video1, and in Generate Video if you want the one-off test, put those ids where the body holdsavatar_id and voice_id.Generate Video1, replace "YOUR_SCRIPT_TEXT", quotation marks included, with this expression, so that the recap{{ JSON.stringify($('Script Writer').item.json.output) }}
Wait and lengthen its pause (below).30 Seconds stores an amount of 10 and no unit. This Wait node's default unit is seconds, so it waits 10
seconds before the first status check. Wait stores nothing and takes the default amount too: 5 seconds between checks.
A render takes a while, so 30 seconds there sends HeyGen far fewer requests.
Get Avatars, Get Voices and Generate Video followed by Get Video, are notWhen clicking ‘Test workflow’, and goes through News, Script Writer, Generate Video1,30 Seconds and Get Video1. If then ends the run when the status reads completed. Otherwise Wait sends it backGet Video1 for another look.| Node | What it does |
|---|---|
| News | Posts to Apify's website-content-crawler, with https://www.morningbrew.com/issues/latest as its start address and markdown output |
| Script Writer | An agent on openai/gpt-4.1-mini through OpenRouter. It gets the page's text and answers with one spoken paragraph |
| Generate Video1 | Posts to HeyGen's v2/video/generate with an avatar, a voice, a speed of 1.1 and a size of 1280 by 720 |
| Get Video1 | Asks HeyGen's v1/video_status.get for the status of the video Generate Video1 started |
News. The system message of Script Writer talks about Morning BrewScript Writer. As exported it asks for one paragraph of 40 to 60 words"maxCrawlPages": 1 to the body of News. The body sets no page or depth limit, so theavatar_id, avatar_style, voice_id, speed and dimension in Generate Video1.News. Nothing schedules the workflow as exported.Generate Video1 sends a fixed line, not the recap. Step 7 above is what connects them.completed ends the loop. A render that HeyGen reports as failed is checked again and again, so watch the firstfailed if you automate it.If to download it, save it or post it.README.md 5 KB workflow.json 14 KB
uwg · Kit
Holds a set of image upscaling models gathered from the OpenModelDB community, for people who want to enlarge low-resolution pictures with AI on their own comp…
nerijs · Kit
A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…
microsoft · Kit
Turns written conversations into spoken audio with up to four speakers and about 90 minutes of speech, an open Microsoft text-to-speech model for research on p…
LiconStudio · Kit
Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…
nhathoangfoto · Kit
A LoRA for FLUX.2 Klein 9B that puts a character into the pose shown by a mannequin reference while keeping the character's face and style. For artists and des…
leejet · Kit
Generates images from text on modest GPUs, using quantized Z-Image-Turbo files made for stable-diffusion.cpp. For people who run image models on their own comp…