Downloads · 30 days
36
20% of all-time downloads
eulogik/nanoforecast-v03
nanoforecast-v03 is a time series forecasting model from eulogik. Use it for the time series forecasting task on the model card, and read the license before you ship it in a product. It is set up for pytorch. The card lists the license as apache-2.0.
Downloads · 30 days
36
20% of all-time downloads
All-time downloads
177
Public
Parameters
6.5M
26.5 MB on disk
Likes
3
Public
Click a slice to open those files.
.safetensors26.1 MB · 98%
From the Hugging Face model README
CPU inference · Raspberry Pi · ONNX · Streaming · Quantile forecasts
Built by Eulogik — deployable AI for the real world
</div>NanoForecast v0.3 is the initial release of a 6.5M-parameter time series foundation model designed for deployment on CPUs, Raspberry Pi, edge devices, and in the browser. It performs zero-shot forecasting with quantile uncertainty bounds.
This is a reference release. For the latest improvements, see eulogik/nanoforecast-v05 (43.8% better MASE with same architecture).
Standard protocol: context 512, horizon 48, non-overlapping test windows, MASE scaled by seasonal-naive in-sample MAE.
| Dataset | NanoForecast v0.3 (6.5M) | TimesFM (200M) | PatchTST (15M+) |
|---|---|---|---|
| ETTh1 | 0.681 | 0.705 | 0.781 |
| ETTh2 | 1.328 | 1.360 | 1.467 |
| ETTm1 | 0.288 | 0.545 | 0.488 |
| exchange_rate | 11.758 | 4.383 | 3.861 |
| electricity | 2.213 | 0.923 | 1.347 |
| traffic | 1.913 | 0.765 | 1.379 |
| Overall MASE | 3.030 | 1.447 | 1.554 |
v0.3 → v0.5 improvement: Overall MASE 3.030 → 1.704 (↓43.8%) with same architecture, pipeline fixes only.
pip install nanoforecast
import numpy as np
from nanoforecast import NanoForecast
model = NanoForecast.from_pretrained("eulogik/nanoforecast-v03")
context = np.sin(np.linspace(0, 8*np.pi, 512)) + 0.1 * np.random.randn(512)
result = model.predict(context, horizon=48, freq=1)
print(result["forecast"].shape) # (48,) point forecast
print(result["quantiles"].shape) # (5, 48) p10..p90
result = model.predict(context, horizon=48, return_state=True)
state = result.pop("state")
for new_val in incoming_stream:
result = model.predict_step(new_val, state, horizon=48)
forecast = result["forecast"][0]
| File | Size |
|---|---|
model.safetensors | 26.1 MB |
config.json | 343 B |
model_card.json | 710 B |
@article{kishore2026nanoforecast,
title={NanoForecast v0.5: Competitive Time Series Forecasting Through Training Pipeline Optimization},
author={Kishore, Gautam},
journal={arXiv preprint arXiv:2609.31669},
year={2026}
}
Paper: arxiv.org/abs/2609.31669
Built by Eulogik — deployable AI for the real world
If you found this useful, please ⭐ the GitHub repo and like this model on Hugging Face!
</div>