{
  "name": "Anycon: пакет из папки",
  "nodes": [
    {
      "parameters": {},
      "id": "n03-manual",
      "name": "Запуск вручную",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "fileSelector": "/data/input/*.jpg",
        "options": {
          "dataPropertyName": "data"
        }
      },
      "id": "n03-read",
      "name": "Прочитать папку",
      "type": "n8n-nodes-base.readWriteFile",
      "typeVersion": 1,
      "position": [
        220,
        0
      ],
      "notes": "Маска файлов. Поддерживаемые типы: jpg, png, webp, mp4, mov, mkv.",
      "notesInFlow": true
    },
    {
      "parameters": {
        "batchSize": 2,
        "options": {}
      },
      "id": "n03-loop",
      "name": "Пачками по 2",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        440,
        0
      ],
      "notes": "Не больше 2 загрузок на пользователя одновременно.",
      "notesInFlow": true
    },
    {
      "parameters": {
        "source": "database",
        "workflowId": {
          "__rl": true,
          "value": "REPLACE_WITH_WORKFLOW_01_ID",
          "mode": "id"
        },
        "mode": "once",
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "id": "n03-sub",
      "name": "Подпроцесс 01",
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        660,
        100
      ],
      "onError": "continueRegularOutput",
      "notes": "Укажите id импортированного workflow 01. Ошибка подпроцесса не роняет пачку: элемент с полем error идёт дальше и попадёт в «Итог».",
      "notesInFlow": true
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "language": "javaScript",
        "jsCode": "// Итог по пачкам: сколько элементов, у скольких ошибка подпроцесса (поле error).\nconst items = $input.all();\nconst failed = items.filter((i) => i.json && i.json.error).map((i) => ({ error: i.json.error, binary_name: i.binary && i.binary.data ? i.binary.data.fileName : null }));\nreturn [{ json: { total: items.length, failed_count: failed.length, failed } }];"
      },
      "id": "n03-done",
      "name": "Итог",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        660,
        -100
      ]
    }
  ],
  "connections": {
    "Запуск вручную": {
      "main": [
        [
          {
            "node": "Прочитать папку",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Прочитать папку": {
      "main": [
        [
          {
            "node": "Пачками по 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Пачками по 2": {
      "main": [
        [
          {
            "node": "Итог",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Подпроцесс 01",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Подпроцесс 01": {
      "main": [
        [
          {
            "node": "Пачками по 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "active": false,
  "meta": {
    "templateCredsSetupCompleted": false
  }
}
