Content Gun Update: Pixelgenaue Grafiken aus Templates und Karussells mit n8n
  • 11. Oktober 2026
  • Künstliche Intelligenz
  • Marketing
  • By Stefan Antonelli

Content Gun Update: Pixelgenaue Grafiken aus Templates und Karussells mit n8n

Im August haben wir gezeigt, wie unsere Content Gun aus einem Gedanken fertige Posts für Instagram und Facebook baut. Den Text schreibt Gemini, das Bild malt Gemini. Für Stimmungsbilder funktioniert das wunderbar. Sobald aber eine Marke ins Bild soll, hört es auf.

Ein Bildmodell malt ein Logo nach und trifft es nicht exakt. Es hält keine Hausfarbe über zwanzig Posts durch, und es setzt eine Headline nicht an exakt dieselbe Stelle wie beim letzten Mal. Im ersten Beitrag stand das Verbot eines weißen Rahmens deshalb sechsmal im Prompt, in unterschiedlichen Worten.

Seit heute läuft die Content Gun anders. Die Grafiken kommen aus festen Templates über eine eigene Schnittstelle, pixelgenau und jedes Mal gleich. Dazu kann sie jetzt Karussells, also Posts mit mehreren Slides, und postet auf LinkedIn mit eigenem Text. Im Video haben wir versprochen, zu zeigen, wie wir das gebaut haben. Hier ist es, mit dem kompletten Workflow zum Download.

Content Gun: Karussell-Posts automatisch erstellen mit n8n
YouTube Short

Die Aufteilung, KI für Text und Templates für Pixel

Der wichtigste Umbau ist eine Grenze. Die KI macht weiter das, was sie gut kann, also Text formulieren und einen Gedanken in Slides zerlegen. Alles, was verbindlich ist, kommt aus Templates. Logo, Schrift, Farben, Abstände, Position der Headline, Seitenzahl auf der Slide.

Damit ist das Bild deterministisch. Dieselben Werte ergeben dasselbe Bild, heute und in einem halben Jahr. Das Bildmodell brauchst du dafür gar nicht mehr. Es bleibt eine Option für Hintergrundfotos, aber die Karte selbst baut Code.

Im ersten Beitrag lagen Tonfall und Farben in zwei Tabellen, damit man sie ändern kann, ohne den Prompt anzufassen. Dieselbe Idee geht jetzt einen Schritt weiter. Die Farben stehen nicht mehr in einer Tabelle, die ein Bildmodell hoffentlich befolgt, sondern direkt im Template, das sie garantiert einhält.

operun-assets, die Schnittstelle dahinter

Die Grafiken baut ein kleiner Dienst, den wir operun-assets nennen. Er bekommt ein Template und ein paar Werte und liefert ein fertiges PNG zurück, oder für LinkedIn ein PDF mit allen Slides. Der Workflow spricht ihn über drei Endpunkte an.

EndpunktWofür
GET /v1/templatesLiefert alle Templates mit ihren Feldern und der Angabe, ob ein Hintergrundbild erlaubt ist.
POST /v1/renderRendert eine Karte oder eine Slide als PNG.
POST /v1/documentRendert mehrere Slides als ein PDF, eine Seite pro Slide.

Ein Render-Aufruf ist bewusst schlicht. Template, Format und die Texte, mehr nicht.

{
  "template": "carousel-content",
  "format": "4:5",
  "headline": "Die Idee bleibt beim Menschen",
  "body": "Die Automatisierung nimmt nur die Handgriffe zwischen Idee und fertigem Beitrag weg.",
  "pagination": "3/7",
  "handle": "@dein.handle"
}

Für ein Karussell gibt es drei Templates. carousel-cover für die erste Slide mit Themenzeile, Hook und Subline. carousel-content für die Inhalts-Slides mit Headline, Text und Seitenzahl. carousel-closing für die letzte Slide mit Zusammenfassung und Frage. Für einzelne Posts gibt es card-dark als reine Textkarte und card-image mit Foto im Hintergrund.

