comfygit-core 0.4.0__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/PKG-INFO +1 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/pyproject.toml +1 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/workflow_dependency_parser.py +109 -37
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/workflow_cache.py +39 -3
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/__init__.py +2 -2
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_models.py +10 -0
- comfygit_core-0.4.2/src/comfygit_core/configs/model_config.py +416 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/core/environment.py +69 -5
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/environment_factory.py +11 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_model_manager.py +31 -2
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/git_manager.py +4 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/node_manager.py +263 -37
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/workflow_manager.py +257 -5
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/__init__.py +1 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/manifest.py +6 -2
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/shared.py +15 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow.py +12 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/__init__.py +2 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/model_repository.py +38 -30
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/global_node_resolver.py +40 -12
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/environment_readiness.py +1 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_resolution_service.py +1 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/comfyui_ops.py +1 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/git.py +13 -6
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/model_categories.py +12 -2
- comfygit_core-0.4.2/src/comfygit_core/utils/model_loader_extractor.py +349 -0
- comfygit_core-0.4.2/src/comfygit_core/utils/node_identity.py +60 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/test_workflow_cache_context_hash.py +73 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_per_environment_manager.py +97 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_registry_node_update_empty_download_url.py +5 -12
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_workflow_dependency_parser.py +110 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_environment_uninstalled_nodes.py +29 -0
- comfygit_core-0.4.2/tests/unit/managers/test_environment_model_manager.py +92 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_git_manager_gitignore.py +13 -2
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_model_short_hash.py +10 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_node_manager.py +130 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pyproject_manager.py +24 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_manager.py +179 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_environment_readiness.py +23 -1
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_config_dynamic_loading.py +48 -0
- comfygit_core-0.4.2/tests/unit/test_model_loader_extractor.py +80 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_resolution_context.py +61 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_git.py +10 -0
- comfygit_core-0.4.2/tests/unit/utils/test_node_identity.py +48 -0
- comfygit_core-0.4.0/src/comfygit_core/configs/model_config.py +0 -224
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/.gitignore +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/.python-version +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/AGENTS.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/CLAUDE.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/LICENSE.txt +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/README.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/architecture-deep-dive.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/architecture.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/knowledge/comfyui-node-loader-base-directories.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/knowledge/model-tracking-system.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/knowledge/node-resolution-behavior.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/layer-hierarchy.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/plans/uv-overlay-system.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/config_comparison.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/custom_node_scanner.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/git_change_parser.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/model_scanner.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_classifier.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_git_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/ref_diff_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/status_scanner.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/api_cache.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/base.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/comfyui_cache.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/custom_node_cache.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/civitai_client.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/github_client.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/registry_client.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_builtin_nodes.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/package_config.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/constants.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/core/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/core/workspace.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/sageattention.toml +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/triton.toml +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/xformers.toml +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/uv_factory.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/workspace_factory.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/sqlite_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/integrations/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/integrations/uv_command.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/comfyui_readiness.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/switch_observer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/logging/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/logging/logging_config.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_git_orchestrator.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/export_import_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_download_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_symlink_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/overlay_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/pyproject_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/pytorch_backend_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/system_node_symlink_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/user_content_symlink_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/uv_project_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/atomic_executor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/merge_validator.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/semantic_merger.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/civitai.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/commit.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/dependency_resolution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/environment.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/exceptions.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/materialization.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/merge_plan.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/node_mapping.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/overlay.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/protocols.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/readiness.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/ref_diff.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/registry.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/sync.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/system.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow_contract.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow_execution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workspace_config.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/py.typed +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/comfyui_builtin_versions_repository.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/migrate_paths.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/node_mappings_repository.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workflow_repository.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workspace_config_repository.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/model_resolver.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/dependency_resolution_preview.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/huggingface_url.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/import_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/model_downloader.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/model_source_lookup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/node_lookup_service.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/registry_data_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_analysis_service.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_execution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_input.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/strategies/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/strategies/auto.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/strategies/confirmation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/builtin_extractor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/common.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/conflict_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/conflict_parser.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/dependency_parser.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/dependency_probe.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/download.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/environment_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/environment_lock.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/filesystem.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/folder_paths_extractor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/input_signature.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/pytorch.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/pytorch_prober.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/requirements.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/retry.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/symlink_utils.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/system_detector.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/uuid.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/uv_error_handler.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/version.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/workflow_hash.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/validation/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/validation/resolution_tester.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/README.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/TEST_REDUCTION_SUMMARY.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/test_workflow_cache.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/conftest.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/models/test_models.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/checkpoint_loader_with_missing_model.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/kjnodes_workflow.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/simple_txt2img.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/with_custom_node.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/with_missing_model.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_with_duplicates.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_with_properties.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_without_properties.json +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/model_index_builder.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/pyproject_assertions.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/workflow_builder.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_atomic_semantic_merge.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_auto_model_index_sync.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_branch_workflow_preservation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_cache_invalidation_on_model_deletion.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_cache_node_version_invalidation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_checkout_b_with_modified_workflow.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_commit_git_changes.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_commit_git_changes_SUMMARY.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_commit_history.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_context_aware_node_resolution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_create_with_version_spec.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_custom_node_path_preservation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_deferred_model_downloads.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_deleted_model_download_intent.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_dependency_group_removal.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_dev_node_git_references.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_dev_node_improvements.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_download_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_download_intent_cache_invalidation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_environment_basic.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_environment_branching.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_environment_create_progress.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_export_import.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_branching.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_import.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_pull_push.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_remote.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_subdirectory_import.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_import_auto_remote.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_import_comfyui_version_bug.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_import_preview.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_category_mismatch_detection.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_directory_switch.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_download_integration.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_index_mismatch_bug_SUMMARY.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_path_sync_detection.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_resolution_stale_directory.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_show_command.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_management.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_preservation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_preservation_SUMMARY.md +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_removal.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_multiple_optional_group_failures.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_node_prune.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_node_version_replacement.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_opencv_conflict_resolution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_optional_dependency_groups.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_overlay_e2e.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_overlay_git_integration.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_overlay_system_integration.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_package_config.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_pyproject_batch_writes.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_pytorch_reconfiguration.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_registry_git_fallback.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_completion_marker.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_model_download.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_node_removal.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_workflow.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_requirements_inline_comments_bug.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_runtime_restart_workflow_preservation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_status_abstraction.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_status_uninstalled_nodes.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_caching_integration.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_commit_flow.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_deletion_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_model_criticality_update.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_path_update_after_interactive_resolution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolution_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolution_pipeline.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolve_install.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_subgraph_resolution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/test_public_api.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_config_comparison.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_custom_node_scanner.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_ref_diff_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_status_scanner_disabled_nodes.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_cache_base.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_comfyui_cache.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_custom_node_cache_refactor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_workspace_relative_caching.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/clients/test_civitai_client.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/clients/test_civitai_parsing.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/clients/test_github_releases.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/configs/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/configs/test_package_config.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_environment_operation_locking.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_import_download_failures.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_import_no_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_reserved_environment_names.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_sync_node_dependency_provisioning.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_workspace_model_delete.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/factories/test_environment_factory_manager_install.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/lifecycle/test_comfyui_readiness.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_export_import_overlays.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_git_manager_log_refs.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_model_index_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_node_conflict_detection.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_fuzz.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_injection.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pyproject_schema_version.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_backend_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_injection.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_stripping.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_sqlite_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_uv_no_build_isolation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_node_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_status.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/test_atomic_executor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/test_merge_validator.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/test_semantic_merger.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_overlay.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_ref_diff.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_dependencies.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_roundtrip.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_subgraph.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/resolvers/test_global_node_resolver_v2.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/resolvers/test_model_resolver.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_dependency_resolution_preview.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_global_node_resolver.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_huggingface_url.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_import_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_model_downloader.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_model_source_lookup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_node_lookup_api_first.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_node_lookup_version_fallback.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_registry_data_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_scan_requirements_substitution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_analysis_service.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_execution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_input.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_resolution_service.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_add_dependencies_substitution.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_auto_strategies.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_builtin_extractor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_dev_node_rename_detection.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_environment_py_dependencies.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_external_uv_cache.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_folder_paths_extractor.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_github_auth_config.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_github_url_installation.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_headless_import.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_materialization.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_minimal_schema_compatibility.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_downloader_errors.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_repository_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_symlink_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_callbacks.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_conflict_context.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_mappings_repository.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_unified_node_search.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_user_content_symlink_manager.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_uv_error_handling.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_uv_error_parser.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_workflow_manager_deduplication.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_workspace_config_resilience.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_conflict_analyzer.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_conflict_parser.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_dependency_parser.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_dependency_probe.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_environment_cleanup.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_input_signature.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_pytorch.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_pytorch_prober.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_requirements.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_symlink_utils.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_uuid.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_version.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/utils/__init__.py +0 -0
- {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/utils/test_workflow_hash.py +0 -0
|
@@ -7,9 +7,10 @@ from typing import TYPE_CHECKING
|
|
|
7
7
|
from comfygit_core.repositories.workflow_repository import WorkflowRepository
|
|
8
8
|
|
|
9
9
|
from ..configs.comfyui_models import MULTI_MODEL_WIDGET_CONFIGS
|
|
10
|
-
from ..configs.model_config import ModelConfig
|
|
10
|
+
from ..configs.model_config import ModelConfig, ModelLoaderWidgetMapping
|
|
11
11
|
from ..logging.logging_config import get_logger
|
|
12
12
|
from ..models.workflow import (
|
|
13
|
+
NodeInput,
|
|
13
14
|
Workflow,
|
|
14
15
|
WorkflowDependencies,
|
|
15
16
|
WorkflowNode,
|
|
@@ -37,7 +38,7 @@ class WorkflowDependencyParser:
|
|
|
37
38
|
builtin_versions_repository: ComfyUIBuiltinVersionsRepository | None = None,
|
|
38
39
|
version_agnostic: bool = False,
|
|
39
40
|
):
|
|
40
|
-
self.model_config = model_config or ModelConfig.load()
|
|
41
|
+
self.model_config = model_config or ModelConfig.load(cec_path=cec_path)
|
|
41
42
|
self.cec_path = cec_path
|
|
42
43
|
self.builtin_versions_repository = builtin_versions_repository
|
|
43
44
|
self.version_agnostic = version_agnostic
|
|
@@ -115,8 +116,7 @@ class WorkflowDependencyParser:
|
|
|
115
116
|
|
|
116
117
|
Uses explicit extraction strategies:
|
|
117
118
|
1. Extract from properties.models (preferred - has URLs for auto-download)
|
|
118
|
-
2. Extract from
|
|
119
|
-
3. Extract from known single-model loader widget config
|
|
119
|
+
2. Extract from configured/generated model-loader widget metadata
|
|
120
120
|
|
|
121
121
|
Args:
|
|
122
122
|
node_id: Scoped node ID from workflow.nodes dict key (e.g., "uuid:12" for subgraph nodes)
|
|
@@ -129,14 +129,11 @@ class WorkflowDependencyParser:
|
|
|
129
129
|
if property_models:
|
|
130
130
|
refs.extend(self._extract_from_properties_models(node_id, node_info, property_models))
|
|
131
131
|
|
|
132
|
-
# Strategy 2:
|
|
133
|
-
if node_info.type
|
|
134
|
-
widget_refs = self.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
# Strategy 3: Standard single-model loaders
|
|
138
|
-
elif self.model_config.is_model_loader_node(node_info.type):
|
|
139
|
-
widget_refs = self._extract_single_model_widget(node_id, node_info)
|
|
132
|
+
# Strategy 2: Generated/static model loader widget metadata
|
|
133
|
+
if self.model_config.is_model_loader_node(node_info.type):
|
|
134
|
+
widget_refs = self._extract_model_loader_widgets(node_id, node_info)
|
|
135
|
+
if not widget_refs:
|
|
136
|
+
widget_refs = self._extract_static_fallback_widgets(node_id, node_info)
|
|
140
137
|
refs = self._merge_model_refs(refs, widget_refs)
|
|
141
138
|
|
|
142
139
|
return refs
|
|
@@ -181,42 +178,117 @@ class WorkflowDependencyParser:
|
|
|
181
178
|
return idx
|
|
182
179
|
return None
|
|
183
180
|
|
|
184
|
-
def
|
|
185
|
-
|
|
181
|
+
def _find_widget_index_for_input_name(
|
|
182
|
+
self,
|
|
183
|
+
inputs: list[NodeInput],
|
|
184
|
+
widget_name: str,
|
|
185
|
+
) -> int | None:
|
|
186
|
+
"""Find frontend widget index from ComfyUI input metadata."""
|
|
187
|
+
widget_idx = 0
|
|
188
|
+
for input_info in inputs:
|
|
189
|
+
if input_info.link is not None:
|
|
190
|
+
continue
|
|
191
|
+
|
|
192
|
+
widget_metadata = input_info.widget or {}
|
|
193
|
+
if widget_metadata:
|
|
194
|
+
candidate_names = {input_info.name}
|
|
195
|
+
metadata_name = widget_metadata.get("name")
|
|
196
|
+
if isinstance(metadata_name, str):
|
|
197
|
+
candidate_names.add(metadata_name)
|
|
198
|
+
|
|
199
|
+
if widget_name in candidate_names:
|
|
200
|
+
return widget_idx
|
|
201
|
+
|
|
202
|
+
widget_idx += 1
|
|
203
|
+
|
|
204
|
+
return None
|
|
205
|
+
|
|
206
|
+
def _resolve_model_widget_index(
|
|
207
|
+
self,
|
|
208
|
+
node_info: WorkflowNode,
|
|
209
|
+
mapping: ModelLoaderWidgetMapping,
|
|
210
|
+
mapping_count: int,
|
|
211
|
+
) -> int | None:
|
|
212
|
+
if mapping.widget_name:
|
|
213
|
+
index = self._find_widget_index_for_input_name(
|
|
214
|
+
node_info.inputs,
|
|
215
|
+
mapping.widget_name,
|
|
216
|
+
)
|
|
217
|
+
if index is not None:
|
|
218
|
+
return index
|
|
219
|
+
|
|
220
|
+
if mapping.widget_index is not None:
|
|
221
|
+
return mapping.widget_index
|
|
186
222
|
|
|
187
|
-
Note: Unlike pattern matching, multi-model configs explicitly define which
|
|
188
|
-
widgets contain models, so we trust them without extension filtering.
|
|
189
|
-
This allows CheckpointLoader to capture both .safetensors and .yaml configs.
|
|
190
|
-
"""
|
|
191
|
-
refs = []
|
|
192
|
-
widget_indices = MULTI_MODEL_WIDGET_CONFIGS.get(node_info.type, [])
|
|
193
223
|
widgets = node_info.widgets_values or []
|
|
224
|
+
if mapping_count == 1 and len(widgets) == 1:
|
|
225
|
+
return 0
|
|
194
226
|
|
|
195
|
-
|
|
196
|
-
if widget_idx < len(widgets) and widgets[widget_idx]:
|
|
197
|
-
value = widgets[widget_idx]
|
|
198
|
-
if isinstance(value, str) and value.strip():
|
|
199
|
-
refs.append(WorkflowNodeWidgetRef(
|
|
200
|
-
node_id=node_id,
|
|
201
|
-
node_type=node_info.type,
|
|
202
|
-
widget_index=widget_idx,
|
|
203
|
-
widget_value=value
|
|
204
|
-
))
|
|
205
|
-
return refs
|
|
227
|
+
return None
|
|
206
228
|
|
|
207
|
-
def
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
229
|
+
def _extract_model_loader_widgets(
|
|
230
|
+
self,
|
|
231
|
+
node_id: str,
|
|
232
|
+
node_info: WorkflowNode,
|
|
233
|
+
) -> list[WorkflowNodeWidgetRef]:
|
|
234
|
+
"""Extract model refs from configured/generated model loader widgets."""
|
|
235
|
+
refs: list[WorkflowNodeWidgetRef] = []
|
|
236
|
+
mappings = self.model_config.get_model_loader_widgets(node_info.type)
|
|
211
237
|
widgets = node_info.widgets_values or []
|
|
212
238
|
|
|
213
|
-
|
|
239
|
+
for mapping in mappings:
|
|
240
|
+
widget_idx = self._resolve_model_widget_index(
|
|
241
|
+
node_info,
|
|
242
|
+
mapping,
|
|
243
|
+
len(mappings),
|
|
244
|
+
)
|
|
245
|
+
if widget_idx is None or widget_idx >= len(widgets):
|
|
246
|
+
continue
|
|
247
|
+
|
|
248
|
+
value = widgets[widget_idx]
|
|
249
|
+
if not isinstance(value, str) or not value.strip():
|
|
250
|
+
continue
|
|
251
|
+
|
|
214
252
|
refs.append(WorkflowNodeWidgetRef(
|
|
215
253
|
node_id=node_id,
|
|
216
254
|
node_type=node_info.type,
|
|
217
255
|
widget_index=widget_idx,
|
|
218
|
-
widget_value=
|
|
256
|
+
widget_value=value,
|
|
257
|
+
property_directory=mapping.directories[0] if mapping.directories else None,
|
|
219
258
|
))
|
|
259
|
+
|
|
260
|
+
return refs
|
|
261
|
+
|
|
262
|
+
def _extract_static_fallback_widgets(
|
|
263
|
+
self,
|
|
264
|
+
node_id: str,
|
|
265
|
+
node_info: WorkflowNode,
|
|
266
|
+
) -> list[WorkflowNodeWidgetRef]:
|
|
267
|
+
"""Fallback for workflows without frontend input widget metadata."""
|
|
268
|
+
refs: list[WorkflowNodeWidgetRef] = []
|
|
269
|
+
widgets = node_info.widgets_values or []
|
|
270
|
+
widget_indices = MULTI_MODEL_WIDGET_CONFIGS.get(
|
|
271
|
+
node_info.type,
|
|
272
|
+
[self.model_config.get_widget_index_for_node(node_info.type)],
|
|
273
|
+
)
|
|
274
|
+
directories = self.model_config.get_directories_for_node(node_info.type)
|
|
275
|
+
|
|
276
|
+
for widget_idx in widget_indices:
|
|
277
|
+
if widget_idx >= len(widgets):
|
|
278
|
+
continue
|
|
279
|
+
value = widgets[widget_idx]
|
|
280
|
+
if not isinstance(value, str) or not value.strip():
|
|
281
|
+
continue
|
|
282
|
+
refs.append(
|
|
283
|
+
WorkflowNodeWidgetRef(
|
|
284
|
+
node_id=node_id,
|
|
285
|
+
node_type=node_info.type,
|
|
286
|
+
widget_index=widget_idx,
|
|
287
|
+
widget_value=value,
|
|
288
|
+
property_directory=directories[0] if directories else None,
|
|
289
|
+
)
|
|
290
|
+
)
|
|
291
|
+
|
|
220
292
|
return refs
|
|
221
293
|
|
|
222
294
|
def _merge_model_refs(
|
|
@@ -36,7 +36,7 @@ logger = get_logger(__name__)
|
|
|
36
36
|
# - Resolution: Change node ID format (e.g., subgraph scoping), WorkflowNodeWidgetRef structure, etc.
|
|
37
37
|
# - Model index: Hash algorithm changes (blake3 -> xxhash)
|
|
38
38
|
# Migration: Wipes cache and rebuilds (cache is ephemeral)
|
|
39
|
-
SCHEMA_VERSION =
|
|
39
|
+
SCHEMA_VERSION = 6 # Invalidate after custom-node consensus mapping context change
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
class CachedWorkflowAnalysis:
|
|
@@ -766,6 +766,24 @@ class WorkflowCacheRepository:
|
|
|
766
766
|
for node_type in node_types
|
|
767
767
|
if node_type in custom_map
|
|
768
768
|
}
|
|
769
|
+
workflow_configs = self.pyproject_manager.workflows.get_all_with_resolutions()
|
|
770
|
+
consensus_candidates: dict[str, set[str | bool]] = {}
|
|
771
|
+
for other_name, workflow_data in workflow_configs.items():
|
|
772
|
+
if other_name == workflow_name:
|
|
773
|
+
continue
|
|
774
|
+
|
|
775
|
+
other_custom_map = workflow_data.get("custom_node_map", {})
|
|
776
|
+
for node_type in node_types:
|
|
777
|
+
if node_type in other_custom_map:
|
|
778
|
+
package_id = other_custom_map[node_type]
|
|
779
|
+
if isinstance(package_id, (str, bool)):
|
|
780
|
+
consensus_candidates.setdefault(node_type, set()).add(package_id)
|
|
781
|
+
|
|
782
|
+
context["consensus_custom_mappings"] = {
|
|
783
|
+
node_type: next(iter(package_ids))
|
|
784
|
+
for node_type, package_ids in consensus_candidates.items()
|
|
785
|
+
if node_type not in custom_map and len(package_ids) == 1
|
|
786
|
+
}
|
|
769
787
|
step_elapsed = (time.perf_counter() - step_start) * 1000
|
|
770
788
|
logger.debug(f"[CONTEXT] Step 1 (custom mappings) took {step_elapsed:.2f}ms")
|
|
771
789
|
|
|
@@ -774,7 +792,7 @@ class WorkflowCacheRepository:
|
|
|
774
792
|
step_start = time.perf_counter()
|
|
775
793
|
|
|
776
794
|
# Read nodes list from workflow config (written by apply_resolution)
|
|
777
|
-
workflow_config =
|
|
795
|
+
workflow_config = workflow_configs.get(workflow_name, {})
|
|
778
796
|
relevant_packages = set(workflow_config.get('nodes', []))
|
|
779
797
|
|
|
780
798
|
# Get global package metadata
|
|
@@ -797,7 +815,25 @@ class WorkflowCacheRepository:
|
|
|
797
815
|
workflow_models = self.pyproject_manager.workflows.get_workflow_models(workflow_name)
|
|
798
816
|
model_pyproject_data = {}
|
|
799
817
|
for manifest_model in workflow_models:
|
|
800
|
-
|
|
818
|
+
nodes = getattr(manifest_model, "nodes", None) or []
|
|
819
|
+
if not nodes:
|
|
820
|
+
key_source = (
|
|
821
|
+
getattr(manifest_model, "relative_path", None)
|
|
822
|
+
or getattr(manifest_model, "hash", None)
|
|
823
|
+
or getattr(manifest_model, "filename", None)
|
|
824
|
+
or "unknown"
|
|
825
|
+
)
|
|
826
|
+
model_pyproject_data[f"manual:{key_source}"] = {
|
|
827
|
+
"hash": manifest_model.hash,
|
|
828
|
+
"status": manifest_model.status,
|
|
829
|
+
"criticality": manifest_model.criticality,
|
|
830
|
+
"sources": manifest_model.sources,
|
|
831
|
+
"relative_path": manifest_model.relative_path,
|
|
832
|
+
"declared_by": getattr(manifest_model, "declared_by", None),
|
|
833
|
+
}
|
|
834
|
+
continue
|
|
835
|
+
|
|
836
|
+
for ref in nodes:
|
|
801
837
|
ref_key = f"{ref.node_id}_{ref.widget_index}"
|
|
802
838
|
model_pyproject_data[ref_key] = {
|
|
803
839
|
"hash": manifest_model.hash,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from .comfyui_builtin_nodes import COMFYUI_BUILTIN_NODES
|
|
4
4
|
from .comfyui_models import COMFYUI_MODELS_CONFIG, MULTI_MODEL_WIDGET_CONFIGS
|
|
5
|
-
from .model_config import ModelConfig
|
|
5
|
+
from .model_config import ModelConfig, ModelLoaderWidgetMapping
|
|
6
6
|
from .package_config import PackageConfigManager
|
|
7
7
|
|
|
8
8
|
__all__ = [
|
|
@@ -10,6 +10,6 @@ __all__ = [
|
|
|
10
10
|
"COMFYUI_MODELS_CONFIG",
|
|
11
11
|
"MULTI_MODEL_WIDGET_CONFIGS",
|
|
12
12
|
"ModelConfig",
|
|
13
|
+
"ModelLoaderWidgetMapping",
|
|
13
14
|
"PackageConfigManager",
|
|
14
15
|
]
|
|
15
|
-
|
|
@@ -23,6 +23,7 @@ COMFYUI_MODELS_CONFIG = {
|
|
|
23
23
|
],
|
|
24
24
|
"standard_directories": [
|
|
25
25
|
"audio_encoders",
|
|
26
|
+
"background_removal",
|
|
26
27
|
"checkpoints",
|
|
27
28
|
"clip",
|
|
28
29
|
"clip_vision",
|
|
@@ -32,10 +33,13 @@ COMFYUI_MODELS_CONFIG = {
|
|
|
32
33
|
"diffusers",
|
|
33
34
|
"diffusion_models",
|
|
34
35
|
"embeddings",
|
|
36
|
+
"frame_interpolation",
|
|
35
37
|
"gligen",
|
|
36
38
|
"hypernetworks",
|
|
39
|
+
"latent_upscale_models",
|
|
37
40
|
"loras",
|
|
38
41
|
"model_patches",
|
|
42
|
+
"optical_flow",
|
|
39
43
|
"photomaker",
|
|
40
44
|
"style_models",
|
|
41
45
|
"text_encoders",
|
|
@@ -51,6 +55,7 @@ COMFYUI_MODELS_CONFIG = {
|
|
|
51
55
|
"unCLIPCheckpointLoader": ["checkpoints"],
|
|
52
56
|
"ImageOnlyCheckpointLoader": ["checkpoints"],
|
|
53
57
|
"VAELoader": ["vae", "vae_approx"],
|
|
58
|
+
"AudioEncoderLoader": ["audio_encoders"],
|
|
54
59
|
"LoraLoader": ["loras"],
|
|
55
60
|
"LoraLoaderModelOnly": ["loras"],
|
|
56
61
|
"CLIPLoader": ["clip"],
|
|
@@ -63,10 +68,15 @@ COMFYUI_MODELS_CONFIG = {
|
|
|
63
68
|
"DiffControlNetLoader": ["controlnet"],
|
|
64
69
|
"StyleModelLoader": ["style_models"],
|
|
65
70
|
"UpscaleModelLoader": ["upscale_models"],
|
|
71
|
+
"LatentUpscaleModelLoader": ["latent_upscale_models"],
|
|
66
72
|
"GLIGENLoader": ["gligen"],
|
|
67
73
|
"HypernetworkLoader": ["hypernetworks"],
|
|
68
74
|
"PhotoMakerLoader": ["photomaker"],
|
|
69
75
|
"DiffusersLoader": ["diffusers"],
|
|
76
|
+
"FrameInterpolationModelLoader": ["frame_interpolation"],
|
|
77
|
+
"OpticalFlowLoader": ["optical_flow"],
|
|
78
|
+
"LoadBackgroundRemovalModel": ["background_removal"],
|
|
79
|
+
"ModelPatchLoader": ["model_patches"],
|
|
70
80
|
},
|
|
71
81
|
"node_widget_indices": {"CheckpointLoader": 1},
|
|
72
82
|
}
|