Commands
Global Options
Section titled “Global Options”These flags can be used with any command:
| Option | Description |
|---|---|
--token | API key (overrides config file and env var) |
--base-url | API base URL (overrides config file and env var) |
qualia --token <API_KEY> creditqualia --base-url http://localhost:8004 auth statusqualia version
Section titled “qualia version”Show CLI and SDK versions.
qualia versionqualia auth
Section titled “qualia auth”qualia auth login
Section titled “qualia auth login”Save your API key for future use. Prompts for the key interactively.
qualia auth login| Option | Description |
|---|---|
--api-key | API key (prompted if omitted) |
--base-url | Override API base URL |
qualia auth status
Section titled “qualia auth status”Check current authentication configuration.
qualia auth statusqualia credit
Section titled “qualia credit”Show your current credit balance.
qualia creditqualia credit --jsonqualia project
Section titled “qualia project”qualia project list
Section titled “qualia project list”List all projects.
qualia project listqualia project list --jsonqualia project create
Section titled “qualia project create”Create a new project.
qualia project create "My Project"qualia project create "My Project" -d "Optional description"| Argument / Option | Description |
|---|---|
NAME | Project name (required) |
-d, --description | Optional description |
qualia project delete
Section titled “qualia project delete”Delete a project. Fails if the project has active jobs.
qualia project delete <PROJECT_ID>qualia model
Section titled “qualia model”qualia model types
Section titled “qualia model types”List available VLA model types.
qualia model typesqualia model types --jsonqualia model list
Section titled “qualia model list”List the trained model artifacts in your account, newest first.
qualia model listqualia model list --model-type vla_model --project <PROJECT_UUID>qualia model list --limit 50 --json| Option | Description |
|---|---|
--limit, -n | Page size, 1–100 (default 20) |
--cursor | Pagination cursor printed by the previous page |
--sort, -s | newest, oldest, updated, or name |
--search, -q | Search model path |
--model-type | Filter: vla_model or reward_model |
--project | Filter by project ID |
--job | Filter by job ID |
qualia model types lists the static catalog of model types you can fine-tune;
qualia model list lists the models you have actually trained.
qualia instance
Section titled “qualia instance”qualia instance list
Section titled “qualia instance list”List available GPU instance types and pricing.
qualia instance listqualia instance list --jsonqualia dataset
Section titled “qualia dataset”qualia dataset list
Section titled “qualia dataset list”List the datasets in your account, in stable name order.
qualia dataset listqualia dataset list --search openarm --dataset-type lerobot_v3qualia dataset list --limit 50 --json| Option | Description |
|---|---|
--limit, -n | Page size, 1–100 (default 20) |
--cursor | Pagination cursor printed by the previous page |
--search, -q | Search dataset path |
--dataset-type | Filter: lerobot_v2_1, lerobot_v3, or mcap_ros2 |
qualia dataset uploads
Section titled “qualia dataset uploads”Show the account’s in-flight uploads, the feed the dashboard’s pending band renders, from any machine, including one that is not running the upload.
qualia dataset uploadsqualia dataset uploads --watch --every 30qualia dataset uploads --json| Option | Description |
|---|---|
--watch, -w | Refresh until Ctrl-C |
--every | Seconds between refreshes (default 15, never under 5) |
Files and Bytes count content the lake has already accepted. Bytes go straight to storage, so a first upload of new content reads 0 until it publishes; Phase and Detail track the run throughout.
qualia dataset upload
Section titled “qualia dataset upload”Publish a local dataset directory as a pinned DatasetVersion. Bytes go straight to storage; Qualia verifies the manifest and publishes the two together. Episodes become visible only once that publication succeeds.
qualia dataset upload ./my-recording my-dataset --source-format lerobot_v3--source-format is required and takes lerobot_v2_1, lerobot_v3, or
mcap_ros2. LeRobot 2.1 is never aliased or converted to v3 — name it
explicitly so its source provenance stays distinct.
An mcap_ros2 upload expects a recorded session: one subdirectory per episode,
each holding a single .mcap and, optionally, an episode.json sidecar
carrying task and mode fallbacks.
| Option | Description |
|---|---|
--source-format | Source layout (required) |
--upload-workers | Files read and chunked concurrently (default 4) |
--chunk-threads | Native chunk/hash threads (default ≈ half your cores) |
--quiet | Silence the live per-phase progress on stderr |
Progress is written to stderr, so --json output stays pipeable. The server-side
phases are bounded by silence rather than elapsed time: ingest parses every bag
and transcodes every camera, so a large upload is free to take as long as it
takes. See Configuration for the two environment variables
that govern that wait.
qualia dataset download
Section titled “qualia dataset download”Download a dataset’s published files into a local directory.
qualia dataset download my-datasetqualia dataset download my-dataset ./somewhere-elseDEST defaults to ./<name>. To render one immutable pin as a verified
LeRobot v3 tree instead, use
qualia dataset materialize.
qualia dataset import-hf
Section titled “qualia dataset import-hf”Import one exact Hugging Face dataset commit server-side. The command confirms the pinned coordinates, submits them once, and polls while Hub bytes stream straight into storage. Success creates a pinned immutable DatasetVersion.
export HF_TOKEN="..." # optional for public datasetsqualia dataset import-hf \ qualia-robotics/openarm-cube-in-box-v1 \ 17c29c487d886878ddcb3c5649101b2860fbc047 \ openarm-cube-in-box \ --source-format lerobot_v3The revision must be lowercase 40-hex; branches, tags, URLs, and embedded
credentials are rejected. HF_TOKEN is read only from the environment and is
never accepted as a command-line option, printed, or sent in poll requests.
Local file/byte/work-directory switches do not exist because no dataset body or
scratch file touches the CLI machine. --json requires --yes so stdout stays
valid JSON.
qualia dataset curation-suggest
Section titled “qualia dataset curation-suggest”Explain bad-data recommendations for immutable DatasetVersions without
mutating them. Use --page-token to continue the result set.
qualia dataset curation-suggest <DATASET_VERSION_UUID>qualia dataset curation-suggest <DATASET_VERSION_UUID> --jsonqualia dataset curate
Section titled “qualia dataset curate”Publish the reviewed analysis’s sealed recommendation set as a new immutable DatasetVersion. Supply a stable idempotency UUID. Source bytes and Git history are not deleted.
qualia dataset curate <DATASET_VERSION_UUID> \ --definition-id <DATASET_DEFINITION_UUID> \ --idempotency-key <OPERATION_UUID> \ --yesOmit --yes for an interactive confirmation.
qualia dataset materialize
Section titled “qualia dataset materialize”Render and download one immutable DatasetVersion as a verified LeRobot v3 directory. Transfer bytes go directly from object storage; the CLI validates every artifact and atomically publishes a new destination.
qualia dataset materialize <DATASET_VERSION_UUID> ./training-set-v7qualia dataset materialize <DATASET_VERSION_UUID> ./training-set-v7 --json| Argument | Description |
|---|---|
DATASET_VERSION_ID | Immutable dataset-version UUID (required) |
DEST | New destination directory; must not already exist |
qualia dataset training-features
Section titled “qualia dataset training-features”Show the exact camera, stream, timebase, and frame-timestamp descriptors for one immutable DatasetVersion.
qualia dataset training-features <DATASET_VERSION_UUID>qualia dataset training-features <DATASET_VERSION_UUID> --json| Argument | Description |
|---|---|
DATASET_VERSION_ID | Immutable dataset-version UUID (required) |
qualia dataset markers
Section titled “qualia dataset markers”Show the recorder markers inside one episode, in time order. Every edit command below cuts on these labels, so this is how you find out what a recording actually wrote.
qualia dataset markers <EPISODE_UUID>qualia dataset markers <EPISODE_UUID> --jsonAn ingest that carried no marker topic reports that instead of an empty table.
qualia dataset split
Section titled “qualia dataset split”Cut episodes into children at their own markers. Additive and exactly
reversible: children are new episodes, the parents are untouched, and
dataset unsplit removes them again.
qualia dataset split <EPISODE_UUID> --cut-at graspqualia dataset split <EPISODE_UUID> <EPISODE_UUID> --cut-at grasp --dry-run| Option | Description |
|---|---|
--cut-at | Marker label to cut at, as the recording wrote it |
--start-at-first | Drop the lead-in, up to the FIRST marker so labelled |
--end-at-last | Drop the run-out, after the LAST marker so labelled |
--dry-run | Plan the cuts without writing them |
Name at least one label across --cut-at, --start-at-first or --end-at-last.
The narrowing options apply before the cut, which is how a lead-in is dropped;
given alone, each episode becomes one trimmed child. All three accept repeats.
qualia dataset unsplit
Section titled “qualia dataset unsplit”Delete the children of split episodes, undoing the split exactly.
qualia dataset unsplit <PARENT_EPISODE_UUID>qualia dataset trim
Section titled “qualia dataset trim”Trim episodes to their own markers, reversibly. Each episode is narrowed to
start at ITS first named marker and end at ITS last. The base extent never
changes, so --clear restores it.
qualia dataset trim <EPISODE_UUID> --start-at-first ready --end-at-last donequalia dataset trim <EPISODE_UUID> --clear| Option | Description |
|---|---|
--start-at-first | Trim the lead up to the FIRST marker so labelled |
--end-at-last | Trim the tail after the LAST marker so labelled |
--clear | Restore the full extent instead of trimming |
--note | Commit message for the revision |
--clear restores the full extent and takes no labels; passing both is an error.
qualia dataset subtasks
Section titled “qualia dataset subtasks”Name each episode’s subtask spans from its own markers — the same boundary rule
dataset split cuts on, used to label a span instead of carving it, so a whole
selection can be named at once.
qualia dataset subtasks <EPISODE_UUID> --at grasp --at placequalia dataset subtasks <EPISODE_UUID> --at grasp --starts-at| Option | Description |
|---|---|
--at | Marker label whose presses bound a subtask (required, repeats) |
--starts-at | Each marker OPENS the span it names (default: it closes it) |
--note | Commit message for the revision |
qualia git
Section titled “qualia git”qualia git install
Section titled “qualia git install”Enable fast large-file transfer for a cloned Qualia dataset repo. Run it once
inside the clone; it configures the Git filter and adds the tracked patterns to
.gitattributes, after which large files sync chunk-by-chunk instead of moving
whole.
git clone https://api.qualiastudios.dev/git/<org>/<name>.gitcd <name>qualia git install| Option | Description |
|---|---|
--path | Path to the cloned dataset repo (default .) |
Tracked by default: *.safetensors, *.gguf, *.parquet, *.mp4, *.mcap,
*.bag, *.npz, *.npy, *.pt, *.bin, *.tar, *.zip. Patterns already
present in .gitattributes are left alone.
The clone’s origin must be the same endpoint the CLI is configured against —
the filter refuses a repo whose remote points somewhere other than the
configured base URL, so a repo cloned from one environment cannot be pushed to
another by changing the URL.
Without an API key the filter cannot move data; qualia git install says so
rather than failing later inside a git command.
qualia job
Section titled “qualia job”qualia job list
Section titled “qualia job list”List jobs across all projects, or filter by project.
qualia job listqualia job list --project-id <PROJECT_ID>qualia job list --jsonqualia job launch
Section titled “qualia job launch”Launch a new fine-tuning job.
qualia job launch \ --project-id <PROJECT_ID> \ --vla-type smolvla \ --model-id lerobot/smolvla_base \ --dataset-version-id <DATASET_VERSION_UUID> \ --hours 2.0 \ --camera-mappings '{"cam_1": "observation.images.top"}'| Option | Type | Required | Description |
|---|---|---|---|
--project-id | str | Yes | Project ID |
--vla-type | str | Yes | Model type: smolvla, pi05, act, or sarm |
--dataset-version-id | UUID | Yes | Immutable DatasetVersion |
--hours | float | Yes | Training duration (max 168) |
--camera-mappings | JSON | Yes | Camera slot to image key mapping |
--model-id | str | No | Hugging Face model ID (required for smolvla and pi05) |
--model-revision | SHA | No | Exact commit SHA; required when --model-id is not built-in |
--instance-type | str | No | GPU instance type (default: auto-selected) |
--region | str | No | Cloud region |
--batch-size | int | No | Training batch size (default: 32) |
--name | str | No | Job name |
--hyper-spec | JSON | No | Custom hyperparameters as JSON |
qualia job get
Section titled “qualia job get”Get detailed job status, including phase progression.
qualia job get <JOB_ID>qualia job get <JOB_ID> --jsonqualia job cancel
Section titled “qualia job cancel”Cancel a running job.
qualia job cancel <JOB_ID>qualia job hyperparams
Section titled “qualia job hyperparams”Show default hyperparameters for a VLA model type.
qualia job hyperparams smolvlaqualia job hyperparams smolvla --model-id lerobot/smolvla_base| Argument / Option | Description |
|---|---|
VLA_TYPE | VLA model type (required) |
--model-id | Model ID for type-specific defaults |