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 removal

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Verify the repo/URL contains downloadable weight files and relax variant/subfolder/path filters on the source.
  2. Clear stale metadata for the repo so download URLs are re-resolved.
  3. Use a direct file URL via URLModelSource pointing at the exact weights file.
  4. 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

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


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/0cf8026966522ec4. Report an issue: GitHub.