Skip to main content
vlmrun gw systemone, alias vlmrun gw s1, asks typed, calibrated questions of text, images, a PDF, or a video, and returns a probability per answer rather than generated text. See System One for the concepts and gateway for shared options.
Positionals are resolved by what they are: an image path or URL becomes an image part (up to 8), a .pdf becomes the document part, .txt / .md / .json / .yaml becomes the state, and anything else is literal state text. Use -s to set the state explicitly, and every positional is then media.

Asking questions

Three inline flags cover most asks, and all are repeatable:
For anything larger, -Q/--questions takes inline JSON, @file.json, or - for stdin, in either a list form (ids carried per question) or the wire map. -B/--body sends a full request body, and other flags override it.

Listing models

vlmrun gw s1 models prints the models a gateway serves with their release dates. There is no catch-all alias, so name one of them with -m.

Video

A video positional is sampled into frames, and each frame is one read. Answers render as a series over time: a sparkline per numeric question with its true peak and low, and a choice as the segments it held.
The video flags below ship in the next CLI release. The same reads are available now from Python: see Streaming.
--ws is worth setting on anything but a short clip: the saving is round trips, so it grows with frame count. See Streaming. --gate-mode matters because a gate over footage usually asks whether something ever happened, which is why any is the default. sustained:N is the debounced form:

Gates

--gate asserts a condition and sets the exit code, so a read can guard a script. It is repeatable and all gates must pass. Gates are checked against the question spec before the request is sent, so a selector that cannot apply costs nothing.
Exit codes: 0 every gate passed, 1 a gate failed, 2 the request failed. With --json the verdicts go to stderr, so stdout stays a clean response body.

Repeats and dry runs

--repeat N sends the same request N times and reports mean, spread, and every read, which is how you see how much to trust one number. Gates then apply to the mean. This is distinct from --samples, which averages noise draws inside a single read. --dry-run prints the request body and exits without sending it. Piped output is the verbatim body, so it composes with curl.

Options

Remote images are fetched by the CLI, because the route accepts images only as data URLs, and must resolve to a public address. Set VLMRUN_ALLOW_PRIVATE_URLS=1 for an internal image host.