TimesFM 3.0, running in this tab

330M parameters, no server doing the work. The weights download once and stay in your browser cache, so only the first visit is slow.

·ONNX Runtime Web
·Demo series
·Model weights
·Inference session
Starting

Observed
Forecast
Held out
Naive

What this build can and cannot do

Every parameter of TimesFM 3.0 is here — 330.7M of them, the same count as Google's checkpoint. Nothing is distilled or pruned. What is restricted is the shape of what you can feed it, and that comes from the export, not the model.

Context and horizon are fixed at export time

LimitHerePython version
Context15,360 points
Horizonunbounded (rolled out)
Precisionint8, fp32 output headfp32
Seriesunivariateunivariate

TimesFM computes its patch indices with plain Python integers derived from the context length. Those become fixed constants when the model is traced to ONNX, so a graph exported with a flexible context silently reads out of bounds at any other length. The export instead takes one fixed window and masks off the unused part — which is exact, but it means the window is chosen once, up front, and every forecast pays for the whole thing even when your series is shorter.

A longer window is a real trade, not a free upgrade: 512 → 4096 costs about 5× the latency per forecast for a small accuracy gain.

Why it is slower than running it natively

Inference is single-threaded WebAssembly. Multi-threading needs COOP/COEP headers the demo does not set, and WebGPU is probed at startup then rejected, because ONNX Runtime 1.29 generates invalid shader code for this graph and returns NaN. The same graph runs in about 21 ms natively on an M4 Pro.

The live price channels

Bitcoin and Ethereum are fetched straight from a public exchange API in your browser. Nothing is proxied and no key is used, so an ad blocker, corporate network or regional restriction can stop them; the page tries Binance, Kraken, Coinbase and CoinGecko in turn and names whichever answered.

They are here to show a limit, not to predict a price. A price series is close to a random walk, so a well-behaved forecaster should produce a nearly flat median with a rapidly widening fan. Check its skill score: below zero means it lost to simply repeating the last value. None of this is investment advice.

Run it yourself

The Python version has none of these shape limits, runs in fp32, and does a forecast in about 60 ms on an M4 Pro. Export scripts, benchmarks and the full write-up are in the repository.

github.com/frankwiersma/timesfm-local-plotter