n8n × PopNow
KI-Bilder und -Videos in n8n erzeugen
Nichts zu installieren: Der eingebaute HTTP-Request-Node von n8n ruft die PopNow API direkt auf, in n8n Cloud genauso wie selbst gehostet. Workflow einfügen, Schlüssel eintragen, starten.
In vier Schritten eingerichtet
- Leg in n8n ein Header-Auth-Credential an. Name: Authorization. Value: Bearer, ein Leerzeichen, dann dein sk-popnow--Schlüssel.
- Kopier den Workflow unten und füg ihn mit Strg + V (Cmd + V auf dem Mac) auf einer leeren Arbeitsfläche ein.
- Öffne den Node Create task, wähl das Credential aus und ändere dann Modell und Prompt.
- Starte ihn. Der letzte Node liefert die Datei-URL; häng einen Google-Drive-, Slack- oder S3-Node dahinter, um die Datei zu behalten.
Der Workflow
Task anlegen, warten, prüfen, wiederholen, bis er fertig ist, dann den Datei-Link an den nächsten Node übergeben.
- Start
- Create task
- Wait 5 seconds
- Check task
- Done?
- File URL
↺ Done? → Wait 5 seconds
{
"name": "PopNow: generate and get the file",
"nodes": [
{
"id": "b1f0c1a2-0001-4c55-9a10-000000000001",
"name": "Start",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
0,
0
],
"parameters": {}
},
{
"id": "b1f0c1a2-0002-4c55-9a10-000000000002",
"name": "Create task",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
220,
0
],
"parameters": {
"method": "POST",
"url": "https://api.popnow.ai/api/v1/jobs/createTask",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Idempotency-Key",
"value": "={{ $execution.id }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "{\n \"model\": \"google/nano-banana-2.1/text-to-image\",\n \"input\": {\n \"prompt\": \"A ceramic teapot on a linen cloth, soft window light, muted palette\",\n \"aspect_ratio\": \"16:9\",\n \"resolution\": \"1k\",\n \"output_format\": \"png\"\n }\n}",
"options": {}
}
},
{
"id": "b1f0c1a2-0003-4c55-9a10-000000000003",
"name": "Wait 5 seconds",
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
440,
0
],
"parameters": {
"amount": 5
},
"webhookId": "4d3c2b1a-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
},
{
"id": "b1f0c1a2-0004-4c55-9a10-000000000004",
"name": "Check task",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
660,
0
],
"parameters": {
"url": "https://api.popnow.ai/api/v1/jobs/recordInfo",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "taskId",
"value": "={{ $('Create task').item.json.data.taskId }}"
}
]
},
"options": {}
}
},
{
"id": "b1f0c1a2-0005-4c55-9a10-000000000005",
"name": "Done?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
880,
0
],
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose"
},
"conditions": [
{
"id": "c0ffee00-0000-4000-8000-000000000001",
"leftValue": "={{ ['succeeded','failed','canceled','expired'].includes($json.data.state) && !($json.data.output?.assets ?? []).some(a => a.pending && !a.unavailable) }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
}
},
{
"id": "b1f0c1a2-0006-4c55-9a10-000000000006",
"name": "File URL",
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1100,
-100
],
"parameters": {
"assignments": {
"assignments": [
{
"id": "c0ffee00-0000-4000-8000-000000000002",
"name": "state",
"value": "={{ $json.data.state }}",
"type": "string"
},
{
"id": "c0ffee00-0000-4000-8000-000000000003",
"name": "fileUrl",
"value": "={{ $json.data.output?.assets?.[0]?.url ?? '' }}",
"type": "string"
},
{
"id": "c0ffee00-0000-4000-8000-000000000004",
"name": "error",
"value": "={{ $json.data.errorMessage ?? '' }}",
"type": "string"
}
]
},
"options": {}
}
}
],
"connections": {
"Start": {
"main": [
[
{
"node": "Create task",
"type": "main",
"index": 0
}
]
]
},
"Create task": {
"main": [
[
{
"node": "Wait 5 seconds",
"type": "main",
"index": 0
}
]
]
},
"Wait 5 seconds": {
"main": [
[
{
"node": "Check task",
"type": "main",
"index": 0
}
]
]
},
"Check task": {
"main": [
[
{
"node": "Done?",
"type": "main",
"index": 0
}
]
]
},
"Done?": {
"main": [
[
{
"node": "File URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 5 seconds",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
}
}Reines n8n-JSON. Modell und input kommen von dieser Seite und bestehen die Prüfung so, wie sie sind.
Was du anpasst
Ausgaben im Griff behalten. Gib dem n8n-Schlüssel in der Konsole ein eigenes Tageslimit und erlaubte Modelle. Eine außer Kontrolle geratene Schleife stoppt dann am Limit, statt dein Guthaben zu leeren.
model- Der Modellname. Jede Modellseite im API-Bereich zeigt ihn, mit Kopier-Button.
input- Prompt und Optionen für dieses Modell. Die API-Seite des Modells listet jedes Feld mit Bereich und Standardwert.
callBackUrl- Optional. Zeig damit auf einen n8n-Webhook-Node und spar dir die Warteschleife: Wir schicken den fertigen Task dorthin.
Idempotency-Key- Ist schon auf die Ausführungs-ID gesetzt, damit ein wiederholter Node für denselben Lauf nie doppelt zahlt.
Gute Modelle für den Anfang
Schnelle, günstige Kandidaten für Automationen. Jeder Link zeigt Modellname, Parameter und Preis.
Fragen zu n8n
Brauche ich einen PopNow-Community-Node?
Nein. Der Workflow nutzt nur Nodes, die mit n8n mitkommen: Manual Trigger, HTTP Request, Wait, If und Edit Fields. Er läuft in n8n Cloud ebenso wie selbst gehostet.
Wie nutze ich Bilder aus vorherigen Nodes?
Gib im Bildfeld einen öffentlichen https-Link an. Liegt die Datei nur in n8n, lad sie zuerst über die API hoch und nutz die zurückgegebene popnow://-Referenz.
Was kostet ein Lauf?
Dieselben Credits wie auf der Website, pro Aufruf. Ein Nano-Banana-Bild kostet ein paar Credits, Video wird pro Sekunde abgerechnet. Fehlgeschlagene Tasks werden erstattet.
Wie lange dauert ein Lauf?
Bilder sind meist in unter einer Minute fertig, Videos in ein paar Minuten. Die Warteschleife prüft alle fünf Sekunden; mit einer callBackUrl wartest du gar nicht.

