THE FIELD GUIDE
From terminal
to game.
One login. Six asset types. Local files that work with your existing engine and coding agent.
1. Install and sign in
Use Python 3.10 or later. The same package provides both assetyard and uncen.
python -m pip install https://uncen.ai/static/downloads/uncen_cli-0.11.1-py3-none-any.whl
assetyard login
assetyard whoami
assetyard balance
assetyard capabilitiesSign in with Google in the browser. Check that the device code matches your terminal. Never give an agent your Google password.
Personal access uses available account credits. There is no separate connection allowance. Login does not purchase credits or start a subscription.
The CLI stores desktop credentials in the operating system credential store. Use login --no-browser on a remote host.
On Windows, stop all Asset Yard commands before an upgrade. Do not use --force-reinstall while another command runs.
For headless Linux credentials and restricted connections, use the complete CLI reference.
Fewer arguments. Clear defaults.
TTS picks the service default when you omit the provider. Run capabilities to see which providers your account can select, then set a default only from that list.
assetyard configure default-tts-provider PROVIDER_FROM_CAPABILITIES
assetyard configure default-profile game
assetyard configure default-collection dangerous
assetyard configure --showAn explicit argument wins. Check whoami after changing profiles: the profile selects the account that pays.
The collection default sets the generation scope label, not a library folder or a login permission. Use --add-to "Sector Prime" for library organization.
Voice search also accepts configured category, gender, age, and language filters.
Optional: remember recent choices
Automatic remembering is off by default. Enable it for profiles, generation scope labels, and voice search filters.
assetyard configure --dynamic-defaults
assetyard --profile game voices list --category hero --gender male
assetyard voices list
assetyard --reset
assetyard configure --no-dynamic-defaultsRemembered choices stay separate for each working directory and profile. Providers require explicit configuration.
The CLI reports defaults on stderr and keeps JSON on stdout. It never remembers prompts, text, references, output paths, or spending limits.
--reset clears remembered choices for this API origin. Configured preferences and login credentials remain.
Use global --no-defaults for a command that ignores both preference layers. Use configure --unset default-category to remove a configured filter.
Manifest builds do not inherit local provider, collection, or filter preferences. Put those choices in the manifest for repeatable builds.
Music results and controls
The CLI uses UTF-8 on Windows, including pipes. Music status returns metadata.lyrics and metadata.song_title when available. The lyrics are generation input, not an audio transcription.
Use --prompt for the subject and --preset for the style. Use --enhance to expand instrumental directions. Automatic lyrics and enhancement require the music LLM. A failed call fails the job explicitly.
--language controls automatic lyrics only. It does not translate supplied text or affect instrumentals. Vietnamese, Polish, and Dutch are available.
All music kinds accept 15 to 240 seconds. Songs default to 180 seconds; other kinds default to 45 seconds. Music currently costs one credit per request. Unknown measurements are omitted.
2. Generate an asset
assetyard generate image --prompt "A painted starport at dusk" --out assets/starport.png
assetyard generate sfx --prompt "One short metal hatch impact, no music" --duration 2 --out assets/hatch.wav
assetyard generate music --prompt "Quiet orbital exploration" --duration 20 --instrumental --wait
assetyard generate model --prompt "One low-poly cargo container" --geometry-profile prop --out assets/cargo.glb--out waits for completion and downloads the result. --wait waits without a download. With neither flag, the command returns the queued request.
Music and speech formats depend on the provider. Inspect the returned filename and MIME type before selecting an output extension.
Use --max-credits N to cap the request. Run capabilities to inspect supported settings and current availability.
Generate a song with exact lyrics
assetyard generate music --prompt "Irish folk ballad, male baritone, acoustic guitar" --duration 75 --lyrics-file song.txt --waitThe CLI sends the prompt as style tags for the music model. It sends the file as the separate lyrics input. The CLI preserves UTF-8 newlines and section tags such as [verse], [chorus], and [bridge]. Use --lyrics for short inline lyrics.
Let Asset Yard write a timed song
assetyard generate music --music-kind song --preset catchy_female_pop --language es --duration 180 --waitA song defaults to vocals. Asset Yard asks the lyricist to fit the selected duration. Run assetyard capabilities to list curated presets and languages.
The music model sings supplied lyrics once. Sung English commonly uses 1.5 to 2.5 words each second. Start near duration_seconds × 1.6 words.
Status includes measured duration and decoded trailing silence. Silence measurement does not detect vocals or an instrumental vamp.
3. Keep a character consistent
assetyard generate image --prompt "Cali gives a mission briefing on the carrier bridge. Keep her face, hair, uniform, and insignia consistent." --reference-image references/cali.png --out assets/cali-briefing.pngRepeat --reference-image for up to five PNG, JPEG, or WebP references. Each file can be up to 20 MiB. A provider can set a lower limit.
The CLI calculates SHA-256 before upload. The server reuses a matching reference within the same account and collection.
assetyard generate image --prompt "Cali examines a navigation chart" --reference-image-media-id OWNED_IMAGE_ID --out assets/cali-chart.pngThe server checks ownership, file type, state, and collection access. A media ID never grants access to another account.
For image-to-video, use an owned image as the starting frame:
assetyard generate video --prompt "A slow camera move through the hangar" --image-media-id OWNED_IMAGE_ID --duration 5 --out assets/hangar.mp4A reference improves consistency. It does not guarantee exact identity or an unchanged design.
Remove an image background
Background removal is a standalone image request. It keeps the source RGB pixels and adds an alpha channel to a PNG.
Run assetyard capabilities. Under kinds.image.reference_providers, find the background removal entry. Replace REMOVAL_PROVIDER_ID below with its id.
assetyard generate image --provider REMOVAL_PROVIDER_ID --reference-image assets/pose.png --prompt "Remove the background" --max-credits 1 --out assets/pose-cutout.pngSupply exactly one reference image. You can use --reference-image-media-id OWNED_IMAGE_ID instead of a local file.
The removal request currently costs one credit. Check the current price in capabilities before submission. The credit cap rejects a higher price.
There is no combined background removal flag on a generation request. Generate or edit the image first, then submit the removal request.
The two steps have separate request IDs and separate charges. Keep both results and their provenance.
Use the master reference with the image editor to create a new pose. Background removal cannot correct a changed face or costume.
Inspect fine edges, hair, and equipment before selecting the cutout. A removal mask can erase small details.
Live jobs without status polling
CLI 0.10.0 and later use authenticated Server-Sent Events (SSE) for --wait, --out, and jobs wait.
The same event endpoint serves all asset kinds. Clients do not need Redis or a WebSocket library.
Omit both wait flags to submit a job and return immediately. Save its request ID and continue other work.
assetyard generate image --prompt "A ruined chapel at dusk" --json
assetyard jobs wait REQUEST_UUID --timeout 1800
assetyard jobs download REQUEST_UUID --out assets/chapel.pngEach new variation needs a new request ID. Reuse an ID only to resume that exact request, not to create another image.
Account capacity limits still apply. Closing a terminal does not cancel the server job.
After a connection failure, the CLI reconnects with bounded retries and receives the current state. It does not resubmit generation.
A stream failure is explicit. The CLI does not fall back to repeated status requests. jobs status remains a one-time check.
CLI 0.11.0 sends a speech language with generate tts --language CODE, for example es, fr, pt-BR or zh-Hans. The server selects the speech engine of that language. English keeps its current engine. voices list --language es lists the voices whose sample is Spanish, and capabilities lists the available languages under kinds.tts.languages. Any catalog voice can speak another listed language. Its accent can move toward the language of its sample. From CLI 0.11.1, a request with --language does not send the default provider.
CLI 0.10.3 accepts up to four reference images for a 3D model, one for each view of the same object. Name each view with --reference-view (front, left, back, or right), in the order of the images. The front view is required. Use eye-level views, 90 degrees apart, on a plain background.
CLI 0.10.2 keeps a long wait alive when its 15-minute access token expires. It refreshes the token and reconnects. Earlier versions stopped a wait after about 30 minutes with invalid_token, while the server request stayed queued.
CLI 0.10.1 treats a missing request (HTTP 404) as a final answer. jobs wait and downloads stop at once, and the error names the request ID and the server. The CLI retries only server errors, network failures, and rate limits.
Do not run jobs status in a loop on an unknown request ID. Many 404 answers in a short time can block your network address for one hour.
Integrate a custom client
Use GET /api/uncen/v1/cli/assets/REQUEST_UUID/events?timeout=1800 with the CLI bearer credential in the Authorization header.
Handle asset.status, heartbeat, wait.timeout, and stream.error. A reconnect returns current state, not an audit history.
Never place credentials in a URL, public game, or browser bundle. Keep them in your trusted backend or CLI credential store.
This endpoint is SSE, not a webhook registration API. Do not build a status polling loop around it.
4. Cast a voice by name
Open the voice library to listen, search, and save a shortlist. Pre-launch preview access requires an approved account.
assetyard voices list --search deep --gender male
assetyard voices list --category hfy_narration
assetyard voices list --limit 100 --offset 100
assetyard voices show VOICE_KEY
assetyard generate tts --voice VOICE_KEY --text "All pilots, prepare for launch." --out assets/launch.wavEach voice has a stable key and a readable name. Store the key with your character. Do not store a private sample URL.
One pipeline speaks the new line, and a voice-design model can create the reference voice. You do not need a different command for each source.
Ask for a performance
Use --expressiveness for a line that carries strain. The scale runs from 0.0 to 1.0. 0.0 is flat and even. The default is ordinary delivery. 1.0 is a battle cry, a warning, or a shout.
assetyard generate tts --voice VOICE_KEY --expressiveness 0.05 --text "Log entry, day ninety." --out assets/log.flac
assetyard generate tts --voice VOICE_KEY --expressiveness 0.95 --text "Get back! Now!" --out assets/warn.flacThe scale is the service’s own, not a speech model’s. We map it onto whatever control the model behind your voice exposes, so a stored request keeps its meaning after that model changes. A voice whose model has no such control ignores the argument rather than guessing.
Hear both ends of the scale on the showcase.
Requested age, presentation, accent, and delivery describe the casting target. They are not proof of the exact sound.
human_reviewed and release_basis distinguish listening review from technical checks.
Voice references stay private. Do not redistribute the reference bank. Ordinary generated dialogue belongs in your game, subject to the applicable terms.
5. Build a 3D game asset
The 3D modeler is the default model pipeline. A normal model request returns a textured static GLB.
assetyard generate model --prompt "One symmetric courier spacecraft with a pointed nose and two wings" --geometry-profile prop --orientation-profile rigid_vehicle --out assets/courier.glbThe rigid vehicle profile requests a front reference and applies geometric alignment. It requires a generated reference.
Aligned output uses +Y up, +Z forward, and a centered pivot. A game that moves along -Z needs one shared 180-degree Y import rotation.
Rig and animate a character
Use the character profile and describe a complete person in a neutral A-pose. An animation pack automatically enables rigging.
assetyard generate model \
--prompt "A practical salvage pilot in a neutral A-pose, full body, hands visible" \
--geometry-profile character \
--target-faces 40000 \
--texture-resolution 1024 \
--animation-pack humanoid_core \
--out assets/salvage-pilot.glbThe final GLB contains the textured mesh, skin weights, named humanoid bones, and named animation tracks. The CLI waits for every stage before it downloads that file.
| Pack | Designed for |
|---|---|
humanoid_core | Idle, walk, run, and left and right turns. |
humanoid_standard | Core movement plus traversal and common gestures. |
humanoid_combat | Combat movement, attacks, and reactions. |
Use --rig without an animation pack when you need a skeleton without motion. Repeat --animation-clip to select specific clips from one pack.
Asset Yard keeps the static mesh and rigged model as separate private assets. This supports inspection and later animation changes.
Start from an existing image
assetyard generate model --reference-image character.png --geometry-profile character --animation-pack humanoid_core --out assets/character.glb
assetyard generate model --reference-image-media-id OWNED_IMAGE_ID --geometry-profile character --rig --out assets/rigged.glbThe server checks the image owner and collection. A supplied reference skips internal image generation.
Check orientation.status for rigid assets. Inspect every mesh, texture, rig, animation, scale, and polygon count before release.
6. Build a 3D place from a picture
The environment backend turns one picture into one textured 3D place. A game camera can stand where the picture was taken, and a character can walk on its floor.
assetyard generate environment --reference-image assets/hall.png --out assets/hall.glb
assetyard generate environment --prompt "A long stone dungeon hall with a flat flagstone floor" --out assets/hall.glbGive one reference image, or only a prompt. With only a prompt, the server first paints a landscape reference picture and then rebuilds it.
assetyard generate model --provider environment sends the same request. Add --seed N to set the seed. The shared flags work as for every generate command: --wait, --out, --max-credits, --request-id, --collection, --json.
The rebuild costs 0 credits during the free beta. A request with --reference-image costs 0 credits. A request with only a prompt pays the image price for the reference picture that the server paints. The rebuild takes seconds of GPU time. The request rejects the settings that shape an object, such as a geometry profile, a rig, or an animation pack.
What the GLB holds
| Part | Contents |
|---|---|
backdrop | A mesh at metric scale, textured with the picture. |
source_camera | A camera node at the position, rotation, and field of view of the picture. |
floor_collider | A hidden mesh over the walkable cells. Only a picture with a visible floor has one. |
scenes[0].extras.asset_yard_environment | The camera, the source view, the floor plane, and the walkable grid. |
+Y is up, -Z is forward, and one unit is one metre. When the backend finds a floor, the floor lies on y = 0.
Write a picture that rebuilds well
- A wide view from slightly above. A raised viewpoint keeps a lot of floor in frame.
- A broad flat floor in the lower half. The walkable grid can only cover floor that the picture shows.
- Even light. The picture is the texture, so its light stays the light of the room.
- No people and no text. A person becomes part of the backdrop, and a game cannot move them.
Know the limits
- One picture shows one side of a place. The result looks right near the viewpoint of the picture. It has nothing behind objects.
- The camera stays near the viewpoint. A game camera can pan, zoom and turn a little. Characters can walk anywhere on the walkable floor.
- The floor must be visible. A surface tilted more than 45 degrees from level is not a floor.
- Metric scale is an estimate. Check a size in metres against something you know, such as a door.
- No floor means no collider. A picture without a visible floor still returns a backdrop, but no floor collider and no walkable grid.
See three rooms built this way, and read a real GLB record →
7. Give your coding agent a clear brief
Read https://assetyard.dev/docs/ before using Asset Yard.
Use the published CLI and run whoami, balance, and capabilities.
Ask me to approve Google login. Never request my password.
Use owned reference images to preserve character identity.
Use the character profile and an animation pack for playable characters.
Select stable voice keys from the voice catalog.
Download final files into the game project.
Keep request IDs, lock files, checksums, and license notices.
Resume existing jobs instead of submitting duplicates.
Never put tokens or private URLs into game source.Global flags such as --profile go before the command. A CLI collection is not a Multiplayers game project.
Multiplayers agents can request images, models, animation, music, sound effects, dialogue, source voices, and video through project-bound tools.
The public game must load downloaded assets from its own build or delivery service. Players do not need an Asset Yard token.
Jobs, errors, and recovery
A timeout does not mean generation stopped. Keep the request ID. Inspect the job before you submit another request.
assetyard jobs list --kind model --limit 50
assetyard jobs status REQUEST_UUID
assetyard jobs wait REQUEST_UUID --timeout 1800
assetyard jobs download REQUEST_UUID --out assets/recovered.glb--request-id UUID can create or resume one exact request. A changed payload returns a conflict.
The CLI retries capacity limits and incomplete dispatches with the same saved request.
Errors report retryable. Keep waiting while a failed job remains retryable. Inspect a terminal failure before submitting another request.
A new grant can access earlier jobs from the same account and site.
Default output is one final JSON document. Explicit --json uses JSON Lines and reports request_saved first.
Human progress uses stderr.
The standard account limit is 1000 active requests. An account entitlement can set a different limit.
All agents and profiles for one account share that limit.
Stopping the local command does not cancel its server job. The job keeps its slot until it finishes or fails.
Bash scripts that use tee must enable set -o pipefail.