Att publicera på Facebook, Instagram, LinkedIn och TikTok låter enkelt – tills du skriver om samma idé på fyra olika sätt, ändrar storlek på visuellt material och dubbelkollar konto-ID:n i sista minuten.
Den här Gemini Late-automationen träffar marknadschefer först, ärligt talat. Men solofounders som vill se konsekventa ut och byråledare som hanterar flera kunder känner också av friktionen. Du får plattformsanpassad copy och en varumärkesanpassad bild, publicerat till de kanaler du aktiverar, med en framgångsrapport du faktiskt kan lita på.
Nedan ser du hur flödet körs, vad du behöver koppla in och hur du undviker de vanliga “varför publicerades det inte?”-huvudvärkarna som spräcker scheman.
Så fungerar den här automationen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: Google Gemini + Late: sociala inlägg publiceras åt dig
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:swap-vertical", form: "rounded", label: "Initialize Defaults", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Platform Toggles", pos: "b", h: 48 }
n3["<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 Copy via Gemini"]
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/code.svg' width='40' height='40' /></div><br/>Parse and Select Platforms"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Request Image Render"]
n6@{ icon: "mdi:cog", form: "rounded", label: "Pause 30 Seconds", 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/>Retrieve Render Result"]
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/code.svg' width='40' height='40' /></div><br/>Assemble Media Metadata"]
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/>Fetch Content Length"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check File Size", pos: "b", h: 48 }
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/>Init Large Upload"]
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/>Download Large Media"]
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 to Storage"]
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/>Download Small Media"]
n15["<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 Small Media"]
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/code.svg' width='40' height='40' /></div><br/>Normalize Media Link"]
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/code.svg' width='40' height='40' /></div><br/>Join Content and Media"]
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Branch Facebook", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Branch Instagram", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Branch LinkedIn", pos: "b", h: 48 }
n21@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Branch TikTok", 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/>Publish Facebook Post"]
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/>Publish Instagram Post"]
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/>Publish LinkedIn Post"]
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/>Publish TikTok Post"]
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/merge.svg' width='40' height='40' /></div><br/>Aggregate Results"]
n27["<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/>Build Success Report"]
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/webhook.dark.svg' width='40' height='40' /></div><br/>Return Webhook Reply"]
n26 --> n27
n6 --> n7
n21 --> n25
n18 --> n22
n20 --> n24
n19 --> n23
n8 --> n9
n1 --> n2
n12 --> n13
n7 --> n8
n10 --> n11
n10 --> n14
n16 --> n17
n2 --> n3
n5 --> n6
n25 --> n26
n13 --> n16
n4 --> n5
n3 --> n4
n22 --> n26
n24 --> n26
n17 --> n18
n17 --> n19
n17 --> n20
n17 --> n21
n23 --> n26
n27 --> n28
n9 --> n10
n15 --> n16
n14 --> n15
n11 --> 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 trigger
class n2,n10,n18,n19,n20,n21 decision
class n3,n5,n7,n9,n11,n12,n13,n14,n15,n22,n23,n24,n25,n28 api
class n4,n8,n16,n17,n27 code
classDef customIcon fill:none,stroke:none
class n3,n4,n5,n7,n8,n9,n11,n12,n13,n14,n15,n16,n17,n22,n23,n24,n25,n26,n27,n28 customIcon
Varför det här spelar roll: publicering på flera plattformar äter upp din vecka
Att korsposta är bedrägligt dyrt. Du börjar med “bara en uppdatering”, och plötsligt anpassar du tonen för LinkedIn, kortar för TikTok, skriver om kroken för Instagram och jagar rätt format på kreativet. Någonstans på vägen tappar du ursprungsbudskapet, eller så publicerar du fel version på fel konto. Det värsta är den mentala belastningen: du försöker vara kreativ samtidigt som du gör repetitivt adminjobb, vilket i praktiken är snabbaste sättet att börja avsky content marketing.
Det går fort att summera. Här är var det oftast faller isär.
- Copy skrivs om fyra gånger, och den sista versionen är ofta den svagaste.
- Det visuella är inte klart när texten är klar, så publiceringen glider en dag (eller tre).
- En felaktig plattforms-toggle eller accountId-mappning kan skicka ett inlägg till fel ställe, vilket är ett “roligt” sätt att starta en måndag.
- Ingen tydlig framgångslogg betyder att du öppnar varje plattform bara för att bekräfta att det publicerades.
Det du bygger: AI-copy + varumärkesanpassade visuella + autopublicering
Det här workflowet ger dig en end-to-end-publiceringslinje i n8n. Det börjar med dina standardvärden (varumärke/typ av verksamhet, innehållstema, aktiverade plattformar och plattformarnas konto-ID:n), skickar sedan en prompt till Google Gemini för att generera copy som passar varje nätverks ton och längd. När texten har parsats och plattformar valts, genererar Kie.ai (Seedream v4) en varumärkesanpassad bild i 1080×1080 som matchar inlägget. Workflowet laddar upp bilden till Late med rätt uppladdningsmetod baserat på filstorlek, och skapar sedan inlägg via Late API för Facebook, Instagram, LinkedIn och TikTok baserat på de toggles du har aktiverat. Till sist aggregerar det resultaten och bygger en strukturerad framgångsrapport som du kan vidarebefordra till Slack, Discord, e-post eller en webhook.
Workflowet börjar med att validera dina inställningar så att du inte publicerar till “allt” av misstag. Sedan genererar det copy, genererar kreativt material och publicerar bara till de plattformar du har slagit på. Därefter slår det ihop svaren till en rapport så att du ser vad som fungerade utan att klicka runt.
Det du bygger
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du publicerar en kampanjuppdatering till 4 plattformar. Manuellt kan du lägga cirka 10 minuter per plattform på att anpassa texten och publicera, plus ytterligare 20 minuter på att skapa eller ändra storlek på en bild – ungefär en timme varje gång. Med det här workflowet handlar det mer om 5 minuter för att sätta tema och toggles, sedan väntar du cirka 30 sekunder på bildrenderingen och låter Late publicera i bakgrunden. Arbetet går från “gör allt” till “godkänn och gå vidare”.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Gemini API för att generera plattformsanpassade captions.
- Late API för att publicera inlägg över sociala kanaler.
- Kie.ai (Seedream) API-nyckel (hämtas från din Kie.ai-dashboard).
Svårighetsnivå: Nybörjare. Du kopplar in autentisering, klistrar in konto-ID:n och redigerar några standardvärden i klarspråk.
Vill du att någon bygger det här åt dig? Prata med en automationsexpert (kostnadsfri 15-minuters konsultation).
Steg för steg
En trigger startar körningen. Du kan köra den manuellt under test, och många team går senare över till en schemalagd trigger för daglig eller veckovis publicering.
Dina standardvärden laddas och kontrolleras. Workflowet sätter din verksamhetstyp, innehållstema, aktiverade plattformar (som ENABLE_LINKEDIN) och konto-ID:n som Late behöver, och validerar sedan att plattformstoggles är rimliga.
Gemini genererar copy, sedan väljer workflowet var det ska publicera. Google Gemini returnerar plattformsoptimerad text, och ett kodsteg parsar svaret så att varje nätverk får rätt längd och ton. Om Gemini returnerar något rörigt finns reservinnehåll så att du inte fastnar.
Kie.ai genererar den varumärkesanpassade bilden, och Late hanterar uppladdning + publicering. Workflowet begär en 1080×1080-rendering, väntar cirka 30 sekunder, hämtar den färdiga tillgången och kontrollerar sedan filstorleken. Små bilder går via den enkla uppladdningsvägen; stora filer använder Lates multipart-uppladdningsflöde. Därefter publicerar varje plattformsgren bara om den är aktiverad, och alla resultat slås ihop till en framgångsrapport.
Du kan enkelt ändra verksamhetstyp, innehållstema eller plattformstoggles för att matcha varje kampanj. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den manuella triggern
Starta arbetsflödet manuellt och skicka in initiala inställningar till arbetsflödet.
- Lägg till noden Manual Start Trigger som din trigger.
- Anslut Manual Start Trigger till Initialize Defaults.
- I Initialize Defaults ställer ni in nyckelfälten: BUSINESS_TYPE till
YOUR_BUSINESS_TYPEoch CONTENT_TOPIC tillYOUR_CONTENT_TOPIC. - Aktivera plattformar genom att ställa in ENABLE_FACEBOOK, ENABLE_INSTAGRAM, ENABLE_LINKEDIN och ENABLE_TIKTOK till
trueellerfalse, och lägg till era konto-ID:n (t.ex. FACEBOOK_ACCOUNT_ID till[YOUR_ID]).
false kommer Validate Platform Toggles att blockera efterföljande bearbetning.Steg 2: Anslut AI-textgeneratorn
Generera plattformsspecifik copy med Gemini innan bilderna bearbetas.
- I Validate Platform Toggles bekräftar ni att villkoren använder uttryck som
{{ $json.ENABLE_FACEBOOK }}och jämför mottrue. - Konfigurera Generate Copy via Gemini med URL satt till
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContentoch Method satt tillPOST. - Ställ in JSON Body i Generate Copy via Gemini till den angivna prompten och behåll de mallade värdena för
{{ $json.BUSINESS_TYPE }}och{{ $json.CONTENT_TOPIC }}. - Inloggningsuppgifter krävs: Anslut era
googlePalmApi-inloggningsuppgifter i Generate Copy via Gemini. - I Parse and Select Platforms behåller ni JS-koden som tolkar Geminis output och bygger arrayen
enabledPlatformsbaserat på$vars.ENABLE_*.
Steg 3: Generera och hämta mediatillgången
Begär en AI-genererad bild, vänta på rendering och hämta resultatet.
- Ställ in Request Image Render med URL
https://api.kie.ai/api/v1/jobs/createTaskoch en prompt som refererar till{{ $json.topic }}. - Inloggningsuppgifter krävs: Anslut era
httpBearerAuth-inloggningsuppgifter i Request Image Render. - Konfigurera Pause 30 Seconds med Amount satt till
30, och anslut den sedan till Retrieve Render Result. - Ställ in Retrieve Render Result URL till
=https://api.kie.ai/api/v1/jobs/recordInfo?taskId={{ $json["data"]["taskId"] }}. - Inloggningsuppgifter krävs: Anslut era
httpBearerAuth-inloggningsuppgifter i Retrieve Render Result.
Steg 4: Hantera mediametadata och uppladdningslogik
Extrahera mediametadata, förgrena baserat på filstorlek, ladda upp och normalisera den publika URL:en.
- I Assemble Media Metadata behåller ni JS-koden som returnerar
imageUrl,filenameochcontentType. - Ställ in Fetch Content Length URL till
{{ $json.imageUrl }}och aktivera fullständiga response headers. - I Check File Size behåller ni uttrycket som kontrollerar
{{ Number($node["Fetch Content Length"].json.headers['content-length'] || $node["Fetch Content Length"].json.headers['Content-Length'] || 0) }}mot4194304. - För stora filer konfigurerar ni Init Large Upload med URL
https://getlate.dev/api/v1/mediaoch JSON body-fält som refererar till{{ $('Assemble Media Metadata').item.json.filename }}och{{ $('Assemble Media Metadata').item.json.contentType }}. - Inloggningsuppgifter krävs: Anslut era
httpBearerAuth-inloggningsuppgifter i Init Large Upload och Upload Small Media. - För små filer laddar Download Small Media upp till Upload Small Media; för stora filer laddar Download Large Media upp till Upload to Storage.
- I Normalize Media Link behåller ni JS-koden som härleder
publicUrlfrån tillgängliga fält. - Anslut Normalize Media Link till Join Content and Media för att kombinera medie-URL:en med den genererade copyn.
Content-Type-uttryck.Steg 5: Konfigurera plattformsförgrening och publicering
Routa det kombinerade innehållet och mediet till varje aktiverad plattform och publicera inlägg.
- Join Content and Media skickar output till Branch Facebook, Branch Instagram, Branch LinkedIn och Branch TikTok parallellt.
- I varje gren (Branch Facebook, Branch Instagram, Branch LinkedIn, Branch TikTok) behåller ni uttrycket som kontrollerar
{{ $('Initialize Defaults').item.json.ENABLE_* }}. - Konfigurera publiceringsnoderna med URL
https://getlate.dev/api/v1/postsoch deras JSON bodies med det plattformsspecifika innehållet och hashtags. - Inloggningsuppgifter krävs: Anslut era
httpBearerAuth-inloggningsuppgifter i Publish Facebook Post, Publish Instagram Post, Publish LinkedIn Post och Publish TikTok Post. - Säkerställ att fältet för medie-URL använder
{{ $json.publicUrl || $json.files?.[0]?.url || $json.url }}i varje publiceringsnod.
Steg 6: Aggregera och svara
Slå ihop alla publicerade inläggsresultat och skapa en konsoliderad framgångsrapport.
- Ställ in Aggregate Results till Number of Inputs
4för att samla in output från alla plattformar. - I Build Success Report behåller ni JS-koden som bygger fälten
notificationochwebhookMessage. - Anslut Build Success Report till Return Webhook Reply för att returnera den konsoliderade statusen.
Steg 7: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att verifiera innehållsgenerering, medieuppladdning och publicering på plattformarna.
- Klicka på Execute Workflow och starta från Manual Start Trigger.
- Bekräfta lyckade svar från Generate Copy via Gemini, Request Image Render och Retrieve Render Result.
- Verifiera att minst en av publiceringsnoderna returnerar ett inläggs-ID och att Build Success Report innehåller
executionStatussatt tillSUCCESS. - När allt är verifierat, växla arbetsflödet till Active för användning i produktion.
Felsökningstips
- Late API-inloggning kan löpa ut eller sakna behörigheter för specifika sociala konton. Om det skapar fel: kontrollera först din Late-token och åtkomst för anslutna konton i din Late-workspace.
- 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 outputs för alltid.
Snabba svar
Cirka 10–15 minuter om du redan har dina API-nycklar och konto-ID:n.
Nej. Du kopplar in autentisering, klistrar in ID:n och justerar några inställningar i klarspråk.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna med kostnader för Google Gemini API (ungefär 0,0001–0,0004 USD per inlägg) och Kie.ai-bildkrediter (cirka 0,01–0,02 USD per bild), plus din Late-plan om du överskrider gratisanvändning.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, och du kommer sannolikt vilja göra det. De flesta ändringar görs i inställningarna för “Initialize Defaults” (verksamhetstyp, tema, varumärkesdetaljer) och plattformstoggles som styr Facebook/Instagram/LinkedIn/TikTok-grenarna. Du kan också byta ut Kie.ai-bildgenerering mot ett annat kreativt verktyg genom att ersätta bildrenderingsanropet och behålla Late-uppladdningsstegen oförändrade.
Oftast beror det på en utgången token eller saknade behörigheter för det sociala konto du försöker publicera till. Kontrollera Late API-autentiseringen i n8n igen och bekräfta sedan att accountId-värdena du klistrade in matchar de aktiverade plattformarna. Om bara en plattform misslyckas (som LinkedIn) kan workflowet fortfarande lyckas för andra, så titta i framgångsrapporten för att se vilken gren som returnerade felet. Håll också koll på rate limits om du skickar många inlägg samtidigt.
På n8n Cloud Starter kan du normalt köra tillräckligt många exekveringar för ett litet teams dagliga publicering, och högre planer hanterar mer. Om du self-hostar finns ingen exekveringsgräns, men din server och externa API:er blir flaskhalsen. I praktiken är det här workflowet byggt för jämn publicering, inte för att skjuta ut hundratals inlägg i en enda körning.
Ofta ja, eftersom det här workflowet har förgrening per plattform, filstorlekshantering för uppladdningar och flera “om X, så Y”-beslut som blir krångliga (och dyra) i enklare verktyg. n8n ger dig också mer kontroll över hur data parsas efter att Gemini har genererat den, vilket är viktigt när du vill ha konsekvent formatering. Zapier eller Make kan fortfarande funka för enkel publicering i två steg, särskilt om du inte genererar bilder. Avgörande faktorn är oftast komplexitet: om du vill ha ett workflow som beter sig som en produktionspipeline passar n8n bättre. Prata med en automationsexpert om du är osäker på vad som passar.
Sätt upp det en gång och låt sedan din innehållsmaskin gå. Workflowet tar hand om det repetitiva publiceringsarbetet så att du kan fokusera på nästa kampanj.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.