Two bugs prevented type-signature-based fallback from working:
- metadata_hook.py used getattr(obj.__class__, 'RETURN_TYPES')
which fails when _async_map_node_over_list is called with
a class (not instance) — obj.__class__ is the metaclass
'type', which has no RETURN_TYPES. Fixed: getattr(obj, ...).
- metadata_registry.py used type(extractor) is GenericNodeExtractor
to dispatch return_types. NODE_EXTRACTORS stores class
references, not instances; type(Class) is always 'type',
never the class. Fixed: extractor is GenericNodeExtractor.
GenericNodeExtractor (previously a no-op) now inspects
RETURN_TYPES to detect MODEL loaders and CONDITIONING
encoders in nodes not registered in NODE_EXTRACTORS.
- Propagate return_types from the hook layer through the
registry to GenericNodeExtractor.extract() and update().
- MODEL detection: scan ckpt_name/unet_name/model_path/
model_name/gguf_name fields, validate by extension.
- CONDITIONING detection: scan text/clip_l/t5xxl/prompt
fields, store prompt text and conditioning tensor.
- _fill_missing_metadata also checks node_cache, so
GenericNodeExtractor-handled nodes survive cache.
Users can now right-click nodes and assign meta hints
(primary_model, primary_sampler, positive_prompt,
negative_prompt) to override the metadata processor's
heuristic inference.
- Store extra_data from the API request so workflow node
properties (including lm_marker_role) are accessible
during metadata processing.
- _get_user_marks scans extra_data.extra_pnginfo.workflow
for meta_* marks, falling back to prompt.original_prompt.
- extract_generation_params checks user marks before
heuristic inference for sampler, model, and prompts.
- Warn on duplicate marks or invalid marked nodes.
Update metadata registry to remove cache entries when node metadata becomes empty instead of keeping stale data. This prevents accumulation of unused cache entries and ensures cache only contains valid metadata. Added test case to verify cache behavior when LoRA configurations are removed.