Skip to content

API + Custom nodes that use print currently broken? #11367

@oliverswitzer

Description

@oliverswitzer

NOTES:

  • Using ComfyUI Electron App

Other details:

OS: Windows 11
ComfyUI v0.4.0
ComfyUI_frontend v1.33.14
Discord
ComfyOrg
ComfyUI_desktop v0.6.0
EasyUse v1.3.3
LoRA Manager v0.9.10-stable
LoRA-Manager
rgthree-comfy v1.0.2508241658

Custom Node Testing

Expected Behavior

Expected any custom node using print (for example, ShowText from comfyui-custom-scripts) to work even when submitted via the API

Actual Behavior

Node's using print do not work via API, but work via the UI. Have tried with three other custom nodes that use print, they also fail via the API but work via the UI.

Steps to Reproduce

I recently noticed that when submitting jobs via the API, I keep getting OSError: Errno 22] Invalid argument

After removing problematic nodes incrementally, I realized that the common trend between all the nodes that were raising this error was the use of a print statement.

Here's a really simple workflow that reproduces this error

Show Text Example Workflow.json

And the shell script to execute it via API:

#!/bin/bash

COMFYUI_URL=<SET ME TO YOUR URL>
WORKFLOW_FILE=$1

echo "Testing ShowText workflow: $WORKFLOW_FILE"
echo ""

python3 - "$COMFYUI_URL" "$WORKFLOW_FILE" << 'EOF'
import json
import sys
import requests
import time

comfyui_url = sys.argv[1]
workflow_file = sys.argv[2]

# Load workflow
with open(workflow_file, 'r') as f:
    workflow = json.load(f)

# Override the string value in node "2" (easy string node)
workflow["2"]["inputs"]["value"] = "Hello from script!"

print("Submitting workflow...")
response = requests.post(f"{comfyui_url}/prompt", json={"prompt": workflow}, timeout=10)

if response.status_code != 200:
    print(f"ERROR: {response.status_code}")
    print(response.text)
    sys.exit(1)

result = response.json()
prompt_id = result.get('prompt_id')
print(f"Submitted. Prompt ID: {prompt_id}")

# Poll for completion
print("Waiting for completion...")
while True:
    time.sleep(2)
    
    # Check status
    status_response = requests.get(f"{comfyui_url}/prompt/{prompt_id}", timeout=10)
    if status_response.status_code == 200:
        status = status_response.json()
        print(f"\nStatus response: {json.dumps(status, indent=2)}")
        
        # Check for error in status
        if status.get('status', {}).get('status_str') == 'error':
            print("\n❌ STATUS ERROR DETECTED")
            for msg in status.get('status', {}).get('messages', []):
                if msg[0] == 'execution_error':
                    print(f"\nError details: {json.dumps(msg[1], indent=2)}")
            sys.exit(1)
    
    # Check history
    history = requests.get(f"{comfyui_url}/history/{prompt_id}", timeout=10).json()
    print(f"\nHistory response: {json.dumps(history, indent=2)}")
    
    if prompt_id in history:
        prompt_data = history[prompt_id]
        
        # Check for error in status within history
        if 'status' in prompt_data:
            status = prompt_data['status']
            if status.get('status_str') == 'error':
                print("\n❌ EXECUTION ERROR IN HISTORY:")
                for msg in status.get('messages', []):
                    if msg[0] == 'execution_error':
                        print(f"\nError details: {json.dumps(msg[1], indent=2)}")
                sys.exit(1)
        
        # Check for top-level execution_error
        if 'execution_error' in prompt_data:
            print("\n❌ EXECUTION ERROR:")
            print(json.dumps(prompt_data['execution_error'], indent=2))
            sys.exit(1)
        else:
            print("✓ Completed successfully")
            sys.exit(0)
EOF

Example of Show Text.json

Debug Logs

Running it:

`./test_showtext.sh "Example of Show Text.json"`

Error that I'm seeing:


Testing ShowText workflow: Example of Show Text.json

Submitting workflow...
Submitted. Prompt ID: 425f64ed-293e-4f89-a1f2-2339dbbc7aab
Waiting for completion...

History response: {
  "425f64ed-293e-4f89-a1f2-2339dbbc7aab": {
    "prompt": [
      136,
      "425f64ed-293e-4f89-a1f2-2339dbbc7aab",
      {
        "1": {
          "inputs": {
            "text_0": "foo",
            "text": [
              "2",
              0
            ]
          },
          "class_type": "ShowText|pysssss",
          "_meta": {
            "title": "Show Text \ud83d\udc0d"
          }
        },
        "2": {
          "inputs": {
            "value": "Hello from script!"
          },
          "class_type": "easy string",
          "_meta": {
            "title": "String"
          }
        }
      },
      {
        "create_time": 1765954972625
      },
      [
        "1"
      ]
    ],
    "outputs": {},
    "status": {
      "status_str": "error",
      "completed": false,
      "messages": [
        [
          "execution_start",
          {
            "prompt_id": "425f64ed-293e-4f89-a1f2-2339dbbc7aab",
            "timestamp": 1765954972626
          }
        ],
        [
          "execution_cached",
          {
            "nodes": [
              "2"
            ],
            "prompt_id": "425f64ed-293e-4f89-a1f2-2339dbbc7aab",
            "timestamp": 1765954972626
          }
        ],
        [
          "execution_error",
          {
            "prompt_id": "425f64ed-293e-4f89-a1f2-2339dbbc7aab",
            "node_id": "1",
            "node_type": "ShowText|pysssss",
            "executed": [],
            "exception_message": "[Errno 22] Invalid argument\n",
            "exception_type": "OSError",
            "traceback": [
              "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 515, in execute\n    output_data, output_ui, has_subgraph, has_pending_tasks = await get_output_data(prompt_id, unique_id, obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)\n                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
              "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 329, in get_output_data\n    return_values = await _async_map_node_over_list(prompt_id, unique_id, obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\custom_nodes\\comfyui-lora-manager\\py\\metadata_collector\\metadata_hook.py\", line 165, in async_map_node_over_list_with_metadata\n    results = await original_map_node_over_list(\n              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
              "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 297, in _async_map_node_over_list\n    await process_inputs(input_data_all, 0, input_is_list=input_is_list)\n",
              "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 291, in process_inputs\n    result = f(**inputs)\n             ^^^^^^^^^^^\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\custom_nodes\\comfyui-custom-scripts\\py\\show_text.py\", line 30, in notify\n    print(\"Error: extra_pnginfo[0] is not a dict or missing 'workflow' key\")\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 47, in write\n    self.__convertor.write(text)\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 177, in write\n    self.write_and_convert(text)\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 205, in write_and_convert\n    self.write_plain_text(text, cursor, len(text))\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 210, in write_plain_text\n    self.wrapped.write(text[start:end])\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 47, in write\n    self.__convertor.write(text)\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 177, in write\n    self.write_and_convert(text)\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 205, in write_and_convert\n    self.write_plain_text(text, cursor, len(text))\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 210, in write_plain_text\n    self.wrapped.write(text[start:end])\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\comfyui_manager\\prestartup_script.py\", line 324, in write\n    self.sync_write(message)\n",
              "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\comfyui_manager\\prestartup_script.py\", line 345, in sync_write\n    original_stdout.flush()\n",
              "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\app\\logger.py\", line 35, in flush\n    super().flush()\n"
            ],
            "current_inputs": {
              "text": [
                "Hello from script!"
              ],
              "unique_id": [
                "1"
              ],
              "extra_pnginfo": [
                null
              ]
            },
            "current_outputs": [
              "1",
              "2"
            ],
            "timestamp": 1765954972628
          }
        ]
      ]
    },
    "meta": {}
  }
}

❌ EXECUTION ERROR IN HISTORY:

Error details: {
  "prompt_id": "425f64ed-293e-4f89-a1f2-2339dbbc7aab",
  "node_id": "1",
  "node_type": "ShowText|pysssss",
  "executed": [],
  "exception_message": "[Errno 22] Invalid argument\n",
  "exception_type": "OSError",
  "traceback": [
    "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 515, in execute\n    output_data, output_ui, has_subgraph, has_pending_tasks = await get_output_data(prompt_id, unique_id, obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)\n                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
    "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 329, in get_output_data\n    return_values = await _async_map_node_over_list(prompt_id, unique_id, obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)\n                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\custom_nodes\\comfyui-lora-manager\\py\\metadata_collector\\metadata_hook.py\", line 165, in async_map_node_over_list_with_metadata\n    results = await original_map_node_over_list(\n              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
    "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 297, in _async_map_node_over_list\n    await process_inputs(input_data_all, 0, input_is_list=input_is_list)\n",
    "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\execution.py\", line 291, in process_inputs\n    result = f(**inputs)\n             ^^^^^^^^^^^\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\custom_nodes\\comfyui-custom-scripts\\py\\show_text.py\", line 30, in notify\n    print(\"Error: extra_pnginfo[0] is not a dict or missing 'workflow' key\")\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 47, in write\n    self.__convertor.write(text)\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 177, in write\n    self.write_and_convert(text)\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 205, in write_and_convert\n    self.write_plain_text(text, cursor, len(text))\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 210, in write_plain_text\n    self.wrapped.write(text[start:end])\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 47, in write\n    self.__convertor.write(text)\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 177, in write\n    self.write_and_convert(text)\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 205, in write_and_convert\n    self.write_plain_text(text, cursor, len(text))\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\colorama\\ansitowin32.py\", line 210, in write_plain_text\n    self.wrapped.write(text[start:end])\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\comfyui_manager\\prestartup_script.py\", line 324, in write\n    self.sync_write(message)\n",
    "  File \"C:\\Users\\olive\\workspace\\ComfyUI\\.venv\\Lib\\site-packages\\comfyui_manager\\prestartup_script.py\", line 345, in sync_write\n    original_stdout.flush()\n",
    "  File \"C:\\Users\\olive\\AppData\\Local\\Programs\\@comfyorgcomfyui-electron\\resources\\ComfyUI\\app\\logger.py\", line 35, in flush\n    super().flush()\n"
  ],

Other

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Potential BugUser is reporting a bug. This should be tested.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions