Bonsai-27B-GGUF
lmstudio-community · Kit
A GGUF conversion of the 27B Bonsai model for LM Studio, with a 3.80 GB Q1_0 language file and a 0.93 GB BF16 vision projector. Tested for text, vision and par…
An n8n workflow that writes a voice-over for a video. It picks frames from the video, has an OpenAI vision model describe them in batches, turns the script into speech and saves the mp3 to Google Drive.
Video narration script and voice-over from sampled frames 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.
Manual run
It starts when you press Test workflow, and there is no form:
A voice-over mp3 for the video in your Google Drive folder
What you need before you start.
Vision model and voice
Writes the narration from the frames with gpt-6-luna, and reads the script aloud.
NeedsOpenAI API key
File storage
Receives the finished mp3 in the folder you set.
NeedsGoogle Drive OAuth2 credential and a folder ID
Checked by Mindket on 13 Nov 2026
This n8n workflow writes a voice-over for a video. It downloads a video and picks up to 90 frames spread evenly over it with OpenCV. An OpenAI vision model looks at the frames in batches of 15 and writes the narration one batch after another, each batch carrying on from the script so far. OpenAI text-to-speech then reads the whole script aloud, and the mp3 is saved to Google Drive. Fourteen nodes do the work, beside seven sticky notes.
Creators and marketing teams who want a first draft of a spoken commentary for a short clip, and who run their own n8n server. Skip it if you use n8n Cloud, because the frame step needs OpenCV.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Marketing | Social media teams | Draft a voice-over for a short product clip | A team runs a 20 second demo clip and gets a script and an mp3 to edit. |
| Travel | Tourism boards | Describe scenery footage in a calm voice | A tourism board turns a clip of a harbor at dawn into a spoken description. |
| Education | Teachers | Add a spoken description to a silent lesson video | A teacher gets a narration for a clip of a science experiment. |
| Media | Content teams | Make a first draft of commentary for raw footage | An editor listens to a draft for a street clip before writing the final text. |
You need your own n8n server with a Python runner that has OpenCV, an OpenAI key and a Google Drive account.
Your own n8n server, set up with a Python task runner that can import OpenCV, plus an OpenAI key and Google Drive.
Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. The runner step takes the longest, so do it first.
| Need | Detail |
|---|---|
| n8n | Your own server with a Python task runner |
| OpenCV | opencv-python-headless in the runner image, with cv2 allowed |
| OpenAI | An API key that can use gpt-6-luna and the speech endpoint |
| Google Drive | An OAuth2 credential and a folder |
| GraphicsMagick | Used by the Edit Image node, and included in n8n’s own Docker image |
workflow.json.opencv-python-headless in the runner image, set N8N_RUNNERS_EXTERNAL_ALLOW to cv2 and N8N_RUNNERS_STDLIB_ALLOW to base64. Set N8N_RUNNERS_BUILTINS_DENY to its default list without open.OpenAI Chat Model and Use Text-to-Speech.Upload to GDrive. Replace YOUR_FOLDER_ID with your folder’s ID.Download Video.Download Video and Capture Frames by themselves first. When frames come back, press Test workflow.Press Test workflow. A run takes several minutes, because the frame step takes a minute or two and the loop waits 30 seconds after each of six rounds. Start with the sample video. Then change the address in Download Video, and keep the video short, because the frames sit in memory.
| To change | Where |
|---|---|
| The narration style | The prompt in Generate Narration Script |
| How many frames | max_frames in Capture Frames |
| The frame size | The width and height in Resize Frame |
| The voice | The model and voice in Use Text-to-Speech |
| The pause between rounds | Stay Within Service Limits |
| The video | The address in Download Video |
A team runs the sample clip of a busy street with rickshaws and people.
The frame step returns about 90 pictures, and six rounds of the vision model describe them in the voice of a nature documentary narrator. The mp3 lands in the Drive folder. Listen to it before you use it, because a model can describe things that are not in the clip.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A task runner is a small separate program that runs the Python for n8n. This workflow turns a video into a handful of pictures, asks a model to describe them and then reads the description aloud. Try the sample clip first.
For experts. The script grows round by round, because each prompt repeats the parts already written, and the chain has a fixed set of image slots, so a round cannot carry more.
| Node | What it does | What to know |
|---|---|---|
Capture Frames | Writes the video to a temporary file and reads up to 90 frames | It needs cv2 and base64 allowed, and open taken off the denied list |
For Every 15 Frames | Sends 15 frames in each round | The chain has 15 image slots, so this size is the limit |
Generate Narration Script | Looks at the 15 images and writes a part of the script | From round two it repeats the earlier parts in its prompt |
Stay Within Service Limits | Pauses between rounds | It is 30 seconds here, and the original had no values, so its default was one hour |
Use Text-to-Speech | Reads the joined script aloud | It sets no model, so n8n uses tts-1 |
Two models are retiring, the frame step is the hard one to set up and the voice must be announced as AI.
_input, which n8n’s Python runner does not offer. Mindket’s copy is indented and uses _item to get the video. n8n’s docs, read on 12 November 2026, say Pyodide is removed from n8n 2.0. They also say Cloud allows no Python imports. So this step needs your own server and a runner with OpenCV. Run it by itself firstgpt-4o-2024-08-06. OpenAI’s deprecations page, read on 12 November 2026, lists it for shutdown on 14 January 2027, with gpt-6-luna as the replacement, which takes image input. Mindket’s copy uses gpt-6-lunaUse Text-to-Speech sets no model, so n8n uses tts-1. The same page lists tts-1, tts-1-hd and gpt-4o-mini-tts for shutdown on 6 January 2027, with gpt-realtime-2.1-mini as the replacement. OpenAI’s text to speech guide says that model is not supported by the speech endpoint this node calls, so plan to replace the step before thenAn n8n workflow that narrates a video. It downloads a video, picks up to 90 frames spread evenly over it and sends them in
batches of 15 to an OpenAI vision model, which writes the narration script one batch after another. The finished script
goes to OpenAI text-to-speech, and the mp3 voice-over is uploaded to Google Drive.
workflow.json: the workflow as n8n exports it, 14 working nodes and seven sticky notes. It holds no credential.README.md: these notes.Capture Frames is a Python node. The original copy had lost its indentation, with every line at the same level, so it_input.item.binary.data.data, which n8n's Python runner does not offer. The_item["binary"]["data"]["data"]. Its import of NumPy, which it never used, is gone.OpenAI Chat Model held gpt-4o-2024-08-06. OpenAI's deprecations page, read on 12 November 2026, lists it for shutdowngpt-6-luna as the replacement. The node is now version 1.2 and the model is gpt-6-luna. ItsStay Within Service Limits had no values set, so it used n8n's defaults, which are one hour. It now waits 30 seconds.Upload to GDrive held its author's folder ID. It now holds YOUR_FOLDER_ID.gpt-6-luna and OpenAI's speech endpoint.workflow.json.opencv-python-headless in that image, setN8N_RUNNERS_EXTERNAL_ALLOW to cv2 and set N8N_RUNNERS_STDLIB_ALLOW to base64. The runner's source, read on theopen by default, and this script uses it to save the video before reading it. SetN8N_RUNNERS_BUILTINS_DENY to the default list without open.OpenAI Chat Model and Use Text-to-Speech.Upload to GDrive. Replace YOUR_FOLDER_ID with the ID of your/folders/.Download Video. Pick a short one in a format OpenCV can read.Download Video and then Capture Frames by themselves first. When they return frames, press Test workflow.Download Video downloads the sample mp4, about 3 MB.Capture Frames saves the video as a temporary file, steps through it at an even spacing and returns each frame asSplit Out Frames makes one item for each frame.For Every 15 Frames takes 15 frames at a time. Its done line goes to Combine Script, and its loop line goes toConvert to Binary.Convert to Binary turns each text into an image file. Resize Frame fits it into 768 by 768 pixels with itsAggregate Frames puts the 15 images on one item.Generate Narration Script attaches the 15 images and asks OpenAI Chat Model for a short voice-over script. From theStay Within Service Limits waits 30 seconds, and the loop takes the next 15 frames.Combine Script gathers the parts. Use Text-to-Speech joins them with line breaks and makes an mp3. Upload to GDrivenarrating-video-using-vision-ai- and the time, ending in .mp3.Generate Narration Script.max_frames in Capture Frames.For Every 15 Frames. The chain has 15 image slots, so a bigger batch needs more slots there.Resize Frame.Use Text-to-Speech.Stay Within Service Limits.Download Video.Capture Frames is the hard step. The OpenCV calls are the original's, and only the indentation and the way the video isgpt-6-luna is the replacement that OpenAI's deprecations page names for the dated gpt-4o version in the original.Use Text-to-Speech sets no model, so n8n uses its default, tts-1. The same deprecations page lists tts-1, tts-1-hd andgpt-4o-mini-tts for shutdown on 6 January 2027, with gpt-realtime-2.1-mini as the replacement. The text to speechStay Within Service Limits if your rate limits are high.NOTICE.md 614 B README.md 7 KB workflow.json 16 KB
lmstudio-community · Kit
A GGUF conversion of the 27B Bonsai model for LM Studio, with a 3.80 GB Q1_0 language file and a 0.93 GB BF16 vision projector. Tested for text, vision and par…
LibertAIDAI · Kit
Runs DeepSeek-V4.1-Flash-1017 as a 2.9 bits-per-weight EXL3 quantization, a 196 GiB copy for people serving large models on their own hardware. Perplexity stay…
facebook · Kit
Generates short music clips from a text description or an audio prompt, in the small checkpoint of facebook's MusicGen. It suits developers and music hobbyists…
alchaincyf · Skill
Turns a one-line request in your AI agent into a finished design: a launch animation, a clickable app prototype, an editable slide deck, an infographic or a se…
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…
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…