Fix ollama pull TLS timeout and disconnects โ resumable Ollama model downloader for slow connections
Project description
Pullama ๐ฆ Ollama Model Downloader & Installer
The ollama pull alternative built for slow, unstable, and limited internet connections.
If ollama pull keeps restarting, times out, or disconnects mid-download โ Pullama fixes that.
It resumes interrupted downloads automatically, supports parallel connections via aria2, and installs models directly into Ollama when done, Works on slow connections, unstable Wi-Fi, mobile data, and VPNs.
# Common Ollama pull errors Pullama solves:
net/http: TLS handshake timeout
context deadline exceeded
download interrupted, starting from scratch
Install
Linux / macOS (recommended):
pipx install pullama-cli
pipxis the standard (protection) way to install Python CLI tools on modern Linux (Ubuntu 22.04+, Debian 12+). Install pipx first if needed:sudo apt install pipx && pipx ensurepath
Alternative (virtualenvs):
pip install pullama-cli
For faster, more reliable downloads โ install aria2 (optional but recommended):
# Linux (Debian/Ubuntu)
sudo apt install aria2
# macOS
brew install aria2
# Windows
winget install aria2
With aria2, Pullama downloads Ollama models using multiple parallel connections โ significantly faster and more resilient on slow or throttled connections.
Quick Start
Download & install ollama models in one command
pullama pull tinyllama:latest
pullama pull gemma2:2b
pullama pull deepseek-r1:7b
Pullama downloads the model and installs it into Ollama automatically. Then:
ollama run tinyllama:latest
Resume interrupted Ollama model downloads
If your connection drops, just run the same command again โ Pullama resumes from where it stopped:
pullama pull gemma2:2b
# ... connection drops at 60% ...
pullama pull gemma2:2b
# โน Resuming from 1.1 GB / 1.7 GB
No flags, no setup. Works after power cuts, network switches, sleep, or days later.
This is the core feature ollama pull is missing โ once it disconnects, you lose everything.
Pullama vs ollama pull
| Feature | ollama pull |
pullama |
|---|---|---|
| Resume interrupted download | โ | โ |
| Parallel chunk downloads (aria2) | โ | โ |
| Offline / manual install | โ | โ |
| Download without Ollama installed | โ | โ |
| Export ollama model to another machine | โ | โ |
| Track download progress across sessions | โ | โ |
| Works on slow / unstable connections | โ ๏ธ unreliable | โ |
| SHA256 verification | โ | โ |
Commands
Track your downloads
pullama list
Model Size Downloaded Installed
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
tinyllama:latest 608 MB 608/608 MB โ โ yes
gemma2:2b 1.7 GB 856 MB/1.7 GB โ no
Get direct download URLs
For users who prefer to download Ollama models manually with wget, curl, IDM, or any other download manager:
pullama get gemma2:2b
Prints direct blob URLs and ready-to-use curl commands โ useful for downloading ollama models on a separate machine or through a proxy.
Manual Ollama model installation
Already downloaded the files? Install them into Ollama without re-downloading:
pullama install --model gemma2:2b --blobsPath ./downloads
Download Ollama models without ollama (offline install)
Pullama works even if Ollama isn't installed yet. It saves the model files locally so you can install them later โ or copy them to another machine or a friend with no internet:
pullama pull gemma2:2b
# โ Ollama not found โ downloading to: ~/pullama-models/gemma2-2b/
# โ gemma2:2b downloaded!
# Saved to: ~/pullama-models/gemma2-2b/
#
# Once Ollama is installed, run:
# pullama install --model gemma2:2b --blobsPath ~/pullama-models/gemma2-2b/
Copy the folder to a USB drive, give it to a friend, install on an air-gapped machine โ it just works.
How it works
Ollama stores models as SHA256-named blob files. Pullama downloads each blob directly into Ollama's models directory (~/.ollama/models or /usr/share/ollama/.ollama/models for system installs) and writes the manifest last โ so Ollama only sees the model once everything is verified complete.
If a download is interrupted, the partial blob stays on disk. On the next run, Pullama checks the existing file size and sends an HTTP Range: bytes=X- request to continue exactly where it stopped โ no re-downloading from zero.
With aria2: splits each file into 4 parallel chunks. Bypasses per-connection throttling and dramatically improves speed on slow connections.
Without aria2: uses Python's built-in HTTP client with the same resume logic.
Model name format
tinyllama:latest # official model, explicit tag
gemma2:2b # official model
deepseek-r1:7b # official model
huihui_ai/deepseek-r1:8b # community model (namespace/model:tag)
Platform support
| Platform | Supported |
|---|---|
| Linux | โ |
| macOS | โ |
| Windows | โ |
License
MIT
Credits
Pullama started as a fork of oget by fr0stb1rd. The original idea of fetching direct download URLs from the Ollama registry belongs to them. Pullama extends it with resumable downloads, automatic Ollama install, aria2 support, state tracking, smart path detection, and a fully rewritten CLI built for slow and unstable connections.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pullama_cli-1.0.2.tar.gz.
File metadata
- Download URL: pullama_cli-1.0.2.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8526eb1b4b0f689dcb2fb84e694ad638e9037f24edf8b84108669e3dc2c37dac
|
|
| MD5 |
7ce549d8511855d8e698a52f14ea6731
|
|
| BLAKE2b-256 |
5d21f1e4205e07eddc9aab7130c193985de4f2682afc1133c6ed32882519a947
|
Provenance
The following attestation bundles were made for pullama_cli-1.0.2.tar.gz:
Publisher:
publish.yml on Steve-sy/pullama
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pullama_cli-1.0.2.tar.gz -
Subject digest:
8526eb1b4b0f689dcb2fb84e694ad638e9037f24edf8b84108669e3dc2c37dac - Sigstore transparency entry: 1191181564
- Sigstore integration time:
-
Permalink:
Steve-sy/pullama@26e1379605d95f8cc7f90c6cb6df6d0ad5d08c4e -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/Steve-sy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26e1379605d95f8cc7f90c6cb6df6d0ad5d08c4e -
Trigger Event:
release
-
Statement type:
File details
Details for the file pullama_cli-1.0.2-py3-none-any.whl.
File metadata
- Download URL: pullama_cli-1.0.2-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4182d1614fc8d0df9ef45ace67f4c01c8aa3c46649ef49fc4edf0c12dcbfde26
|
|
| MD5 |
8cf5faea45e7a76f7de4a799643a4e3f
|
|
| BLAKE2b-256 |
e57ed95a12af07af05bc3f2b888851422de3fdd24ebe93fb389d29347f698337
|
Provenance
The following attestation bundles were made for pullama_cli-1.0.2-py3-none-any.whl:
Publisher:
publish.yml on Steve-sy/pullama
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pullama_cli-1.0.2-py3-none-any.whl -
Subject digest:
4182d1614fc8d0df9ef45ace67f4c01c8aa3c46649ef49fc4edf0c12dcbfde26 - Sigstore transparency entry: 1191181566
- Sigstore integration time:
-
Permalink:
Steve-sy/pullama@26e1379605d95f8cc7f90c6cb6df6d0ad5d08c4e -
Branch / Tag:
refs/tags/v1.0.2 - Owner: https://github.com/Steve-sy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26e1379605d95f8cc7f90c6cb6df6d0ad5d08c4e -
Trigger Event:
release
-
Statement type: