[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2401":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":13,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":28,"discoverSource":29},2401,"content-agents","NVIDIA-Omniverse\u002Fcontent-agents","NVIDIA-Omniverse","AI-powered agents for automating 3D content workflows using Vision-Language Models (VLMs). Content Agents analyze 3D assets and automate material assignment, physics property classification, and texture generation for USD files.",null,"Python",130,13,3,2,0,1,6,39,3.44,"Apache License 2.0",false,"main",true,[],"2026-06-12 02:00:41","# Content Agents\n\nAI-powered agents for automating 3D content workflows using Vision-Language\nModels (VLMs). Content Agents analyze 3D assets, automate material assignment,\nclassify physics properties, generate textures, and validate generated content\nfor [Universal Scene Description (USD)](https:\u002F\u002Fopenusd.org\u002F) files.\n\n![Cleaning trolley SimReady teaser](assets\u002Fimages\u002Fsimready_teaser_cleaning_trolley.gif)\n\n![Electrician's toolbox SimReady teaser](assets\u002Fimages\u002Fsimready_teaser_electricians_toolbox.gif)\n\n![Steel rolling scaffold SimReady teaser](assets\u002Fimages\u002Fsimready_teaser_steel_rolling_scaffold.gif)\n\n![UR10 SimReady teaser](assets\u002Fimages\u002Fsimready_teaser_ur10.gif)\n\n![KUKA arm SimReady teaser](assets\u002Fimages\u002Fsimready_teaser_kuka_arm.gif)\n\nEach GIF shows one asset: cleaning trolley, electrician's toolbox, steel rolling scaffold, UR10, and KUKA arm. Columns: input gray asset, Material Agent material assignment, Texture Agent rusty texture pass, Physics Agent physical properties and drop simulation.\n\n## Platform Support\n\nContent Agents are supported on Linux, Linux containers, and WSL2 on Windows.\nNative Windows shell execution is not an official runtime target for the agent\nCLIs, local rendering, OVRTX, or physics daemon paths in this release line.\n\nWindows-style path parsing may appear in tests or utility code so USD assets\nand archives remain portable, but that does not imply native Windows execution\nsupport. Treat native Windows support as future planned work that needs an\napproved design and CI\u002Fsecurity plan before implementation.\n\nLocal USD validation uses `usd-validation-nvidia`. Agent profiles include shared\nschema coverage (`Basic`, `Layer`, `Layout`, `Other`) and then add the rule\ngroup for authored changes. Pre-validation can apply validator auto-fix\nsuggestions when available, revalidate the repaired USD, and continue with the\nrepaired file.\n\n## Agents\n\n### Material Agent (Beta)\n\nAssigns physically-based materials to 3D objects by analyzing multi-view renders with a VLM. Given a USD file and a material library, the Material Agent identifies object parts, selects appropriate materials, and applies them back to the USD file.\n\n- Multi-view rendering and VLM-based material prediction\n- Material library matching with fuzzy validation\n- Scene pipeline for large multi-asset USD files\n- RAG enhancement with technical specification documents\n- Local USD validation coverage for schema (`Basic`, `Layer`, `Layout`,\n  `Other`) and `Material` rule groups\n\n### Physics Agent (Beta)\n\nClassifies physical properties of 3D asset components for physics simulation. Analyzes rendered views to identify component types, surface materials, and physical characteristics.\n\n- Component-level classification (material, type, physics properties)\n- Asset-type-aware analysis (vehicles, robots, props)\n- Structured prediction output for downstream simulation\n- Local USD validation coverage for schema (`Basic`, `Layer`, `Layout`,\n  `Other`) and `Physics` rule groups\n\n### Texture Agent (Research Preview)\n\nGenerates and applies AI-driven texture maps to USD materials. Takes a materialized USD file (e.g., output of the Material Agent) and fills empty texture slots with generated textures, transforming flat-color surfaces into visually rich textured ones.\n\n- Texture generation for OpenPBR, MaterialX, and MDL-style material metadata\n- Per-material or per-prim texture modes\n- Texture blending and compositing\n- Local USD validation coverage for schema (`Basic`, `Layer`, `Layout`,\n  `Other`) and `Material` rule groups, with UV readiness covered by the\n  preparation report\n\n### Validation Agent (Research Preview)\n\nValidates generated USD, render, image, video, and physics-evidence artifacts\nwith release-scoped CLI\u002FPython contracts. Validation Agent is the release-gate\ntool for checking whether generated assets render correctly, look like their\nprompt or reference evidence, have sane authored physics, or have approved\nbehavior evidence.\n\n- Prompt-driven `validation-agent validate --task ... INPUT...` runs\n- Config-driven `validation-agent run CONFIG` runs for repeatable QA\n- Structured `validation_request.json`, `validation_plan.json`, and\n  `validation_result.json` artifacts for CI and review\n\n## Two Ways to Use This\n\nMaterial, Physics, and Texture ship in two shapes. Both run the same\nunderlying pipeline, VLM prompts, and rendering logic — they differ only in how\nyou drive them. Validation Agent V1 is CLI\u002FPython-contract first for release\n0.4; REST, OpenAPI, and hosted service surfaces are not part of the V1 release\nscope.\n\n### Option A — REST service (Docker Compose)\n\nMaterial, Physics, and Texture each have a matching FastAPI service\n(`apps\u002F\u003Cagent>_service\u002F`) packaged with a `docker-compose.yml` that also starts\nthe bundled GPU rendering sidecar. Bring the stack up with `docker compose up`,\nthen drive the pipeline over HTTP from any language — using the included Python\nclient or the OpenAPI spec.\n\n**Pick this when:** you want the fastest \"submit a USD, get results back\" experience on a single GPU box, or you're calling from an existing application.\n\n### Option B — Local CLI\n\nInstall the agent's Python package (`material-agent`, `physics-agent`,\n`texture-agent`, `validation-agent`) and invoke `\u003Cagent> run CONFIG` against a\nlocal YAML config. The CLIs expose agent-specific controls such as skip steps,\nresume partial runs, prompt tuning, prim-path targeting, validation templates,\nand rendering-backend selection. For texture generation,\n`texture-agent run --resume` reuses generated artifacts in the configured\nworking directory; `texture-agent generate` followed by `texture-agent apply`\nis the explicit two-step resume path after generation succeeds.\n\n**Pick this when:** you want fine-grained control over pipeline steps, you're iterating on configs, running supported benchmarks, or wiring the pipeline into scripted workflows. Batch and benchmark helpers are agent-specific; texture-agent runs one config at a time and can be scripted externally for multi-asset batches.\n\nUnder the hood, the REST service wraps the same pipeline steps the CLI runs, so configs and findings port between the two. Most users start with Option A for a quick win, then drop into Option B when they need deeper control.\n\n## Use a Coding Agent\n\nThe Codex app, [Codex CLI](https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcli), [Claude Code CLI](https:\u002F\u002Fdocs.claude.com\u002Fen\u002Fdocs\u002Fclaude-code\u002Fcli-usage), and [OpenClaw CLI](https:\u002F\u002Fdocs.openclaw.ai\u002Fcli) can each set up this repo end to end: inspect the docs, check prerequisites, install the CLI path, configure `.env`, run a first example, and diagnose missing render or API-key setup.\n\nIf you use a local coding agent, start it from the cloned repository root. Keep\nAPI keys in `.env`, review commands before approval, and avoid pasting secrets\ndirectly into chat.\n\nFor the shortest local service path, ask the agent to use `\u002Fquickstart`. It\nstarts one existing per-agent Docker Compose stack: Material, Physics, or\nTexture. Use `deploy-collection` for the full package with shared dependency\nendpoints.\n\nInstall and sign in to your preferred agent first (`codex login`,\n`claude auth login`, or `openclaw setup`, as applicable).\n\nFor the simplest path, paste this prompt:\n\n```text\nSet up this repo for me, then run the material-agent hello-world example. If\nanything fails, tell me exactly what prerequisite or API key is missing and the\nnext command I should run.\n```\n\nFor a more explicit setup, paste this prompt:\n\n```text\nSet up NVIDIA Content Agents in this repository for me.\n\n1. Inspect README.md, .env_example, and the agent README files under apps\u002F.\n2. Check whether this machine has Docker Compose v2.24+, Python 3.12+, uv,\n   NVIDIA drivers, and the NVIDIA Container Toolkit.\n3. Create .env from .env_example if it does not exist. Tell me which VLM API\n   key is missing — do not print or expose secrets.\n4. Install the local CLI path with uv and fetch build resources, or start the\n   material agent REST service with Docker Compose if the machine is better\n   suited for Docker.\n5. Run a hello-world example:\n   material-agent run apps\u002Fmaterial_agent\u002Fconfigs\u002Funified_example.yaml\n6. If the run fails, diagnose the exact missing prerequisite, render backend,\n   or API key, then give me the next command to fix it.\n```\n\nOr launch the agent with a shorter inline prompt:\n\n```bash\n# Codex app\n# Open this folder in the Codex app, then paste a prompt above.\n\n# Codex CLI\ncodex \"Set up NVIDIA Content Agents in this repo and run the material-agent hello-world example. If anything fails, tell me the missing prerequisite or API key and the next command to fix it.\"\n\n# Claude Code CLI\nclaude \"Set up NVIDIA Content Agents in this repo and run the material-agent hello-world example. If anything fails, tell me the missing prerequisite or API key and the next command to fix it.\"\n\n# OpenClaw CLI\nopenclaw agent --local --session-id content-agents-setup -m \"Set up NVIDIA Content Agents in this repo and run the material-agent hello-world example. If anything fails, tell me the missing prerequisite or API key and the next command to fix it.\"\n```\n\nCommand names above follow the\n[Codex CLI](https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fcli),\n[Claude Code CLI](https:\u002F\u002Fdocs.claude.com\u002Fen\u002Fdocs\u002Fclaude-code\u002Fcli-usage), and\n[OpenClaw CLI](https:\u002F\u002Fdocs.openclaw.ai\u002Fcli) references.\n\n### Bundled Agent Skills\n\nThis repo includes checked-in skill guides for Codex and Claude Code. Start\nfrom the repo root so your agent can load the right skill folder. The canonical\nskill tree is `.agents\u002Fskills\u002F`; `.codex\u002Fskills\u002F` and `.claude\u002Fskills\u002F` are\ncompatibility mirrors.\n\n| Task | Codex path | Claude path | Use when |\n|---|---|---|---|\n| Material Agent CLI | `.codex\u002Fskills\u002Fmaterial-agent-cli` | `.claude\u002Fskills\u002Fmaterial-agent-cli` | Assign materials to a USD asset or run the material pipeline. |\n| Material Agent service\u002Fclient | `.codex\u002Fskills\u002Fmaterial-agent-client` | `.claude\u002Fskills\u002Fmaterial-agent-client` | Drive the REST service from Python or curl. |\n| Physics Agent CLI | `.codex\u002Fskills\u002Fphysics-agent-cli` | `.claude\u002Fskills\u002Fphysics-agent-cli` | Classify component materials and physics properties. |\n| Physics Agent service\u002Fclient | `.codex\u002Fskills\u002Fphysics-agent-client` | `.claude\u002Fskills\u002Fphysics-agent-client` | Drive the physics REST service. |\n| Texture Agent CLI | `.codex\u002Fskills\u002Ftexture-agent-cli` | `.claude\u002Fskills\u002Ftexture-agent-cli` | Generate and apply textures to USD materials. |\n| Texture Agent service\u002Fclient | `.codex\u002Fskills\u002Ftexture-agent-client` | `.claude\u002Fskills\u002Ftexture-agent-client` | Drive the texture REST service. |\n| Validation Agent CLI | `.codex\u002Fskills\u002Fvalidation-agent-cli` | `.claude\u002Fskills\u002Fvalidation-agent-cli` | Validate generated USD, render, image, video, and physics-evidence artifacts. |\n| OVRTX rendering | `.codex\u002Fskills\u002Fdeploy-ovrtx-docker` | `.claude\u002Fskills\u002Fdeploy-ovrtx-docker` | Start or target an OVRTX render endpoint. |\n| USD utilities | `.codex\u002Fskills\u002Fflatten-usd`, `.codex\u002Fskills\u002Fprint-usd`, `.codex\u002Fskills\u002Frender-usd` | `.claude\u002Fskills\u002Fflatten-usd`, `.claude\u002Fskills\u002Fprint-usd`, `.claude\u002Fskills\u002Frender-usd` | Inspect, flatten, or render USD assets. |\n\n### Agent Follow-Up Prompts\n\nAfter setup, ask your coding agent to run one of these:\n\n```text\nRun the material-agent hello-world ladder example. If rendering fails, check\nwhether RENDER_ENDPOINT is configured, then tell me the shortest path to a\nworking render backend.\n```\n\n```text\nBring my own USD asset into the material agent. Create a new config from\napps\u002Fmaterial_agent\u002Fconfigs\u002Funified_example.yaml, point input.usd_path at\n\u002Fabsolute\u002Fpath\u002Fto\u002Fmy_asset.usd, add my reference images from\n\u002Fabsolute\u002Fpath\u002Fto\u002Freference_images\u002F, and run the pipeline.\n```\n\n```text\nCreate a physics-agent config for \u002Fabsolute\u002Fpath\u002Fto\u002Fmy_asset.usd based on\napps\u002Fphysics_agent\u002Fconfigs\u002Flightbulb.yaml, then run physics-agent and summarize\nthe generated predictions and report path.\n```\n\n```text\nRun the texture-agent example config. If image generation is not configured,\ntell me which backend or API key is missing and where the generated texture\nartifacts would be written after a successful run.\n```\n\n```text\nRun the validation-agent hello-world behavior-evidence example:\napps\u002Fvalidation_agent\u002Fexamples\u002Fconfigs\u002Fsteel_scaffold_behavior_refine_summary.yaml.\nThen summarize the verdict and point me to validation_result.json.\n```\n\n## Quick Start\n\n### System Requirements\n\nThe material and physics agents bundle a GPU-accelerated rendering sidecar\n(OVRTX). The texture agent service is CPU-only and offloads image\ngeneration to the configured backend.\n\n| Resource | Default deployment (material \u002F physics) | + Local VLM NIM sidecar (material only) | Texture agent service |\n|---|---|---|---|\n| **GPU** | 1× RTX-capable NVIDIA GPU with **48 GB VRAM** (e.g., L40, L40S, RTX PRO 6000) | Add a 2nd 48 GB NVIDIA GPU for the local VLM | None with hosted backends; +1 NVIDIA GPU per enabled local sidecar (see below) |\n| **CPU** | 10 vCPU | 16 vCPU | 4 vCPU |\n| **System RAM** | 20 GB | 56 GB | 8 GB |\n| **OS** | Linux x86_64 on a distro supported by the [NVIDIA Container Toolkit](https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Finstall-guide.html); Windows via WSL2 (Scene Optimizer Core ships Linux x86_64); macOS is not supported for the rendering \u002F optimize pipeline | Same | Same |\n| **NVIDIA driver** | Recent production driver compatible with the NVIDIA Container Toolkit | Same | Not required for hosted backends; required when running local sidecars |\n\nThe local VLM NIM sidecar (`--profile vlm`, Cosmos Reason 2 8B) ships\nonly with the material agent service. The physics agent service uses\nthe hosted VLM backend configured via `PA_VLM_BACKEND` and does not\ninclude a public `vlm-nim` profile.\n\nA100, H100, H200, and V100 class GPUs are useful model-serving targets, but\nthey are not supported as the local OVRTX render GPU for the default\nmaterial\u002Fphysics Docker deployment.\n\nThe texture agent service is CPU-only out of the box, but ships two\noptional NIM sidecars that **do** require a GPU when enabled. Running\nthem locally needs the `docker-compose.multi-gpu.yml` overlay — without\nit the sidecar containers start but the texture service keeps talking\nto the hosted backends, because the overlay is what rewrites\n`TA_IMAGE_GEN_BASE_URL` \u002F `TA_LLM_BASE_URL` to point at the local NIMs.\n\n| Profile | GPU | Extra CPU | Extra RAM | Tokens needed |\n|---|---|---|---|---|\n| `--profile image-gen` (FLUX.2 Klein 4B) | 1× NVIDIA GPU, ≥24 GB VRAM | +4 vCPU | +16 GB | `NGC_API_KEY`, `HF_TOKEN` |\n| `--profile llm` (Llama 3.1 Nemotron Nano 8B) | 1× NVIDIA GPU, 48 GB VRAM | +4 vCPU | +16 GB | `NGC_API_KEY` |\n\n```bash\n# Authenticate with NGC so Docker can pull the NIM images. Use\n# --password-stdin to keep the API key out of process argv \u002F shell logs.\nprintf '%s' \"$NGC_API_KEY\" | docker login nvcr.io \\\n  --username '$oauthtoken' --password-stdin\n\n# Run both sidecars (the overlay rewrites both TA_*_BASE_URL values\n# unconditionally, so enabling only one profile would point the service\n# at a sidecar that isn't running). `--env-file .env` is required so\n# that the compose `${VAR}` overrides read your repo-root `.env`.\ndocker compose --env-file .env \\\n               -f apps\u002Ftexture_agent_service\u002Fdocker-compose.yml \\\n               -f apps\u002Ftexture_agent_service\u002Fdocker-compose.multi-gpu.yml \\\n               --profile image-gen --profile llm up --build\n```\n\nTo run only one sidecar locally, write a per-profile compose override or\nedit `apps\u002Ftexture_agent_service\u002Fdocker-compose.multi-gpu.yml` directly —\nthe bundled overlay assumes both sidecars are enabled.\n\nCold-start GPU warm-up for the bundled `ovrtx-rendering-api` sidecar takes\n~5 minutes; the local VLM NIM (when enabled) takes ~15 minutes on first\nrun for model compilation.\n\n### Software Prerequisites\n\n- For Option A: [NVIDIA Container Toolkit](https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Finstall-guide.html) + Docker Compose **v2.24+** (earlier versions don't support the `env_file: required: false` long-form syntax used by the compose files).\n- For Option B: Python 3.12+ and [`uv`](https:\u002F\u002Fdocs.astral.sh\u002Fuv\u002Fgetting-started\u002Finstallation\u002F) in a Linux\u002FWSL shell. Install `uv` with:\n  ```bash\n  curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n  ```\n- An API key for at least one VLM provider (see [Supported VLM Backends](#supported-vlm-backends))\n\n### Clone the Repository\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FNVIDIA-Omniverse\u002Fcontent-agents.git\ncd content-agents\n```\n\n### Environment Setup\n\nCopy `.env_example` to `.env` at the repo root and add your VLM provider key:\n\n```bash\ncp .env_example .env\n```\n\n```bash\n# Pick one (or more) VLM providers:\n\n# NVIDIA NIM (https:\u002F\u002Fbuild.nvidia.com\u002F)\nNVIDIA_API_KEY=nvapi-...\n\n# OpenAI (https:\u002F\u002Fplatform.openai.com\u002Fapi-keys)\nOPENAI_API_KEY=sk-...\n\n# Anthropic (https:\u002F\u002Fconsole.anthropic.com\u002Fsettings\u002Fkeys)\nANTHROPIC_API_KEY=sk-ant-...\n\n# Google Gemini (https:\u002F\u002Faistudio.google.com\u002Fapikey)\nGOOGLE_API_KEY=AIza...\n# GEMINI_API_KEY is also accepted as an alias.\n```\n\nThe shipped material-agent example\n`apps\u002Fmaterial_agent\u002Fconfigs\u002Funified_example.yaml` defaults to\n`predict.vlm.backend: nim` and `predict.llm.backend: nim`, so the unedited\ncommand requires `NVIDIA_API_KEY`. To run that same config with another\nprovider, set both the backend and model overrides in `.env` (or edit the YAML):\n\n```bash\nMA_VLM_BACKEND=openai\nMA_VLM_MODEL=gpt-4o\nMA_LLM_BACKEND=openai\nMA_LLM_MODEL=gpt-4o\n```\n\n### Option A — Run via Docker Compose\n\nEach REST-capable agent's service directory holds a `docker-compose.yml` you can bring up directly. First boot takes ~5 minutes for the bundled rendering sidecar to warm up on the GPU.\nValidation Agent does not ship a Docker Compose service in release 0.4; run it\nthrough the local CLI.\n\nWhen using a coding agent, `\u002Fquickstart` wraps these same per-agent compose\ncommands for a single-service POC. Use `deploy-collection` for a coordinated\nMaterial, Physics, and Texture deployment.\n\n`--env-file .env` is required so that any `${VAR}` overrides in the\ncompose files (e.g. `MA_VLM_BACKEND=openai`) read from the repo-root\n`.env` you created above. Without it, Compose's variable substitution\nlooks for `.env` next to the compose file (e.g.\n`apps\u002Fmaterial_agent_service\u002F.env`) and silently falls back to the\nbuilt-in defaults — your `.env` API keys still load via `env_file:`,\nbut any backend \u002F model overrides you set there do not take effect.\n\n```bash\n# Material agent\ndocker compose --env-file .env \\\n  -f apps\u002Fmaterial_agent_service\u002Fdocker-compose.yml up --build\n# Health check\ncurl http:\u002F\u002Flocalhost:8000\u002Fhealth\n\n# Physics agent (different service, same pattern)\ndocker compose --env-file .env \\\n  -f apps\u002Fphysics_agent_service\u002Fdocker-compose.yml up --build\n\n# Texture agent\ndocker compose --env-file .env \\\n  -f apps\u002Ftexture_agent_service\u002Fdocker-compose.yml up --build\n```\n\nOnce a service is up, drive it via HTTP or the included Python client in `apps\u002F\u003Cagent>_service\u002Fclient\u002F`. See each service's `README.md` and `docs\u002Fapi.md` for endpoint details.\n\nMaterial-agent service also exposes the large-scene workflow through\n`POST \u002Fpipeline` by setting `large_scene=true`. The same mode is available\nthrough the included client. Large-scene input is one composed USD stage with a\nvalid default root prim, not a collection of USD files. Upload one USD-family\nroot stage; use USDZ when dependencies need to travel with the scene. A small\nsynthetic quickstart is available in\n`apps\u002Fmaterial_agent_service\u002Fexamples\u002Flarge_scene\u002FREADME.md`:\n\n```bash\npython -m apps.material_agent_service.client.client \\\n  --base-url http:\u002F\u002Flocalhost:8000 \\\n  --email user@example.com \\\n  --large-scene \\\n  --scene-workers 2 \\\n  --vlm-max-workers 8 \\\n  --scene-fail-on-validation-error \\\n  \u002Fabsolute\u002Fpath\u002Fto\u002Flarge_scene.usda\n```\n\n### Option B — Run via CLI\n\nThree steps: (1) set up the virtual environment, (2) install everything,\n(3) run the agent. All commands run from the repo root.\n\n**1. Set up the virtual environment**\n\n```bash\nuv venv --python=3.12\nsource .venv\u002Fbin\u002Factivate\n```\n\n**2. Install — both the pip packages and the Scene Optimizer Core binary**\n\n```bash\n# Core library + one or more agents\nuv pip install -e . -e apps\u002Fmaterial_agent -e apps\u002Fphysics_agent -e apps\u002Ftexture_agent -e apps\u002Fvalidation_agent\n\n# Fetch the public Scene Optimizer Core package (~332 MB, one-time, cached\n# at .build-resources\u002Fscene_optimizer_core\u002F). Required for the\n# material-agent `optimize_usd` step's default local backend.\n#\n# Windows users should run this from WSL2; native Windows shell execution is\n# not supported for the full CLI pipeline.\n.\u002Fscripts\u002Ffetch_build_resources.sh\n```\n\n**3. Run an example**\n\n```bash\n# Requires NVIDIA_API_KEY unless you set MA_VLM_* and MA_LLM_* overrides.\nmaterial-agent run apps\u002Fmaterial_agent\u002Fconfigs\u002Funified_example.yaml\nphysics-agent run apps\u002Fphysics_agent\u002Fconfigs\u002Flightbulb.yaml\ntexture-agent run apps\u002Ftexture_agent\u002Fconfigs\u002Ftexture_example.yaml\n# Validation Agent hello-world: checked-in behavior evidence, no renderer or\n# VLM key required.\nvalidation-agent run \\\n  apps\u002Fvalidation_agent\u002Fexamples\u002Fconfigs\u002Fsteel_scaffold_behavior_refine_summary.yaml\n```\n\nTexture-agent also supports staged `discover`, `generate`, and `apply`\ncommands for preflight material inspection and generate-then-apply workflows.\nValidation-agent examples include a hello-world checked-in behavior-evidence\nconfig plus public SimReady electrician's toolbox and steel rolling scaffold\nvalidation flows under `apps\u002Fvalidation_agent\u002Fexamples\u002F`; they consume\ndownloaded public assets or checked-in evidence fixtures and do not require\nrunning the other agents first.\n\nMulti-view renders the agents send to the VLM are encoded inline as data\nURIs by default — no cloud storage is required. If you want to upload\nrenders to S3 instead, set `WU_S3_BUCKET` (plus AWS credentials). See\n`.env_example` for all toggles.\n\nSee each agent's `README.md` under `apps\u002F\u003Cagent>\u002F` for the full CLI reference, config conventions, and per-step options.\n\n## Bring Your Own Asset\n\nOnce a hello-world example runs cleanly, point an agent at your own USD: copy a known-good config and edit the asset path. Use absolute paths for files outside the repo — `~` is not expanded by the config loader.\n\n```bash\n# Material agent: assign materials to a USD asset.\ncp apps\u002Fmaterial_agent\u002Fconfigs\u002Funified_example.yaml \\\n   apps\u002Fmaterial_agent\u002Fconfigs\u002Fmy_asset_materials.yaml\n# Edit input.usd_path and input.reference_images in my_asset_materials.yaml.\nmaterial-agent run apps\u002Fmaterial_agent\u002Fconfigs\u002Fmy_asset_materials.yaml\n\n# Physics agent: classify components and physical properties.\ncp apps\u002Fphysics_agent\u002Fconfigs\u002Flightbulb.yaml \\\n   apps\u002Fphysics_agent\u002Fconfigs\u002Fmy_asset_physics.yaml\n# Edit input.usd_path in my_asset_physics.yaml.\nphysics-agent run apps\u002Fphysics_agent\u002Fconfigs\u002Fmy_asset_physics.yaml\n\n# Texture agent: add generated textures to a materialized USD.\ncp apps\u002Ftexture_agent\u002Fconfigs\u002Ftexture_example.yaml \\\n   apps\u002Ftexture_agent\u002Fconfigs\u002Fmy_asset_textures.yaml\n# Edit input.usd_path and texture settings in my_asset_textures.yaml.\ntexture-agent run apps\u002Ftexture_agent\u002Fconfigs\u002Fmy_asset_textures.yaml\n\n# Validation agent: validate an existing generated USD or evidence bundle.\nvalidation-agent validate \\\n  --task \"Validate that this asset renders successfully.\" \\\n  --template render_valid \\\n  --render-backend remote \\\n  --render-view corner \\\n  --output-dir .validation-runs\u002Fmy_asset \\\n  \u002Fabsolute\u002Fpath\u002Fto\u002Fgenerated_asset.usd\n```\n\nUse a Validation Agent config when the release gate needs live `look_right`\nreference judging, because the VLM judge policy lives in the request config.\n\nFor a Docker\u002Fservice workflow, Material, Physics, and Texture users start the\nmatching `apps\u002F\u003Cagent>_service` Compose stack and reference the USD through the\nservice client in `apps\u002F\u003Cagent>_service\u002Fclient\u002F`. Validation Agent has no\nmatching service or Compose stack in release 0.4; use the CLI path above.\n\n## Supported VLM Backends\n\n| Backend | Provider | Environment Variable |\n|---------|----------|---------------------|\n| `nim` | [NVIDIA NIM](https:\u002F\u002Fbuild.nvidia.com\u002F) | `NVIDIA_API_KEY` |\n| `openai` | [OpenAI](https:\u002F\u002Fplatform.openai.com\u002F) | `OPENAI_API_KEY` |\n| `anthropic` | [Anthropic](https:\u002F\u002Fconsole.anthropic.com\u002F) | `ANTHROPIC_API_KEY` |\n| `gemini` | [Google Gemini](https:\u002F\u002Faistudio.google.com\u002F) | `GOOGLE_API_KEY` or `GEMINI_API_KEY` |\n\nConfigure Material, Physics, and Texture backends in the agent YAML config\nunder the `predict` or generation section. Validation Agent uses\n`policy.look_right_vlm` \u002F `policy.look_right_llm_judge` for visual judging and\nthe shared render settings (`RENDER_ENDPOINT` or `NVCF_RENDER_FUNCTION_ID`) for\nruntime USD visual evidence.\n\n## Project Structure\n\n```\ncontent-agents\u002F\n├── world_understanding\u002F        # Core library (tools, functions, agentic framework)\n├── apps\u002F\n│   ├── material_agent\u002F         # Material assignment agent (CLI)\n│   ├── material_agent_service\u002F # Material agent REST API service\n│   ├── physics_agent\u002F          # Physics property classification agent (CLI)\n│   ├── physics_agent_service\u002F  # Physics agent REST API service\n│   ├── texture_agent\u002F          # Texture generation agent (CLI)\n│   ├── texture_agent_service\u002F  # Texture agent REST API service\n│   ├── validation_agent\u002F       # Validation Agent (CLI)\n│   └── ovrtx_rendering_api\u002F    # OVRTX-based rendering service\n└── tests\u002F                      # Test suite\n```\n\n## Documentation\n\n- **Per-agent docs**: `apps\u002F\u003Cagent>\u002FREADME.md` covers the CLI (Option B). For\n  material and physics, `apps\u002F\u003Cagent>\u002Fdocs\u002Fapi.md` is the programmatic Python\n  API reference. Texture agent has no Python API module; use the CLI or the\n  REST service. Validation Agent V1 is CLI\u002FPython-contract only and documents\n  examples in `apps\u002Fvalidation_agent\u002Fexamples\u002F`.\n- **Per-service docs**: `apps\u002F\u003Cagent>_service\u002FREADME.md` covers Docker Compose\n  deployment (Option A); `apps\u002F\u003Cagent>_service\u002Fdocs\u002Fapi.md` is the REST API\n  reference. Validation Agent does not ship a REST service in release 0.4.\n- **Material agent Docker deep-dive**: `apps\u002Fmaterial_agent_service\u002Fdocs\u002Fdocker.md` covers multi-GPU, VLM-NIM sidecars, and production profiles.\n\n## Development\n\n```bash\n# Install dev dependencies\nuv pip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Format and lint\n.\u002Fformat.sh\n\n# Check only (CI mode)\n.\u002Fformat.sh check\n```\n\n## License\n\nLicensed under the [Apache License, Version 2.0](LICENSE). Third-party\ncomponent licenses are listed in [THIRD_PARTY_NOTICE.md](THIRD_PARTY_NOTICE.md).\n\n## Contributing\n\nThis project is currently not accepting contributions. See\n[CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Security\n\nPlease report security vulnerabilities per the policy in\n[SECURITY.md](SECURITY.md).\n\n## Code of Conduct\n\nThis project adheres to the Contributor Covenant Code of Conduct. See\n[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).\n","NVIDIA-Omniverse\u002Fcontent-agents 是一个利用视觉-语言模型（VLMs）自动化3D内容工作流的AI驱动代理项目。其核心功能包括分析3D资产、自动分配材质、分类物理属性和为USD文件生成纹理。技术特点涵盖了多视角渲染与VLM预测、材料库匹配及模糊验证、面向大型多资产USD文件的场景管道以及基于规则的USD验证等。适用于需要高效处理和优化3D内容的场景，如游戏开发、虚拟现实或增强现实应用中的资产准备过程。此项目支持Linux及其容器环境，并计划未来增加对Windows的支持。","2026-06-11 02:49:48","CREATED_QUERY"]