HELIX Docs
CLI & AI toolsCommand reference

helix item

Package-backed Items, inventory-safe version updates and acquisition routes

CLI version 0.1.27-helix3.551. Run helix item --help for the text your installed build prints.

helix item

Package-backed Items, inventory-safe version updates and acquisition routes

helix item <command>

helix item thumbnail

Refresh or replace a published item's thumbnail (by item UUID; for a world's cover use helix thumbnail set)

helix item thumbnail <command>

helix item thumbnail refresh

Re-render the canonical thumbnail from the item's active Package Version with the standard server renderer (owner or admin)

helix item thumbnail refresh [options] <item-id>
ArgumentRequiredDescription
item-idyespublished item UUID
OptionDescription
--forcere-render even when the stored thumbnail already matches the current renderer and source
--dry-runreport what would change without writing anything
--jsonprint the authoritative server receipt

helix item thumbnail set

Removed: catalog thumbnails are rendered by HELIX and cannot be replaced (add images to the item page instead)

helix item thumbnail set [options] <item-id> <image>
ArgumentRequiredDescription
item-idyespublished item UUID
imageyespng / jpg / webp file
OptionDescription
--jsonprint the authoritative server receipt

helix item publish-version

Ship a corrected mesh onto an already-published GLB add-on/prop/avatar, IN PLACE — new Package Version, same item id/owner/listings; every existing owner gets it at their next spawn

helix item publish-version [options] <item-id> <file>
ArgumentRequiredDescription
item-idyesexisting, already-published universal item UUID
fileyescorrected mesh (binary glTF, .glb)
OptionDescription
--reason <text>required, lands in the audit ledger (e.g. "fixed poke-through on the left cuff") (required)
--notes <text>optional creator-facing changelog note
--expected-current-version-id <uuid>refuse if the item has moved off this Package Version since you last read it
--update-id <uuid>idempotency key — retrying with the same id never double-publishes
--jsonmachine-readable output

helix item set-version

Move an item to a sealed Package Version of its own package (the visual check is advisory and never gates the move; only a technical failure or content safety refuses it). A vehicle moves its car with the pin: the version's sealed vehicle definition is sent as properties.vehiclePackage (refused if the version has none). A version the item already had is a rollback (PUT versions/current), so moving back to an older version works too

helix item set-version [options] <item-id>
ArgumentRequiredDescription
item-idyesuniversal item UUID
OptionDescription
--package-version <version>the sealed version to move to, e.g. 1.0.12 (required)
--reason <text>required, lands in the audit ledger (required)
--expected-current-version-id <uuid>refuse if the item has moved off this Package Version since you last read it
--as-adminplatform admins only: move an item another account created (POST /api/v1/admin/universal-items/<id>/versions). Same gates as the creator move (technical failure, content safety); --reason is recorded with you as the actor
--jsonmachine-readable output

Search the published MARKETPLACE catalogue — including Presets (user-facing name for a build: a free, never-owned preset), the dressed presets someone already assembled. A Preset is never owned itself; its parts are acquired individually from their own listings

