Skip to content
Latchkey

Git LFS "Smudge error" / "error downloading object" in CI

The LFS smudge filter tried to download an object during checkout and failed mid-transfer. Most often it is a transient network/timeout error against the LFS endpoint, which clears on a retry.

What this error means

A checkout fails with Error downloading object and smudge filter lfs failed, sometimes external filter 'git-lfs filter-process' failed. It is often intermittent - re-running the job succeeds without any change.

git lfs output
Downloading assets/video.mp4 (210 MB)
Error downloading object: assets/video.mp4 (a1b2c3): Smudge error: Error
downloading assets/video.mp4: batch request: io: read/write on closed pipe
error: external filter 'git-lfs filter-process' failed
fatal: assets/video.mp4: smudge filter lfs failed

Common causes

Transient LFS download failure

A dropped connection or timeout while streaming a large object from the LFS store aborts the smudge filter. Nothing is wrong with the repo - a retry usually completes the download.

A large object over a slow or flaky link

Big LFS files over a congested runner network can exceed transfer limits, closing the pipe mid-download and failing the filter.

A genuinely missing object

If the object was never pushed to the LFS store (e.g. pushed with LFS disabled), the download 404s and the smudge fails every time - not a transient case.

How to fix it

Retry the LFS pull

For transient failures, defer LFS and retry the pull with a bounded loop after the plain checkout.

Terminal
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/org/repo.git
cd repo
for i in 1 2 3; do git lfs pull && break; sleep 5; done

Raise LFS transfer resilience

Increase concurrency/timeout tolerance and let LFS resume partial transfers.

Terminal
git config --global lfs.transfer.maxretries 5
git lfs pull

Confirm the object exists

  1. If it fails every time, the object may never have been pushed to LFS.
  2. Check with git lfs ls-files and verify the object on the remote.
  3. Re-push the content with LFS enabled if it is genuinely missing.

How to prevent it

  • Cache LFS objects so flaky downloads matter less.
  • Raise lfs.transfer.maxretries for large-object repos.
  • Verify objects were pushed to LFS (not committed as pointers only).

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →