Metadata-Version: 2.4
Name: runicorn
Version: 0.1.0
Summary: Local, open-source experiment tracking and visualization (a simple, self-hosted alternative to W&B)
Author: Runicorn Authors
License: MIT
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: fastapi<1.0,>=0.110
Requires-Dist: uvicorn[standard]<0.31,>=0.23
Requires-Dist: pydantic<3,>=2
Requires-Dist: aiofiles<24,>=23
Requires-Dist: filelock>=3.12
Provides-Extra: images
Requires-Dist: pillow>=9; extra == "images"
Requires-Dist: numpy>=1.22; extra == "images"
Requires-Dist: matplotlib>=3.6; extra == "images"

# Runicorn

Local, open-source experiment tracking and visualization. 100% local. A lightweight, self-hosted alternative to W&B.

- Package/Library name: runicorn
- Default storage path: ./.runicorn
- Viewer: read-only, serves metrics/logs/media from local storage
- GPU telemetry: optional panel (reads nvidia-smi if available)

Quick start (SDK)
-----------------
```python
import runicorn as rn

run = rn.init(project="demo")
for epoch in range(3):
    rn.log({"epoch": epoch, "train_loss": 1.0/(epoch+1)})
# Or rn.log(key=value, epoch=epoch)

rn.summary(update={"best_val_acc_top1": 77.3})
rn.finish()
```

Launch viewer
-------------
```
runicorn viewer --storage ./.runicorn --host 127.0.0.1 --port 8000
```
Open http://127.0.0.1:8000

Frontend (dev)
--------------
For local frontend development with live-reload and API proxy:
```
./run_dev.ps1 -PythonExe "python"
```
Then open http://127.0.0.1:5173. The frontend proxies `/api/*` to `http://127.0.0.1:8000`.

See `web/README.md` for manual steps.

Storage layout
--------------
```
.runicorn/
  runs/
    <run_id>/
      meta.json
      status.json
      summary.json
      events.jsonl
      media/
```

Notes
-----
- The viewer is read-only. No train start/stop APIs.
- GPU telemetry is shown if `nvidia-smi` is available.
- Windows compatible.
