Install Scenario 3d
Pick your agent. Every command is ready to paste.
npx skills add scenario-labs/skills --skill scenario-3dThe open skills CLI detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.
01
Install it
Run the command above, or upload the folder in Claude.
02
Ask naturally
Describe the task. Your agent loads scenario-3d when the request matches its description.
03
Name it if needed
If it does not trigger, say “use the scenario-3d skill”. In Codex, type $scenario-3d.
The skill itself
SKILL.md
Scenario 3D Asset Workflows
Overview
Generate a concept image first, then run image-to-3D: it has a larger catalog and more art direction
than text-to-3D (txt23d). Per-family contracts: scenario-meshy, scenario-rodin,
scenario-sparc3d. Walkable scenes and Gaussian splats: scenario-3d-worlds. PBR retexture of a
finished mesh or scene: scenario-patina-retexture. Inside Blender, through the Scenario for
Blender extension: scenario-blender. Connection and the core loop: the scenario skill. If a
sibling skill named here is missing from your available skills, load it with skill_get (Scenario
MCP) or ask the user to install it (https://github.com/scenario-labs/skills#install); unattended,
proceed from tool schemas and flag the gap.
Quick reference
| Step | Tool | Notes |
|---|---|---|
| Find 3D models | recommend with the capability and the user's own words (search for a name) |
Capabilities: txt23d, img23d, 3d23d |
| Inspect inputs | model_schema_get |
Always call before model_run |
| Generate | model_run |
Pass reference images as asset IDs |
| Wait | jobs_wait |
Any job_id returned without assets goes in job_ids; never poll job_get in a loop |
| Preview | asset_display |
Interactive GLB/FBX/VOX/OBJ viewer on MCP App hosts |
| Download | asset_download |
Returns a URL; save with curl -L |
Worked example: game-ready treasure chest
- Plan check. Before step 1, run
recommendfor every later step (step 2, plus any rig or retexture). An entry markedrequires_plan_upgradefails with a 403 (ModelAccessRestrictedError) only after earlier steps were paid: settle the upgrade or pick another member first. If theimg23dcall answersask_userabout existing concepts, take the concept-image branch: step 1 makes them. - Batch price. Price per asset from one real concept:
dry_runeach candidate on it (later legs per step 4), times the count. At authoring time one LLM-based member quoted 1,300 CU at its default effort, a single-image Tripo generator 45. Past the plan's credits, each job's wait grows with its cost.
Generate the concept: pick a text-to-image model via
recommendwith the user's own words asprompt, thenmodel_schema_getandmodel_run. Prompt a single centered subject on a plain background. Show a non-biped creature at eye level, from the side or three-quarters, every leg visible and clear of the body: top-down hides leg undersides and body height. A biped headed for a rig takes the pose in Rigging and animation. Upload a user's reference withupload_assetand pass its asset ID instead. Keep a reference on a plain background as is, and prefer it to a busy shot: removal keeps a glossy subject's reflections of the scene, which image-to-3D bakes into the texture. Remove a busy one's background first (recommendthe removal) and pass that output's id instead. An isolated subject matters, a transparent cutout does not; an image field'sbackground_note, when present, says the same.recommendwithcapability="img23d"and the user's own words asprompt. Live members include the Hunyuan 3D, Meshy, Tripo, and Trellis families, and Scenario's own LLM-based 3D generation: GPT-6 Astra 3D and Claude Opus 5.5 3D (the cheaper at authoring time; compare both withdry_run). Those two LLM-based members alone:- reconstruct one object from 1 to 8 photos or renders into an editable mesh with named parts and per-part PBR materials;
- suit props and hard-surface subjects, not characters or creatures;
- price by
buildEffort:standard,high(the default),maximum; - cap the exported triangle count with
faceBudget(the game range in step 3); - change a result by editing it (see Refining meshes).
model_schema_get: inspect image inputs, polycount, PBR, and topology controls. Target 10k to 50k triangles for this prop; never assume defaults meet that budget. Use only exposed controls:- Numeric field: read
minandmax, or the description when they are absent. - Enum: read
allowed_valuesand their topology and count meanings (scenario-rodincoversqualityMeshOption). A quad count is not a triangle count. - No face control, or the target is below its range: generate, then remesh down if needed
(Refining meshes). Never invent a face field;
scenario-sparc3dcovers members without one.
Check the output's triangle count against the budget. At authoring time:
- Tripo (
faceLimit) and Meshy (targetPolycount, set wherescenario-meshysays) reached both ends. At 10k, an eight-legged creature kept every leg and claw, and a chest its padlock and handles. Meshy's Smart Topology members capped lower, at 15k or 30k. - Hunyuan 3D (
faceCount, from 40k) covers only the top of the range, and Trellis (decimationTarget, from 100k) starts above it. Remesh only for a target under the member's floor.
- Numeric field: read
model_runwithparameters={"image": "asset_xxx", ...}anddry_run=trueto price it. Then run it for real withwait=falseand pass itsjob_idtojobs_wait(job_ids=["<job_id>"]) until nopending_job_idsremain. A downstream step (rig, retexture) has no payload todry_rununtil its input mesh exists: quote it fromrecommend, then re-price withdry_runon the real asset before launching.asset_displaythe outputasset_id, thenasset_downloadandcurl -L -o chest.glb "<url>". Omitformatwhenasset_getshowsproperties.formatglb: it returns the stored original byte for byte.formatconverts toglb,fbx, orobj; passglbfor the LLM-based members, which store a Blender file. Ask forfbxfor a Unity project without a glTF importer, and keep the GLB too: at authoring time the FBX embedded only two images, so it may miss PBR maps.
Prompt-only build. Both LLM-based members support txt23d. When the user wants no concept to
approve, skip step 1. In step 2, recommend with capability="txt23d" and the user's words as
prompt. Follow steps 3 to 5 with images: []; describe the object and name required parts in
prompt. A chest's lid, body, and padlock returned as those node names.
Multi-view models take several images of one subject; read the count and fields off
model_schema_get. Side fields follow the subject: on the Tripo multi-view members at authoring
time, leftImage was the character's own left (nose toward frame left), rightImage the mirror. A
sheet labeled by the viewer's side reverses them, and a swapped pair can fuse front and back into
one shell.
Texture and lighting controls
Several image-to-3D families split texture from geometry. Read each dial in model_schema_get
before promising a look. Authoring-time examples from the Tripo members:
texture: falsereturns a bare mesh and is acost_impactfield: the cheap path when the user textures in a DCC.textureQualityalso moves the price; an empty texture version picker keeps the provider's default.delightstrips lighting baked into the reference so the mesh relights in the engine. It defaulted to on; turn it off only when painted shading is the art style. The export stays a lit material either way: for no relighting at all, the user sets an unlit shader on import.pbr: the P2 generators defaulted it off (on forces texturing, billed as such); the 3.1 generators and the texturing member defaulted it on, then ignored the texture parameters. Read its description and say which won.- No Tripo member exposed symmetry: a result unlike the vendor's own app may come from an app-only setting.
- Geometry and texture take separate seeds (
seed,textureSeed): holdseedand the image, varytextureSeedfor texture variants on one shape. autoSizescales the output to real-world meters and defaulted to off: settruefor a real-scale import.dimensionsstill reads the unit-normalized mesh (longest side 1.0), since the meters sit in the GLB's node transform: not a failure.
Inspecting results
Hosts without MCP Apps get the app_url link instead of the viewer. The viewer's capture button
calls capture_3d_view, an app-only tool that posts an image asset_id of the current view into
the conversation. Reuse it as a generation reference or a similarity search image. Never call
capture_3d_view yourself: it needs PNG canvas data only the viewer has.
Refining meshes
3D-to-3D utilities retexture, remesh, UV-unwrap, and segment parts: recommend with
capability="3d23d" plus the operation in the user's own words. Most take the source asset_id in
a kind: "3d" file field, usually model (also mesh, file3d, sceneFile). A 400
Input model is required or Provide a reference image or a 3D model means the mesh went in under
another name (an image field, or a URL).
The LLM-based members of step 2 also edit an existing mesh, prop or character:
sceneFiletakes itsasset_id(any 3D model, returned in the same format),imagesstays empty,promptstates the change.buildEffortfits the change, not the object:standardfor a recolor,highormaximumto add or reshape parts.- Price follows
buildEffort, not the mesh, andrecommendpriced no edit at authoring time: adry_runon any project mesh quotes it. - A recolor kept every part name and the face count. A reshape is uncapped (
faceBudgetignored): it took a 4,817-triangle cat to 788,954, so plan a remesh before an engine. - A replaced material keeps its old name; only added parts get new ones. The edit is generated: check what the prompt did not name against the source.
- GPT-6 Astra 3D's description also claimed Mixamo-named rigs, ARKit face shapes, animation loops,
UV re-unwraps, and modular kits, so it competes in those
recommendcalls.
Splitting a finished mesh into parts is a contested lane, so it stays a recommend pick. At
authoring time vendors offered granularity controls or a bundled PBR retexture, and image-to-parts
members built parts from the picture instead. A convincing mesh is not a game-ready one: part
separation, joints, materials, and animation are each their own pass. Polygon caps differ by
topology: read the slider's max instead of promising a count. A named provider feature is a valid
search target, but an empty result or one member's enum does not prove a capability absent
platform-wide. recommend the unmet need (a hinged prop), inspect the returned schemas, and report
it unverified if none exposes it. Never invent a call from the provider's site.
A staged chain toward game-ready
One image-to-3D run bakes its texture onto UVs the generator chose. A mesh headed for an engine
usually goes further, each output's asset_id feeding the next tool's kind: "3d" field:
- Geometry: a multi-view member when several angles exist, with
texture: falsewhere offered, andpbr: falsebeside it wherepbroverrides the texture settings. - UV unwrap.
- Retexture the unwrapped mesh from a prompt, an image, or a style reference.
- Rig last, on the topology that ships.
Each step after the first is a 3d23d recommend pick and its own billed run: dry_run it on the
real input before launching. Along the chain:
- Retexture schemas. Avoid a setting that rebuilds UVs, which discards the unwrap. Check the
same
pbrdefault (the Tripo texturing member defaulted to PBR at authoring time). When a schema is silent on UVs, prefer a member with an explicit keep-existing-UVs setting. - Input caps. One unwrapper took meshes up to 30,000 faces at authoring time: set the
generator's face limit under it (the Tripo multi-view member exposed
faceLimitandsmartLowPoly), or remesh down first. - Checks between steps.
asset_displayeach output. Without a viewer, compare face count, UVs, anddimensionsfromasset_getstep to step, plus the thumbnail asset, which can lag the job by seconds.hasUVsproves UVs exist, not a clean layout; an unwrapper's "albedo" PNG may be a preview, not the atlas. - Inherited defects. Faces rendering dark or inside out are flipped normals, which later steps
inherit. Scale and pivot can shift between steps, even within one vendor (
autoSizeabove): confirm both in a DCC before the rig. - Sibling formats. Feed the GLB onward unless the next schema asks otherwise or the mesh is
quads, which stay in FBX. With no GLB, feed the OBJ or FBX the next schema lists (a
dry_runmay skip the format check, so the real run confirms it), else convert withasset_downloadformat.
Fixing normals, origin, or naming by hand is DCC work, not an MCP call. The
scenario-blender-expert skill drives Blender; it installs locally, so skill_get cannot fetch it.
Rigging and animation
Rigging is a separate 3d23d step on a finished mesh, not a generator flag: recommend that
capability plus the rigging need in the user's own words.
Body plan picks the model. Humanoid riggers take the mesh plus at most a front-facing hint or an
approximate height, and infer a biped skeleton. Non-bipeds go to a model exposing rigType:
quadruped, hexapod, octopod, avian, serpentine, aquatic. A static prop has no body plan:
if recommend answers ask_user, part segmentation is the nearer step.
A biped headed for a rig starts from a T- or A-pose concept (full body, front view, arms clear of the torso, plain background): riggers infer joints from the pose. A non-biped keeps step 1's view. For quads:
- Pick an image-to-3D member whose schema offers quad topology and set it; the default is triangles.
At authoring time the Tripo P2 and 3.1 members had a
quadswitch with a lower face cap;scenario-rodinandscenario-meshyname their families' controls. - Quad output arrives as FBX. glTF stores triangles only, so
format: "glb"or a GLB-only step triangulates it. - Keep the FBX, rig it with a member whose file field lists FBX, and check each output's face type in a DCC before promising quads. A rig returned as GLB is triangulated: deliver the quad FBX beside it and say so.
Three schema details decide whether the output is usable:
- Formats. Riggers accept GLB, often OBJ, FBX, or STL, and expose no output-format field. The rig comes back as GLB or FBX, mostly unannounced: expect a DCC pass when the engine needs the other.
- Size ceiling. A file
max_sizeis rare (one humanoid rigger capped at 30 MB): check the schema before decimating. - Animation versus rig. Where a rigger exposes
animation, it retargets a preset clip; itsallowed_valuesare rig-type prefixed (quadruped:walk), so read them. By default only the retarget file comes back: setincludeRiggedModelto keep the plain rig too. The two arrive as separate assets with identicalmetadata, in no set order.asset_gettells them apart: the retarget hasproperties.hasAnimationstrue and ananimationFrameCount, the plain rig false and null.
When only motion is wanted, motion-transfer video models animate a still character image with no
skeleton: see scenario-video. Video-to-motion models that auto-rig an uploaded mesh are the one
place an outputFormat enum picks the engine target.
Common mistakes
- Running
model_runwithoutmodel_schema_get: 3D parameters differ far more between models than image parameters do. - Hardcoding model IDs: catalogs rotate (a
deprecated:<replacement_id>tag names the successor). Re-discover each session:recommendfor a need,searchfor a name. - Promising a named skeleton, an influence count, or bones for wings and extra limbs the chosen member does not document: pick the closest body plan, then finish in a DCC.
- Sending a biped to a
rigTypemodel: the enum has no biped value; humanoids have their own riggers.
Tips for Scenario 3d
- • Start a fresh session after installing so your agent picks up the new skill.
- • It is part of a pack with 40 skills. Install only the ones you need with --skill to keep triggers precise.
- • If two skills overlap, mention the one you want by name.
Questions about Scenario 3d
What does the Scenario 3d skill do?
Use when generating or handling 3D assets through the Scenario MCP server, including text-to-3D or image-to-3D meshes, GPT-6 Astra 3D or Claude Opus 5.5 3D, GLB, FBX, OBJ, STL, or VOX files, PBR-textured or game-ready models, voxel models, multi-view reconstruction, editing a mesh by prompt, retexture, remesh, UV unwrap, auto-rigging a biped or quadruped, or retargeting an animation, previewing a mesh in the 3D viewer, or downloading a model for import into Unity, Unreal, Godot, or Blender.
How do I install Scenario 3d?
Run "npx skills add scenario-labs/skills --skill scenario-3d" in your project. The skills CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.
Does Scenario 3d work in Cursor and Codex?
Yes. Scenario 3d uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.
Is Scenario 3d free?
Scenario 3d is open source on GitHub under the MIT license. It is free to install; check the license before commercial use.
Who made Scenario 3d?
Scenario 3d is published by scenario-labs in the scenario-labs/skills repository, together with 39 other skills.