Jedes Feld hat ein festes Limit. Der Workflow prüft diese Limits, bevor er rendert, damit keine Slide erst beim Rendern scheitert.

FeldHöchstens
headline140 Zeichen
subline200 Zeichen
topic60 Zeichen
body200 Zeichen
cta200 Zeichen
pagination16 Zeichen
handle60 Zeichen

Der Workflow fragt zu Beginn /v1/templates ab und sendet danach nur Felder, die das jeweilige Template kennt. Ein unbekanntes Feld würde der Dienst ablehnen. So kann das Template wachsen, ohne dass der Workflow bricht.

Was sich im Formular geändert hat

Das Formular hat ein paar Felder dazubekommen. Der Gedanke bleibt das Herzstück, alles andere ist optional.

FeldWas es tut
GedankeDer Rohtext, aus dem Caption und Slides entstehen.
TitelOptional. Steht exakt so auf der Karte oder dem Cover.
UntertitelOptional. Steht exakt so unter dem Titel.
CTAOptional. Geht 1:1 in die Caption und ohne Link auf die letzte Slide.
KanäleInstagram, Facebook, LinkedIn, beliebig kombinierbar.
Templatecard-dark, card-image oder card-carousel.
BildquelleNur bei card-image. Aus welchem Ordner das Hintergrundfoto kommt.
FotoNur bei card-image. Ein eigenes Foto, das die Bildquelle überschreibt.

Titel und Untertitel sind die wichtigste Neuerung für den Alltag. Wenn wir eine Headline selbst formuliert haben, soll die KI sie nicht verbessern. Der Workflow setzt sie unverändert auf die Grafik und sagt Gemini ausdrücklich, dass sie feststeht. Der Gedanke ist dann nur noch Kontext für die Caption.

Bevor irgendein Modell arbeitet, prüft ein Code-Node die Längen und entfernt Emojis aus allem, was auf die Grafik kommt. Ein zu langer Titel bricht also sofort ab und kostet kein Gemini-Kontingent.

So entsteht ein Karussell

1. Erst die Caption, dann die Slides

Die Caption entsteht wie bisher mit Gemini, inklusive Ziel-Link und Hashtags. Erst danach zerlegt ein zweiter Gemini-Aufruf genau diese Caption in Slides. Die Reihenfolge ist Absicht. Caption und Karussell erzählen dadurch dieselbe Geschichte und widersprechen sich nicht.

Der zweite Aufruf antwortet in JSON. Hier der Kern des Prompts.

Du baust ein Instagram-Karussell für YOUR_BRAND.

AUFGABE:

Zum selben Thema ist die Caption unten bereits fertig. Sie legt Thema, Aussage und Fakten fest. Du zerlegst den Stoff in Slides: ein Cover, drei bis sechs Inhalts-Slides und einen Abschluss. Jede Inhalts-Slide trägt genau einen Gedanken. Die Slides bauen aufeinander auf und wiederholen sich nicht.

Nenne nur, was in der Caption oder im Input steht. Erfinde keine Zahlen, Termine, Orte, Preise oder Beispiele.

FESTE TEXTE:

Steht im Input ein TITEL, ist er der Hook des Covers. Gib ihn unverändert als “hook” zurück. Steht im Input ein UNTERTITEL, ist er die Subline des Covers. Gib ihn unverändert als “subline” zurück.

Kündigt der Hook eine Anzahl an, zum Beispiel fünf Fehler, liefern die Inhalts-Slides genau diese Anzahl, höchstens sechs.

OUTPUT-FORMAT: { “topic”: ”…”, “hook”: ”…”, “subline”: ”…”, “slides”: [ { “headline”: ”…”, “body”: ”…” } ], “resolution”: ”…”, “cta”: ”…” }

Im vollständigen Prompt kommen Zielgruppe, Tonfall, Schreibregeln und Verbotsliste aus der Data Table dazu, genau wie bei der Caption. Am Ende steht eine Gegenprobe, die das Modell vor der Ausgabe durchgehen muss.

