Skip to content

Commands

These flags can be used with any command:

OptionDescription
--tokenAPI key (overrides config file and env var)
--base-urlAPI base URL (overrides config file and env var)
Terminal window
qualia --token <API_KEY> credit
qualia --base-url http://localhost:8004 auth status

Show CLI and SDK versions.

Terminal window
qualia version

Save your API key for future use. Prompts for the key interactively.

Terminal window
qualia auth login
OptionDescription
--api-keyAPI key (prompted if omitted)
--base-urlOverride API base URL

Check current authentication configuration.

Terminal window
qualia auth status

Show your current credit balance.

Terminal window
qualia credit
qualia credit --json

List all projects.

Terminal window
qualia project list
qualia project list --json

Create a new project.

Terminal window
qualia project create "My Project"
qualia project create "My Project" -d "Optional description"
Argument / OptionDescription
NAMEProject name (required)
-d, --descriptionOptional description

Delete a project. Fails if the project has active jobs.

Terminal window
qualia project delete <PROJECT_ID>

List available VLA model types.

Terminal window
qualia model types
qualia model types --json

List the trained model artifacts in your account, newest first.

Terminal window
qualia model list
qualia model list --model-type vla_model --project <PROJECT_UUID>
qualia model list --limit 50 --json
OptionDescription
--limit, -nPage size, 1–100 (default 20)
--cursorPagination cursor printed by the previous page
--sort, -snewest, oldest, updated, or name
--search, -qSearch model path
--model-typeFilter: vla_model or reward_model
--projectFilter by project ID
--jobFilter 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.


List available GPU instance types and pricing.

Terminal window
qualia instance list
qualia instance list --json

List the datasets in your account, in stable name order.

Terminal window
qualia dataset list
qualia dataset list --search openarm --dataset-type lerobot_v3
qualia dataset list --limit 50 --json
OptionDescription
--limit, -nPage size, 1–100 (default 20)
--cursorPagination cursor printed by the previous page
--search, -qSearch dataset path
--dataset-typeFilter: lerobot_v2_1, lerobot_v3, or mcap_ros2

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.

Terminal window
qualia dataset uploads
qualia dataset uploads --watch --every 30
qualia dataset uploads --json
OptionDescription
--watch, -wRefresh until Ctrl-C
--everySeconds 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.


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.

Terminal window
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.

OptionDescription
--source-formatSource layout (required)
--upload-workersFiles read and chunked concurrently (default 4)
--chunk-threadsNative chunk/hash threads (default ≈ half your cores)
--quietSilence 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.


Download a dataset’s published files into a local directory.

Terminal window
qualia dataset download my-dataset
qualia dataset download my-dataset ./somewhere-else

DEST defaults to ./<name>. To render one immutable pin as a verified LeRobot v3 tree instead, use qualia dataset materialize.


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.

Terminal window
export HF_TOKEN="..." # optional for public datasets
qualia dataset import-hf \
qualia-robotics/openarm-cube-in-box-v1 \
17c29c487d886878ddcb3c5649101b2860fbc047 \
openarm-cube-in-box \
--source-format lerobot_v3

The 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.

Explain bad-data recommendations for immutable DatasetVersions without mutating them. Use --page-token to continue the result set.

Terminal window
qualia dataset curation-suggest <DATASET_VERSION_UUID>
qualia dataset curation-suggest <DATASET_VERSION_UUID> --json

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.

Terminal window
qualia dataset curate <DATASET_VERSION_UUID> \
--definition-id <DATASET_DEFINITION_UUID> \
--idempotency-key <OPERATION_UUID> \
--yes

Omit --yes for an interactive confirmation.


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.

Terminal window
qualia dataset materialize <DATASET_VERSION_UUID> ./training-set-v7
qualia dataset materialize <DATASET_VERSION_UUID> ./training-set-v7 --json
ArgumentDescription
DATASET_VERSION_IDImmutable dataset-version UUID (required)
DESTNew destination directory; must not already exist

Show the exact camera, stream, timebase, and frame-timestamp descriptors for one immutable DatasetVersion.

Terminal window
qualia dataset training-features <DATASET_VERSION_UUID>
qualia dataset training-features <DATASET_VERSION_UUID> --json
ArgumentDescription
DATASET_VERSION_IDImmutable dataset-version UUID (required)

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.

Terminal window
qualia dataset markers <EPISODE_UUID>
qualia dataset markers <EPISODE_UUID> --json

An ingest that carried no marker topic reports that instead of an empty table.


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.

Terminal window
qualia dataset split <EPISODE_UUID> --cut-at grasp
qualia dataset split <EPISODE_UUID> <EPISODE_UUID> --cut-at grasp --dry-run
OptionDescription
--cut-atMarker label to cut at, as the recording wrote it
--start-at-firstDrop the lead-in, up to the FIRST marker so labelled
--end-at-lastDrop the run-out, after the LAST marker so labelled
--dry-runPlan 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.


Delete the children of split episodes, undoing the split exactly.

Terminal window
qualia dataset unsplit <PARENT_EPISODE_UUID>

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.

Terminal window
qualia dataset trim <EPISODE_UUID> --start-at-first ready --end-at-last done
qualia dataset trim <EPISODE_UUID> --clear
OptionDescription
--start-at-firstTrim the lead up to the FIRST marker so labelled
--end-at-lastTrim the tail after the LAST marker so labelled
--clearRestore the full extent instead of trimming
--noteCommit message for the revision

--clear restores the full extent and takes no labels; passing both is an error.


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.

Terminal window
qualia dataset subtasks <EPISODE_UUID> --at grasp --at place
qualia dataset subtasks <EPISODE_UUID> --at grasp --starts-at
OptionDescription
--atMarker label whose presses bound a subtask (required, repeats)
--starts-atEach marker OPENS the span it names (default: it closes it)
--noteCommit message for the revision

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.

Terminal window
git clone https://api.qualiastudios.dev/git/<org>/<name>.git
cd <name>
qualia git install
OptionDescription
--pathPath 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.


List jobs across all projects, or filter by project.

Terminal window
qualia job list
qualia job list --project-id <PROJECT_ID>
qualia job list --json

Launch a new fine-tuning job.

Terminal window
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"}'
OptionTypeRequiredDescription
--project-idstrYesProject ID
--vla-typestrYesModel type: smolvla, pi05, act, or sarm
--dataset-version-idUUIDYesImmutable DatasetVersion
--hoursfloatYesTraining duration (max 168)
--camera-mappingsJSONYesCamera slot to image key mapping
--model-idstrNoHugging Face model ID (required for smolvla and pi05)
--model-revisionSHANoExact commit SHA; required when --model-id is not built-in
--instance-typestrNoGPU instance type (default: auto-selected)
--regionstrNoCloud region
--batch-sizeintNoTraining batch size (default: 32)
--namestrNoJob name
--hyper-specJSONNoCustom hyperparameters as JSON

Get detailed job status, including phase progression.

Terminal window
qualia job get <JOB_ID>
qualia job get <JOB_ID> --json

Cancel a running job.

Terminal window
qualia job cancel <JOB_ID>

Show default hyperparameters for a VLA model type.

Terminal window
qualia job hyperparams smolvla
qualia job hyperparams smolvla --model-id lerobot/smolvla_base
Argument / OptionDescription
VLA_TYPEVLA model type (required)
--model-idModel ID for type-specific defaults