Generation
Generate assets, images, audio, materials and environments.
generate_asset
RETURNS A COMMAND, NOT DATA. This tool hands you a helix … command string to RUN yourself — it executes nothing and returns no results. The answer is in that command’s output. FOR AN AVATAR (a playable character body) DO NOT USE THIS: create_avatar is the one path (it runs, blocks, checks and judges for you; this tool only hands back a command that needs the CLI on PATH and leaves the draft unjudged). LAST PLATFORM RUNG: generate a new prop or character only after list_materials and search_assets found no suitable resource. For a character, referenceSheetPath may supply an approved local FRONT/BACK/LEFT/RIGHT PNG/JPEG/WebP; the backend then skips image generation but preserves validation, mesh, texture, rig, LOD, thumbnail, billing, and Vault publication. This spends the signed-in creator’s LIX, and the up-front estimate is not a cap — helix jobs shows what each job actually cost. THIS COMMAND BLOCKS (default up to 20 minutes) waiting for the job — mesh generation on a complex prop can genuinely take a while. A "timed out" error is this wait giving up CLIENT-SIDE, not the job failing server-side: the printed helix assets resume <job-id> command checks on or continues that SAME job (never start a new one after a timeout). Pass timeoutMs to wait longer up front, or pollIntervalMs to poll less often.
| Argument | Type | Required | Description |
|---|---|---|---|
kind | "prop" | "character" | yes | |
prompt | string | yes | (min length 1, max length 3000) |
title | string | no | (min length 1, max length 100) |
additionalPrompt | string | no | (max length 800) |
targetPolycount | integer | no | (min 1000) |
visibility | "public" | "unlisted" | "private" | no | |
referenceSheetPath | string | no | Character-only local path to a trusted FRONT/BACK/LEFT/RIGHT PNG, JPEG, or WebP sheet. Its exact bytes are checksum-bound and reused; no image generation is invoked. (min length 1) |
timeoutMs | integer | no | How long the CLI waits for the job to finish before giving up (client-side only — the job keeps running server-side either way). Default 1200000ms/20min. Raise this if you expect a slow mesh stage instead of re-running the command after a timeout. |
pollIntervalMs | integer | no | How often the CLI checks job status while waiting. Default 2000ms. |
generate_audio
Generate a sound effect, music track, or spoken line through the Asset Generation API, running the job to completion in ONE call. This executes the packaged HELIX CLI, which owns authentication, mode-specific validation, the long-running job, LIX accounting, provider access, and default-on Vault publication. Returns the CLI JSON receipt with the durable job/Vault ids and cost evidence. Sound effect is the default mode; music allows up to 4,100 prompt characters and 3-600 seconds; text_to_speech uses text + voiceId instead of prompt. NEVER use it for a vehicle: vehicle sound (engine, exhaust, horn, doors, tyres, any one-shot) is sourced from real recordings via import_vehicle_audio, never generated, and the vehicle gates refuse generated audio. PREFER start_asset_generation for anything slow: it also covers all three audio modes and hands back a job id, so a timeout or dropped connection cannot lose the job. AUDIO IS METERED — the charge settles on actual usage and can land above the estimate; there is no automatic refund. Check what it cost with helix jobs.
| Argument | Type | Required | Description |
|---|---|---|---|
audioMode | "sound_effect" | "music" | "text_to_speech" | no | sound_effect (default), music, or text_to_speech |
prompt | string | no | Required for sound_effect/music; omit for text_to_speech. The CLI/backend enforce the mode-specific combined prompt limit before charging. (min length 1, max length 4100) |
additionalPrompt | string | no | (max length 800) |
title | string | no | (min length 1, max length 100) |
model | "eleven_text_to_sound_v2" | "music_v2" | "music_v1" | "eleven_multilingual_v2" | "eleven_flash_v2_5" | "eleven_v3" | no | Allowlisted model for the selected mode; invalid mode/model pairs fail before generation. |
outputFormat | "mp3_44100_128" | "mp3_44100_192" | "mp3_22050_32" | no | Portable MP3 rendition; defaults to mp3_44100_128 |
loop | boolean | no | Sound-effect only: request a seamless loop |
durationSeconds | number | no | Sound effect: 0.5-30 seconds; music: 3-600 seconds (min 0.5, max 600) |
promptInfluence | number | no | Sound-effect only: prompt adherence from 0 to 1 (min 0, max 1) |
forceInstrumental | boolean | no | Music only: omit vocals |
text | string | no | Text-to-speech only: spoken text; the selected model may impose a lower limit (min length 1, max length 40000) |
voiceId | string | no | Text-to-speech only: required HELIX voice id returned by list_voices (min length 1, max length 64) |
languageCode | string | no | Text-to-speech only: lowercase ISO 639-1 code, e.g. en |
seed | integer | no | (min 0, max 4294967295) |
voiceSettings | { stability?: number, similarityBoost?: number, style?: number, speed?: number, speakerBoost?: boolean } | no | Text-to-speech only: bounded voice controls |
pronunciationDictionaryIds | string[] | no | Text-to-speech only: up to three unique provider dictionary ids |
projectId | string | no | |
sessionId | string | no |
generate_environment_splat
RETURNS A COMMAND, NOT DATA. This tool hands you a helix … command string to RUN yourself — it executes nothing and returns no results. The answer is in that command’s output. EXPERIMENTAL: generate a World Labs Gaussian splat in SPZ format through the Asset Generation API. Declare whether it is a placeable object or full environment. Successful default-on runs publish a typed Gaussian-splat resource to Vault; consumers need an SPZ-capable renderer.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | string | yes | (min length 1, max length 3000) |
additionalPrompt | string | no | (max length 800) |
title | string | no | (min length 1, max length 100) |
projectId | string | no | |
sessionId | string | no | |
scope | "object" | "environment" | no |
generate_image
RETURNS A COMMAND, NOT DATA. This tool hands you a helix … command string to RUN yourself — it executes nothing and returns no results. The answer is in that command’s output. Generate a standalone image through the Asset Generation API (creator/client-token auth). NOT for an avatar's turnaround sheet: the image is auto-published PUBLIC to the creator's Vault by default (a privacy surprise on a private request), and Asset Generation cannot condition a character on it unless it is a clean four-view sheet — for an avatar call create_avatar, which draws the sheet inside the job. This is NOT material generation. A successful default-on run includes a Vault asset id; explicit creator opt-out is returned as vaultAutoPublish="disabled". Spends the signed-in creator’s LIX — the up-front estimate is not a cap; helix jobs shows what it actually cost.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | string | yes | (min length 1, max length 3000) |
title | string | no | (min length 1, max length 100) |
additionalPrompt | string | no | (max length 800) |
projectId | string | no | |
sessionId | string | no |
generate_material
RETURNS A COMMAND, NOT DATA. This tool hands you a helix … command string to RUN yourself — it executes nothing and returns no results. The answer is in that command’s output. Generate a validated portable PBR material bundle through the Asset Generation API and auto-publish it to Vault by default. Source PNG maps are retained; a KTX2 rendition is reported only when a real encoder produced it. 1K is the web/mobile default; 2K is explicit.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt | string | yes | (min length 1, max length 3000) |
title | string | no | (min length 1, max length 100) |
additionalPrompt | string | no | (max length 800) |
resolution | 1024 | 2048 | no | |
projectId | string | no | |
sessionId | string | no |
list_materials
FIRST ASSET RUNG: search the versioned HELIX platform material pack. Returns the offered PBR texture materials (photographed or scanned; procedural glass/water are not offered and are named under unlisted) and the immutable CDN base as JSON. Use before Vault search, generation, or external/CC0 sources. Apply one with use_material.
| Argument | Type | Required | Description |
|---|---|---|---|
query | string | no | Free-text material search over id, name, category, and tags |
category | string | no | Exact category filter, e.g. brick, wood, metal, glass |
limit | integer | no | Palette budget for this result (default 12; the global catalog remains open-ended) (min 1, max 50) |
resolution | string | no | texture resolution, e.g. 1k or 2k; omit for the material's default. Keeps only materials carrying it. The CLI errors with the valid values rather than substituting a different resolution. |
list_systems
List the runtime systems published on HELIX Instant (e.g. humanoid-character). A system is a versioned framework that hosts abilities; a world pins one. Returns slug@version + title.
No arguments.
poll_asset_generation
RETURNS A COMMAND, NOT DATA. This tool hands you a helix … command string to RUN yourself — it executes nothing and returns no results. The answer is in that command’s output. Poll ONE known job without starting or advancing a duplicate. Successful asset-pipeline jobs report vaultAssetId plus vaultAutoPublish; Asset Generation prop/character jobs report the universal item id and Vault receipt after publish. A JOB THAT IS NOT DONE IS NOT NECESSARILY DEAD: a job can be PAUSED AT A GATE — waiting on the creator, or holding a concept the server itself rejected — and is still live and advanceable. When that is the case the status output carries the advance actions THE SERVER OFFERS for that job; read them from the response and use those. Never assume a fixed menu of recovery verbs and never infer one from this description — the server is the authority on what can advance a job, and it changes. DO NOT HAVE A JOB ID, OR WANT TO KNOW WHAT YOU SPENT? Run helix jobs — it lists your generation jobs with each one’s state and actual LIX cost, and prints the exact command that advances each parked job. helix jobs --state unfinished or --state awaiting_approval narrows it to what is stuck. That is the answer to "what did I spend" and "what is still waiting on me"; this tool is for a job you can already name.
| Argument | Type | Required | Description |
|---|---|---|---|
jobId | string | yes | Job id returned by start_asset_generation |
pipeline | "dreamer" | "asset" | yes | dreamer for prop/character; asset for all standalone kinds |
start_asset_generation
RETURNS A COMMAND, NOT DATA. This tool hands you a helix … command string to RUN yourself — it executes nothing and returns no results. The answer is in that command’s output. FOR AN AVATAR USE create_avatar INSTEAD (it blocks until the job is done, then checks and judges the result; a job started here and left is how an avatar run ended with LIX spent and nothing published). THE DURABLE ASYNC ROUTE — prefer it for every other generation: it returns a job id immediately, so a timeout or a dropped connection never loses the job (poll it with poll_asset_generation instead of starting a duplicate). Covers all five generation surfaces. Prop/character route through the Asset Generation job lane (legacy pipeline: 'dreamer'); image/material/audio/Gaussian splat use the standalone asset lane; animation delegates to the CLI’s explicit no-charge unavailable boundary. AUDIO: audioMode selects sound_effect (default), music, or text_to_speech — speech takes text + voiceId + languageCode from list_voices instead of a prompt. NEVER for vehicle sound (engine, exhaust, horn, doors, tyres, any one-shot): that is sourced from real recordings via import_vehicle_audio, not generated. COST IS NOT CAPPED BY THE ESTIMATE. The up-front quote is an estimate, and metered generations (audio in particular) settle on ACTUAL usage — the charge can land ABOVE or below it, and there is no automatic refund of a difference. A real music job quoted ~1.2 LIX settled at 1.4. To bound the spend, pass maxLix: the CLI refuses to start when the ESTIMATE exceeds it — that is a pre-flight guard on the quote, still not a guarantee about the final charge. Check what anything actually cost with helix jobs.
| Argument | Type | Required | Description |
|---|---|---|---|
kind | "prop" | "character" | "image" | "material" | "audio" | "gaussian_splat" | "animation" | yes | |
prompt | string | no | The generation prompt. Required for every kind EXCEPT audio in text_to_speech mode, which uses text instead. (min length 1, max length 3000) |
referenceSheetPath | string | no | kind "character" only: absolute path to a trusted FRONT/BACK/LEFT/RIGHT sheet (2x2, 1x4 or 4x1, one figure per view, arms straight and clear of the body). The CLI uploads it (helix assets start-reference); the backend skips image generation, runs its layout, orientation and pose gates before any spend, and builds the character from exactly that sheet. For avatars prefer create_avatar. (min length 1) |
title | string | no | (min length 1, max length 100) |
additionalPrompt | string | no | (max length 800) |
targetPolycount | integer | no | (min 1000) |
projectId | string | no | |
sessionId | string | no | |
loop | boolean | no | audio, sound_effect only: request a seamless loop |
durationSeconds | number | no | audio duration — sound_effect: 0.5-30s; music: 3-600s (min 0.5, max 600) |
resolution | 1024 | 2048 | no | |
repeatPerMeter | number | no | material only: tile repeats per metre |
splatScope | "object" | "environment" | no | |
maxLix | number | no | Refuse to start if the up-front ESTIMATE exceeds this many LIX. A guard on the quote, not a cap on the final metered charge. |
audioMode | "sound_effect" | "music" | "text_to_speech" | no | audio only: sound_effect (default), music, or text_to_speech |
model | "eleven_text_to_sound_v2" | "music_v2" | "music_v1" | "eleven_multilingual_v2" | "eleven_flash_v2_5" | "eleven_v3" | no | audio only: allowlisted model for the selected mode |
outputFormat | "mp3_44100_128" | "mp3_44100_192" | "mp3_22050_32" | no | audio only: portable MP3 rendition; defaults to mp3_44100_128 |
promptInfluence | number | no | audio, sound_effect only: prompt adherence from 0 to 1 (min 0, max 1) |
forceInstrumental | boolean | no | audio, music only: omit vocals |
text | string | no | audio, text_to_speech only: the spoken text (used INSTEAD of prompt) (min length 1, max length 40000) |
voiceId | string | no | audio, text_to_speech only: a voice id returned by list_voices — never invent one (min length 1, max length 64) |
languageCode | string | no | audio, text_to_speech only: one of THAT voice's supported language codes |
seed | integer | no | (min 0, max 4294967295) |
stability | number | no | audio, text_to_speech only (min 0, max 1) |
similarityBoost | number | no | audio, text_to_speech only (min 0, max 1) |
style | number | no | audio, text_to_speech only (min 0, max 1) |
speed | number | no | audio, text_to_speech only (min 0.7, max 1.2) |
speakerBoost | boolean | no | audio, text_to_speech only |
pronunciationDictionaryIds | string[] | no | audio, text_to_speech only: up to three unique provider dictionary ids |
use_material
Resolve one HELIX platform material id to its immutable CDN map URLs, its assetBaseUrl and its authored rendering defaults, at the texture resolution you pick. APPLY IT with the visual system, never by hand: pin "visual": "^0.1" in helix.json (then install_world_packages with update: true), const materials = await loadMaterialLibrary(assetBaseUrl, { renderer }) from @helix/visual, materials.apply(mesh, id) — exact per-axis tiling for boxes, planes, spheres, cylinders and capsules; pass { size: [w, h] } (metres the 0..1 UV span covers) for imported meshes — then await materials.ready(). Details: read_doc({ name: "world-look" }). The output states which resolution was resolved and which ones the material offers, under resolution.
| Argument | Type | Required | Description |
|---|---|---|---|
id | string | yes | Material id returned by list_materials |
resolution | string | no | texture resolution, e.g. 1k or 2k; omit for the material's default. A resolution the material does not carry is an error naming the ones it does — it is never silently swapped for another. |