[GH-ISSUE #1508] Python import verification fails when torch prints warning despite JSON success #443

Closed
opened 2026-10-31 22:13:04 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @benceruleanlu on GitHub (Jan 5, 2026).
Original GitHub issue: https://github.com/Comfy-Org/desktop/issues/1508

Summary

During startup import verification, extra output (warning) appears before the JSON result, causing JSON parsing to fail and the app to throw PythonImportVerificationError even though the JSON says success: true.

Environment

  • Windows (from log path C:/Users/...)
  • ComfyUI Desktop packaged app

Steps to reproduce

  1. Launch ComfyUI Desktop on a system where the Python import check emits extra output (example warning below).
  2. Observe the import verification failure dialog.

Expected

Import verification should pass when the JSON result is successful, even if other output is present.

Actual

Import verification fails and triggers the reinstall/ignore prompt.

Logs

[WARNING] failed to run amdgpu-arch: binary not found.
{"failed_imports": [], "success": true}

Followed by:

PythonImportVerificationError: We were unable to verify the state of your Python virtual environment. This will likely prevent ComfyUI from starting.

Suspected cause

  • src/services/pythonImportVerifier.ts concatenates stdout and stderr into a single output string and then runs JSON.parse(output).
  • Any extra output (warnings from torch during import) makes the JSON invalid, so the verifier returns success: false even if the JSON result is successful.
  • The failure bubbles up in src/virtualEnvironment.ts when verifyPythonImports() returns false.

Possible fixes

  • Parse only the last JSON object from output (e.g., find the last {...} and parse that).
  • Only parse stdout and ignore stderr, or capture stdout/stderr separately and parse stdout only.
  • Make the Python script write JSON to stdout and other output to stderr, then parse stdout only.

┆Issue is synchronized with this Notion page by Unito

Originally created by @benceruleanlu on GitHub (Jan 5, 2026). Original GitHub issue: https://github.com/Comfy-Org/desktop/issues/1508 ## Summary During startup import verification, extra output (warning) appears before the JSON result, causing JSON parsing to fail and the app to throw `PythonImportVerificationError` even though the JSON says `success: true`. ## Environment - Windows (from log path `C:/Users/...`) - ComfyUI Desktop packaged app ## Steps to reproduce 1. Launch ComfyUI Desktop on a system where the Python import check emits extra output (example warning below). 2. Observe the import verification failure dialog. ## Expected Import verification should pass when the JSON result is successful, even if other output is present. ## Actual Import verification fails and triggers the reinstall/ignore prompt. ## Logs ``` [WARNING] failed to run amdgpu-arch: binary not found. {"failed_imports": [], "success": true} ``` Followed by: ``` PythonImportVerificationError: We were unable to verify the state of your Python virtual environment. This will likely prevent ComfyUI from starting. ``` ## Suspected cause - `src/services/pythonImportVerifier.ts` concatenates stdout and stderr into a single `output` string and then runs `JSON.parse(output)`. - Any extra output (warnings from `torch` during import) makes the JSON invalid, so the verifier returns `success: false` even if the JSON result is successful. - The failure bubbles up in `src/virtualEnvironment.ts` when `verifyPythonImports()` returns false. ## Possible fixes - Parse only the last JSON object from output (e.g., find the last `{...}` and parse that). - Only parse stdout and ignore stderr, or capture stdout/stderr separately and parse stdout only. - Make the Python script write JSON to stdout and other output to stderr, then parse stdout only. ┆Issue is synchronized with this [Notion page](https://www.notion.so/Issue-1508-Python-import-verification-fails-when-torch-prints-warning-despite-JSON-success-2df6d73d36508182bfb2e337af4ebc0e) by [Unito](https://www.unito.io)
bsakaguchi 2026-10-31 22:13:04 +00:00
  • closed this issue
  • added the
    bug
    label
Author
Owner

@dosubot[bot] commented on GitHub (Jan 5, 2026):

You’re correct about the cause: the current implementation concatenates both stdout and stderr into a single string and then tries to parse the whole thing as JSON. Any warning or extra output (like from torch) before the JSON will break parsing and trigger the verification error, even if the JSON result itself is successful. There’s no filtering or separation of output in the code right now, so any stray line will cause this failure see source.

Your suggested fixes are all valid approaches:

  • Parsing only the last JSON object from the output (e.g., by searching for the last {...}) is a robust workaround.
  • Capturing stdout and stderr separately and only parsing stdout is best practice, since warnings and errors should go to stderr.
  • Ensuring the Python script writes only JSON to stdout and all other output to stderr is ideal, but not always possible if dependencies emit to stdout.

Any of these would make the verification much more robust. The most straightforward fix in the current codebase is to capture stdout and stderr separately and only parse stdout as JSON. If you need to work around this immediately, extracting the last JSON object from the combined output string before parsing is a practical short-term solution.

To reply, just mention @dosu.


Docs are dead. Just use Dosu.

Leave Feedback Ask Dosu about desktop Share Dosu with your team

<!-- gh-comment-id:3712291865 --> @dosubot[bot] commented on GitHub (Jan 5, 2026): <!-- Answer --> You’re correct about the cause: the current implementation concatenates both stdout and stderr into a single string and then tries to parse the whole thing as JSON. Any warning or extra output (like from torch) before the JSON will break parsing and trigger the verification error, even if the JSON result itself is successful. There’s no filtering or separation of output in the code right now, so any stray line will cause this failure [see source](https://github.com/Comfy-Org/desktop/blob/a6bb2b0f8b6016f317489fea1fd6ff2a21dd48f7/src/services/pythonImportVerifier.ts#L24-L142). Your suggested fixes are all valid approaches: - Parsing only the last JSON object from the output (e.g., by searching for the last `{...}`) is a robust workaround. - Capturing stdout and stderr separately and only parsing stdout is best practice, since warnings and errors should go to stderr. - Ensuring the Python script writes only JSON to stdout and all other output to stderr is ideal, but not always possible if dependencies emit to stdout. Any of these would make the verification much more robust. The most straightforward fix in the current codebase is to capture stdout and stderr separately and only parse stdout as JSON. If you need to work around this immediately, extracting the last JSON object from the combined output string before parsing is a practical short-term solution. <!-- Dosu Comment Footer --> *To reply, just mention [@dosu](https://go.dosu.dev/dosubot?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=reply-with-mention&utm_term=Comfy-Org%2Fdesktop).* --- Docs are dead. Just use [Dosu](https://dosu.dev?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-tagline&utm_term=Comfy-Org%2Fdesktop). [![Leave Feedback](https://img.shields.io/badge/Leave%20Feedback-555555?style=flat)](https://app.dosu.dev/response-feedback?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-feedback&utm_term=Comfy-Org%2Fdesktop#message_id=29af800b-ea7b-4c64-91ee-04fcdc19e29f) [![Ask Dosu about desktop](https://img.shields.io/badge/Ask%20Dosu%20about%20desktop-2f7b3f?style=flat&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iODYiIGhlaWdodD0iODkiIHZpZXdCb3g9IjAgMCA4NiA4OSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS4yOTIzNiAxMi43OTI4TDE3Ljc1OTMgNi42ODE4OFY3Mi41NjY3TDUuMjkyMzYgODQuMDYxOFYxMi43OTI4WiIgZmlsbD0iI0I0QkI5MSIvPjxwYXRoIGQ9Ik0xOC4yNTc1IDczLjExOTZMNTkuMTMyOSA3Mi43NDhMNTEuNzAxMSA4Mi40MDk1TDI5LjAzMzggODYuMjkxTDYuMjM5NjIgODUuMTU1NEwxOC4yNTc1IDczLjExOTZaIiBmaWxsPSIjNzc4NTYxIi8%2BPHBhdGggZD0iTTE3LjQ5MTYgMy43MzYzM0wzLjU4NTU3IDEyLjcwOTlWODMuNTc5MkMzLjU4NTU3IDg0Ljc1NDIgNC45ODU2MyA4NS4zNjUyIDUuODQ3MDUgODQuNTY2TDE5LjYyOTYgNzEuNzgwMSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSI2LjQyODQ0IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48bWFzayBpZD0iZG9zdS1kLWN1dG91dCIgZmlsbD0id2hpdGUiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDAuNzA0IDAuNTE4MDY2SDE3LjA0MzlWNzYuMjIyMUg0MC43MDRINDIuNTgwNUg0Ny44MDEzQzY4LjcwNjQgNzYuMjIyMSA4NS42NTMzIDU5LjI3NTIgODUuNjUzMyAzOC4zNzAxQzg1LjY1MzMgMTcuNDY1IDY4LjcwNjMgMC41MTgwNjYgNDcuODAxMyAwLjUxODA2Nkg0Mi41ODA1SDQwLjcwNFoiLz48L21hc2s%2BPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MC43MDQgMC41MTgwNjZIMTcuMDQzOVY3Ni4yMjIxSDQwLjcwNEg0Mi41ODA1SDQ3LjgwMTNDNjguNzA2NCA3Ni4yMjIxIDg1LjY1MzMgNTkuMjc1MiA4NS42NTMzIDM4LjM3MDFDODUuNjUzMyAxNy40NjUgNjguNzA2MyAwLjUxODA2NiA0Ny44MDEzIDAuNTE4MDY2SDQyLjU4MDVINDAuNzA0WiIgZmlsbD0iI0YzRjZGMSIvPjxwYXRoIGQ9Ik0xNy4wNDM5IDAuNTE4MDY2Vi02LjU3OTE5SDkuOTQ2NjlWMC41MTgwNjZIMTcuMDQzOVpNMTcuMDQzOSA3Ni4yMjIxSDkuOTQ2NjlWODMuMzE5NEgxNy4wNDM5Vjc2LjIyMjFaTTE3LjA0MzkgNy42MTUzMkg0MC43MDRWLTYuNTc5MTlIMTcuMDQzOVY3LjYxNTMyWk0yNC4xNDEyIDc2LjIyMjFWMC41MTgwNjZIOS45NDY2OVY3Ni4yMjIxSDI0LjE0MTJaTTQwLjcwNCA2OS4xMjQ5SDE3LjA0MzlWODMuMzE5NEg0MC43MDRWNjkuMTI0OVpNNDIuNTgwNSA2OS4xMjQ5SDQwLjcwNFY4My4zMTk0SDQyLjU4MDVWNjkuMTI0OVpNNDcuODAxMyA2OS4xMjQ5SDQyLjU4MDVWODMuMzE5NEg0Ny44MDEzVjY5LjEyNDlaTTc4LjU1NiAzOC4zNzAxQzc4LjU1NiA1NS4zNTU1IDY0Ljc4NjcgNjkuMTI0OSA0Ny44MDEzIDY5LjEyNDlWODMuMzE5NEM3Mi42MjYxIDgzLjMxOTQgOTIuNzUwNSA2My4xOTQ5IDkyLjc1MDUgMzguMzcwMUg3OC41NTZaTTQ3LjgwMTMgNy42MTUzMkM2NC43ODY2IDcuNjE1MzIgNzguNTU2IDIxLjM4NDcgNzguNTU2IDM4LjM3MDFIOTIuNzUwNUM5Mi43NTA1IDEzLjU0NTMgNzIuNjI2IC02LjU3OTE5IDQ3LjgwMTMgLTYuNTc5MTlWNy42MTUzMlpNNDIuNTgwNSA3LjYxNTMySDQ3LjgwMTNWLTYuNTc5MTlINDIuNTgwNVY3LjYxNTMyWk00MC43MDQgNy42MTUzMkg0Mi41ODA1Vi02LjU3OTE5SDQwLjcwNFY3LjYxNTMyWiIgZmlsbD0iYmxhY2siIG1hc2s9InVybCgjZG9zdS1kLWN1dG91dCkiLz48cGF0aCBkPSJNNjguOTIxNSAzNi4wMTM1QzY4LjkyMTUgMzYuMDEzNSA2NS43MzY5IDQ5LjQ3MzggNTEuNDIzMSA0OS40NzM4QzM3LjEwOTMgNDkuNDczOCAzMi41Nzg3IDM3LjM1OTYgMzIuNTc4NyAzNi4wMTM1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjcuNjkxNjEiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjxwYXRoIGQ9Ik0wLjM0ODYzMyA4NS40OTQ2QzAuMzQ4NjMzIDg1LjQ5NDYgMjkuNDg1NiA4NS44MzA5IDM0LjgwOSA4NS42OThDNDQuODMzNyA4NS40NDc3IDUxLjI4NzIgODQuNDAyIDU3LjUyNjkgNzguOTcyNEM2Mi44MTI5IDc0LjM3MjcgNzUuMTM0MiA1OS42ODM2IDc1LjEzNDIgNTkuNjgzNiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSI2LjE2NDgyIi8%2BPC9zdmc%2B)](https://github.dosu.com/Comfy-Org/desktop?utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-ask-repo&utm_term=Comfy-Org%2Fdesktop) [![Share Dosu with your team](https://img.shields.io/badge/Share%20Dosu%20with%20your%20team-1f6feb?style=flat)](https://app.dosu.dev/signup?referrer=openSource&source=github-footer&utm_source=github&utm_medium=bot-comment&utm_campaign=github-comment-footer-20260415&utm_content=static-docs-share-team&utm_term=Comfy-Org%2Fdesktop)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Comfy-Org/desktop#443
No description provided.