openai/whisper · error · RuntimeError
Model has been downloaded but the SHA256 checksum does not…
Error message
Model has been downloaded but the SHA256 checksum does not not match. Please retry loading the model.
What it means
After downloading a checkpoint, whisper verifies the file's SHA256 against the hash embedded in the OpenAI URL. If the freshly downloaded bytes do not hash to the expected value, the download is considered corrupt/truncated and a RuntimeError is raised. (Note the message contains a typo: 'does not not match'.)
Solutions
- Delete the partial file and retry: rm ~/.cache/whisper/<model>.pt && rerun load_model
- Verify the file size against the published model size; if truncated, download manually with curl/wget --continue to the cache path and retry
- Check disk space at the cache location (df -h ~/.cache) and free space or move download_root elsewhere
- If behind a proxy, bypass it or configure HTTPS_PROXY correctly so the raw bytes pass through unmodified
Example fix
# before
model = whisper.load_model("large-v3") # RuntimeError: checksum does not match
# after
import os, urllib.request, whisper
root = os.path.expanduser("~/.cache/whisper")
target = os.path.join(root, "large-v3.pt")
if os.path.exists(target):
os.remove(target) # drop corrupt partial download
model = whisper.load_model("large-v3") # re-downloads cleanly Defensive patterns
Strategy: retry
Validate before calling
import hashlib, os, urllib.parse
def verify_cached(root, url):
target = os.path.join(root, os.path.basename(url))
expected = url.split("/")[-2]
if os.path.isfile(target):
return hashlib.sha256(open(target, "rb").read()).hexdigest() == expected
return None # not downloaded yet Try / catch
for attempt in range(3):
try:
model = whisper.load_model(name)
break
except RuntimeError as e:
if "SHA256" in str(e) and attempt < 2:
os.remove(os.path.join(cache_root, f"{name}.pt"))
continue
raise Prevention
- Run load_model once in a build/provisioning step and cache the verified .pt artifact
- Ensure the cache volume has free space larger than the checkpoint (large-v3 is ~3 GB)
- Verify the SHA256 yourself after manual downloads instead of relying on the in-code check
When it happens
Trigger: A network layer truncates or alters the download: flaky connection, an HTTP proxy that injects an error page, a corporate MITM, disk full during write, or a partially flushed read of download_target immediately after the loop closes. Raised on the second phase of _download(), after the full byte stream was written.
Common situations: Unstable Wi-Fi/VPN, docker containers with small tmpfs at the cache path, CI runners behind authenticated proxies, or cloud function execution environments (AWS Lambda) where /tmp is size-limited and the large-v3 checkpoint gets cut off.
Related errors
AI-assisted analysis of openai/whisper@5f86d1d863 (2026-08-14).
Data as JSON: /api/errors/1eda16d4818b59c2.
Report an issue: GitHub.
Appendix: source
Thrown at whisper/__init__.py:91
with urllib.request.urlopen(url) as source, open(download_target, "wb") as output:
with tqdm(
total=int(source.info().get("Content-Length")),
ncols=80,
unit="iB",
unit_scale=True,
unit_divisor=1024,
) as loop:
while True:
buffer = source.read(8192)
if not buffer:
break
output.write(buffer)
loop.update(len(buffer))
model_bytes = open(download_target, "rb").read()
if hashlib.sha256(model_bytes).hexdigest() != expected_sha256:
raise RuntimeError(
"Model has been downloaded but the SHA256 checksum does not not match. Please retry loading the model."
)
return model_bytes if in_memory else download_target
def available_models() -> List[str]:
"""Returns the names of available models"""
return list(_MODELS.keys())
def load_model(
name: str,
device: Optional[Union[str, torch.device]] = None,
download_root: str = None,
in_memory: bool = False,
) -> Whisper:
"""View on GitHub (pinned to 5f86d1d863)