tqdm-live
Stream your tqdm progress bars to any browser, realtime. Zero config, anonymous by default.
pip install tqdm-live
from tqdm_live import tqdm
for epoch in tqdm(range(epochs)):
train_one_epoch()
# prints: runpeek ▶ https://runpeek.app/b/<uuid> (expires 30 min after the last update; 'tqdml login' saves runs)
Or leave your code completely untouched:
import tqdm_live
tqdm_live.patch() # every tqdm bar in this process now streams
Open the printed URL on your phone. Done.
Runs
tqdm_live.start_run("train-resnet") # one link for every bar in this process
tqdml run -- python train.py --epochs 30
A run shows the process lifecycle next to its bars and closes with the real exit code. tqdml run wraps any command, streams its stdout/stderr and patches tqdm in the child without code changes.
Alerts
tqdm_live.start_run("train-resnet")
tqdm_live.notify("https://discord.com/api/webhooks/...") # finished or failed
tqdm_live.notify("https://hooks.slack.com/services/...", events=("failed",), stall_after_minutes=15)
Discord and Slack webhooks get a formatted message, any other URL receives the raw JSON event. stall_after_minutes (1 to 1440) also alerts when the run goes silent that long. notify() needs an active run and returns whether the webhook was registered. TQDMLIVE_NOTIFY (comma-separated URLs) registers webhooks for every run, tqdml run included.
Save runs to your dashboard
tqdml login # approve once in the browser
tqdml whoami # the account your runs are saved to
Once logged in, every script that shows a bar is saved as a run named after the script, next to your start_run() and tqdml run runs. On servers and CI, set RUNPEEK_TOKEN instead (create a token on the dashboard's Setup page). tqdml logout removes the saved login.
Notebooks, IPython and the Python REPL are the exception: bars there stay anonymous, so an idle kernel never becomes a run.
To save an experiment from a notebook, call tqdm_live.start_run("my-experiment") before the loop and tqdm_live.end_run() when it's done.
Free accounts keep 7 days of history, Pro ($9/mo) keeps a year. Over the monthly saved-run limit a run still streams live, it just isn't saved.
Notes
- Bars are addressed by unguessable UUIDs. No account needed, logging in is optional.
- Heartbeats are throttled (~0.75s) and sent from a daemon thread; your loop never blocks on the network, and send failures never raise into your code.
- An unsaved bar or run expires 30 minutes after its last heartbeat.
Config (all optional)
import tqdm_live
tqdm_live.setup(endpoint="https://runpeek.app", link_base="https://runpeek.link", min_interval=0.75, token="rpk_...")
Env vars: RUNPEEK_TOKEN, TQDMLIVE_ENDPOINT, TQDMLIVE_LINK_BASE, TQDMLIVE_MIN_INTERVAL, TQDMLIVE_NOTIFY, TQDMLIVE_DISABLE=1.
Printed view links use the link base; it defaults to the endpoint itself when unset, so
self-hosted setups keep working. A token is picked from setup(token=...), then RUNPEEK_TOKEN,
then the login saved by tqdml login (~/.config/runpeek/config.json).
Metadata
Release files for tqdm-live 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tqdm_live-0.7.0.tar.gz | 29.9 kB | With provenance | Details for tqdm_live-0.7.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tqdm_live-0.7.0-py3-none-any.whl | Python 3 | none | any | Details for tqdm_live-0.7.0-py3-none-any.whl |
Total release size: 46.8 kB
Release files / tqdm_live-0.7.0.tar.gz
| Download URL | tqdm_live-0.7.0.tar.gz |
|---|---|
| Size | 29.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e9411bdb18dae92606b3acee0f28f3cf8c250637502eef6d5970f0b281d16615
|
|
BLAKE2b-256 checksum How to use checksums |
85eda8ea2a2040ba168d3237b3f92ba7b93e9755e68366bbafcdf26f312bd4bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / tqdm_live-0.7.0-py3-none-any.whl
| Download URL | tqdm_live-0.7.0-py3-none-any.whl |
|---|---|
| Size | 16.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ff3ffd9959ae4c94d176478fb97150793ac58b2666444992ee2d578f6902647
|
|
BLAKE2b-256 checksum How to use checksums |
fc884f90d72abf3a7fd94ad369e45a1bc9342cdb4f367b9420daf39ff8329abc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logSecurity for tqdm-live 0.7.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for tqdm_live-0.7.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.