WorkRally uploads and asset management

Understand the upload, asset and material layers, including project ingestion, character/prop/scene organization and canvas placement.

Two asset systems

  • Asset library: the project-level file pool; every usable file must enter here.
  • Material library: the tree view for characters, props, scenes and folders.

In short, assets answer “can the system use this file?” and materials answer “how do people organize and find it?”

The standard three-step upload flow

upload-flow.shbash
# Step 1: upload to the media CDN
workrally upload ./character.png -o json

# Step 2: create the project asset (required)
workrally asset create --url <cdn_url> --project-id <project_id> -o json

# Step 3: attach it to the material tree (optional)
workrally material add --json-list '[{
  "material_id": "<asset_id>",
  "material_name": "character_state",
  "material_type": 2,
  "parent_id": "<parent_id>",
  "material_detail": <asset_details>
}]' --project-ids <project_id>
  • Step 1 returns a CDN URL.
  • Step 2 returns asset_id and complete asset_details.
  • Step 3 is needed when the file belongs under a character, prop, scene or folder.

material add needs both material_id = asset_id and the complete material_detail = asset_details. Omitting either can make the material invisible.

How many steps do you need?

  • Upload a file or image: upload -> asset create.
  • Attach it to a character, prop or scene: run all three steps.
  • Attach an existing asset to the material tree: run only material add.
  • Place an asset on a canvas: ingest it first, then use canvas build-draft.

Upload an asset to a canvas

canvas-upload.shbash
workrally upload ./file.png -o json
workrally asset create --url <cdn_url> --project-id <project_id> -o json
workrally canvas build-draft <canvas_id> --nodes '[
  {
    "id":"node1","type":"image",
    "position":{"x":0,"y":0},
    "data":{"asset":{"id":"<asset_id>"}},
    "style":{"width":512,"height":512}
  }
]'

project_id identifies asset ownership and canvas_id identifies the placement surface. Both IDs are required for this workflow.