n8n × PopNow

Genera imágenes y vídeos con IA en n8n

Nada que instalar: el nodo HTTP Request integrado en n8n llama directamente a la API de PopNow, tanto en n8n Cloud como autoalojado. Pega el flujo, añade tu clave y ejecútalo.

Configúralo en cuatro pasos

  1. En n8n, añade una credencial Header Auth. Name: Authorization. Value: Bearer, un espacio y tu clave sk-popnow-.
  2. Copia el flujo de abajo y pégalo en un lienzo vacío con Ctrl + V (Cmd + V en Mac).
  3. Abre el nodo Create task, elige la credencial y cambia el modelo y el prompt.
  4. Ejecútalo. El último nodo te da la URL del archivo; añade después un nodo de Google Drive, Slack o S3 para guardarlo.

El flujo

Crea la tarea, espera, consúltala, repite hasta que termine y pasa el enlace del archivo al siguiente nodo.

  1. Start
  2. Create task
  3. Wait 5 seconds
  4. Check task
  5. Done?
  6. File URL

↺ Done? → Wait 5 seconds

popnow-workflow.json
{
  "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"
  }
}

JSON de n8n tal cual. El modelo y el input salen de esta página, así que pasan la validación sin cambios.

Qué cambiar

Controla el gasto. En la consola, dale a la clave de n8n su propio límite diario y sus modelos permitidos. Si un bucle se descontrola, se detiene en el límite en vez de vaciar tu saldo.

model
El nombre del modelo. Cada página de modelo de la sección API lo muestra, con un botón para copiarlo.
input
El prompt y las opciones de ese modelo. Su página de API enumera cada campo, su rango y su valor por defecto.
callBackUrl
Opcional. Apúntala a un nodo Webhook de n8n y quita el bucle de espera: te enviamos ahí la tarea terminada.
Idempotency-Key
Ya usa el id de ejecución, así un nodo reintentado nunca paga dos veces la misma ejecución.

Buenos modelos para empezar

Opciones rápidas y bien de precio para automatizar. Cada enlace muestra el nombre del modelo, sus parámetros y su precio.

Preguntas sobre n8n

¿Necesito un nodo de la comunidad de PopNow?

No. El flujo solo usa nodos que vienen con n8n: Manual Trigger, HTTP Request, Wait, If y Edit Fields. Funciona en n8n Cloud y autoalojado.

¿Cómo uso imágenes de nodos anteriores?

Pasa un enlace https público en el campo de imagen. Si el archivo solo existe dentro de n8n, súbelo antes con la API y usa la referencia popnow:// que te devuelve.

¿Cuánto cuesta una ejecución?

Los mismos créditos que en la web, por llamada. Una imagen de Nano Banana cuesta unos pocos créditos; el vídeo se cobra por segundo. Las tareas fallidas se reembolsan.

¿Cuánto tarda una ejecución?

Las imágenes suelen tardar menos de un minuto y los vídeos unos minutos. El bucle consulta cada cinco segundos; con una callBackUrl no tienes que esperar.