diff --git a/core/workflow_analyzer.py b/core/workflow_analyzer.py index 7b6d6a4..0de7da0 100644 --- a/core/workflow_analyzer.py +++ b/core/workflow_analyzer.py @@ -1451,8 +1451,15 @@ def get_node_model_info( if model_widget_category_hints else ([effective_category_hint] if effective_category_hint else None) ) + # A generic widget name such as ``model_name`` is useful for choosing a + # category, but it is not proof that an arbitrary STRING value is a local + # model reference. Some metadata/search nodes use that name for human- + # readable titles. Only folder-backed schemas, known widget indexes, or a + # model-typed combo/output pairing are strong enough to admit an + # extensionless value. category_backed_model_widget = bool( - model_widget_category_hint + model_widget_folder_key_hints + or get_node_model_widget_category_hint(node_type, idx) or schema_output_category_hint ) named_model_file_widget = bool( diff --git a/tests/test_workflow_analyzer.py b/tests/test_workflow_analyzer.py index 430f644..96bcd15 100644 --- a/tests/test_workflow_analyzer.py +++ b/tests/test_workflow_analyzer.py @@ -209,6 +209,46 @@ class WorkflowAnalyzerCategoryHintTests(unittest.TestCase): self.assertEqual([], refs) + def test_model_name_string_used_as_metadata_query_is_ignored(self): + workflow = { + "nodes": [ + { + "id": 153, + "type": "Civitai Hash Fetcher (Image Saver)", + "inputs": [ + { + "name": "username", + "type": "STRING", + "widget": {"name": "username"}, + }, + { + "name": "model_name", + "type": "STRING", + "widget": {"name": "model_name"}, + }, + { + "name": "version", + "type": "STRING", + "widget": {"name": "version"}, + }, + ], + "outputs": [{"name": "STRING", "type": "STRING", "links": []}], + "widgets_values": [ + "latentheart", + ( + "Krea2 [SFW / NSFW] Uncensored - Image-to-Prompt + " + "Prompt Enhancer + 4K Upscaler + CivitAI Metadata" + ), + "", + ], + } + ] + } + + refs = analyze_workflow_models(workflow, available_models=[]) + + self.assertEqual([], refs) + def test_upscale_model_loader_widget_named_model_name_stays_upscale(self): workflow = { "nodes": [