invoke-ai/InvokeAI · error · DuplicateModelException
A model with path '{config.path}' is already installed
Error message
A model with path '{config.path}' is already installed What it means
add_model inserts a new model config into the SQLite models table; on an integrity error it inspects the constraint name and raises DuplicateModelException when another record already occupies the same path (unique constraint on models.path). The message reports the conflicting path.
Source
Thrown at invokeai/app/services/model_records/model_records_sql.py:139
config
)
VALUES (?,?);
""",
(
config.key,
config.model_dump_json(),
),
)
except sqlite3.IntegrityError as e:
if "UNIQUE constraint failed" in str(e):
if "models.path" in str(e):
msg = f"A model with path '{config.path}' is already installed"
elif "models.name" in str(e):
msg = f"A model with name='{config.name}', type='{config.type}', base='{config.base}' is already installed"
else:
msg = f"A model with key '{config.key}' is already installed"
raise DuplicateModelException(msg) from e
else:
raise e
return self.get_model(config.key)
def del_model(self, key: str) -> None:
"""
Delete a model.
:param key: Unique key for the model to be deleted
Can raise an UnknownModelException
"""
with self._db.transaction() as cursor:
cursor.execute(
"""--sql
DELETE FROM models
WHERE id=?;View on GitHub (pinned to 0b6a024f2f)
Solutions
- Get the existing record via search_by_path and reuse/update it instead of adding a new one.
- Delete the existing model entry if it is stale, then re-add.
- Change the new model's path (or the underlying file location) so it is unique.
- Update the existing record with update_model instead of insert.
Example fix
# before
records.add_model(config_with_path_already_installed)
# after
existing = records.search_by_path(path=config.path)
if existing:
records.update_model(existing[0].key, changes)
else:
records.add_model(config) Defensive patterns
Strategy: validation
Validate before calling
existing = records.search_by_path(path=config.path)
if existing:
raise ValueError(f"Path {config.path} already installed as key {existing[0].key}") Try / catch
try:
records.add_model(config)
except DuplicateModelException as e:
if f"path '{config.path}'" in str(e):
old = records.search_by_path(config.path)[0]
records.update_model(old.key, changes)
else:
raise Prevention
- Check search_by_path before installing a path-based model
- Avoid scanning the same directory twice via multiple scan roots
- Treat install failures idempotently — retry as update, not insert
When it happens
Trigger: Calling add_model with a config whose path matches an already-installed model — installing a second copy from the same directory, or re-adding a scanned model without dedupe by path.
Common situations: Multiple scan directories containing the same model; re-running an install job after a partial failure that already recorded the record; pointing a new model entry at a shared folder like autoimport with duplicates.
Related errors
- More than one model matched the search criteria: base_model=
- Failed to create user: {e}
- Failed to delete video
- The Anima ControlNet-LLLite model '{lllite_field.control_mod
- LoRA "{lora_key}" already applied to transformer.
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/777b9e95b0b4d63b.
Report an issue: GitHub.