Runpeek
Stream your tqdm progress bars to any browser, realtime. Zero config, anonymous by default.
pip install runpeek-sdk
from runpeek 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; 'runpeek login' saves runs)
Or leave your code completely untouched:
import runpeek
runpeek.patch() # every tqdm bar in this process now streams
Open the printed URL on your phone. Done.
Runs
runpeek.start_run("train-resnet") # one link for every bar in this process
runpeek run -- python train.py --epochs 30
A run shows the process lifecycle next to its bars and closes with the real exit code. runpeek run wraps any command, streams its stdout/stderr and patches tqdm in the child without code changes.
Alerts
runpeek.start_run("train-resnet")
runpeek.notify("https://discord.com/api/webhooks/...") # finished or failed
runpeek.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. RUNPEEK_NOTIFY (comma-separated URLs) registers webhooks for every run, runpeek run included.
Save runs to your dashboard
runpeek login # approve once in the browser
runpeek 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 runpeek run runs. On servers and CI, set RUNPEEK_TOKEN instead (create a token on the dashboard's Setup page). runpeek 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 runpeek.start_run("my-experiment") before the loop and runpeek.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 runpeek
runpeek.setup(endpoint="https://runpeek.app", link_base="https://runpeek.link", min_interval=0.75, token="rpk_...")
Env vars: RUNPEEK_TOKEN, RUNPEEK_ENDPOINT, RUNPEEK_LINK_BASE, RUNPEEK_MIN_INTERVAL, RUNPEEK_NOTIFY, RUNPEEK_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 runpeek login (~/.config/runpeek/config.json).
Previously published as tqdm-live; pip install tqdm-live now installs this package.
Metadata
Release files for runpeek-sdk 0.8.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 |
|---|---|---|---|---|
| runpeek_sdk-0.8.0.tar.gz | 30.3 kB | With provenance | Details for runpeek_sdk-0.8.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| runpeek_sdk-0.8.0-py3-none-any.whl | Python 3 | none | any | Details for runpeek_sdk-0.8.0-py3-none-any.whl |
Total release size: 47.3 kB
Release files / runpeek_sdk-0.8.0.tar.gz
| Download URL | runpeek_sdk-0.8.0.tar.gz |
|---|---|
| Size | 30.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32492bbc40e40d3728c9ea13b790e8a7a234bdd0435b54ed93cb84a2acc50e4a
|
|
BLAKE2b-256 checksum How to use checksums |
d1f907a1698ab504c86ee8e05b28eead596dcaab777a7b32a35720a71a72dcf8
|
| 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 / runpeek_sdk-0.8.0-py3-none-any.whl
| Download URL | runpeek_sdk-0.8.0-py3-none-any.whl |
|---|---|
| Size | 17.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a73cc0aa586a0a33c89c04c69ea196bbad8554dfafd02b10c9f921e8ce815265
|
|
BLAKE2b-256 checksum How to use checksums |
5004f8e1ac2092478b90009b6338cc986aa4dc9c598b3c423c9b44ac56d96a9c
|
| 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 runpeek-sdk 0.8.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
Both files in this release have been uploaded with provenance metadata.
Attestation for runpeek_sdk-0.8.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.