2. Aus dem JSON werden Render-Aufträge

Ein Code-Node baut aus der Antwort einen Auftrag pro Slide. Das Cover bekommt carousel-cover, jede Inhalts-Slide carousel-content mit Seitenzahl wie 3/7, die letzte Slide carousel-closing. Hat das Formular einen CTA, ersetzt er auf der letzten Slide die Frage von Gemini. Ein Link darin fliegt vorher raus, weil ein Link auf einem Bild nicht klickbar ist.

Instagram erlaubt laut Meta höchstens zehn Elemente pro Karussell. Zwischen Cover und Abschluss passen also höchstens acht Slides. Liefert Gemini mehr oder weniger als vorgesehen, bricht der Workflow ab oder schreibt einen Hinweis mit.

3. Rendern und in Drive ablegen

Die Slides gehen an /v1/render, immer zwei gleichzeitig. Die fertigen PNGs landen in Google Drive und werden öffentlich lesbar geschaltet. Das ist nötig, weil Meta die Bilder nicht entgegennimmt, sondern sich selbst über eine URL abholt.

4. Instagram braucht drei Schritte

Für ein Karussell legt der Workflow zuerst pro Slide einen eigenen Container an, markiert als Teil eines Karussells. Danach folgt ein Karussell-Container, der alle Slide-Container in der richtigen Reihenfolge zusammenfasst und die Caption trägt. Veröffentlicht wird erst, wenn Instagram den Status FINISHED meldet.

Die Statusprüfung hat drei Ausgänge statt zwei wie beim Einzelbild. FINISHED veröffentlicht, IN_PROGRESS wartet und fragt erneut, alles andere bricht mit einer klaren Fehlermeldung ab. Ohne diesen dritten Ausgang würde ein fehlerhafter Container endlos in der Warteschleife hängen.

5. Facebook bekommt mehrere Fotos in einem Post

Für Facebook geht der Workflow einen einfacheren Weg. Er lädt jede Slide als unveröffentlichtes Foto auf die Seite und veröffentlicht danach einen einzigen Beitrag, an dem alle Fotos in Slide-Reihenfolge hängen.

6. LinkedIn bekommt ein PDF

Auf LinkedIn funktionieren Karussells über Dokumente. Ein PDF wird im Feed als blätterbare Slides angezeigt. Der Workflow schickt dafür alle Slides gesammelt an /v1/document und bekommt ein PDF zurück, eine Seite pro Slide. Danach läuft es über die Documents API von LinkedIn in drei Schritten. Upload anmelden, PDF hochladen, Post mit dem Dokument anlegen.

Den Text für LinkedIn schreibt Gemini neu, mit einer eigenen Zeile für Tonfall und Länge in der Data Table. Die Instagram-Caption dient nur als inhaltliche Grundlage. Ein Text, der auf Instagram funktioniert, ist auf LinkedIn meistens zu kurz und hat die falschen Hashtags.

Alle Nodes, die tatsächlich etwas veröffentlichen, laufen ohne automatische Wiederholung. Lieber ein Fehler, den man sieht, als ein Post, der doppelt erscheint.

Die Einzelkarte mit Foto

Neben dem Karussell gibt es card-image, eine Karte mit Foto im Hintergrund. Das Foto kommt aus einer Ordnerstruktur in Google Drive. Im Formular wählst du einen Bereich, zum Beispiel ein Foto von dir oder eines zu einer bestimmten Leistung. Bei der Option thema sucht der Workflow selbst einen Ordner, dessen Name zum Text passt, und fällt sonst auf einen Standardordner zurück.

Welches Bild aus dem Ordner kommt, entscheidet kein Zufall, sondern ein Hash über den Text. Dieselbe Eingabe ergibt also dasselbe Bild. Weil das Template ein dunkles Overlay über das Foto legt, damit die Schrift lesbar bleibt, bevorzugt der Workflow helle Bilder. Lädst du im Formular ein eigenes Foto hoch, hat es Vorrang.

