Local experiment tracking with model versioning - self-hosted W&B alternative with Artifacts
Project description
Runicorn
English | 简体中文
Local-first experiment tracking for teams and individuals who keep ML runs on their own machines or GPU servers.
Runicorn combines a Python SDK, Web UI, Remote Viewer, and optional Windows desktop build into one workflow. It is designed for people who want experiment tracking without pushing runs into a SaaS platform, mirroring remote run folders back to a laptop, or rewriting an existing training stack from scratch.
If your experiments run on remote Linux boxes, Runicorn can start a lightweight Viewer on the remote machine and tunnel it over SSH, so you inspect runs directly where they live.
Why Runicorn
- Data stays under your control: runs, logs, assets, and settings remain on storage you control
- Remote Viewer without file sync: inspect remote GPU-server experiments over SSH instead of copying run folders back first
- Low-friction adoption: start with
rn.init(...)andrun.log(...), while keeping compatibility withprint(), Pythonlogging, torchvisionMetricLogger, ImageNet meters, TensorBoard, and tensorboardX - Real experiment context: store config metadata, dataset references, pretrained references, code snapshots, and archived outputs alongside scalar metrics
- Rich local UI: path tree, compare mode, assets repository, recycle bin, import/export, GPU telemetry, and remote session management
Who It's For
Good fit
- You train locally or on your own servers and want experiment tracking without SaaS lock-in
- You often switch between a local workstation and remote GPU machines
- You want metrics, logs, code context, and experiment assets tied to the same run
- You already have training code and want an incremental adoption path instead of a large rewrite
Not a good fit
- You need a hosted collaboration platform, cloud dashboards, or team permissions out of the box
- You only want a minimal CSV logger and do not care about browsing runs later
- Your workflow depends on a managed online ecosystem rather than local or self-controlled infrastructure
Quick Start
Install Runicorn:
pip install -U runicorn
Log your first run:
import runicorn as rn
run = rn.init(
path="cv/resnet50/baseline",
alias="trial-01",
capture_console=True,
)
for epoch in range(1, 11):
train_loss = 1.0 / epoch
val_acc = 0.70 + epoch * 0.02
run.log({"train_loss": train_loss, "val_acc": val_acc})
run.summary({"notes": "first stable run"})
run.finish()
Open the viewer:
runicorn viewer
Then visit http://127.0.0.1:23300.
What Makes It Different
| Workflow | Common friction | Runicorn |
|---|---|---|
| Manual local folders + scripts | Metrics, logs, configs, and outputs drift apart | Keeps run history, summary, logs, and assets tied to one run |
| Remote SSH + tail + ad-hoc plotting | Slow to inspect, hard to compare, easy to lose context | Remote Viewer gives a structured UI over SSH without a sync-first loop |
| Hosted experiment tracker | Requires internet/service trust and external storage | Keeps experiment data local and under your storage boundary |
Remote Viewer
Runicorn is strongest when training happens on remote GPU servers.
With Remote Viewer, you can connect over SSH, choose the remote Python environment, start a remote Viewer session, and inspect remote runs through your local browser or desktop app.
No local mirror. No manual sync step. No waiting for large run folders to copy.
runicorn viewer
# Open the Remote page -> connect over SSH -> choose environment -> start session
| Old sync-heavy workflow | Remote Viewer | |
|---|---|---|
| Wait time | Minutes to hours | Seconds |
| Local storage copy | Required | Not required |
| Experiment inspection | Delayed | Direct over SSH |
Logging Compatibility
Runicorn is built to fit into training code that already exists.
If your loop already uses torchvision-style metric logging, you can often start by replacing one import:
from runicorn.log_compat.torchvision import MetricLogger as MetricLogger
Runicorn also provides compatibility helpers for:
runicorn.log_compat.imagenetrunicorn.log_compat.tensorboardrunicorn.log_compat.tensorboardX
You can also capture print() output and Python logging, but the main value here is structured metric compatibility that turns existing training signals into real experiment curves.
Assets and Run Context
Runicorn does not stop at scalar metrics. You can also record the surrounding context that makes runs understandable later:
- config metadata
- dataset references
- pretrained model references
- code snapshots
- archived output files
- cross-run asset browsing and preview
Use run.log_config(...), run.log_dataset(...), and run.log_pretrained(...) inside a run to attach reusable training context directly to the experiment record.
Documentation
License
MIT. See LICENSE.
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 runicorn-0.7.2.tar.gz.
File metadata
- Download URL: runicorn-0.7.2.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05dda38c536f730d83a54b89f64427c4780a0529696dd4bae25aea4556202635
|
|
| MD5 |
1a90502e8755752db257e96fa872e70c
|
|
| BLAKE2b-256 |
e244928b4655aa0f87b7406acd48bbb3060bf437ed612a165fe5e0761bb0872a
|
File details
Details for the file runicorn-0.7.2-py3-none-any.whl.
File metadata
- Download URL: runicorn-0.7.2-py3-none-any.whl
- Upload date:
- Size: 1.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d962d1359ce2de2659bfaa507ec4675d6592ff7a18e0f7a77da58a3537155b9
|
|
| MD5 |
1386492f7e2732cd97fbfd979000263f
|
|
| BLAKE2b-256 |
9aaa072d276804dc3478ff5c3ad630842c8f8060a676f4f6be4d58d39f4f68bc
|