by nirholas
Open-source 3D AI agent framework — GLB/glTF avatars with LLM brains, memory, emotions, and autonomous payments. MCP server · x402 · Solana/EVM · Three.js. Embed anywhere as a web component. Character studio, animation gallery, OAuth 2.1. Browser-native.
# Add to your Claude Code skills
git clone https://github.com/nirholas/three.wsLast scanned: 8/24/2026
{
"issues": [
{
"type": "npm-audit",
"message": "@ai-sdk/provider-utils: @ai-sdk/provider-utils has an Uncontrolled Resource Consumption issue",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@bnb-chain/greenfield-js-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@bonfida/spl-name-service: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@colyseus/auth: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@colyseus/core: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@colyseus/redis-driver: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@colyseus/redis-presence: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@coral-xyz/anchor: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@cosmjs/amino: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@cosmjs/crypto: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@cosmjs/proto-signing: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@cosmjs/stargate: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@cosmjs/tendermint-rpc: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethereum-attestation-service/eas-contracts: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@ethereum-attestation-service/eas-sdk: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@ethersproject/abi: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/abstract-provider: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/abstract-signer: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/contracts: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/hash: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/hdnode: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/json-wallets: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/providers: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/signing-key: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/transactions: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/wallet: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@ethersproject/wordlists: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@libp2p/kad-dht: @libp2p/kad-dht: Unvalidated PUT_VALUE records allow unbounded disk exhaustion on DHT server nodes",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@metamask/abi-utils: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@metamask/eth-sig-util: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@metamask/utils: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@metaplex-foundation/mpl-candy-machine: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@meteora-ag/dynamic-bonding-curve-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@nirholas/pump-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-block: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-blockchain: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-common: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-ethash: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-evm: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-statemanager: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-trie: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-tx: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-util: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@nomicfoundation/ethereumjs-vm: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "@openzeppelin/merkle-tree: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@pump-fun/agent-payments-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@pump-fun/pump-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@pump-fun/pump-swap-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@puppeteer/browsers: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@solana/buffer-layout-utils: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@solana/pay: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@solana/spl-token: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "@solana/web3.js: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@tetsuo-ai/sdk: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@web3-react/core: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "adm-zip: adm-zip: Crafted ZIP file triggers 4GB memory allocation",
"severity": "high"
},
{
"type": "npm-audit",
"message": "agent0-sdk: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "bigint-buffer: bigint-buffer Vulnerable to Buffer Overflow via toBigIntLE() Function",
"severity": "high"
},
{
"type": "npm-audit",
"message": "bn.js: bn.js affected by an infinite loop",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "browserify-sign: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "colyseus: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "create-ecdh: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "crypto-browserify: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "dompurify: DOMPurify: IN_PLACE hook removal leaves a detached subtree executable, causing XSS",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "elliptic: Elliptic Uses a Cryptographic Primitive with a Risky Implementation",
"severity": "low"
},
{
"type": "npm-audit",
"message": "esbuild: esbuild allows arbitrary file read when running the development server on Windows",
"severity": "low"
},
{
"type": "npm-audit",
"message": "ethereum-cryptography: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "ethereumjs-util: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "ethers: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "ethjs-unit: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "extract-zip: extract-zip unvalidated symlink path traversal",
"severity": "high"
},
{
"type": "npm-audit",
"message": "fast-xml-parser: fast-xml-parser XMLBuilder: XML Comment and CDATA Injection via Unescaped Delimiters",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "grant: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "hardhat: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "helia: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "jayson: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "jest-junit: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "jwk-to-pem: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "livepeer: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "lodash.set: Prototype Pollution in lodash",
"severity": "high"
},
{
"type": "npm-audit",
"message": "merkletreejs: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "nanoid: Predictable results in nanoid generation when given non-integer values",
"severity": "high"
},
{
"type": "npm-audit",
"message": "node-stdlib-browser: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "number-to-bn: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "puppeteer: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "puppeteer-core: Vulnerability found",
"severity": "high"
},
{
"type": "npm-audit",
"message": "qwen-ai-provider: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "request-oauth: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "secp256k1: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "undici: Undici has an unbounded decompression chain in HTTP responses on Node.js Fetch API via Content-Encoding leads to resource exhaustion",
"severity": "high"
},
{
"type": "npm-audit",
"message": "uuid: uuid: Missing buffer bounds check in v3/v5/v6 when buf is provided",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "vite: launch-editor: NTLMv2 hash disclosure via UNC path handling on Windows",
"severity": "high"
},
{
"type": "npm-audit",
"message": "vite-plugin-node-polyfills: Vulnerability found",
"severity": "low"
},
{
"type": "npm-audit",
"message": "web3-utils: Vulnerability found",
"severity": "medium"
},
{
"file": ".agents/skills/okx-dapp-discovery/SKILL.md",
"line": 477,
"type": "dangerous-command",
"message": "Dangerous command (writes to Claude config): \"> - The Read step further below uses `$HOME/.claude/\"",
"severity": "medium"
}
],
"status": "WARNING",
"scannedAt": "2026-08-24T04:44:25.401Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}three.ws is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by nirholas. Open-source 3D AI agent framework — GLB/glTF avatars with LLM brains, memory, emotions, and autonomous payments. MCP server · x402 · Solana/EVM · Three.js. Embed anywhere as a web component. Character studio, animation gallery, OAuth 2.1. Browser-native. It has 100 GitHub stars.
three.ws returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/nirholas/three.ws" and add it to your Claude Code skills directory (see the Installation section above).
three.ws is primarily written in JavaScript. It is open-source under nirholas on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh three.ws against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Website · Docs · Changelog · X / Twitter · GitHub · $THREE on pump.fun
https://github.com/user-attachments/assets/d52515d1-cb04-4dd6-98bd-fef233312dc4
Give your AI a body. three.ws is an open source (Apache-2.0), browser-native 3D AI agent platform. Type a prompt and Forge generates a textured 3D model, or drop a GLB you already have. Add an LLM brain, register on-chain, and embed anywhere: no plugins, no server uploads, no installs required.
Try it in 60 seconds: open three.ws/forge, type "a brass steampunk owl, full body", and download the GLB. Text→3D, image→3D, and sketch→3D — free draft tier, no account. Jump to the Forge section ↓
Want to build it with us? Your first contribution goes from clone to open pull request in about 15 minutes, with a full worked example. Every
good first issuenames the file to change and the command that proves it worked. Say hello in Discussions or Telegram.
Drag to rotate. This is not an image or a video: it is an interactive 3D model rendered natively by GitHub. The avatar was generated from a one-line text prompt on three.ws Forge (free tier), decimated to 1,200 triangles, and embedded as ASCII STL with readme-3d, our open-source toolkit for putting 3D models in any GitHub README, issue, or discussion.
solid threews_avatar
facet normal -0.34 -0.93 0.11
outer loop
vertex 7.06 -3.99 23.19
vertex 9.13 -4.19 27.78
vertex 3.98 -2.59 25.51
endloop
endfacet
facet normal -0.94 -0.30 0.16
outer loop
vertex 17.94 3.99 37.76
vertex 18.01 2.79 35.88
vertex 18.27 2.91 37.66
endloop
endfacet
facet normal -0.90 0.43 0.10
outer loop
vertex 18.27 2.91 37.66
vertex 18.01 2.79 35.88
vertex 17.73 2.15 36.16
endloop
endfacet
facet normal -0.92 0.36 0.15
outer loop
vertex 18.27 2.91 37.66
vertex 17.73 2.15 36.16
vertex 17.95 2.20 37.37
endloop
endfacet
facet normal 0.94 0.34 0.00
outer loop
vertex 27.20 5.38 33.47
vertex 28.47 1.83 38.79
vertex 28.90 0.61 31.76
endloop
endfacet
facet normal 0.91 -0.25 0.33
outer loop
vertex 28.01 -2.89 36.41
vertex 28.47 1.83 38.79
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal 0.99 -0.14 0.08
outer loop
vertex 28.47 1.83 38.79
vertex 28.01 -2.89 36.41
vertex 28.90 0.61 31.76
endloop
endfacet
facet normal 0.91 0.06 -0.40
outer loop
vertex 28.90 0.61 31.76
vertex 27.10 -0.47 27.53
vertex 27.03 3.46 27.96
endloop
endfacet
facet normal 0.83 -0.51 -0.22
outer loop
vertex 28.01 -2.89 36.41
vertex 27.10 -0.47 27.53
vertex 28.90 0.61 31.76
endloop
endfacet
facet normal 0.91 0.38 -0.16
outer loop
vertex 27.20 5.38 33.47
vertex 28.90 0.61 31.76
vertex 27.03 3.46 27.96
endloop
endfacet
facet normal 0.89 0.45 0.09
outer loop
vertex 26.88 4.99 38.80
vertex 28.47 1.83 38.79
vertex 27.20 5.38 33.47
endloop
endfacet
facet normal 0.90 -0.39 -0.20
outer loop
vertex 28.01 -2.89 36.41
vertex 26.22 -3.16 28.82
vertex 27.10 -0.47 27.53
endloop
endfacet
facet normal 0.82 -0.02 0.58
outer loop
vertex 23.27 4.13 46.24
vertex 26.14 -2.49 41.92
vertex 28.47 1.83 38.79
endloop
endfacet
facet normal 0.80 0.40 0.44
outer loop
vertex 26.88 4.99 38.80
vertex 23.27 4.13 46.24
vertex 28.47 1.83 38.79
endloop
endfacet
facet normal 0.70 -0.07 -0.71
outer loop
vertex 27.03 3.46 27.96
vertex 24.69 2.15 25.80
vertex 25.39 4.36 26.25
endloop
endfacet
facet normal 0.63 -0.73 0.27
outer loop
vertex 28.01 -2.89 36.41
vertex 26.14 -2.49 41.92
vertex 24.39 -5.14 38.78
endloop
endfacet
facet normal 0.56 -0.82 0.08
outer loop
vertex 28.01 -2.89 36.41
vertex 24.39 -5.14 38.78
vertex 24.40 -5.59 34.11
endloop
endfacet
facet normal 0.64 -0.76 -0.12
outer loop
vertex 28.01 -2.89 36.41
vertex 24.40 -5.59 34.11
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal 0.37 -0.89 -0.28
outer loop
vertex 24.40 -5.59 34.11
vertex 23.26 -5.15 31.23
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal 0.42 -0.20 -0.89
outer loop
vertex 27.10 -0.47 27.53
vertex 24.15 0.41 25.94
vertex 24.69 2.15 25.80
endloop
endfacet
facet normal 0.34 -0.94 0.00
outer loop
vertex 26.22 -3.16 28.82
vertex 23.11 -4.26 27.61
vertex 24.16 -3.89 27.34
endloop
endfacet
facet normal 0.40 -0.88 -0.23
outer loop
vertex 23.26 -5.15 31.23
vertex 23.11 -4.26 27.61
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal -0.24 0.97 -0.05
outer loop
vertex 24.58 4.14 25.81
vertex 25.39 4.36 26.25
vertex 22.37 3.43 22.62
endloop
endfacet
facet normal 0.64 -0.61 -0.46
outer loop
vertex 27.10 -0.47 27.53
vertex 24.14 -2.60 26.21
vertex 21.62 -2.12 22.03
endloop
endfacet
facet normal 0.78 -0.11 -0.62
outer loop
vertex 25.39 4.36 26.25
vertex 22.59 1.54 23.24
vertex 22.37 3.43 22.62
endloop
endfacet
facet normal 0.78 -0.12 -0.61
outer loop
vertex 25.39 4.36 26.25
vertex 24.69 2.15 25.80
vertex 22.59 1.54 23.24
endloop
endfacet
facet normal 0.46 -0.87 -0.17
outer loop
vertex 22.82 1.11 26.12
vertex 22.59 1.54 23.24
vertex 24.69 2.15 25.80
endloop
endfacet
facet normal 0.05 -0.66 -0.75
outer loop
vertex 23.11 -4.26 27.61
vertex 24.14 -2.60 26.21
vertex 24.16 -3.89 27.34
endloop
endfacet
facet normal 0.32 -0.80 0.50
outer loop
vertex 26.14 -2.49 41.92
vertex 21.60 -3.52 43.21
vertex 24.39 -5.14 38.78
endloop
endfacet
facet normal -0.37 -0.90 -0.21
outer loop
vertex 23.26 -5.15 31.23
vertex 21.41 -3.57 27.63
vertex 23.11 -4.26 27.61
endloop
endfacet
facet normal -0.23 -0.54 -0.81
outer loop
vertex 23.11 -4.26 27.61
vertex 21.41 -3.57 27.63
vertex 24.14 -2.60 26.21
endloop
endfacet
facet normal -0.01 -1.00 0.10
outer loop
vertex 24.39 -5.14 38.78
vertex 20.81 -5.34 36.22
vertex 24.40 -5.59 34.11
endloop
endfacet
facet normal 0.52 -0.77 0.37
outer loop
vertex 20.28 -1.08 52.96
vertex 18.87 -2.53 51.93
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal -0.14 -0.95 0.26
outer loop
vertex 21.60 -3.52 43.21
vertex 20.81 -5.34 36.22
vertex 24.39 -5.14 38.78
endloop
endfacet
facet normal -0.13 -0.99 -0.10
outer loop
vertex 24.40 -5.59 34.11
vertex 20.81 -5.34 36.22
vertex 23.26 -5.15 31.23
endloop
endfacet
facet normal 0.03 -0.99 -0.15
outer loop
vertex 22.82 1.11 26.12
vertex 19.99 1.49 22.99
vertex 22.59 1.54 23.24
endloop
endfacet
facet normal 0.91 0.14 0.38
outer loop
vertex 23.27 4.13 46.24
vertex 20.84 0.68 53.36
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal -0.14 -0.99 -0.03
outer loop
vertex 24.14 -2.60 26.21
vertex 18.46 -1.70 22.74
vertex 21.62 -2.12 22.03
endloop
endfacet
facet normal 0.87 0.27 0.43
outer loop
vertex 20.33 2.84 53.04
vertex 20.84 0.68 53.36
vertex 23.27 4.13 46.24
endloop
endfacet
facet normal -0.48 -0.82 0.30
outer loop
vertex 22.34 1.45 26.31
vertex 18.93 2.50 23.81
vertex 22.82 1.11 26.12
endloop
endfacet
facet normal -0.49 -0.80 0.35
outer loop
vertex 22.82 1.11 26.12
vertex 18.93 2.50 23.81
vertex 19.99 1.49 22.99
endloop
endfacet
facet normal 0.80 -0.36 0.47
outer loop
vertex 20.84 0.68 53.36
vertex 20.28 -1.08 52.96
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal -0.62 -0.30 0.72
outer loop
vertex 22.22 3.87 27.21
vertex 18.93 2.50 23.81
vertex 22.34 1.45 26.31
endloop
endfacet
facet normal -0.80 0.13 0.59
outer loop
vertex 21.74 -0.40 26.89
vertex 18.46 -1.70 22.74
vertex 21.76 -1.78 27.21
endloop
endfacet
facet normal -0.79 -0.21 0.58
outer loop
vertex 21.76 -1.78 27.21
vertex 18.46 -1.70 22.74
vertex 21.75 -2.39 26.98
endloop
endfacet
facet normal -0.54 -0.84 -0.09
outer loop
vertex 23.26 -5.15 31.23
vertex 17.89 -1.75 31.72
vertex 21.41 -3.57 27.63
endloop
endfacet
facet normal 0.10 -0.26 -0.96
outer loop
vertex 22.59 1.54 23.24
vertex 19.99 1.49 22.99
vertex 20.26 3.48 22.48
endloop
endfacet
facet normal 0.96 0.24 0.12
outer loop
vertex 20.67 -0.54 57.28
vertex 20.84 0.68 53.36
vertex 20.33 2.84 53.04
endloop
endfacet
facet normal -0.53 -0.80 -0.29
outer loop
vertex 20.81 -5.34 36.22
vertex 17