Die Data Tables, die du brauchst

Die Tabelle mit den Farbvarianten aus dem ersten Beitrag fällt weg, die Farben stecken jetzt im Template. Dafür gibt es drei Tabellen, von denen nur die erste Inhalt braucht.

cm_style

Die Sprache für beide Kanäle. Der Workflow liest die Zeilen mit den Schlüsseln ig_voice und linkedin_voice.

SpalteWofür
keyig_voice für Instagram und Facebook, linkedin_voice für LinkedIn.
target_audienceDeine Zielgruppe.
brand_factsWer du bist, was du anbietest, welche Fakten immer stimmen müssen. Wird nur aus der Zeile ig_voice gelesen und gilt für beide Kanäle.
tone_of_voiceDein Tonfall.
writing_styleDeine Schreibregeln, auf LinkedIn inklusive Länge und Aufbau.
forbidden_termsWörter und Aussagen, die nie vorkommen dürfen.
partner_linksOptional, nur in ig_voice. JSON mit den Feldern domains und hinweis. Steht eine dieser Domains im Post, hängt der Workflow den Werbehinweis an.

Optional. Hier stehen Seiten, auf die ein Post verlinken darf, mit Schlüsselwörtern. Trifft der Gedanke ein Schlüsselwort, setzt der Workflow genau diesen einen Link in die Caption. Gemini darf keinen Link selbst wählen oder erfinden.

SpalteWofür
keyInterner Name des Links.
urlDie Zieladresse.
labelWie das Ziel im Satz heißt.
typeFrei wählbare Kategorie.
is_partnerWahr bei Affiliate-Links, dann folgt der Werbehinweis.
activeFalsch schaltet die Zeile ab.
priorityEntscheidet bei Gleichstand.
primary_keywordsKommagetrennt. Mindestens eins muss im Text vorkommen.
keywordsKommagetrennt. Erhöhen die Trefferwertung.

Bleibt die Tabelle leer, schreibt der Workflow einfach keinen Ziel-Link.

bild_index

Optional. Mit den Spalten file_id, aktiv und dunkel kannst du einzelne Fotos abschalten oder als dunkel markieren. Fehlt eine Zeile, gilt das Foto als aktiv und hell. Bei uns befüllt ein eigener kleiner Workflow diese Tabelle, der ist im Download nicht enthalten.

Alle drei Tabellen werden im Export über ihren Namen angesprochen, nicht über eine ID. Achte deshalb auf die exakte Schreibweise.

Der Workflow zum Download

Hier bekommst du den kompletten Workflow als JSON-Datei. In n8n gehst du auf Import from File und lädst sie hoch.

n8n Workflow herunterladen

Eine ehrliche Einschränkung vorweg. Der Workflow braucht einen Render-Dienst, der die drei Endpunkte von oben anbietet. operun-assets ist aktuell nicht öffentlich. Du kannst einen eigenen Dienst mit derselben Schnittstelle bauen oder die drei Render-Nodes auf einen Anbieter deiner Wahl umbauen. Ohne Render-Dienst bricht der Workflow gleich am Anfang bei Load Templates ab, also bevor Gemini Kontingent verbraucht.

In der Datei stecken keine Zugangsdaten und keine Konto-IDs von uns. Alles, was du ersetzen musst, steht als Platzhalter drin und ist zusätzlich als Notiz am jeweiligen Node hinterlegt.

Was du nach dem Import einstellen musst

