invoke-ai/InvokeAI · error · ValueError
Unsupported IP-Adapter base type: '{ip_adapter_info.base}'.
Error message
Unsupported IP-Adapter base type: '{ip_adapter_info.base}'. What it means
The IP-Adapter invocation throws this ValueError during invoke() when the selected method is 'style' but the IP-Adapter model's base model type (ip_adapter_info.base) is neither 'sd-1' nor 'sdxl'. The 'style' method works by targeting specific attention blocks of the underlying UNet, and InvokeAI only knows the correct block names for SD1.5 and SDXL architectures. Any other base (e.g. SD2, SDXL-Refiner, Flux) has different block naming, so the invocation refuses to proceed rather than silently targeting wrong blocks.
Source
Thrown at invokeai/app/invocations/ip_adapter.py:144
assert isinstance(ip_adapter_info, (IPAdapter_InvokeAI_Config_Base, IPAdapter_Checkpoint_Config_Base))
if isinstance(ip_adapter_info, IPAdapter_InvokeAI_Config_Base):
image_encoder_model_id = ip_adapter_info.image_encoder_model_id
image_encoder_model_name = image_encoder_model_id.split("/")[-1].strip()
else:
image_encoder_starter_model = CLIP_VISION_MODEL_MAP[self.clip_vision_model]
image_encoder_model_id = image_encoder_starter_model.source
image_encoder_model_name = image_encoder_starter_model.name
image_encoder_model = self.get_clip_image_encoder(context, image_encoder_model_id, image_encoder_model_name)
if self.method == "style":
if ip_adapter_info.base == "sd-1":
target_blocks = ["up_blocks.1"]
elif ip_adapter_info.base == "sdxl":
target_blocks = ["up_blocks.0.attentions.1"]
else:
raise ValueError(f"Unsupported IP-Adapter base type: '{ip_adapter_info.base}'.")
elif self.method == "composition":
if ip_adapter_info.base == "sd-1":
target_blocks = ["down_blocks.2", "mid_block"]
elif ip_adapter_info.base == "sdxl":
target_blocks = ["down_blocks.2.attentions.1"]
else:
raise ValueError(f"Unsupported IP-Adapter base type: '{ip_adapter_info.base}'.")
elif self.method == "style_precise":
if ip_adapter_info.base == "sd-1":
target_blocks = ["up_blocks.1", "down_blocks.2", "mid_block"]
elif ip_adapter_info.base == "sdxl":
target_blocks = ["up_blocks.0.attentions.1", "down_blocks.2.attentions.1"]
else:
raise ValueError(f"Unsupported IP-Adapter base type: '{ip_adapter_info.base}'.")
elif self.method == "style_strong":
if ip_adapter_info.base == "sd-1":
target_blocks = ["up_blocks.0", "up_blocks.1", "up_blocks.2", "down_blocks.0", "down_blocks.1"]
elif ip_adapter_info.base == "sdxl":View on GitHub (pinned to 0b6a024f2f)
Solutions
- Use method='full' (or a method without base-specific block targeting) if your IP-Adapter base is not sd-1/sdxl.
- Re-import or edit the IP-Adapter model in the Model Manager so its base model type is StableDiffusion1 or StableDiffusionXL, matching the actual model.
- Swap the ip_adapter_model input to an IP-Adapter model that matches the checkpoint architecture being used (sd-1 for SD1.5, sdxl for SDXL).
Example fix
// before IPAdapterInvocation(image=..., ip_adapter_model=sd2_ip_adapter, method='style') // after IPAdapterInvocation(image=..., ip_adapter_model=sd1_ip_adapter, method='style') // or, for a non-sd-1/sdxl base: IPAdapterInvocation(image=..., ip_adapter_model=sd2_ip_adapter, method='full')
Defensive patterns
Strategy: validation
Validate before calling
info = context.models.get_config(node.ip_adapter_model.key)
assert info.base in ("sd-1", "sdxl"), f"method='style' requires sd-1/sdxl, got {info.base}" Type guard
def is_style_capable(base: str) -> bool:
return base in ("sd-1", "sdxl") Try / catch
try:
out = invoke(ip_adapter_node)
except ValueError as e:
if "Unsupported IP-Adapter base type" in str(e):
node.method = "full" # base-agnostic fallback
out = invoke(node) Prevention
- Verify the IP-Adapter model's base type in the Model Manager before using style/composition methods.
- Keep the IP-Adapter model architecture matched to the checkpoint used by the denoise node.
- Default to method='full' unless you know the base is sd-1 or sdxl.
When it happens
Trigger: Running an 'ip_adapter' invocation node with method='style' (via the workflow graph API or the canvas) whose ip_adapter_model points to an IP-Adapter model whose config's base is not BaseModelType.StableDiffusion1 ('sd-1') or StableDiffusionXL ('sdxl') — e.g. an SD2-based or mismatched IP-Adapter model.
Common situations: Selecting an IP-Adapter model that was imported with the wrong base model type in the model manager; using a workflow authored for SD1.5/SDXL with a model whose base was auto-detected incorrectly; feeding an IP-Adapter config for SD2 or another architecture into a style-method node.
Related errors
- Selected model provider '{model_config.provider_id}' does no
- Unexpected IP-Adapter method: '{self.method}'.
- _class_name or architectures field is not a string: {config_
- invalid class name from config: {actual_class_name}
- base is {recognized_base}, not {expected_base}
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/7269de355db97c45.
Report an issue: GitHub.