invoke-ai/InvokeAI · error · ValueError
{source}: No downloadable files found
Error message
{source}: No downloadable files found What it means
_import_remote_model() creates the install job for a remote source (HF repo or URL) after files were resolved. If the resolved remote_files list is empty, it raises ValueError('{source}: No downloadable files found'). Unlike error 715 (raised during file resolution), this fires when resolution nominally succeeded but produced zero files.
Source
Thrown at invokeai/app/services/model_install/model_install_default.py:1279
config: Optional[ModelRecordChanges] = None,
) -> ModelInstallJob:
return ModelInstallJob(
id=self._next_id(),
source=source,
config_in=config or ModelRecordChanges(),
local_path=self._app_config.models_path,
inplace=True,
)
def _import_remote_model(
self,
source: HFModelSource | URLModelSource,
remote_files: List[RemoteModelFile],
metadata: Optional[AnyModelRepoMetadata],
config: Optional[ModelRecordChanges],
) -> ModelInstallJob:
if len(remote_files) == 0:
raise ValueError(f"{source}: No downloadable files found")
destdir = self._find_reusable_tmpdir(source)
if destdir is None:
destdir = Path(
mkdtemp(
dir=self._app_config.models_path,
prefix=TMPDIR_PREFIX,
)
)
install_job = ModelInstallJob(
id=self._next_id(),
source=source,
config_in=config or ModelRecordChanges(),
source_metadata=metadata,
local_path=destdir, # local path may change once the download has started due to content-disposition handling
bytes=0,
total_bytes=0,
)
# remember the temporary directory for later removalView on GitHub (pinned to 0b6a024f2f)
Solutions
- Verify the repo/URL contains downloadable weight files and relax variant/subfolder/path filters on the source.
- Clear stale metadata for the repo so download URLs are re-resolved.
- Use a direct file URL via URLModelSource pointing at the exact weights file.
- Check HF authentication for gated repos and confirm repo id spelling (owner/name).
Example fix
// before service.download_and_cache_model(HFModelSource(repo_id='author/repo', variant='nonexistent')) // after service.download_and_cache_model(HFModelSource(repo_id='author/repo')) # valid variant or no filter, and repo has weights
Defensive patterns
Strategy: validation
Validate before calling
import requests
info = requests.get(f'https://huggingface.co/api/models/{repo_id}', timeout=10).json()
weight_files = [s for s in info.get('siblings', []) if not s['rfilename'].endswith(('.md', '.gitattributes'))]
assert weight_files, f'{repo_id} has no downloadable weight files' Type guard
def source_has_files(source) -> bool:
try:
return len(service._remote_files_from_source(source)) > 0
except Exception:
return False Try / catch
try:
service.download_and_cache_model(source)
except ValueError as e:
if 'No downloadable files found' in str(e):
logger.error('Source %s has no files; check variant/subfolder or use a direct file URL', source) Prevention
- Confirm the repo has weight files before installing.
- Avoid nonexistent variant/subfolder values in HFModelSource.
- Use direct file URLs for single-file downloads.
- Refresh/clear stale metadata so download URLs are re-resolved.
When it happens
Trigger: Metadata/download-URL resolution returned an empty list that passed through _remote_files_from_source without raising; an HF repo with no weight files matching the requested variant/path filters; a URL source whose metadata yields no files.
Common situations: Gated or empty HF repos; requesting a variant (e.g. 'fp16') that doesn't exist for the repo; repos containing only non-weight files filtered out by the download URL matcher; deleted repos cached as metadata-only.
Related errors
- Cannot derive a safe filename for {url} from '{file_name}'
- No files associated with {source}
- Download URL '{url}' has no host.
- Download URL '{url}' has an invalid port.
- '{url}' does not look like a HuggingFace model page
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/0cf8026966522ec4.
Report an issue: GitHub.