Du börjar med en enkel lista över resmål i Google Sheets … och på något sätt förvandlas det till timmar av kopiering, promptjusteringar, filjakt och kaoset “vart tog den där renderingen vägen?”.
Videoautomation i Sheets är för dem som känner den smärtan mest: marknadschefer som försöker hålla en contentkalender vid liv, reseskapare som publicerar dagligen och små team som behöver output utan att anställa en till redigerare.
Det här arbetsflödet gör om en rad i Google Sheets till en färdig 20-sekunders resevideo som sparas i Google Drive. Du får se vad som automatiseras, vad du får tillbaka och vad som krävs för att köra det stabilt.
Så här fungerar automationen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Google Sheets till Google Drive, videor klara
flowchart LR
subgraph sg0["Manual Start Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Start Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Fetch Prompt Row", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Expand Content Items", pos: "b", h: 48 }
n3@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n4@{ icon: "mdi:robot", form: "rounded", label: "Image Prompt Builder", pos: "b", h: 48 }
n5["<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/code.svg' width='40' height='40' /></div><br/>Strip Line Breaks"]
n6@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assign Prompt Text", pos: "b", h: 48 }
n7["<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 Image Task"]
n8@{ icon: "mdi:cog", form: "rounded", label: "Pause 90 Seconds", 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/>Retrieve Image Task"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Limit Records", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Mark Video Status", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Audio Prompt Builder", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assign Audio Prompt", pos: "b", h: 48 }
n14["<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/>Synthesize Audio"]
n15@{ icon: "mdi:cog", form: "rounded", label: "Upload Audio File", 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/merge.svg' width='40' height='40' /></div><br/>Combine Streams"]
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/>Render Final Video"]
n18@{ icon: "mdi:cog", form: "rounded", label: "Pause 25 Seconds", pos: "b", h: 48 }
n19["<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 Rendered Video"]
n20@{ icon: "mdi:database", form: "rounded", label: "Update Output Sheet", pos: "b", h: 48 }
n21@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Trigger", pos: "b", h: 48 }
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/>Retrieve Video Task"]
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/>Create Video Clips"]
n24@{ icon: "mdi:cog", form: "rounded", label: "Pause 2 Minutes", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Extract URL Parts"]
n26@{ icon: "mdi:cog", form: "rounded", label: "Share Audio File", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-vertical", form: "rounded", label: "Assemble Content Array", pos: "b", h: 48 }
n28@{ icon: "mdi:brain", form: "rounded", label: "Gemini Chat Model", pos: "b", h: 48 }
n10 --> n11
n16 --> n25
n3 -.-> n4
n24 --> n22
n1 --> n27
n5 --> n6
n13 --> n14
n2 --> n4
n18 --> n19
n8 --> n9
n9 --> n23
n22 --> n16
n22 --> n10
n26 --> n16
n27 --> n2
n6 --> n7
n12 --> n13
n17 --> n18
n11 --> n12
n19 --> n20
n14 --> n15
n7 --> n8
n23 --> n24
n25 --> n17
n15 --> n26
n21 --> n1
n4 --> n5
n28 -.-> n12
n0 --> n1
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 n0,n21 trigger
class n4,n12 ai
class n3,n28 aiModel
class n1,n11,n20 database
class n7,n9,n14,n17,n19,n22,n23 api
class n5,n25 code
classDef customIcon fill:none,stroke:none
class n5,n7,n9,n14,n16,n17,n19,n22,n23,n25 customIcon
Problemet: att göra videor av resmålsidéer är ett slit
“Vi har idéerna i ett ark” låter organiserat. I praktiken betyder det oftast att du fortfarande måste skriva prompts, generera bilder, vänta på renderingar, ladda ner filer, ladda upp till Drive och sedan uppdatera spårningen så att du kommer ihåg vad som publicerats. Missar du ett steg får du generera om material eftersom en länk gått ut eller ljudfilen aldrig sparades. Och den mentala belastningen är påtaglig: att växla mellan verktyg, flikar och mappar hela dagen dödar momentum, särskilt när du vill publicera konsekvent.
Det växer snabbt. Här är var det faller isär när du försöker skala bortom “en video när vi får tid”.
- Varje resmål blir ett miniprojekt, så din “contentkalender” blir en backlog som du undviker.
- Manuell promptskrivning ger inkonsekventa visuella uttryck, vilket innebär fler ändringar och svagare varumärkesigenkänning.
- Filer sprids över lokala nedladdningar och slumpmässiga Drive-mappar, så teamet slösar tid bara på att hitta senaste versionen.
- Spårningen blir opålitlig när den bygger på att någon kommer ihåg att uppdatera en statuskolumn efter att renderingen är klar.
Lösningen: generera resevideor från en rad i Google Sheets
Det här n8n-arbetsflödet behandlar ditt Google-ark som en produktionskö. Det börjar med att hämta en resmålsidé (en rad), använder sedan AI för att skapa bildprompts och berättartext. De promptarna skickas vidare för att generera bilder och korta videoklipp, och arbetsflödet väntar på att varje tjänst blir klar innan det går vidare. Därefter syntetiseras en voiceover, ljudet laddas upp till Google Drive och en delbar länk skapas så att renderaren kan komma åt det. Till sist slås allt ihop och en polerad 20-sekunders video renderas via CreateMate, den färdiga filen sparas och ditt ark uppdateras med slutstatus och URL.
Arbetsflödet startar via ett schema eller en manuell körning i n8n och läser sedan nästa resmål i Google Sheets. Därifrån genererar det bilder, videoklipp och voiceover (OpenAI/Gemini + Piapia + Runway + ElevenLabs). Slutresultatet är en publiceringsklar video som sparas i Google Drive och loggas tillbaka i ditt spårningsark.
Det här får du: automation vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut i praktiken
Säg att du publicerar 5 resevideor i veckan. Manuellt kanske du lägger cirka 15 minuter på att skriva prompts, cirka 20 minuter på att generera och samla media, ytterligare 20 minuter på att sätta ihop, plus 10 minuter på uppladdning och uppdatering av spårningsarket. Runda av till cirka 1 timme per video, alltså ungefär 5 timmar i veckan. Med det här arbetsflödet lägger du till ett resmål i Google Sheets (cirka 2 minuter) och väntar sedan på att den automatiska renderingen blir klar i bakgrunden. Du går i princip bara in om du vill finjustera en promptstil.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger funkar bra)
- Google Sheets för resmålsidéer och statusspårning
- Google Drive för att lagra och dela resultat
- OpenAI API-nyckel (hämta den i OpenAI-dashboarden)
- RunwayML API-nyckel (hämta den i ditt Runway-konto)
- ElevenLabs API-nyckel (hämta den i ElevenLabs inställningar)
- Piapia API-nyckel (hämta den från piapia.ai efter registrering)
- CreateMate API-åtkomst (hämta den från createmate.ai)
Kunskapsnivå: Medel. Du kopplar konton, klistrar in API-nycklar och testkör hela flödet från start till mål.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så här fungerar det
Ett schema eller en manuell körning startar allt. n8n kan köras på en timer (dagligen, vardagar, vad som passar) eller så klickar du på kör när du vill batcha innehåll.
Arbetsflödet hämtar ett resmål från Google Sheets. Det läser raden, bygger ut den till strukturerade innehållsdelar och förbereder datan så att AI- och medieverktyg får korrekt formaterade inputs i stället för rörig copy-paste.
AI genererar prompts, media och berättarröst. OpenAI (och valfritt Gemini) skriver bildprompts och ett voiceover-manus, och sedan skickar HTTP-förfrågningar jobb till Piapia (bilder), RunwayML (klipp) och ElevenLabs (röst). Det finns inbyggda väntetider (som 90 sekunder för bilder och cirka 2 minuter för klipp) så att arbetsflödet hämtar färdiga tillgångar i stället för att skapa fel för tidigt.
Allt slås ihop och renderas till en enda video. Ljudet laddas upp till Google Drive och delas, sedan renderar CreateMate den slutliga 20-sekundersfilen. n8n hämtar den färdiga videon, sparar resultatet och uppdaterar ditt Google-ark så att du alltid vet vad som är klart.
Du kan enkelt ändra promptstilen så att den matchar din varumärkesröst utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera den manuella triggern
Ställ in hur arbetsflödet startar så att ni kan köra det manuellt för test eller enligt schema för automatisering.
- Öppna Manual Start Trigger och låt den vara som den är för tester på begäran.
- Öppna Scheduled Run Trigger och definiera intervallet under Rule för att köra automatiskt (t.ex. dagligen eller varje timme).
- Bekräfta att båda triggers är kopplade till Fetch Prompt Row som visas i arbetsflödet.
Steg 2: Anslut Google Sheets
Dessa noder hämtar nästa ToDo-prompt och uppdaterar statusfält i takt med att arbetsflödet körs.
- Öppna Fetch Prompt Row och ställ in Document till
[YOUR_ID]och Sheet tillSheet1. - I Fetch Prompt Row, ställ in filtret så att video status är lika med
ToDo. - Öppna Mark Video Status och behåll Operation som
updatemed row_number satt till{{ $('Fetch Prompt Row').item.json.row_number }}. - Öppna Update Output Sheet och behåll Operation som
updatemed videoLink satt till{{ $json.url }}, video status satt till=Createdoch publish status satt tillProcessed. - Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Fetch Prompt Row, Mark Video Status och Update Output Sheet.
Steg 3: Konfigurera innehållsbygge och generering av bildpromptar
Det här segmentet bygger en innehållsarray, delar upp den i items och genererar rena bildpromptar.
- I Assemble Content Array, ställ in content till
["{{ $json['content1'] }}","{{ $json['content2'] }}","{{ $json['content3'] }}","{{ $json['content4'] }}"]och style till{{ $json.style }}. - I Expand Content Items, ställ in Field To Split Out till
content. - I Image Prompt Builder, ställ in Text till
content: {{ $json.content }} Style: {{ $('Assemble Content Array').item.json.style }}. - I Strip Line Breaks, behåll den medföljande JavaScript-koden för att ta bort radbrytningstecken.
- I Assign Prompt Text, ställ in prompts till
{{ $json.output }}. - Inloggning krävs: Anslut era openAiApi-uppgifter i OpenAI Chat Model.
- OpenAI-uppgifter läggs till i OpenAI Chat Model, som driver Image Prompt Builder.
Steg 4: Konfigurera skapande av bild- och videouppgifter
Dessa noder genererar bilder, konverterar dem till korta videoklipp och pollar efter resultat med väntesteg.
- I Create Image Task, ställ in URL till
https://api.piapi.ai/api/v1/taskoch behåll JSON-body med"model": "Qubico/flux1-dev"och"task_type": "txt2img". - Inloggning krävs: Anslut era httpHeaderAuth-uppgifter i Create Image Task och Retrieve Image Task.
- I Pause 90 Seconds, ställ in Amount till
90för att ge bildgenereringen tid att slutföras. - I Retrieve Image Task, ställ in URL till
https://api.piapi.ai/api/v1/task/{{ $json.data.task_id }}. - I Create Video Clips, behåll URL som
https://api.dev.runwayml.com/v1/image_to_videooch ställ in body-parametrar för promptImage, modelgen3a_turbo, ratio768:1280och duration5. - I Pause 2 Minutes, ställ in Unit till
minutesoch Amount till2. - I Retrieve Video Task, ställ in URL till
https://api.dev.runwayml.com/v1/tasks/{{ $json.id }}och behåll headernX-Runway-Version: 2024-11-06. - Inloggning krävs: Anslut era httpHeaderAuth-uppgifter i Retrieve Video Task.
[CONFIGURE_YOUR_TOKEN] med en giltig API-token, annars misslyckas anropen.Steg 5: Konfigurera ljudgenerering och lagring
Den här grenen bygger en ljudprompt, syntetiserar ljud och sparar det i Google Drive för senare användning i den slutliga renderingen.
- I Audio Prompt Builder, ställ in Text till
Style: {{ $('Fetch Prompt Row').item.json.style }}. - Inloggning krävs: Anslut era googlePalmApi-uppgifter i Gemini Chat Model.
- Gemini-uppgifter läggs till i Gemini Chat Model, som driver Audio Prompt Builder.
- I Assign Audio Prompt, ställ in audio till
{{ $json.output.trimEnd() }}. - I Synthesize Audio, ställ in URL till
https://api.elevenlabs.io/v1/sound-generationoch mappa text till{{ $json.audio }}med duration_seconds satt till20. - Inloggning krävs: Anslut era httpHeaderAuth-uppgifter i Synthesize Audio.
- I Upload Audio File, ställ in Name till
{{ $('Fetch Prompt Row').item.json.style }}.mp3och välj ert mål-mapp-ID. - I Share Audio File, behåll Operation som
shareoch tillåt anyone att visa. - Inloggning krävs: Anslut era googleDriveOAuth2Api-uppgifter i Upload Audio File och Share Audio File.
Steg 6: Sätt ihop, rendera och uppdatera utdata
Dessa noder sammanfogar ljud- och videodata, renderar den slutliga videon och uppdaterar statusfält. Detta inkluderar en parallell gren efter videohämtningen.
- Efter Retrieve Video Task, notera att den skickar utdata till både Combine Streams och Limit Records parallellt.
- I Limit Records, behåll standardinställningarna och koppla den till Mark Video Status för att sätta video status till
Created. - I Combine Streams, ställ in Mode till
combineoch Combine By tillcombineAll. - I Extract URL Parts, behåll JavaScript-koden som bygger en
urls-array från videoutdata. - I Render Final Video, ställ in URL till
https://api.creatomate.com/v1/rendersoch ersätt[YOUR_ID]i template_id. - I Render Final Video, behåll ändringarna som mappar videokällor och textfält som
{{ $json.urls[0].url }}och{{ $('Fetch Prompt Row').first().json.content1 }}. - I Pause 25 Seconds, ställ in Amount till
25och hämta sedan resultat via Fetch Rendered Video med URL{{ $json.url }}.
Steg 7: Testa och aktivera ert arbetsflöde
Kör ett kontrollerat test, verifiera utdataraderna och aktivera därefter schemalagd automatisering.
- Klicka Execute Workflow på Manual Start Trigger för att köra ett enskilt test.
- Bekräfta att Fetch Prompt Row returnerar en rad med video status satt till
ToDooch att Update Output Sheet skriver den slutliga videoLink. - Verifiera att Google Drive innehåller ljudfilen som skapats av Upload Audio File och delats av Share Audio File.
- När allt är validerat, slå på arbetsflödet till Active så att Scheduled Run Trigger behandlar rader automatiskt.
Vanliga fallgropar
- Inloggningar för Google Sheets kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först inställningarna för autentiseringsuppgifter i n8n och Google OAuth-åtkomst.
- 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 redigera output för alltid.
Vanliga frågor
Cirka 45 minuter om dina API:er är klara.
Nej. Du kommer främst att koppla konton och klistra in API-nycklar i n8n.
Ja. n8n har ett gratis alternativ för egen hosting 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 kostnader för användning av OpenAI, RunwayML, ElevenLabs, Piapia och CreateMate, som beror på hur många videor du genererar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och klarar n8n bra. Egen hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är ärligt talat det första du bör göra. Uppdatera berättelsen och formateringen i delen “Set Content” i arbetsflödet och justera sedan agenten “Image Prompt Builder” så att den alltid levererar din föredragna visuella stil (till exempel filmiskt, minimalistiskt eller “3D-render”-utseende). Du kan också justera “Audio Prompt Builder” så att voiceovern matchar din varumärkeston (mer peppig, mer faktabaserad, kortare meningar). Om du någon gång byter leverantörer är HTTP Request-stegen som anropar Piapia, Runway, ElevenLabs och CreateMate de vanliga ställena att byta ut.
Oftast handlar det om utgången OAuth-åtkomst eller att fel Google-konto är kopplat. Återanslut dina Google Sheets-uppgifter i n8n och bekräfta att kalkylarket är delat med det kontot. Kontrollera också att namn på sheet/flik fortfarande matchar vad arbetsflödet förväntar sig, eftersom en omdöpt flik kan bryta uppslag.
Många, men de verkliga begränsningarna är dina API-kvoter och hur lång tid mediegenereringen tar. På n8n Cloud begränsas du av månatliga körningar i din plan, medan egen hosting tar bort körningstak (då blir servern begränsningen). I praktiken kör de flesta team detta som en jämn kö, till exempel 5–20 videor per dag, så att du inte slår i rate limits i Runway eller hos din renderare.
För mediegenerering i flera steg är n8n oftast bättre eftersom du kan lägga in väntetider, sammanfogningar och förgreningslogik utan att slåss med planbegränsningar. Zapier och Make funkar för enkla flöden av typen “ny rad → ladda upp fil”, men det här arbetsflödet har många rörliga delar: flera externa API:er, statusuppdateringar och hämtsteg efter rendering. n8n ger dig också alternativet för egen hosting, vilket blir viktigt när du börjar generera i volym. Om du vill ha hjälp att välja, prata med en automationsexpert.
När det här väl rullar slutar ditt Google-ark vara en önskelista och börjar fungera som en produktionslina. Arbetsflödet tar hand om de repetitiva delarna så att du kan fokusera på att publicera och förbättra det som faktiskt presterar.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.