prop-model is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Generate one static 3D prop (sword, barrel, chest, lantern, statue): one object, no rig, a MeshInstance3D.
When your agent uses it
- Generating a single static 3D prop — sword, barrel, chest, lantern, throne, statue, crate, key, potion, banner
- A scene needs one static object — furniture, weapon, container, decoration — as a MeshInstance3D without rigging
Install
summer setup installs every skill for your agent. To add only this one:
claude-code for your agent, such as codex or cursor. See Skills for every option.
The skill
One prop, one mesh, one MeshInstance3D. Most game-world objects are static props, so this is the most common 3D-asset call. The skill keeps two things tight: the prompt shape that produces a clean isolated mesh on the first try, and the wire-in pattern that gets the asset into the scene without leaving orphans inres://assets/models/.
The backing operation is assets.generate_3d; it answers with a job that jobs.wait follows. Default model is hunyuan (Hunyuan 3D v3.1 Pro — best quality). Use trellis when speed matters (Trellis 2 is ~2× faster, slightly lower fidelity). meshy is the legacy fallback — only pick it if the user asks by name.
When to use
- “Make me a treasure chest.”
- “Generate a viking axe.”
- “I need a wooden barrel for the cellar.”
- “Create a sci-fi crate.”
- Any single, static, non-character, non-modular object the player will see in 3D space.
When NOT to use
- Character / humanoid →
character-model(needs T-pose + rig pass). - A set of matching pieces (walls, floors, doors, pillars) →
environment-kit(style-locked family). - Trees, rocks, foliage →
organic-model(organic forgives AI artifacts; cheaper recipe). - Cars, ships, mechs →
vehicle-model(hard-surface specifics). - Walls / floors / repeating geometry →
asset-strategyPipeline 2 (textures + CSG). - “I just need a placeholder” → propose a primitive (
BoxMesh/CylinderMesh) instead. Generation is metered.
Steps
1. Search before generating
Found assets/models/treasure_chest_01.glb. Reuse this, or generate fresh?
2. Pick a polycount target
Default if you don’t pass it: provider picks (~10k–30k). For most game-world props, that’s overkill — pass a target.
3. Build the prompt
Pattern:<object> + <material> + <silhouette/details> + isolated-object suffix.
The
isolated object and white background clauses are load-bearing — without them you get scene context (table, ground plane) baked into the mesh.
4. Confirm and call
About to generateTo say how many credits, run the same call withviking_axeviahunyuan, target ~5k tris, ~60s. This uses credits. OK?
dryRun: true first: it returns estimate (credits, balance, enough) and generates nothing.
result holds assetId and fileUrl. Treat assetId as the
stable handle and fileUrl as a fallback preview/import URL.
5. Import and wire
scenePath is required whenever parent is set — it names the exact scene that receives the model, and the scene does not have to be the active editor tab. Omitting it fails the import with a pass the exact scenePath when parent is set hint. summer_save_scene likewise takes an explicit scenePath; there is no bare form.
For interactive props (chest the player opens, lantern the player picks up),
wrap the instantiated model in a StaticBody3D (or RigidBody3D for physics
props) with a CollisionShape3D sibling — see scene-composition for
the parent-shape pattern.
Anti-patterns
- Scene context in the prompt. “A sword lying on a wooden table” → the table becomes geometry. Always say
isolated object. - Multi-object prompts. “A sword and a shield” → fused single mesh. Generate separately.
- Skipping
targetPolycountfor background props. A 30k-tri barrel in the background tanks frame rate when the level has 50 of them. - Forgetting to import.
fileUrlfromassets.generate_3dis a remote URL — you MUSTsummer_import_asset_by_idorsummer_import_from_urlbefore referencing it asres://.... - Generating before searching. Reuse beats regenerate every time.
- Picking
meshyby default. It’s legacy.hunyuanis better;trellisis faster.
Edge cases
- Transparent objects (glass, ice, gem). AI 3D gen makes these opaque. Generate the mesh, then assign a
StandardMaterial3Dwithtransparency = ALPHAand a lowalbedo_color.ain the editor. - Long thin props (spear, staff, banner pole). Hunyuan sometimes thickens the shaft. Trellis handles thin geometry better — try it as the second attempt.
- Concave interior (open chest, hollow vase). Specify “lid open” or “hollow inside” — Hunyuan defaults to closed solids.
- Symmetrical prop comes back asymmetric. Add
symmetric, mirroredto the prompt and regenerate.
Without Summer Engine
In a session without Summer Engine tools (the assets profile; thesummer-assets skill has the whole loop), do steps 1-4 and skip step 5 (import and wiring). Save the file where the person asked with out (the summer-assets skill says how), and tell them the path and format. The file is GLB. Generated models are not at real-world size, so give the person the target size (a chair about 1 m, a door about 2 m) to scale it to.
Fallback (no MCP)
The user can run the same prompt in the Summer dashboard or a supported provider UI, download the.glb, and drop it into res://assets/models/.
Summer Engine’s Import dock will pick it up. Then instance the .glb scene in
the level (an imported .glb is a scene, not a Mesh).
Handoff
After the prop is wired:viking_axe.glbimported and placed at./World/Props/VikingAxe. Next:
- For physics (player can knock it over), wrap in
RigidBody3D+CollisionShape3D— seescene-composition.- For pickup interaction, see
design-mechanicfor the pickup pattern.- For matching props in the same style (chest → barrel → crate as a treasure-room kit), use
environment-kitwith this prop as the style anchor.
See also
asset-strategy— the meta-router that decides between this skill and Pipeline 2 (textures).character-model— for humanoids.environment-kit— for style-locked sets.summer_docs_readidreference/mcp-tools-reference— how to callassets.generate_3d;summer_searchreturns its exact input.
From a shell
No Summer MCP tools in this session? Run each one as a command; whensummer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
Related skills
character-model: Generate a rigged humanoid (player, NPC, enemy, boss) from a T-pose reference, previewed before rigging.environment-kit: Generate a modular environment kit: walls, floor tiles, pillars, doors, arches in one visual style.organic-model: Generate organic 3D shapes (trees, rocks, mushrooms, plants, crystals) where irregularity looks natural.vehicle-model: Generate a hard-surface vehicle (car, spaceship, mech, boat, tank) as a static or VehicleBody3D mesh.asset-strategy: Route any ‘I need a [thing]’ asset request to the right skill: 2D, 3D, audio, video, VFX or animation.
Source:
library/skills/prop-model/SKILL.md, rendered from summer-engine@4.3.0 on npm.
