Comfy-Org/ComfyUI · error · ValueError

dist.zip not found in the release assets

Error message

dist.zip not found in the release assets

What it means

download_release_asset_zip iterates the 'assets' array of a GitHub release object looking for one named exactly 'dist.zip' (the bundled frontend build). If the release exists but has no dist.zip asset — or the cached release dict has an empty/missing assets list — it raises ValueError before attempting any download.

Source

Thrown at app/frontend_management.py:184

        elif version == "prerelease":
            return self.latest_prerelease
        else:
            for release in self.all_releases:
                if release["tag_name"] in [version, f"v{version}"]:
                    return release
            raise ValueError(f"Version {version} not found in releases")


def download_release_asset_zip(release: Release, destination_path: str) -> None:
    """Download dist.zip from github release."""
    asset_url = None
    for asset in release.get("assets", []):
        if asset["name"] == "dist.zip":
            asset_url = asset["url"]
            break

    if not asset_url:
        raise ValueError("dist.zip not found in the release assets")

    # Use a temporary file to download the zip content
    with tempfile.TemporaryFile() as tmp_file:
        headers = {"Accept": "application/octet-stream"}
        response = requests.get(
            asset_url, headers=headers, allow_redirects=True, timeout=REQUEST_TIMEOUT
        )
        response.raise_for_status()  # Ensure we got a successful response

        # Write the content to the temporary file
        tmp_file.write(response.content)

        # Go back to the beginning of the temporary file
        tmp_file.seek(0)

        # Extract the zip file content to the destination path
        with zipfile.ZipFile(tmp_file, "r") as zip_ref:
            zip_ref.extractall(destination_path)

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Retry after a few minutes — assets are sometimes uploaded shortly after the release appears.
  2. Choose an adjacent older release tag known to include dist.zip.
  3. Verify the release on GitHub actually has dist.zip attached; if not, report/switch to one that does.
  4. Check GitHub API rate limits if the assets list looks empty.
Defensive patterns

Strategy: validation

Validate before calling

asset_names = [a["name"] for a in release.get("assets", [])]
if "dist.zip" not in asset_names:
    raise SystemExit("release has no dist.zip asset; pick another version")

Type guard

def release_has_dist_zip(release: dict) -> bool:
    return any(a.get("name") == "dist.zip" for a in release.get("assets", []))

Try / catch

try:
    download_release_asset_zip(release, dest)
except ValueError as e:
    if "dist.zip" in str(e):
        release = fm.get_release("latest")  # fallback release
        download_release_asset_zip(release, dest)
    else:
        raise

Prevention

When it happens

Trigger: Requesting a frontend version whose GitHub release was published without the dist.zip artifact (e.g. a draft, a source-only tag, or an asset still uploading); using a manually constructed Release dict from get_release('latest') when asset upload was delayed.

Common situations: Hitting a release seconds after publication before assets finished uploading; upstream publishing a release with a differently named artifact; GitHub returning a pruned asset list under rate limiting.

Related errors


AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14). Data as JSON: /api/errors/0eb4be3782ce40a0. Report an issue: GitHub.