Ansiktslösa videor låter enkelt tills du faktiskt försöker producera dem. Manus glider iväg, voiceover matchar inte bilderna och du slutar med att sitta och vakta exporter, länkar och tajming.
Den här Gemini Shotstack videos-automationen träffar YouTube Shorts-skapare först, helt ärligt. Men byråoperatörer som bygger batchar åt kunder och solomarknadsförare som försöker posta dagligen känner av samma slit. Resultatet är rakt: du ger ett ämne, du får en färdig, nedladdningsbar video.
Nedan ser du hur workflowet gör om en idé till manus, röst, visuellt material och en polerad klippning. Sedan vet du vad du behöver för att köra det och var team vanligtvis justerar.
Så fungerar den här automationen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: Gemini + Shotstack: ansiktslösa videor klara åt dig
flowchart LR
subgraph sg0["Manual Launch Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Store Audio in Drive", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Combine Script & Transcript"]
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Parse Schema", pos: "b", h: 48 }
n3@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Launch Trigger", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Craft Image Prompts", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Auto Repair Parser", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Prompt Items", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Delay 5 Minutes", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Clip List", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Shotstack Edit Render"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Delay 1 Minute", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assign Topic Input", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Compose 60s Script", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Normalize Script Text", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Create Voiceover Audio"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Generate Visuals"]
n18@{ icon: "mdi:brain", form: "rounded", label: "Gemini Chat Engine B", pos: "b", h: 48 }
n19@{ icon: "mdi:brain", form: "rounded", label: "Gemini Chat Engine A", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Share Audio Publicly", pos: "b", h: 48 }
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Whisper Audio Transcription"]
n22["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Create Motion Clips"]
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Motion Clips"]
n24["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Motion Clips"]
n25["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Retrieve Images"]
n26["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Shotstack Render Status"]
n27@{ icon: "mdi:cog", form: "rounded", label: "Delay 30 Seconds", pos: "b", h: 48 }
n28["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download Final Output"]
n1 --> n4
n27 --> n25
n8 --> n9
n25 --> n22
n10 --> n26
n7 --> n23
n6 --> n17
n16 --> n0
n16 --> n21
n17 --> n27
n11 --> n12
n23 --> n24
n9 --> n10
n0 --> n20
n15 --> n16
n4 --> n6
n22 --> n7
n20 --> n1
n12 --> n15
n5 -.-> n4
n2 -.-> n5
n19 -.-> n12
n18 -.-> n5
n18 -.-> n4
n24 --> n8
n26 --> n28
n3 --> n11
n21 --> n1
end
subgraph sg1["Flow 2"]
direction LR
n13@{ icon: "mdi:brain", form: "rounded", label: "Utility: OpenAI Chat Session", pos: "b", h: 48 }
end
subgraph sg2["Flow 3"]
direction LR
n14@{ icon: "mdi:brain", form: "rounded", label: "Utility: OpenAI Chat Engine", pos: "b", h: 48 }
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n3 trigger
class n2,n4,n5,n12 ai
class n18,n19,n13,n14 aiModel
class n9,n16,n17,n21,n22,n23,n24,n25,n26,n28 api
classDef customIcon fill:none,stroke:none
class n1,n9,n16,n17,n21,n22,n23,n24,n25,n26,n28 customIcon
Problemet: produktion av ansiktslösa videor har för många överlämningar
Att göra en bra 60-sekunders ansiktslös video är sällan “bara redigering”. Det handlar om att skriva ett tajt manus, generera en voiceover, få fram transkriptet och sedan göra om det till scener som faktiskt matchar orden. Och eftersom varje verktyg har sin egen tidslinje och sitt eget outputformat lägger du märkligt mycket tid på ihoplimning: döpa om filer, kopiera länkar, vänta på renderingar och fixa små tajmingskillnader som får allt att kännas billigt. Multiplicera det med daglig publicering och det blir ett extrajobb.
Friktionen byggs på. Här är var det oftast faller isär.
- Varje extra verktyg innebär ännu en export, ännu en uppladdning och ännu ett ställe där du kan tappa bort den “slutliga” versionen.
- Voiceover och visuellt material hamnar ur synk, så du får klippa scener manuellt bara för att det ska gå att titta på.
- Transkript och undertexter byggs om från grunden, vilket ger ojämnt tempo i en batch.
- Renderköer tvingar dig att vänta, och sedan glömmer du att komma tillbaka och publicera enligt plan.
Lösningen: ett ämne in, färdig ansiktslös video ut
Det här workflowet är byggt för att ta bort överlämningarna som saktar ner dig. Du börjar med att skriva in ett kort ämne i n8n och startar sedan körningen manuellt när du är redo. Gemini skapar ett strukturerat manus för 60 sekunder som är formaterat för röst och scentajming. ElevenLabs gör manuset till en korrekt formaterad voiceover, som lagras i Google Drive och görs delbar så att efterföljande verktyg kan nå den. Whisper transkriberar ljudet, workflowet slår ihop transkript + manus och Gemini använder det sammanslagna underlaget för att skapa tidsstämplade bildprompter som faktiskt ligger i linje med det som sägs. Till sist genererar Leonardo bilderna och korta rörliga klipp, Shotstack syr ihop och polerar klippningen och du laddar ner den färdiga filen.
Workflowet börjar med en enda idé och slutar med en videofil som är redo att publiceras. I mitten använder det transkriptbaserad tajming så att scenerna känns genomtänkta istället för slumpmässiga. Shotstack hanterar sista metern i redigeringen så att du inte fastnar i ett tidslinjeverktyg för varje enskilt output.
Det du får: automation vs. resultat
| Det här workflowet automatiserar | Resultatet du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du publicerar 5 shorts i veckan. Manuell produktion är ofta 30 minuter för att skriva, 20 minuter för att generera röst och fixa uttal, 30 minuter för att leta visuellt material och ytterligare 30 minuter för att redigera och exportera — alltså cirka 2 timmar per video. Med det här workflowet lägger du ungefär 5 minuter på att mata in ämnet och starta körningen och väntar sedan på rendering (cirka 10 minuter för bilder, cirka 5 minuter för klipprendering, plus Shotstacks slutpass). Du kommer tillbaka, laddar ner och är klar.
Det du behöver
- n8n-instans (testa n8n Cloud gratis)
- Self-hosting-alternativ om du föredrar det (Hostinger fungerar bra)
- Google Gemini API för manus- och promptgenerering
- Shotstack för att redigera och rendera den slutliga videon
- ElevenLabs API-nyckel (hämta den i din ElevenLabs-dashboard)
Svårighetsnivå: medel. Du kopplar API:er, klistrar in nycklar i n8n-credentials och justerar prompter utan att sabba JSON-formatering.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Du startar en körning manuellt efter att du har angett ett ämne. Idén sätts i noden “Assign Topic Input”, och sedan drar workflowet igång när du klickar Execute/Test i n8n.
Gemini skriver och formaterar ett 60-sekundersmanus. Den genererar berättarrösten och normaliserar sedan texten till en struktur som är enklare för röstgenerering och senare tajmingsprompter.
Ljud och transkribering skapas parallellt. ElevenLabs genererar voiceovern, Google Drive lagrar den och gör den åtkomlig, och Whisper transkriberar ljudet så att tajmingen baseras på det som faktiskt sägs.
Visuellt material, klipp och slutredigering renderas automatiskt. Gemini tar fram tidsstämplade prompter, Leonardo genererar bilder och rörliga klipp (med inbyggda väntelägen för rendering), och sedan redigerar Shotstack, kontrollerar renderstatus och returnerar en slutlig video som går att ladda ner.
Du kan enkelt ändra manuslängden så att den matchar ditt format och sedan anpassa scenernas stilprompter så att de passar ditt varumärke. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den manuella triggern
Det här arbetsflödet startar vid behov och skickar en ämnesidé till skriptgeneratorn.
- Lägg till och öppna Manual Launch Trigger för att bekräfta att det är startnoden.
- Öppna Assign Topic Input och ställ in Idea till
What is AI Agents. - Säkerställ att Manual Launch Trigger är ansluten till Assign Topic Input.
Steg 2: anslut Google Drive och API-inloggningsuppgifter
Flera noder kräver inloggningsuppgifter för lagring och externa renderingstjänster. Konfigurera detta i förväg för att undvika fel under körning.
- Öppna Store Audio in Drive och välj er destination. Ställ in Name till
=faceless-video-audio-{{ $now.toISO() }}.
Inloggningsuppgifter krävs: Anslut era googleDriveOAuth2Api-inloggningsuppgifter. - Öppna Share Audio Publicly och bekräfta att Operation är
sharemed File ID satt till={{ $json.id }}.
Inloggningsuppgifter krävs: Anslut era googleDriveOAuth2Api-inloggningsuppgifter. - Anslut API-inloggningsuppgifter för alla HTTP-baserade tjänster: Create Voiceover Audio, Generate Visuals, Retrieve Images, Create Motion Clips, Fetch Motion Clips, Shotstack Edit Render och Shotstack Render Status.
Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter. - Öppna Whisper Audio Transcription och bekräfta att URL är
https://api.openai.com/v1/audio/transcriptionsmed multipart-formulärdata-parametrar.
Inloggningsuppgifter krävs: Anslut era openAiApi-inloggningsuppgifter.
Steg 3: konfigurera AI-skript- och promptgenerering
Den här delen genererar skriptet, normaliserar det för voiceover och skapar strukturerade bildprompter med AI-verktyg.
- Öppna Compose 60s Script och bekräfta att promptinmatningen Text är
=Idea: {{ $json.idea }}. - Säkerställ att Gemini Chat Engine A är ansluten som språkmodell för Compose 60s Script.
Inloggningsuppgifter krävs: Anslut era googlePalmApi-inloggningsuppgifter. - Öppna Normalize Script Text och ställ in text till
={{ $json.text.replace(/(\r\n|\n|\r)/g, ""); }}. - Öppna Craft Image Prompts och bekräfta att prompten innehåller transkriptuttrycket
{{JSON.stringify($json.words) }}. - Säkerställ att Gemini Chat Engine B är ansluten som språkmodell för Craft Image Prompts.
Inloggningsuppgifter krävs: Anslut era googlePalmApi-inloggningsuppgifter. - Verifiera parserkedjan: Structured Parse Schema → Auto Repair Parser → Craft Image Prompts. Detta är AI-undernoder; inloggningsuppgifter ska läggas till i den överordnade noden (Craft Image Prompts via Gemini Chat Engine B), inte i parsernoderna.
Steg 4: konfigurera ljudgenerering och transkribering (parallell gren)
Den här delen skapar voiceovern, lagrar den i Drive och transkriberar den. Pipelinen förgrenas parallellt efter att ljudet har skapats.
- Öppna Create Voiceover Audio och ställ in URL till
=https://api.elevenlabs.io/v1/text-to-speech/[YOUR_ID]. Säkerställ att body-parametern text är={{ $json.text }}och att Content-Type ärapplication/json.
Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter. - Create Voiceover Audio skickar utdata till både Store Audio in Drive och Whisper Audio Transcription parallellt.
- I Store Audio in Drive, bekräfta filnamnsuttrycket
=faceless-video-audio-{{ $now.toISO() }}och målmappen. - I Whisper Audio Transcription, bekräfta att model är
whisper-1och att response_format ärverbose_json. - Bekräfta att Share Audio Publicly delar filen och skickar länken vidare till Combine Script & Transcript.
anyone-åtkomst kan Shotstack Edit Render misslyckas med att ladda ljudspåret.Steg 5: generera visuellt material, motion-klipp och bygg tidslinjen
Det här steget omvandlar prompter till bilder, animerar dem, aggregerar klippen och renderar videon via Shotstack.
- Öppna Split Prompt Items och bekräfta att Field to Split Out är
output. - Öppna Generate Visuals och bekräfta body-parametrarna: height
={{ 1280 }}, width={{ 720 }}, prompt={{ $json.prompt }}och modelId[YOUR_ID].
Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter. - Bekräfta timingkedjan: Generate Visuals → Delay 30 Seconds → Retrieve Images → Create Motion Clips → Delay 5 Minutes → Fetch Motion Clips → Download Motion Clips.
- Öppna Create Motion Clips och bekräfta att imageId är
={{ $json.generations_by_pk.generated_images[0].id }}med motionStrength inställd på3och isPublictrue.
Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter. - Öppna Aggregate Clip List och ställ in Aggregate till
aggregateAllItemDatamed Destination Field Namelist.
Steg 6: konfigurera slutrendering och nedladdning
Det här steget bygger den slutliga redigeringen av klippen och ljudet, renderar den, kontrollerar status och laddar ner MP4:an.
- Öppna Shotstack Edit Render och bekräfta att URL är
https://api.shotstack.io/edit/stage/renderoch att JSON Body är tidslinje-payloaden som använder uttryck som{{ $('Store Audio in Drive').first().json.webContentLink }}och{{ JSON.stringify($('Aggregate Clip List').first().json.list.map((item, i) => ({ ... }))) }}.
Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter. - Säkerställ att pollingkedjan för rendering är konfigurerad: Shotstack Edit Render → Delay 1 Minute → Shotstack Render Status.
- Öppna Shotstack Render Status och ställ in URL till
=https://api.shotstack.io/edit/stage/render/{{ $json.response.id }}.
Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-inloggningsuppgifter. - Öppna Download Final Output och ställ in URL till
={{ $json.response.url }}för att hämta den slutliga MP4:an.
Steg 7: testa och aktivera ert arbetsflöde
Kör ett fullständigt test för att verifiera skriptskapande, ljudgenerering, visuell produktion och slutlig videoutdata.
- Klicka på Manual Launch Trigger och kör arbetsflödet en gång med standard-Idea.
- Bekräfta att Create Voiceover Audio producerar binärt ljud och att Store Audio in Drive laddar upp en fil med en publik delningslänk från Share Audio Publicly.
- Verifiera att Generate Visuals skapar bildgenereringar och att Create Motion Clips returnerar motion-MP4-URL:er efter fördröjningarna.
- Kontrollera att Shotstack Render Status returnerar en
response.urloch att Download Final Output laddar ner MP4:an utan problem. - När ni är nöjda, växla arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- Google Drive-credentials kan gå ut eller kräva specifika behörigheter. Om saker skapar fel, kontrollera först det anslutna kontot och scopes i n8n Credentials.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din varumärkesröst tidigt, annars kommer du att redigera output i all oändlighet.
Vanliga frågor
Cirka 45 minuter om du redan har API-nycklarna klara.
Ingen kod krävs. Du klistrar främst in API-nycklar, kopplar Google Drive och justerar ett par prompter.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in API-kostnader för Gemini, ElevenLabs, Whisper, Leonardo och Shotstack.
Två alternativ: n8n Cloud (hanterat, enklaste setup) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serverhantering.
Ja. Uppdatera prompten i noden “Compose 60s Script” så att den siktar på 30 sekunder och håll sedan genereringen av tidsstämplade prompter synkad så att Shotstack får korrekt scentajming. De flesta team justerar också stilprompten som används för Leonardo så att varje klipp ser ut att höra till samma “serie”.
Oftast beror det på en ogiltig eller utgången API-nyckel, eller att dina Shotstack-projektinställningar inte matchar det som renderrequesten förväntar sig. Kontrollera credentials i n8n igen och bekräfta sedan render-endpointen och payload-fälten i HTTP Request-noderna “Shotstack Edit Render” och “Shotstack Render Status”. Om det bara fallerar på hektiska dagar kan det vara rate limits eller längre renderköer, så att öka väntan i “Delay 1 Minute” löser det ofta. Kontrollera också att ljudfilen fortfarande är publikt åtkomlig från Google Drive, eftersom Shotstack behöver hämta den.
Den klarar batchar, men den verkliga begränsningen är din n8n-exekveringsgräns (i Cloud) och renderingstiden i Leonardo och Shotstack. Om du self-hostar finns ingen exekveringsgräns, men du vill ändå sprida ut körningarna eftersom workflowet har väntelägen på 30 sekunder, 1 minut och 5 minuter för extern bearbetning.
Ofta, ja, eftersom det här flödet behöver förgreningar, väntelägen, sammanslagningar och tolkning av strukturerad AI-output, och n8n hanterar det utan att bli en dyr hög av premiumsteg. Zapier eller Make kan fungera för enkla kedjor som “prompt in, fil ut”, men det här workflowet har flera render-checkpoints och statuskontroller. n8n ger dig också self-hosting, vilket spelar roll när du börjar köra batchar varje vecka. Om du siktar på engångsexperiment kan andra verktyg kännas snabbare. Prata med en automationsexpert om du vill ha en rekommendation baserad på din volym och dina kanaler.
Sätt upp det här en gång, så slipper du bygga om samma video-assemblage varje dag. Workflowet tar hand om det repetitiva så att du kan fokusera på idéer och distribution.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.