ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custom nodes of ComfyUI. Furthermore, this extension provides a hub feature and convenience functions to access a wide range of information within ComfyUI.
This report summarizes scanner evidence for Comfy-Org/ComfyUI-Manager, a Python project with 16,408 GitHub stars. SynthScan examined 98,163 lines of code across 112 source files, recording 565 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 7.9 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 370 finding(s).
Are imports declared and package/API names verified? 20 finding(s).
Are wrappers, guards, and repeated structures necessary? 398 finding(s).
Which changes need focused human review? 565 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 565 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scanner.py | 518 | def _extract_display_name_mappings(code_text: str) -> Set[str]: | STRING |
| LOW | scanner.py | 668 | def _fallback_classname_resolver(code_text: str, file_path: Optional[Path]) -> Set[str]: | STRING |
| LOW | scanner.py | 705 | def _fallback_item_assignment(code_text: str) -> Set[str]: | STRING |
| LOW | scanner.py | 736 | def _fallback_dict_comprehension(code_text: str, file_path: Optional[Path] = None) -> Set[str]: | STRING |
| LOW | scanner.py | 819 | def _fallback_import_class_names(code_text: str, file_path: Optional[Path] = None) -> Set[str]: | STRING |
| LOW | scanner.py | 904 | def _fallback_empty_dict_detector(code_text: str, file_path: Optional[Path], verbose: bool = False) -> None: | STRING |
| LOW | scanner.py | 972 | def extract_node_id_from_schema(class_node): | STRING |
| LOW | scanner.py | 1238 | def clone_or_pull_git_repository(git_url): | STRING |
| LOW | cm-cli.py | 169 | def get_restore_snapshot_path(): | CODE |
| LOW | cm-cli.py | 561 | def get_all_installed_node_specs(): | CODE |
| LOW | prestartup_script.py | 56 | def register_message_collapse(f): | CODE |
| LOW | prestartup_script.py | 61 | def is_import_failed_extension(name): | CODE |
| LOW | prestartup_script.py | 215 | def extract_origin_module_from_strings(file_paths): | CODE |
| LOW | prestartup_script.py | 653 | def execute_lazy_install_script(repo_path, executable): | CODE |
| LOW | prestartup_script.py | 883 | def check_windows_event_loop_policy(): | CODE |
| LOW | git_helper.py | 258 | def checkout_custom_node_hash(git_custom_node_infos): | CODE |
| LOW | git_helper.py | 343 | def invalidate_custom_node_file(file_custom_node_infos): | CODE |
| LOW | js/comfyui-gui-builder.js | 134 | export function buildGuiFrameCustomHeader(dialogId, customHeader, content, owner) { | CODE |
| LOW | js/comfyui-manager.js | 482 | function showVersionSelectorDialog(versions, current, onSelect) { | CODE |
| LOW | js/comfyui-share-common.js | 41 | export function getPotentialOutputsAndOutputNodes(nodes) { | CODE |
| LOW | js/comfyui-share-common.js | 348 | function createShareButtonsWithDescriptions() { | CODE |
| LOW | tests/test_install_flags_gates.py | 311 | def test_load_bearing_public_canary(self): | CODE |
| LOW | tests/test_install_flags_gates.py | 326 | def test_unknown_pip_block_unconditional(self): | CODE |
| LOW | tests/test_install_flags_gates.py | 339 | def test_entry_gate_strong_denies_despite_flags(self): | CODE |
| LOW | tests/test_install_flags_gates.py | 349 | def test_cnr_latest_arm_never_consults_flags(self): | CODE |
| LOW | tests/test_install_flags_gates.py | 387 | def test_flag_constants_content(self): | CODE |
| LOW | tests/test_install_flags_gates.py | 431 | def test_handlers_bind_predicate(self): | CODE |
| LOW | tests/test_install_flags_gates.py | 449 | def test_replace_no_high_literal_at_sa_sb(self): | CODE |
| LOW | tests/test_flagged_nodepack_policy.py | 55 | def test_cli_install_uses_only_parent_permission(permission, allowed): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 75 | def test_install_policy_before_download(status, permission, allowed): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 101 | def test_override_does_not_bypass_registry_refusal(http): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 114 | def test_direct_cnr_execution_and_postinstall(operation, return_postinstall): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 154 | def test_denial_preserves_installed_version(operation): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 192 | def test_all_listener_addresses_must_be_loopback(listen, allowed): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 203 | def test_hostname_must_resolve_exclusively_to_loopback(addresses, allowed): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 217 | def test_denial_preserves_enabled_state(state): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 236 | def test_exact_installed_version_enables_without_registry_lookup(): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 254 | def test_failed_uninstall_stops_reinstall(): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 266 | def test_git_reinstall_replaces_pack_and_reruns_script(version): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 302 | def test_config_defaults_and_manual_edits_survive_settings_save(): | STRING |
| LOW | tests/test_flagged_nodepack_policy.py | 317 | def test_config_value_roundtrip(raw, expected): | STRING |
| LOW | tests/test_message_sink_provenance.py | 214 | def test_the_four_sink_implementations_all_exist(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 231 | def test_every_caller_is_classified(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 243 | def test_the_observed_receivers_are_the_pinned_set(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 254 | def test_no_sink_method_is_destructured_out_of_its_receiver(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 265 | def test_unsupported_sink_calls_require_review(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 274 | def test_the_registry_has_no_stale_entries(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 289 | def test_server_escaped_callers_do_not_escape_again(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 312 | def test_no_data_callers_interpolate_no_channel_value(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 340 | def test_show_selection_receives_no_channel_data(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 366 | def test_show_error_arguments_are_escaped_or_literal(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 396 | def test_every_error_message_builder_escapes_its_server_text(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 425 | def test_error_guard_rejects_unclassified_arguments(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 439 | def test_html_guards_reject_unreviewed_source(self): | CODE |
| LOW | tests/test_message_sink_provenance.py | 471 | def test_duplicate_calls_require_review(self): | CODE |
| LOW | tests/test_pack_column_escaping.py | 133 | def test_a_string_payload_renders_inert(self): | CODE |
| LOW⚡ | tests/test_pack_column_escaping.py | 159 | def test_a_negative_count_is_still_na(self): | CODE |
| LOW⚡ | tests/test_pack_column_escaping.py | 163 | def test_zero_is_not_treated_as_missing(self): | CODE |
| LOW⚡ | tests/test_pack_column_escaping.py | 166 | def test_a_missing_value_still_renders_an_empty_cell(self): | CODE |
| LOW⚡ | tests/test_pack_column_escaping.py | 215 | def test_a_slash_separated_payload_renders_inert(self): | CODE |
| 162 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scanner.py | 64 | except: | CODE |
| HIGH | scanner.py | 122 | except: | CODE |
| HIGH | scanner.py | 897 | except (ValueError, IndexError): | CODE |
| HIGH | scanner.py | 596 | except: | CODE |
| HIGH | scanner.py | 662 | except: | CODE |
| HIGH | scanner.py | 1319 | except FileNotFoundError: | CODE |
| HIGH | cm-cli.py | 93 | except: | CODE |
| HIGH | prestartup_script.py | 114 | except Exception: | CODE |
| HIGH | prestartup_script.py | 525 | except: | CODE |
| HIGH | prestartup_script.py | 538 | except Exception: | CODE |
| HIGH | prestartup_script.py | 898 | except Exception: | CODE |
| HIGH | prestartup_script.py | 369 | except Exception: | CODE |
| HIGH | prestartup_script.py | 352 | except Exception: | CODE |
| HIGH | prestartup_script.py | 378 | except (OSError, ValueError): | CODE |
| HIGH | git_helper.py | 455 | except: | CODE |
| HIGH | git_helper.py | 475 | except: | CODE |
| HIGH | git_helper.py | 486 | except: | CODE |
| HIGH | git_helper.py | 464 | except: | CODE |
| HIGH | git_helper.py | 177 | except: | CODE |
| HIGH | tests/e2e/test_e2e_flagged_nodepacks.py | 158 | except requests.RequestException: | CODE |
| HIGH | tests/e2e/test_e2e_install_flags.py | 637 | except (ValueError, requests.RequestException): | CODE |
| HIGH | glob/manager_core.py | 2096 | except: | CODE |
| HIGH | glob/manager_core.py | 2045 | except: | CODE |
| HIGH | glob/manager_server.py | 1958 | except Exception: | CODE |
| HIGH | glob/manager_server.py | 272 | except: | CODE |
| HIGH | glob/manager_server.py | 1903 | except: | CODE |
| HIGH | glob/manager_util.py | 117 | except Exception: | CODE |
| HIGH | glob/manager_util.py | 61 | except ValueError: | CODE |
| HIGH | glob/manager_util.py | 722 | except Exception: | CODE |
| HIGH | glob/manager_util.py | 742 | except Exception: | CODE |
| HIGH | glob/manager_util.py | 753 | except Exception: | CODE |
| HIGH | glob/manager_util.py | 731 | except Exception: | CODE |
| HIGH | glob/security_check.py | 125 | except subprocess.CalledProcessError: | CODE |
| HIGH | glob/cnr_utils.py | 250 | except: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | json-checker.py | 176 | except Exception as e: | CODE |
| LOW | scanner.py | 459 | except Exception: | STRING |
| LOW | scanner.py | 1252 | except Exception as e: | STRING |
| LOW | scanner.py | 1259 | except Exception as e: | STRING |
| LOW | scanner.py | 1360 | except Exception as e: | STRING |
| LOW | scanner.py | 1555 | except Exception as e: | STRING |
| LOW | scanner.py | 1572 | except Exception as e: | STRING |
| MEDIUM | cm-cli.py | 179 | print("Error: folder_paths module is not available") | CODE |
| LOW | cm-cli.py | 343 | except Exception as e: | CODE |
| LOW | cm-cli.py | 609 | except Exception as e: | CODE |
| LOW | cm-cli.py | 1134 | except Exception: | CODE |
| MEDIUM | cm-cli.py | 64 | def check_comfyui_hash(): | CODE |
| MEDIUM | prestartup_script.py | 292 | def fileno(self): | CODE |
| MEDIUM | prestartup_script.py | 518 | def read_downgrade_blacklist(): | CODE |
| MEDIUM | prestartup_script.py | 883 | def check_windows_event_loop_policy(): | CODE |
| LOW | prestartup_script.py | 114 | except Exception: | CODE |
| LOW | prestartup_script.py | 352 | except Exception: | CODE |
| LOW | prestartup_script.py | 369 | except Exception: | CODE |
| LOW | prestartup_script.py | 453 | except Exception as e: | CODE |
| LOW | prestartup_script.py | 538 | except Exception: | CODE |
| LOW | prestartup_script.py | 646 | except Exception as e: | CODE |
| LOW | prestartup_script.py | 782 | except Exception as e: | CODE |
| LOW | prestartup_script.py | 829 | except Exception as e: | CODE |
| LOW | prestartup_script.py | 896 | except Exception as e: | CODE |
| LOW | prestartup_script.py | 898 | except Exception: | CODE |
| MEDIUM | git_helper.py | 255 | print(f"Error checking out the ComfyUI: {str(e)}") | CODE |
| MEDIUM | git_helper.py | 85 | def gitcheck(path, do_fetch=False): | CODE |
| MEDIUM | git_helper.py | 390 | def apply_snapshot(path): | CODE |
| LOW | git_helper.py | 123 | except Exception as e: | CODE |
| LOW | git_helper.py | 239 | except Exception as e: | CODE |
| LOW | git_helper.py | 324 | except Exception: | CODE |
| LOW | git_helper.py | 428 | except Exception as e: | CODE |
| LOW | git_helper.py | 527 | except Exception as e: | CODE |
| LOW | tests/test_write_config_persistence.py | 424 | except Exception as e: | STRING |
| LOW | scripts/colab-dependencies.py | 17 | except Exception as e: | CODE |
| MEDIUM⚡ | glob/manager_core.py | 2606 | print(f"An error occurred during the execution of the uninstall.py script. Only the '{dir_path}' | CODE |
| MEDIUM⚡ | glob/manager_core.py | 2611 | print(f"An error occurred during the execution of the disable.py script. Only the '{dir_path}' w | CODE |
| MEDIUM | glob/manager_core.py | 74 | def get_custom_nodes_paths(): | CODE |
| MEDIUM | glob/manager_core.py | 1910 | def read_config(): | CODE |
| MEDIUM | glob/manager_core.py | 2062 | def try_rmtree(title, fullpath): | CODE |
| MEDIUM | glob/manager_core.py | 2351 | def is_valid_url(url): | CODE |
| MEDIUM | glob/manager_core.py | 2731 | def update_to_stable_comfyui(repo_path): | CODE |
| MEDIUM | glob/manager_core.py | 2889 | def get_installed_pip_packages(): | CODE |
| LOW⚡ | glob/manager_core.py | 2617 | except Exception as e: | CODE |
| LOW⚡ | glob/manager_core.py | 2885 | except Exception: | CODE |
| LOW⚡ | glob/manager_core.py | 2894 | except Exception as e: | CODE |
| LOW⚡ | glob/manager_core.py | 3618 | except Exception: | CODE |
| LOW⚡ | glob/manager_core.py | 3623 | except Exception: | CODE |
| LOW⚡ | glob/manager_core.py | 3632 | except Exception: | CODE |
| LOW | glob/manager_core.py | 245 | except Exception: | CODE |
| LOW | glob/manager_core.py | 676 | except Exception: | CODE |
| LOW | glob/manager_core.py | 1393 | except Exception as e: | CODE |
| LOW | glob/manager_core.py | 1428 | except Exception as e: | CODE |
| LOW | glob/manager_core.py | 1435 | except Exception: | CODE |
| LOW | glob/manager_core.py | 1827 | except Exception as e: | CODE |
| LOW | glob/manager_core.py | 1948 | except Exception: | CODE |
| LOW | glob/manager_core.py | 2065 | except Exception as e: | CODE |
| LOW | glob/manager_core.py | 2133 | except Exception: | CODE |
| LOW | glob/manager_core.py | 2306 | except Exception as e: | CODE |
| LOW | glob/manager_core.py | 2437 | except Exception as e: | CODE |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_message_sink_provenance.py | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_message_sink_provenance.py | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_residual_sink_escaping.py | 437 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_residual_sink_escaping.py | 439 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_residual_sink_escaping.py | 464 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_residual_sink_escaping.py | 466 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_residual_sink_escaping.py | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_residual_sink_escaping.py | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_residual_sink_escaping.py | 303 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_residual_sink_escaping.py | 305 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 67 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 69 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 139 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 156 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 279 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 281 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 360 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 362 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 495 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/e2e/test_e2e_install_flags.py | 497 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | json-checker.py | 64 | CODE | |
| LOW | json-checker.py | 154 | CODE | |
| LOW | scanner.py | 44 | CODE | |
| LOW | scanner.py | 126 | CODE | |
| LOW | scanner.py | 278 | CODE | |
| LOW | scanner.py | 332 | CODE | |
| LOW | scanner.py | 469 | CODE | |
| LOW | scanner.py | 518 | CODE | |
| LOW | scanner.py | 552 | CODE | |
| LOW | scanner.py | 668 | CODE | |
| LOW | scanner.py | 705 | CODE | |
| LOW | scanner.py | 736 | CODE | |
| LOW | scanner.py | 819 | CODE | |
| LOW | scanner.py | 929 | CODE | |
| LOW | scanner.py | 942 | CODE | |
| LOW | scanner.py | 972 | CODE | |
| LOW | scanner.py | 989 | CODE | |
| LOW | scanner.py | 1026 | CODE | |
| LOW | scanner.py | 1206 | CODE | |
| LOW | scanner.py | 1223 | CODE | |
| LOW | scanner.py | 1264 | CODE | |
| LOW | scanner.py | 1445 | CODE | |
| LOW | scanner.py | 1311 | CODE | |
| LOW | cm-cli.py | 187 | CODE | |
| LOW | cm-cli.py | 418 | CODE | |
| LOW | cm-cli.py | 1191 | CODE | |
| LOW | cm-cli.py | 1246 | CODE | |
| LOW | cm-cli.py | 138 | CODE | |
| LOW | prestartup_script.py | 457 | CODE | |
| LOW | prestartup_script.py | 551 | CODE | |
| LOW | prestartup_script.py | 653 | CODE | |
| LOW | prestartup_script.py | 750 | CODE | |
| LOW | prestartup_script.py | 757 | CODE | |
| LOW | prestartup_script.py | 305 | CODE | |
| LOW | prestartup_script.py | 411 | CODE | |
| LOW | prestartup_script.py | 606 | CODE | |
| LOW | git_helper.py | 23 | CODE | |
| LOW | git_helper.py | 147 | CODE | |
| LOW | git_helper.py | 258 | CODE | |
| LOW | git_helper.py | 343 | CODE | |
| LOW | git_helper.py | 390 | CODE | |
| LOW | git_helper.py | 436 | CODE | |
| LOW | tests/test_install_flags_gates.py | 81 | CODE | |
| LOW | tests/test_message_sink_provenance.py | 265 | CODE | |
| LOW | tests/test_message_sink_provenance.py | 439 | CODE | |
| LOW | tests/test_pack_column_escaping.py | 332 | CODE | |
| LOW | tests/js_lift.py | 55 | CODE | |
| LOW | tests/test_csrf_content_type_helper.py | 31 | CODE | |
| LOW | tests/test_node_usage_escaping.py | 221 | CODE | |
| LOW | tests/test_node_usage_escaping.py | 247 | CODE | |
| LOW | tests/test_install_flag_predicate.py | 108 | CODE | |
| LOW | tests/test_model_manager_escaping.py | 371 | CODE | |
| LOW | tests/e2e/test_e2e_flagged_nodepacks.py | 38 | CODE | |
| LOW | tests/e2e/test_e2e_flagged_nodepacks.py | 118 | CODE | |
| LOW | tests/e2e/test_e2e_flagged_nodepacks.py | 45 | CODE | |
| LOW | tests/e2e/test_e2e_install_flags.py | 620 | CODE | |
| LOW | scripts/colab-dependencies.py | 5 | CODE | |
| LOW | glob/manager_core.py | 274 | CODE | |
| LOW | glob/manager_core.py | 300 | CODE | |
| LOW | glob/manager_core.py | 351 | CODE | |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_pack_column_escaping.py | 189 | " undefined_passthrough: formatter(undefined) === undefined,\n" | CODE |
| HIGH⚡ | tests/test_pack_column_escaping.py | 190 | " null_passthrough: formatter(null) === null,\n" | CODE |
| HIGH⚡ | tests/test_pack_column_escaping.py | 191 | " undefined_cell: cell(undefined), null_cell: cell(null)}));\n" | CODE |
| HIGH | tests/test_pack_column_escaping.py | 360 | label: 'Operation', mode: %s}, '', null); | CODE |
| HIGH | tests/test_grid_highlight_escaping.py | 101 | const row = {name: 'Alpha Beta', description: 'Gamma', missing: null, count: 0}; | CODE |
| HIGH | tests/test_node_usage_escaping.py | 11 | is built as `pack.title || packKey`: /customnode/getlist runs populate_markdown | STRING |
| HIGH | tests/test_node_usage_escaping.py | 190 | if (options?.body) posts.push(JSON.parse(options.body)); | CODE |
| HIGH | tests/test_residual_sink_escaping.py | 533 | getFilterItem: () => null, | CODE |
| HIGH | tests/test_url_sanitize_parity.py | 155 | " if (trimUrl(String.fromCodePoint(c)) === '') out.push(c);\n" | CODE |
| HIGH | tests/test_url_sanitize_parity.py | 286 | "nul: sanitizeUrl(null), undef: sanitizeUrl(undefined)}));\n" | CODE |
| HIGH | tests/test_model_manager_escaping.py | 179 | "nul: escapeCell(null), undef: escapeCell(undefined)," | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | json-checker.py | 118 | # Check if it's a GitHub URL (likely a git repo) | COMMENT |
| LOW | scanner.py | 378 | # Read file with proper encoding | STRING |
| LOW | scanner.py | 589 | # Check if we have cached result with matching mtime and scanner version | STRING |
| LOW | scanner.py | 797 | # Check if key is cls.__name__ pattern | STRING |
| LOW | scanner.py | 849 | # Check if these names appear in list assignments that feed into NODE_CLASS_MAPPINGS | STRING |
| LOW | scanner.py | 981 | # Check if it's Schema() call | STRING |
| LOW | scanner.py | 1013 | # Check if inherits from ComfyNode | STRING |
| LOW | prestartup_script.py | 841 | # Check if script_list_path exists | COMMENT |
| LOW | git_helper.py | 185 | # Check if the path is a git repository | COMMENT |
| LOW | glob/manager_core.py | 2234 | # Check if the path is a git repository | COMMENT |
| LOW | glob/manager_core.py | 2444 | # Check if the path is a git repository | COMMENT |
| LOW | glob/manager_core.py | 3136 | # Check if there's only one directory inside the target directory | COMMENT |
| LOW⚡ | glob/share_3rdparty.py | 169 | # Check if the user has provided Matrix credentials in a file called 'matrix_accesstoken' | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | alter-list.json | 154 | "id":"https://github.com/spinagon/ComfyUI-seamless-tiling", | CODE |
| MEDIUM | tests/test_write_config_persistence.py | 16 | GOAL #53 adds one more node to the same harness: | STRING |
| MEDIUM | glob/manager_core.py | 3410 | # robust filter out comfyui-manager while restoring snapshot | COMMENT |
| MEDIUM | glob/node_package.py | 67 | node_id = info['id'] # robust module guessing | CODE |
| MEDIUM | node_db/legacy/custom-node-list.json | 3397 | "description": "Welcome to the Image Upscaler & Restorer project! This tool utilizes the [a/GFPGAN](https:// | CODE |
| MEDIUM | node_db/dev/custom-node-list.json | 2487 | "description": "The ComfyUI-fal-Connector is a tool designed to provide an integration between ComfyUI and f | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scanner.py | 621 | # This catches the specific Scanner 2.0.10 bug pattern: | COMMENT |
| LOW | js/popover-helper.js | 301 | COMMENT | |
| LOW | tests/e2e/scripts/stop_comfyui.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/e2e/scripts/start_comfyui.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/e2e/scripts/start_comfyui.sh | 21 | # non-zero exit -> fail fast with log tail. | COMMENT |
| LOW | tests/e2e/scripts/setup_e2e_env.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/e2e/scripts/stage_flags.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | glob/manager_core.py | 1841 | # A write that cannot see the current contents has nothing to merge | COMMENT |
| LOW | glob/manager_core.py | 1881 | # Sanitize to prevent CRLF injection. Applied to the values written | COMMENT |
| LOW | glob/cm_global.py | 1 | import traceback | COMMENT |
| LOW | glob/cm_global.py | 21 | # def api_hello(msg): | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | __init__.py | 12 | CODE | |
| LOW | __init__.py | 13 | CODE | |
| LOW | prestartup_script.py | 460 | CODE | |
| LOW | prestartup_script.py | 461 | CODE | |
| LOW | prestartup_script.py | 462 | CODE | |
| LOW | prestartup_script.py | 463 | CODE | |
| LOW | prestartup_script.py | 481 | CODE | |
| LOW | tests/e2e/test_e2e_install_flags.py | 53 | CODE | |
| LOW | glob/node_package.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scanner.py | 1160 | Read URLs from list file for scan-only mode Args: list_file (str): Path to URL list file (one URL per | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | node_db/dev/custom-node-list.json | 7154 | "description": "A suite of custom ComfyUI nodes built to evaluate and diagnose the technical qualities of im | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/en/v3.38-userdata-security-migration.md | 50 | ### Step 1: Configuration Migration | COMMENT |
| LOW | docs/en/v3.38-userdata-security-migration.md | 56 | ### Step 2: Security Level Check | COMMENT |
| LOW | docs/en/v3.38-userdata-security-migration.md | 70 | ### Step 3: Legacy Backup | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | glob/cm_global.py | 6 | # Usage: | COMMENT |
| LOW | glob/cm_global.py | 17 | # Usage: | COMMENT |
| LOW | glob/cm_global.py | 62 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | node_db/tutorial/custom-node-list.json | 61 | "description": "Welcome to ecjojo_example_nodes! This example is specifically designed for beginners who wan | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | __init__.py | 22 | __all__ = ['NODE_CLASS_MAPPINGS'] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | glob/manager_core.py | 1084 | CODE |