--cloud to a command and it runs on SimForge’s hosted API instead of your runtime: the same command, the same scenario file, the same output. Use it for what your machine cannot do, such as photoreal renders without a large GPU, or many jobs at once.
Beta. SimForge Cloud is open in beta: the Studio is free to explore and 2D renders are free; paid compute (3D renders, evaluations, transfers, Recast, asset generation,
--cloud) runs on SimForge’s machines. Sign up and start with $25 in free credits, and buy more on your workspace’s credits page. Work the cloud does not run yet (3D renders, evaluations, transfers and Recast until their workers arrive) is refused with cloud_not_open: run the command without --cloud. --dry-run still shows the price.Prices
Each price is fixed before a run starts, and
--dry-run shows it before anything runs. Prices are in cents on the command line (--max-cost 100 is one dollar). Authoring, simulation, templates, OpenSCENARIO import and export, and validation are free.
- A new account starts with $25 in free credits, and a workspace spends what its credits cover: there is no daily limit. A paid run the workspace’s credits do not cover is refused before anything starts (
insufficient_credits), with a link to buy credits on the workspace’s credits page. Credits are checked first, so this is the answer even for work the cloud does not run yet. - Free 2D renders run one at a time per account, up to 50 a day (UTC); past that the host answers
rate_limited. - A run that fails costs nothing. A partial or cancelled run is charged only for the jobs that finished, and Recast only when the log became a scenario.
Price, cap, run, download
--dry-runreturns the estimate (costEstimateCents) and starts nothing. On a scenario file it first saves the file to your workspace as an immutable revision (free), and the run that follows reuses exactly that revision. With--max-costit still prices the run and addsmaxCost: {limitCents, exceeded}:exceeded: truemeans the same command without--dry-runwould be refused.--max-cost(in cents) is required with--cloud. A run whose estimate is above it is refused before anything starts (budget_exceeded); one the workspace’s credits do not cover, withinsufficient_credits.--max-cost 0runs only free work.--waitfollows the run tosucceeded,failed,partialorcancelled;--downloadthen writes every artifact into--out, sha256-checked. Giving--outalso waits and downloads; without it the command returns as soon as the run is submitted. While it waits, stderr gets arun.progressline with the run id straight away, then the run’s status and its jobs on each change and at least every 30 seconds; the result still comes on stdout at the end.--idempotency-keymakes resending a lost submission safe: the host answers with the original run and charges once.
render, simulate, preview frame and preview clip, Recast (log ingestion), transfer (below), and downloads hosted datasets as files (Getting data out). Reinforcement learning stays local.
Test a model by letting it drive your saved scenarios: Run an evaluation on Evaluations or Model Comparison. A closed-loop evaluation by Alpamayo 1.5 Nano, SimForge Pilot-4B v1.5 or Qwen Drive 1 4B costs $3 per scenario, including preparation. Pick a dataset or a few scenarios, review the total and the balance after it, then run.
--yes skips the prompt; --dry-run only quotes). --scenarios "Crossing,Turning" picks a subset. It prints the run URL and --wait follows progress. Only scenarios and maps your workspace can already use are offered.
An open-loop evaluation scores a driving model’s predictions along one of your finished scenario renders and costs $2 per scenario, charged only when it succeeds. --model names the model that predicts (without it, the CLI lists the models you can run):
simforge open-loop list --model MODEL lists one model’s evaluations. --model 'SimForge Pilot-4B v1.5' and --model 'Qwen Drive 1 4B' both see through their own three cameras, so render the scenario with that rig first (simforge rig init --preset qwen-drive-3cam --out rig.json, then render with --rig rig.json); a render with another rig is refused, naming the preset. That render records the rig’s native 10 fps unless you pass --fps. A render at another rate is still scored: each input is the nearest rendered frame, and the dry run and the run both say so in a note with the largest time offset used.
Scripted closed-loop, your own registered models, other endpoints, AlpaSim, comparisons and finished-run requeues stay locked with 403 evaluation_launch_disabled. Use Request evaluation or Use your own model for an email request instead; requests start no work and charge nothing.
Recast: bring your own logs
simforge.recording/v1) or a ROS 2 MCAP lidar log becomes a scenario on one of SimForge’s maps. --map auto takes the recording’s own map, or the map its GNSS path lies in. An MCAP log is perceived on a GPU worker first; its detector’s weights are CC BY-NC-SA 4.0, so scenarios made from MCAP logs are for non-commercial use.
The same event on another map
Run transfer with
--cloud for now. A local transfer needs the target map’s odr derivative, which simforge maps pull does not install yet, so it stops with map_facts_missing.Follow a run
Hosted scenarios
A scenario stored in your workspace runs at an immutable revision, which pins the exact map version, actors and recordings:<name> (copy); the original’s renders and runs stay with the original. It lands in the original’s dataset, or in your default dataset when you cannot change that one (--dataset picks another):
Sign-in, scopes and API keys
simforge login asks for scopes that cover downloads and cloud runs. A CI job can use an API key instead: set SIMFORGE_API_KEY (sfk_…) and SIMFORGE_API_URL. The key acts in the workspace it was created in, and your workspace role still applies: a viewer only reads, runs need a member.
Managing keys needs the keys:admin scope, which a plain login does not ask for. --scope adds a scope to the default ones, so sign in again with it, then create the key:
sfk_…) is printed once. You can also create and revoke keys in the browser, on your workspace’s API keys page. If simforge auth status then lists only keys:admin under scopes, the CLI is an older one that replaced the defaults: reinstall it (curl -fsSL https://simforge.ai/install.sh | sh), or name every scope (simforge login --scope keys:admin --scope runs:write …) as its insufficient_scope hint prints.
An AI agent that calls the API without the CLI signs in through auth.md: you approve it on simforge.ai with a code it shows you, for one organization and the scopes it asks for.
Errors
The hosted API is described by its OpenAPI document.