PlatzhalterWoWas rein muss
YOUR_RENDER_SERVICELoad Templates, Render Card, Render Slides, Render PDFAdresse deines Render-Dienstes
YOUR_INSTAGRAM_HANDLERender-Body bauen, Slides bauen, zwei PromptsDein Handle für die Grafiken
YOUR_BRAND, YOUR_NAMEDie drei Gemini-PromptsMarke und Absender
YOUR_GOOGLE_DRIVE_FOLDER_IDDrei Upload-NodesOrdner für Grafiken und Captions
YOUR_DRIVE_FOLDER_ID_PERSON, _SERVICE, _THEMA, _DEFAULTOrdner listen, Ordner waehlenDie Foto-Ordner für card-image
YOUR_IG_BUSINESS_ACCOUNT_IDFünf Instagram-NodesID deines Instagram-Business-Kontos
YOUR_FACEBOOK_PAGE_IDDrei Facebook-NodesID deiner Facebook-Seite
YOUR_LINKEDIN_PERSON_IDDrei LinkedIn-NodesDeine LinkedIn-Personen-ID

Dazu kommen die Zugänge.

  • Ein Google-Gemini-Zugang für die drei Gemini-Nodes.
  • Ein Google-Drive-Zugang für alle Drive-Nodes.
  • Ein Query-Auth-Zugang mit deinem Meta-Access-Token für alle Instagram- und Facebook-Nodes.
  • Ein LinkedIn-Zugang mit der Berechtigung, im Namen deines Profils zu posten.
  • Ein Bearer-Auth-Zugang für deinen Render-Dienst.

Die LinkedIn-Nodes senden einen Header mit der API-Version. LinkedIn stellt ältere Versionen regelmäßig ab. Meldet die API einen Fehler zur Version, setz dort den aktuellen Monat ein.

Die Optionen unter Bildquelle im Formular sind Beispiele. Sie müssen zu den Namen deiner Unterordner in Drive passen.

Ein Hinweis zur Sicherheit

Wie beim ersten Workflow gilt, dass der Form Trigger eine öffentlich erreichbare URL erzeugt. Stell die Authentifizierung auf Basic Auth, bevor du ihn aktivierst. Jeder Absendevorgang verbraucht Gemini-Kontingent und veröffentlicht auf bis zu drei Kanälen.

Die Grafiken werden in Drive öffentlich lesbar geschaltet. Nutze dafür einen eigenen Ordner, in dem sonst nichts liegt. Und der Bearer-Token deines Render-Dienstes gehört in den n8n-Zugang, nicht in einen Node.

Wird operun-assets Open Source?

Wir überlegen, operun-assets offenzulegen, damit du den Workflow ohne eigenen Render-Dienst nachbauen kannst. Entschieden ist das noch nicht. Wenn du mitbekommen willst, ob und wann es so weit ist, trag dich unten auf der Seite in den Newsletter ein.

Was du daraus mitnehmen kannst

Der eigentliche Fortschritt in diesem Update ist keine neue KI-Funktion. Es ist die Entscheidung, der KI eine Aufgabe wieder wegzunehmen.

Gemini schreibt weiter Captions und zerlegt Gedanken in Slides, weil dort Variation erwünscht ist. Die Grafik dagegen soll jedes Mal gleich aussehen, und dafür ist ein Template zuverlässiger als jedes Bildmodell. Dasselbe Muster lohnt sich überall, wo ein Ergebnis verbindlich sein muss. Angebote, Datenblätter, Zertifikate, Etiketten. Die KI liefert den Inhalt, das Layout kommt aus Code.

operunAI ist dein externer Ansprechpartner für alle KI-Themen. Wir schauen uns an, welche wiederkehrenden Aufgaben bei dir Zeit fressen, was sich davon sinnvoll automatisieren lässt und wo KI hilft oder ein Template die bessere Wahl ist. Herstellerunabhängig, ohne Tool-Verkauf und mit laufender Begleitung.

Wenn du die Content Gun für deine eigenen Kanäle nutzen willst, ohne sie selbst nachzubauen, richten wir sie dir ein und betreuen sie. Alles dazu steht auf der Seite zur Content Gun.

Welche Grafik baust du in deinem Betrieb immer wieder von Hand?


Quellen

  • KI
  • AI
  • n8n
  • Automatisierung
  • Workflow
  • Gemini
  • Instagram
  • Karussell
  • LinkedIn
  • Social Media
  • Meta API
  • Templates