hz-unity-fbx-import — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hz-unity-fbx-import (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Importing an external 3D model fails most often for one reason: an incomplete source path. This skill ensures every FBX source is a complete, fully-qualified URL or absolute filesystem path, and walks the import through unity-cli.
Use this skill automatically whenever:
ALWAYS use complete, fully-qualified URLs or absolute paths for FBX files.
Never use relative paths, partial URLs, or assume path completion.
*`unity command import_asset` takes an absolute filesystem path — it does not download. Verified: passing a URL fails with "Source file 'https://…' does not exist."* So a remote model is always two steps: download to disk, then import the local file.
When a user requests to import a model, determine the source:
http:// or https://.fbx or .zip?param=value&other=data) are required for authenticationhttps://example.com/models/character.fbx?token=abc123&auth=xyzhttps://cdn.fbcdn.net/path/file.fbx?_nc_gid=xxx&_nc_oc=yyy&oh=zzzC:/Users/name/Downloads/model.fbx/home/user/models/model.fbx.fbx or .ziphttps://example.com/assets.zipCRITICAL: For URLs with query parameters (like ?token=...&auth=...), you MUST include the ENTIRE URL including all parameters. Query parameters often contain authentication tokens required for download.
Valid examples:
https://cdn.example.com/assets/models/chair.fbxhttps://cdn.example.com/models/chair.fbx?token=abc123&auth=xyz789 (with query params)https://scontent.fbcdn.net/model.fbx?_nc_gid=xxx&_nc_oc=yyy&oh=zzz (Meta CDN with auth)http://localhost:8000/models/character.fbxC:/Projects/Models/tree.fbx (Windows absolute)/home/user/assets/car.fbx (Unix absolute)https://github.com/user/repo/releases/download/v1.0/model.zipInvalid examples (never use these):
models/chair.fbx (relative path)~/Downloads/robot.fbx (tilde expansion not supported)example.com/model.fbx (missing protocol)../assets/model.fbx (relative path)model.fbx (no path at all)Skip this step for a local file. Quote the URL so the shell doesn't split on & in query parameters — the single most common cause of a truncated, failing download.
# macOS / Linux
curl -fSL "https://example.com/models/office_chair.fbx" -o /tmp/office_chair.fbx
# Windows (PowerShell)
Invoke-WebRequest -Uri "https://example.com/models/office_chair.fbx" -OutFile "$env:TEMP\office_chair.fbx"Confirm the file exists and is non-empty before importing. A truncated or HTML error page saved as .fbx imports as a broken asset rather than failing loudly.
For a .zip, extract it first and locate the .fbx inside; import that.
unity status --format json # look for state "ready"
# Validate first — reports what would be imported, writes nothing
unity command import_asset --source "C:/Users/name/Downloads/office_chair.fbx" \
--path "Assets/Models/office_chair.fbx" --dry_run true --format json
# Then import for real
unity command import_asset --source "C:/Users/name/Downloads/office_chair.fbx" \
--path "Assets/Models/office_chair.fbx" --format json--source is an absolute filesystem path to the external file.--path is the destination relative to the authoring root (usually Assets/), including theextension. The Assets/ prefix is optional.
--confirm true is required only when overwriting an existing asset at the destination.--dry_run true validates and reports without writing — use it whenever the source came from a user.Connecting, --project-path, and Safe Mode recovery are in the `unity-cli` skill.
import_asset copies and imports the file at its authored scale. Unlike a one-shot "import at height H" tool, normalizing size is a separate step:
unity command set_import_settings --asset "Assets/Models/office_chair.fbx" \
--settings '{"globalScale": 0.46, "useFileScale": false}' --format jsonCompute globalScale as targetHeight / currentHeight. For a humanoid rig also set animationType to Humanoid. See `hz-unity-meta-movement-sdk-retargeting` for why an oversized rig causes skewing, and for the ModelImporter fields involved.
unity command instantiate_prefab --prefab "Assets/Models/office_chair.fbx" --name office_chair --format json
unity command save_scene --format jsonThen read the actual bounds — never assume the model's size. bounds is a computed property, so get_component_properties will not give it to you (a MeshRenderer read returns m_Materials, m_CastShadows and friends, no bounds). An imported FBX also puts its renderers on children of the instantiated root, so use GetBounds.cs from the `unity-placement` skill, which unions the child renderers' bounds:
unity command run_script --file AgentScripts/GetBounds.cs --entry GetBounds.Run \
--args '[["office_chair"]]' --format jsonReport the size and center to the user, and use them for any subsequent positioning.
When the user gives an incomplete path, ask for the complete path:
User: "Import models/car.fbx"
Ask for clarification: "I need the complete path to the FBX file. Is it:
What is the full path to car.fbx?"
User: "Import from example.com/models/chair.fbx"
Clarify the protocol: "Should this be:
Which protocol should I use?"
User: "Import ../models/tree.fbx"
Request absolute path: "Relative paths aren't supported. Please provide the absolute path to tree.fbx.
For example:
What is the full path?"
& in query parameters isn't treated as a job separatormetavr capture screenshot to confirm the model looks right in-headset, not just in the EditorBefore importing, verify:
--path destination includes the extension--confirm true supplied if overwriting an existing assetset_import_settings if the model isn't authored at real-world sizeA Unity MCP server with the Meta Unity extension exposes Unity_ImportExternalModel, which downloads, imports, normalizes height, assigns a texture, and creates a prefab in a single call. There is no command-catalog equivalent, so it is only reachable over MCP — see references/unity-mcp-fallback.md for its parameters, the setting that enables it, and a manual Unity_RunCommand reimplementation.
| Source Type | Format | Example | Needs download first? |
|---|---|---|---|
| Remote HTTPS | https://domain/path/file.fbx | https://cdn.example.com/models/chair.fbx | Yes |
| Remote HTTP | http://domain/path/file.fbx | http://localhost:8000/model.fbx | Yes |
| Local Windows | C:/path/to/file.fbx | C:/Users/name/Downloads/robot.fbx | No |
| Local Mac/Linux | /path/to/file.fbx | /home/user/models/tree.fbx | No |
| ZIP archive | Same as above with .zip | https://example.com/pack.zip | Yes, plus extract |
--project-path, Safe Mode recovery.Import failures are almost always a path problem. When in doubt:
import_asset — it does not fetch URLs--source~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.