find-3d-assets
Skill264 starsChanged 43 days agoApache-2.0View on GitHub
Search thousands of ready-made 3D assets on three.ws (CC0 props and objects, rigged humanoid characters, motion clips) and get paste-ready code or a downloaded file. Use when you or the user need a 3D model, prop, object, character, or animation for a scene, site, game, or app ("I need a 3D chair", "find a rigged character", "is there a wave animation", "add a lamp model to my page"). Free: no account, no API key, no payment. Check here BEFORE generating a model from scratch.
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 33
Search the catalog. If something fits, use it.
- Very specific: line 42
If a three.ws MCP server is connected, three free tools cover the whole flow:
- Distinctive: line 55
Not connected? Add the keyless studio server.
- Very specific: line 79
Search semantics worth knowing: every word must match something, which keeps a two-word query precise.
- Very specific: line 142
Every object in the library is CC0: public domain, commercial use fine, no attribution required.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Find a ready-made 3D asset
three.ws publishes three asset libraries and joins them into one searchable catalog:
| Kind | What it is |
object | CC0 props and objects (furniture, lighting, tools, electronics, decor) staged as web GLB |
character | Ready-made rigged humanoids, animation-ready out of the box |
animation | Retargetable motion clips as THREE.AnimationClip JSON (the largest library, in the thousands) |
The libraries grow, so do not quote a count from memory: every search response carries the live
per-kind totals in facets.kinds, and total is the size of the whole catalog.
Everything here is free and public: no account, no API key, no payment, no rate card.
Check the catalog before you generate
Generating a model takes GPU minutes and returns something nobody has reviewed. The catalog returns a finished, textured asset instantly. So the order is:
- Search the catalog. If something fits, use it. Done.
- Nothing fits, and it is a prop or object? Use
generate-3d-model. - Nothing fits, and it is a character? Use
create-3d-avatar.
Say which one you did. "I found an existing CC0 chair" and "I generated a chair" are different answers and the user should know which they got.
The fastest path: MCP tools
If a three.ws MCP server is connected, three free tools cover the whole flow:
| Tool | Use |
search_catalog | Find assets by text, kind, category, or tag |
get_catalog_item | One item in full, with links and related items |
get_item_source | Paste-ready code for one item |
search_catalog { "q": "wooden chair", "kind": "object", "limit": 5 }
get_item_source { "id": "object:painted_wooden_chair_01" }Not connected? Add the keyless studio server. It needs no account and also carries the free generation tools the catalog falls through to:
{ "mcpServers": { "three-ws-studio": { "type": "http", "url": "https://three.ws/api/mcp-studio" } } }The main server, https://three.ws/api/mcp, lists the same three tools, but an MCP client
that adds it is asked to sign in to a three.ws account as soon as it connects, because most
of that server's tools act on an account. Add it when the user already has one or wants their
own library; for the catalog alone, the studio server is the no-account path. Plain HTTP
(below) also needs no account.
Without MCP: the HTTP endpoint
curl -s 'https://three.ws/api/catalog?q=industrial+lamp&kind=object&limit=5'
curl -s 'https://three.ws/api/catalog?id=object:painted_wooden_chair_01'The search form returns items[] with id, title, tags, license, url (the CDN GLB or
clip JSON), thumb, and facets you can use to narrow the next query. The id form adds
links, related, and snippets for every framework that applies.
Search semantics worth knowing: every word must match something, which keeps a two-word
query precise. If nothing matches all of them, the response comes back with relaxed: true
and the partial matches, best first. Check that flag before telling a user you found an exact
match.
Putting it in a project: the CLI
npx @three-ws/assets search wooden chair --kind object
npx @three-ws/assets add object:painted_wooden_chair_01add downloads the GLB into public/three-ws/ (or three-ws-assets/ when the project has no
public/ directory) and prints the snippet already rewritten to the local path, so the
host site does not depend on the three.ws CDN staying up.
It is safe to re-run: identical bytes report as already up to date, and a file edited after it
was added is never overwritten without --force.
Useful flags: --dir <path>, --framework <f>, --thumb, --json.
Which framework to emit
get_item_source (and show/add in the CLI) default to the right one per kind. Override
with framework only when the project dictates it.
| Framework | Emits | Default for |
model-viewer | The <model-viewer> tag, build, and integrity hash the three.ws browse grids render with | props |
agent-3d | The <agent-3d> web component, pinned to the exact published version with its SRI hash | rigged characters |
three | Plain three.js: GLTFLoader for a model, THREE.AnimationClip.parse for a clip | motion clips |
react | The same as a React component, or a hook for a clip | React projects |
all | Every applicable variant in one response | when you are choosing |
The agent-3d snippet is never pinned to latest, because latest can change under the
reader with no action on their side. Keep the version and the integrity attribute intact
when you paste it.
Worked example
User: "put a chair on the landing page"
search_catalog { "q": "wooden chair", "kind": "object", "limit": 3 }10 matches for "wooden chair" (showing 3 from offset 0):
- `object:painted_wooden_chair_01` | Painted Wooden Chair 01 | CC0 | chair, wood, painted
- `object:painted_wooden_chair_02` | Painted Wooden Chair 02 | CC0 | old, wooden, vintage
- `object:WoodenChair_01` | Wooden Chair 01 | CC0 | wood, prop, vintageget_item_source { "id": "object:painted_wooden_chair_01" }Returns the <model-viewer> block to paste, the preview link, and the license (CC0). Paste
it, tell the user which asset you used and that it is public domain, and link the preview so
they can look at it before shipping.
Licensing
Every object in the library is CC0: public domain, commercial use fine, no attribution
required. Characters and clips carry their own license field, which travels with every
response. Read it and pass it on; do not assume CC0 outside the object library.
Related skills
generate-3d-modelwhen the catalog has no match for a prop.create-3d-avatarwhen the catalog has no match for a character.embed-three-ws-avatarfor the full<agent-3d>embedding story, including moods, animations, and driving the avatar from page code.rig-a-modelto add a skeleton to a static GLB you already have.
In this repository62 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- docs/llms-full.txtllms.txt
- docs/llms.txtllms.txt
- llms-full.txtllms.txt
- llms.txtllms.txt
- public/llms-full.txtllms.txt
- public/llms.txtllms.txt
- anatomySkill
- authenticate-walletSkill
- build-an-agent-skillSkill
- connect-three-ws-mcpSkill
- create-3d-avatarSkill
- create-a-three-ws-agentSkill
- embed-three-ws-avatarSkill
- fundSkill
- gcp-triageSkill
- generate-3d-modelSkill
- hire-an-agentSkill
- metamask-agent-walletSkill
- metamask-agent-workflowsSkill
- monetize-serviceSkill
- okx-agent-chatSkill
- okx-agentic-walletSkill
- okx-agent-identitySkill
- okx-agent-payments-protocolSkill
- okx-agent-taskSkill
- okx-ai-guideSkill
- okx-ai-supportSkill
- okx-audit-logSkill
- okx-dapp-discoverySkill
- okx-defi-investSkill
- okx-defi-portfolioSkill
- okx-dex-bridgeSkill
- okx-dex-marketSkill
- okx-dex-signalSkill
- okx-dex-socialSkill
- okx-dex-strategySkill
- okx-dex-swapSkill
- okx-dex-tokenSkill
- okx-dex-trenchesSkill
- okx-dex-wsSkill
- okx-growth-competitionSkill
- okx-how-to-playSkill
- okx-onchain-gatewaySkill
- okx-securitySkill
- okx-task-watchSkill
- okx-wallet-portfolioSkill
- pay-for-serviceSkill
- query-onchain-dataSkill
- rig-a-modelSkill
- search-for-serviceSkill
- sell-an-agent-skillSkill
- send-usdcSkill
- tradeSkill
- x402Skill
- changelog-and-docsSkill
- deploy-runbookSkill
- engineering-standardsSkill
- maintain-claude-mdSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