helix item search [options] [query]
ArgumentRequiredDescription
querynofree text over title, slug and tags
OptionDescription
--kind <kind>universal item kind (avatar, wearable, vehicle, weapon, add_on, home_item, emote, prop)
--category <category>marketplace category
--sub-category <subCategory>form factor beneath the category, e.g. car / rifle / art
--tag <tag>exact tag
--host-kind <hostKind>host class, e.g. vehicle / character / weapon
--builds <mode>Presets (API identifier: builds) in the results: include | only | exclude (default include — a Preset is filed under its base's own category, so it comes back alongside bases unless you narrow)
--limit <n>rows to return (1-100, default 20)
--jsonmachine-readable output

helix item build

What is in a published Preset (API identifier: build): its base, its add-on parts, what you own, and what the parts cost together. A Preset is never owned itself — only its parts are, each bought or held from its own listing

helix item build [options] <itemId>
ArgumentRequiredDescription
itemIdyesuniversal item id of the build
OptionDescription
--jsonmachine-readable output

helix item list-slots

Print the Character-Creator vocabulary a wearable declares: the cosmetic slot tags, and the genders

helix item list-slots [options]
OptionDescription
--jsonmachine-readable output

helix item visual-qa

Render an item headless in the real HELIX runtime, measure it, and (with --submit) record the advisory visual-QA notes (never a gate on publishing, listing or moving; only an unusable file or content safety blocks). --hosted asks the platform to render it on a GPU runner instead

helix item visual-qa [options] [item-id]
ArgumentRequiredDescription
item-idnouniversal item UUID (its CURRENT package version is rendered, or --package-version); omit with --hosted-worker
OptionDescription
--submitsubmit frames + measurements to the backend, which judges and records the verdict (needs helix login)
--hostedqueue a hosted render on the platform GPU runner and wait for the verdict (needs helix login; exit 0 pass, 0 warn (advisory notes only: verdict: "warn" + warnings in --json), 1 fail (notes, never a gate), 2 error)
--retrywith --hosted: REQUEUE this version after a failed, errored or exhausted hosted run (a fresh job, attempts start again; inside the backend cooldown it waits it out, up to --timeout)
--no-waitwith --hosted: queue the render and return without waiting
--timeout <minutes>with --hosted: how long to wait for the verdict (default "30")
--statusread-only: show the hosted visual-QA state and recorded result for the item (no login needed)
--hosted-workerrunner mode: claim hosted render jobs, render, submit (HELIX_VQA_BOT_EMAIL / HELIX_VQA_BOT_PASSWORD)
--max-jobs <n>with --hosted-worker: stop after n jobs
--max-minutes <n>with --hosted-worker: stop claiming new jobs after n minutes
--idle-exit-minutes <n>with --hosted-worker: keep polling an empty queue this long before exiting (default "0")
--poll-seconds <n>with --hosted-worker: queue polling interval (default "10")
--render-timeout <seconds>with --hosted-worker: hard limit per render (default "900")
--worker <name>with --hosted-worker: runner identity recorded on the job
--local-criticalso run the vision critic locally (needs ANTHROPIC_API_KEY or OPENROUTER_API_KEY)
--out <dir>bundle directory (frames, bundle.json, contact-sheet.jpg)
--storage-state <file>Playwright storageState of a signed-in QA account (Try Now and the customiser need one); default $HELIX_VQA_STORAGE_STATE
--host <id...>only fit onto these host/base item ids (add-ons, wearables)
--package-version <version>render this sealed version of the item's own package before moving its pin (vehicles, avatars, add-ons, wearables, props, Devices)
--vehicle-package <file>with --package-version on a vehicle: the version move's vehicle package JSON, served by Try Now after server-side preparation
--chrome <path>Chromium executable (default: Playwright Chromium / Chrome for Testing, headless; the macOS system Chrome is refused)
--no-world-walkskip the world walk (wearables, character add-ons, avatars: worn and walked in the test grounds, measured for holes and poke-through); also HELIX_VQA_WORLD_WALK=0
--api-url <url>platform API base URL
--web-url <url>website base URL (default: the site that serves --api-url)
--jsonprint the outcome as JSON

helix item delist

Unlist a published item you own; existing owners keep their copies and new acquisition stops.

helix item delist [options] <item-id>
ArgumentRequiredDescription
item-idyesthe Package-backed Item UUID from a publication receipt or the item URL/API
OptionDescription
--reason <text>optional note for your own record; not shown to anyone else
--jsonmachine-readable output

helix item distribution

Create and manage primary Claim/Buy routes for one published item definition

helix item distribution <command>

helix item distribution create

Create one creator-authorized primary acquisition route; no second publish fee

helix item distribution create [options] <item-id>
ArgumentRequiredDescription
item-idyespublished universal item definition id
OptionDescription
--channel <marketplace|world>route channel (required)
--price-lix <n>0 is Claim; positive is Buy and must meet the server-owned floor (required)
--world <slug>required for a world route
--key <key>stable world route key
--max-per-player <n|unlimited>per-player cap
--max-claims <n|unlimited>distribution-wide cap
--starts-at <iso>activation time
--ends-at <iso>end time
--intent-id <uuid>idempotency key; derived from the request when omitted, so an identical re-run returns the same route instead of a duplicate
--dry-runvalidate and print the request; no network
--allow-stale-visual-qa <reason>no-op, kept for compatibility: a vehicle's visual-QA record never blocks listing any more (it only prints advisory notes)
--jsonmachine-readable output

helix item distribution list

List every active or disabled primary route drawing from an item

helix item distribution list [options] <item-id>
ArgumentRequiredDescription
item-idyes
OptionDescription
--jsonmachine-readable output

helix item distribution update

Reprice or change schedule/caps. Item, channel, world and key remain fixed

helix item distribution update [options] <distribution-id>
ArgumentRequiredDescription
distribution-idyes
OptionDescription
--price-lix <n>
--max-per-player <n|unlimited>
--max-claims <n|unlimited>
--starts-at <iso|none>replace or clear the activation time
--ends-at <iso|none>replace or clear the end time
--dry-runvalidate and print the patch; no network
--jsonmachine-readable output

helix item distribution disable

Disable an acquisition route without deleting its history or republishing the item

helix item distribution disable [options] <distribution-id>
ArgumentRequiredDescription
distribution-idyes
OptionDescription
--dry-runprint the request; no network
--jsonmachine-readable output

helix item lods

Compile the item-lod/1 Runtime Artifact for a published prop, Device or vehicle: up to two cheaper models (a tier that does not shrink the model is left out) with their own small textures, plus an octahedral impostor. Local preview; the backend worker is the source of truth

helix item lods [options] [package]
ArgumentRequiredDescription
packageno<packageId>[@version] of the Package Version to compile
OptionDescription
--item <idOrSlug>compile the Package an Item currently points at (instead of <package>)
--glb <file>compile a local static GLB instead of a Package (no Package identity is recorded)
--profile <prop|vehicle>LOD1 triangle budget: prop keeps at most 25 percent, vehicle max(5000, 10 percent) (default: vehicle for vehicle Packages, else prop)
--variant <id>model variant id or role suffix, when a Package carries several (default: the balanced web model)
--shading <albedo|lit/1|gbuffer/1>impostor rendition (default lit/1; the backend compiles item-lod/5 with gbuffer/1)
--card-truth <apply|observe>with --shading gbuffer/1: apply leaves the card out of an item it cannot represent truthfully (glass, a mirror, thin emissive parts) when a mesh is guaranteed; observe only reports the verdict
--out <dir>output directory (default ./item-lods/<packageId>@<version>)
--api-url <url>read the Package from this API instead of the signed-in or default one
--jsonmachine-readable summary on stdout

On this page