Ditt ”snabba” kortformatsklipp blir till en mini-produktionssprint. Manus, visuellt, voiceover, musik, undertexter, exporter, filnamn. Sedan gör du om allt i morgon.
Den här ChatGPT-videoautomationen slår hårdast mot social media managers, men marknadsförare och småföretagare känner också av det. Du får konsekventa 9:16-videor utan att behöva bo i redigeringsprogram.
Det här arbetsflödet tar en enda prompt och producerar en färdig att publicera vertikal video (inklusive berättarröst, bakgrundsmusik och textöverlägg). Du får se hur delarna hänger ihop, vad du behöver och de vanligaste fallgroparna att undvika.
Så fungerar den här automationen
Hela n8n-flödet, från trigger till slutresultat:
n8n Workflow Template: ChatGPT + JsonCut: vertikala videor redo att posta
flowchart LR
subgraph sg0["Form Input Flow"]
direction LR
n0["<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/form.svg' width='40' height='40' /></div><br/>Form Input Trigger"]
n1@{ icon: "mdi:robot", form: "rounded", label: "Compose Script & Prompts", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Image Prompt List", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Create Image Variant", pos: "b", h: 48 }
n4["<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/>Upload Background Visuals"]
n5@{ icon: "mdi:cog", form: "rounded", label: "Aggregate Image URLs", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Generate Voice Narration", 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/code.svg' width='40' height='40' /></div><br/>Compute Audio Length"]
n8["<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/>Upload Narration Audio"]
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 Ambient Audio List"]
n10["<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 Random Audio"]
n11["<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/>Upload Background Audio"]
n12["<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 Watermark Asset"]
n13["<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/>Upload Watermark"]
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/merge.svg' width='40' height='40' /></div><br/>Combine Upload Streams"]
n15@{ icon: "mdi:cog", form: "rounded", label: "Collect Upload Results", 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/>Initiate Render Job"]
n17@{ icon: "mdi:cog", form: "rounded", label: "Delay Timer", pos: "b", h: 48 }
n18["<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/>Query Render Status"]
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Completion", pos: "b", h: 48 }
n20["<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 Output File"]
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/nocodb.svg' width='40' height='40' /></div><br/>Store Video Record"]
n22@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Detect Failure", pos: "b", h: 48 }
n23@{ icon: "mdi:location-exit", form: "rounded", label: "Abort on Failure", pos: "b", h: 48 }
n17 --> n18
n22 --> n23
n22 --> n17
n15 --> n16
n19 --> n20
n19 --> n22
n13 --> n14
n10 --> n11
n20 --> n21
n6 --> n7
n3 --> n4
n14 --> n15
n16 --> n17
n12 --> n13
n0 --> n1
n0 --> n9
n0 --> n12
n8 --> n14
n2 --> n3
n5 --> n14
n11 --> n14
n18 --> n19
n4 --> n5
n7 --> n8
n9 --> n10
n1 --> n2
n1 --> n6
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 trigger
class n1,n3,n6 ai
class n19,n22 decision
class n4,n8,n9,n10,n11,n12,n13,n16,n18,n20 api
class n7 code
classDef customIcon fill:none,stroke:none
class n0,n4,n7,n8,n9,n10,n11,n12,n13,n14,n16,n18,n20,n21 customIcon
Problemet: kortformatsvideo kräver för många ”små” steg
Kortformat ska gå snabbt. Ärligt talat gör det sällan det. Du börjar med en enkel idé, och plötsligt jonglerar du fem olika verktyg för att få det att se och låta ”på riktigt”. Även med mallar lägger du tiden på limjobbet: leta upp musik som funkar, skapa en voiceover som inte låter robotisk, ändra storlek på assets och synka allt till beatet. Missar du en detalj ser slutrendern fel ut, och då gör du om. Det är precis den typen av slit som dödar kontinuiteten.
Det är inte en stor uppgift. Det är dussintals små.
- Du skriver om manus för att hooken är svag eller tempot känns fel när du väl hör berättarrösten.
- Visuellt material genereras, laddas ned, döps om, laddas upp igen – och sedan inser du att du behöver en annan stil och börjar om.
- Musikval blir en tidstjuv eftersom ”gratis” spår ändå kräver licenskoll och volymbalansering.
- Kvaliteten sjunker när du stressar, vilket betyder fler ändringar och färre inlägg som faktiskt presterar.
Lösningen: en prompt → full 9:16-video, automatiskt
Det här n8n-arbetsflödet gör en enda formulärinlämning till en komplett vertikal video som du kan publicera på Instagram Reels, TikTok eller YouTube Shorts. Det börjar med en enkel prompt (ditt tema, miljö och stil). ChatGPT genererar ett sammanhållet manus plus en uppsättning bildprompter som matchar berättelsen. Google Gemini skapar bakgrundsbilderna, medan OpenAI text-till-tal producerar berättarrösten. Sedan hämtar flödet ett CC-licensierat ambient musikspår från Openverse, laddar upp alla assets till JsonCut och ber JsonCut att sätta ihop allt till en polerad 9:16-klippning med överlägg, övergångar och ljudmixning. När det är klart hämtas den färdiga filen och sparas (valfritt i NocoDB) så att du kan hantera resultaten utan att gräva i mappar.
Arbetsflödet startar när du skickar in formulärinput i n8n. Därifrån skapar AI manus, bilder och berättarröst, och sedan komponerar JsonCut videon och renderar den. Till sist kontrollerar n8n renderstatus tills allt är klart och sparar resultatet så att du kan använda det direkt.
Det du får: automation kontra resultat
| Vad det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här kan det se ut
Säg att du producerar 5 Shorts i veckan. Manuellt är det vanligt att lägga cirka 20 minuter på att skriva, 20 minuter på att samla visuellt material, 20 minuter på att spela in eller generera röst och ytterligare 20 minuter på att redigera och exportera. Det är ungefär 1,5 timme per video, alltså runt 7 timmar i veckan. Med det här flödet skickar du in ett formulär (2 minuter) och låter sedan automationsflödet jobba medan JsonCut renderar (flödet noterar att processningen tar 1–2 minuter, så räkna med cirka 2 minuter). Du granskar fortfarande innan publicering, men grovjobbet är gjort.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- JsonCut API för att komponera och rendera den färdiga videon.
- OpenAI API för att generera manus och berättarröst (TTS).
- Google Gemini API för att skapa tematiska bakgrundsbilder.
- NocoDB (valfritt) för att spara och hantera videoposter.
- JsonCut API-nyckel (hämta den från app.jsoncut.com).
Kunskapsnivå: Medel. Du behöver vara bekväm med att lägga in API-nycklar, testköra och justera prompter utan att sabba flödet.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En formulärinlämning sätter igång allt. Du fyller i tema, miljö och stilpreferenser en gång, och sedan börjar n8n sätta ihop hela produktionspaketet i bakgrunden.
Manus och visuell plan genereras tillsammans. ChatGPT tar fram berättartext och en lista med bildprompter, vilket gör att det visuella följer berättelsen i stället för att kännas slumpmässigt.
Assets skapas och laddas upp automatiskt. Google Gemini genererar bildvarianter, OpenAI skapar berättarrösten och flödet hämtar ett CC-licensierat ambient spår från Openverse. Allt (inklusive en vattenmärkesasset) laddas upp via HTTP-anrop till JsonCut så att det kan byggas ihop konsekvent.
JsonCut renderar, n8n övervakar och hämtar sedan den färdiga filen. Flödet startar ett renderjobb, väntar, kontrollerar status och hanterar fel. När det är klart laddar det ner resultatet och sparar en post i NocoDB så att du hittar det senare utan gissningar.
Du kan enkelt ändra promptstilen och JsonCut-kompositionsinställningarna för att matcha olika nischer, varumärkesriktlinjer eller plattformsspecifika format. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera formulärtriggern
Konfigurera formuläret som fångar in indata för videokonceptet och startar arbetsflödet.
- Lägg till noden Form Input Trigger och ställ in Form Title till
Social Video Production Input. - Ställ in Form Description till
Provide the core idea and the setting for your video. These details will guide the generation of a polished, ready-to-publish social media video.. - Under Form Fields skapar ni tre fält med etiketterna Video Theme, Video Setting och Image Style, som matchar platshållarna från nodkonfigurationen.
- Bekräfta att Form Input Trigger skickar utdata till Compose Script & Prompts, Retrieve Ambient Audio List och Fetch Watermark Asset parallellt.
Form Input Trigger skickar utdata till både Compose Script & Prompts och Retrieve Ambient Audio List och Fetch Watermark Asset parallellt.
Steg 2: Anslut primära tjänster (AI och mediauppladdningar)
Anslut autentiseringsuppgifter för AI-generering och mediauppladdningar så att arbetsflödet kan skapa resurser och skicka dem till renderings-API:t.
- Öppna Compose Script & Prompts och ställ in JSON Output till
true. Credential Required: Anslut eraopenAiApi-uppgifter. - I Create Image Variant ställer ni in Prompt till
=Generate in the format 9:16 (no text in image): {{ $json['message.content.image_prompts'] }}och Resource tillimage. Credential Required: Anslut eragooglePalmApi-uppgifter. - I Generate Voice Narration ställer ni in Input till
={{ $json.message.content.full_text }}och Voice tillecho. Credential Required: Anslut eraopenAiApi-uppgifter. - Koppla
httpHeaderAuth-uppgifter till uppladdnings- och rendernoderna: Upload Background Visuals, Upload Narration Audio, Upload Background Audio, Upload Watermark, Initiate Render Job, Query Render Status och Retrieve Output File. Credential Required: Anslut erahttpHeaderAuth-uppgifter.
Compose Script & Prompts skickar utdata till både Split Image Prompt List och Generate Voice Narration parallellt.
Steg 3: Konfigurera innehållsgenerering och resursuppladdningar
Konfigurera pipelines för bild, berättarröst och ambientt ljud så att alla resurser laddas upp innan rendering.
- I Split Image Prompt List ställer ni in Field To Split Out till
message.content.image_prompts. - I Upload Background Visuals ställer ni in URL till
https://api.jsoncut.com/api/v1/files/upload, Method tillPOSToch Content Type tillmultipart-form-data. - I Aggregate Image URLs aggregerar ni fältet
data.storageUrlså att bild-URL:er lagras som en lista. - I Compute Audio Length behåller ni Language som
pythonoch låter det tillhandahållna skriptet vara kvar för att beräknaduration_seconds. - I Retrieve Ambient Audio List ställer ni in URL till
https://api.openverse.engineering/v1/audio/och säkerställer att query-parametrarna inkluderarq=ambiente,license=cc0,by,by-saochformat=json. - I Download Random Audio ställer ni in URL till
={{ $json.results[Math.floor(Math.random() * $json.results.length)].url }}. - Säkerställ att Upload Narration Audio och Upload Background Audio båda postar till
https://api.jsoncut.com/api/v1/files/uploadmed binära fil-bodyparametrar.
Upload Background Visuals skickar utdata till Aggregate Image URLs, och Aggregate Image URLs skickar utdata till Combine Upload Streams.
Generate Voice Narration skickar utdata till Compute Audio Length, och sedan skickar Compute Audio Length utdata till Upload Narration Audio.
Retrieve Ambient Audio List skickar utdata till Download Random Audio, och sedan skickar Download Random Audio utdata till Upload Background Audio.
Fetch Watermark Asset skickar utdata till Upload Watermark.
Upload Watermark, Upload Narration Audio, Upload Background Audio och Aggregate Image URLs matas alla in i Combine Upload Streams, som sedan skickar utdata till Collect Upload Results.
⚠️ Vanlig fallgrop: Om Aggregate Image URLs inte aggregerar data.storageUrl kommer render-payloaden att misslyckas eftersom $json.upload_results[0].storageUrl inte blir en lista.
Steg 4: Konfigurera render-jobbet och pollningsloopen
Bygg render-payloaden, starta jobbet och polla tills det är klart.
- I Initiate Render Job ställer ni in URL till
https://api.jsoncut.com/api/v1/jobsoch Method tillPOST. - Ställ in JSON Body till det angivna uttrycket och behåll alla inbäddade uttryck, inklusive
{{ $('Compute Audio Length').item.json.duration_seconds }}och{{ $json.upload_results[0].storageUrl[0] }}för timing och mediasökvägar. - I Delay Timer ställer ni in Unit till
secondsoch Amount till3. - I Query Render Status ställer ni in URL till
=https://api.jsoncut.com/api/v1/jobs/{{ $('Initiate Render Job').item.json.data.jobId }}. - I Validate Completion ställer ni in villkoret till att
={{ $json.data.status }}är lika medCOMPLETED.
Initiate Render Job skickar utdata till Delay Timer, därefter skickar Delay Timer utdata till Query Render Status, och Query Render Status skickar utdata till Validate Completion.
3 sekunder för att minska frekvensen för API-pollning.Steg 5: Konfigurera lagring av utdata
Ladda ned den färdiga videon och lagra den i er databas.
- I Retrieve Output File ställer ni in URL till
=https://api.jsoncut.com/api/v1/files/{{ $json.data.outputFileId }}/downloadoch behåller svarsformatet som en fil. - I Store Video Record ställer ni in Project ID och Table till era NocoDB-ID:n (ersätt
[YOUR_ID]). - Mappa fält i Store Video Record med uttryck:
={{ $('Form Input Trigger').item.json['Video Theme'] }},={{ $('Form Input Trigger').item.json['Video Setting'] || "" }}och={{ $('Form Input Trigger').item.json['Image Style'] || "" }}. - Ställ in fältet Output så att det använder Binary Data från
data-egenskapen. - Credential Required: Anslut era
nocoDbApiToken-uppgifter i Store Video Record.
Validate Completion skickar utdata till Retrieve Output File när status är COMPLETED, och sedan skickar Retrieve Output File utdata till Store Video Record.
Steg 6: Lägg till felhantering
Stoppa arbetsflödet om renderingen misslyckas och undvik oändlig pollning.
- I Detect Failure behåller ni villkoren som kontrollerar att
={{ $json.data.status }}är lika medFAILEDellerCANCELLED. - Koppla “true”-vägen från Validate Completion till Retrieve Output File och “false”-vägen till Detect Failure.
- Koppla Detect Failure till Abort on Failure så att arbetsflödet stoppas med meddelandet
Failed to generate image.
Steg 7: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att säkerställa att resurser laddas upp, att renderingen slutförs och att videon lagras korrekt.
- Klicka på Execute Workflow och skicka in formuläret Form Input Trigger med exempelvärden för Video Theme och Video Setting.
- Verifiera att Compose Script & Prompts returnerar JSON med
image_prompts,full_textochtext_segments. - Bekräfta att Combine Upload Streams och Collect Upload Results innehåller URL:er för bilder, berättarröstljud, bakgrundsljud och vattenstämpeln.
- Kontrollera Query Render Status tills Validate Completion routar till Retrieve Output File.
- Bekräfta att Store Video Record skapar en ny rad i NocoDB med utdatafilen bifogad.
- När testet är lyckat, växla arbetsflödet till Active för användning i produktion.
Vanliga fallgropar
- JsonCut-inloggningsuppgifter kan löpa ut eller vara felkonfigurerade. Om det slutar fungera, kontrollera först din n8n HTTP Header Auth-inloggning (headernamn x-api-key).
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in ert varumärkesspråk tidigt, annars kommer du redigera output för alltid.
Vanliga frågor
Cirka 45 minuter om dina API-nycklar är redo.
Nej, ingen kodning krävs. Du klistrar mest in API-nycklar, justerar några prompter och kör testinlämningar.
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 API-användning för OpenAI, Gemini och JsonCut (oftast några cent per video, beroende på längd och inställningar).
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 hanterar n8n bra. Egen hosting ger dig obegränsat antal körningar men kräver grundläggande serverhantering.
Ja, och det bör du. De flesta team börjar med att redigera innehållet i ChatGPT-noden ”Compose Script & Prompts” så att hook, tempo och ordval matchar nischen (träning, B2B, fastigheter, coaching). Du kan också ändra inställningarna för bildgenerering i Google Gemini för att låsa en konsekvent art direction, och sedan justera JsonCut-render-payloaden för att ändra typsnitt, timing för överlägg och placering av vattenmärke. Om du vill ha full automation kan du byta formulärtriggern mot en trigger från Google Sheets eller en databas så att godkända idéer renderas utan manuell inlämning.
Oftast är det ett problem med API-nyckeln. Generera en ny JsonCut-nyckel i app.jsoncut.com och uppdatera sedan n8n HTTP Header Auth-inloggningen med rätt headernamn (x-api-key). Om det fortfarande misslyckas, kontrollera att din JsonCut-plan har API-åtkomst aktiverad och bekräfta att request-URL:erna inte har ändrats. Rate limiting kan också dyka upp när du testkör många körningar direkt efter varandra.
Om du kör n8n med egen hosting finns ingen gräns för antal körningar, så det beror främst på din server och API-gränserna hos OpenAI, Gemini och JsonCut.
För det här flödet är n8n oftast ett bättre val eftersom du kan hantera logik i flera steg (loopar, förgreningar, retries) utan att betala extra för varje väg, och du kan köra med egen hosting för obegränsade körningar. Mönstret för renderövervakning (vänta, polla status, validera, försök igen) är också mycket enklare att styra i n8n än i de flesta ”enkla automationsverktyg”. Å andra sidan kan Zapier eller Make kännas snabbare för lätta uppgifter som ”ny rad i Sheets → skicka Slack-meddelande”. Det här flödet är mer som ett mini-produktionssystem. Om du vill ha hjälp att välja, Prata med en automationsexpert.
Sätt upp det här en gång, så slipper du ”producera videor” hela veckan. Du godkänner bara idéer och publicerar resultaten.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.