← Search

Anatomy
Creative and media 📌 Pinned version: commit 1482e84
⚙ Needs: Before you start: read this whole install prompt…

Anatomy

Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object: many small precise solid parts, four-tone shading, correct painter's...

At a glance
What
Build crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object: many small precise solid parts, four-tone shading, correct painter's...
Cost
Free
Needs
Before you start: read this whole install prompt, tell me in a few lines what this skill does and what installing it involves, and wait for my go-ahead before you do anything else.
Install
Copy the installer prompt below into your Muse — your agent does the rest.

Version:

⌁

Install

Copy the install package below, then paste it into Muse📌 Pinned version: commit 1482e84
Wanna be extra careful?

The install prompt below already includes the vetting steps: your agent follows the community checklist before installing anything with executable code. Want more?

How to check a build before installing →

🔒 Security and provenance
📌 Pinned version: commit 1482e84 · 2026-10-19
Skill Harbor never reviews the code of a listed skill. These are dated facts about the install prompt and our install test, not a safety certification. Review a skill yourself before you install it. How we verify

Before you start: read this whole install prompt, tell me in a few lines what this skill does and what installing it involves, and wait for my go-ahead before you do anything else. Prerequisites: none of them is a paid service or an API key. For the install itself you only need git (or a way to download the pinned commit from GitHub). For using the skill afterwards, read this first: the skill needs Node.js 20.10 or later — it uses only Node's built-in modules, there are no npm dependencies to install for the framework-free path, and no package.json to install from. Its checks (screenshots, line check, 3D check, printable PDFs) need Chrome or Chromium installed locally; the scripts find it in the usual places or through the CHROME_PATH environment variable. The React path only — kit/react/ and the test-rig and spot-plate examples — needs React 18 or later (and TypeScript) from my own project; it is never installed by this install. The optional community-gallery publish route only — never part of normal use — needs git and the GitHub CLI (gh), signed in as me. There is no account, no API key and no telemetry for installing or for building figures. Install "anatomy" for me. It builds crafted, highly detailed, interactive isometric SVG figures that explain a technical idea as a real physical object — a test rig, a dial gauge, a cabinet, a rocket engine on a stand — with many small precise solid parts, four-tone shading, correct painter's order, a framed card with title, hint and live readout, and calm eased motion. It works framework-free (a Node build script that writes a standalone HTML page, or a lone SVG file) and in React/Next.js, can add WebGL shaders that live inside the drawing in the same isometric perspective (fire, exhaust, water, caustics, lamp light), has an optional beta 3D mode for parts that turn in true 3D, can print a finished figure as an A4 or Letter PDF (poster, drawing or detailed sheet), and can — only when I explicitly ask and confirm — publish a finished figure to the Anatomy community gallery. Every number a figure shows comes from the same model that moves its parts, and the workflow verifies its own work: a geometry audit, a line-end check, and headless-Chrome screenshots and 4x close-ups in both themes. Repository: https://github.com/wheresryan22/anatomy (the skill is the repository root itself: SKILL.md sits at the root. The install perimeter below is the 81 files the skill actually uses — see point 2; the other 92 tracked files of the repository are not installed) Pinned version: install the code at commit 1482e8469b0a9e0d8cc18ea2740a01423d29ae80 exactly. Do not substitute a newer version. If this commit is unreachable, stop and tell me. 1. Clone https://github.com/wheresryan22/anatomy into a temporary folder, check out commit 1482e8469b0a9e0d8cc18ea2740a01423d29ae80, and copy only the 81 perimeter files listed below, keeping their exact relative paths (SKILL.md at the root, plus references/, kit/, the 14 runtime scripts in scripts/, agents/openai.yaml, LICENSE, and the example sources in examples/). Then compare every copied file with the fingerprints recorded for this listing on 2026-10-19: [FINGERPRINTS] - LICENSE: SHA-256 87c078ab9d90a3044f359e6b563d4e6afea7aa060897cf4f21618687b3856796 - SKILL.md: SHA-256 3423ada45a05033bb6e320dfc3b3ac832569969a5afb059bbfc9096c5cf0c71b - agents/openai.yaml: SHA-256 254b17510460bc5151295b1e1e40b6a1aceeff60a0dda4e9594adcfa36819526 - examples/arcade-cabinet/arcade-cabinet.css: SHA-256 a0ea7bce89a665ddd13f72daf31849c07d8b517b66a3d555543aa506b8933629 - examples/arcade-cabinet/build.mjs: SHA-256 be649f9fed8f1841b96546577729096af63670ef7b83d4cec32716df3429a03d - examples/arcade-cabinet/live.js: SHA-256 d9f02ea9193f3109501333bdfb4ab297a71457aaba431f05f5df667ea8c40c8f - examples/arcade-cabinet/parts.mjs: SHA-256 3ba74b8c55e72933b1e119e3d24c939f654b2c43d41ff26cf855f064cbc7d2a3 - examples/arcade-cabinet/screen.mjs: SHA-256 8fbb8aebb1d657508979ec9b58a29281c71403396df1fcdc6f8f834fe9097be9 - examples/arcade-cabinet/sheet.mjs: SHA-256 b5f71ec5682e49c954ba344ee66a2f75d06f76fe7006e6a714c71cc0552eff81 - examples/desk-computer/build.mjs: SHA-256 d378f9814acf75bc915921d4f2d83ed1eb4991a8b4298eb0de0e10383b2ff66d - examples/dial-indicator/build.mjs: SHA-256 e4eaa2324af7f2630650ca72e52a78d56159213a786e14fba8321344789f990d - examples/push-button/build.mjs: SHA-256 830973d137441897f03f55d2f19ba0a5f9b22221e72bf5060809753ebfb02e45 - examples/push-button/sheet.mjs: SHA-256 be472b279a847016d4ea3ca4ab28365998e1f737248049248270a4d7471db828 - examples/raptor-engine/build.mjs: SHA-256 cf5dc0d679bee415fc36c74f2e67d4620e106011037dd3a0d44dcdc559084427 - examples/raptor-engine/live.js: SHA-256 03d801ef2b75e17a38ebc3d5cb9178747226ea8c2e0c527caafb9c72844d88d8 - examples/raptor-engine/raptor.css: SHA-256 f850575feeeacac8ef5d9d9c49359f4deaef848666c68a4dafa9727fe926cd6e - examples/raptor-engine/sheet.mjs: SHA-256 20a125dc6db40c7e874e3c928e5e119ad4e998387b7e0bf62bb612d6d9815c48 - examples/ripple-tank/build.mjs: SHA-256 5a5b846bcd146630be3eafb73ebd04cfdd2101d05def15a877fff7188822b493 - examples/ripple-tank/live.js: SHA-256 5bff25143635ff13af50a7bee015289d8ada5a2f5b13c0cdb8a1516897f03944 - examples/ripple-tank/model.mjs: SHA-256 f6315aa53e80c0c69bf3c52baf0a1340ca4daacfae80245def02f357c2d33882 - examples/ripple-tank/ripple.css: SHA-256 1bf7a778f0b50928adcd54e67c44aa2b12a6877b45f15a0b697d87ab7be0dd5c - examples/spot-plate/art.tsx: SHA-256 aecef8d6ee247e99d52717371a319283af8b1bbba2adfcdd4d012553d2963b38 - examples/spot-plate/drops.ts: SHA-256 9bec874c5e324d69a25cc9085ecf2c5d9c3c2e3bd1a8c667c45e048301b899d4 - examples/spot-plate/fan.ts: SHA-256 648c1d946e9512afcae60e077d2436926ca1ea94b02c944df8624419812077b1 - examples/spot-plate/figure.tsx: SHA-256 b9db1ef99bfac58d55d0506f05e0c178e5c9566c61cbf26826ea25cfaa57805f - examples/spot-plate/geometry.ts: SHA-256 faf7d6bf1b475daacd4751687d409d7a5c03a6c2bb216ae81beadce5a3cea99a - examples/spot-plate/live.tsx: SHA-256 e96fd47aa4ab250a6b2c6fe3c6c3c96d4bcf737dff7f084d4912f5d1ef195116 - examples/spot-plate/rig.ts: SHA-256 b19fc1637a1f4c411c23f34c7a48361f308402b15b11efc44fb6555e8f67ceea - examples/spot-plate/spot-plate.css: SHA-256 b31e4c8e02f4de0b77fe0a71718f59d7df2e3abc3d9772f802e00fc3d8a582bd - examples/test-rig/art.tsx: SHA-256 a6b8c1094a9402380d9835ecedbcc677254686b7391027a20da10fc8bf24dae5 - examples/test-rig/figure.tsx: SHA-256 2dbaef167b9a6a96de74357fc57ae2a650159007852d3d4e8c471b8837e463a9 - examples/test-rig/geometry.ts: SHA-256 b8c275eb58b093a85c312f90dc5d79fd9d9a93ae266e42a8a6fa7f6f9aaeb571 - examples/test-rig/live.tsx: SHA-256 46a4c338a2805fc0078a20d6f4e12d9de20fc4145ec051ffce3964b164c5a7da - examples/test-rig/pose.ts: SHA-256 380e1d07afcaa3a4e2cd1b13556500f2b336e354fa1c369918b3173f0c9d0866 - examples/test-rig/rig.ts: SHA-256 9672431d6982acaa7b6f28e88e1371443bd6a10fb906ff52fc7bdb0f5fd88b05 - examples/test-rig/stretch.css: SHA-256 dd15f4582b5fb9b228dc7e32ef57dbcba0129dad38b36e5707247eeb7a2abe8b - examples/test-rig/view.ts: SHA-256 5465a3e122c2074f8de755b874c7bdb783b365e4140e3e741fc91a32cd69500c - examples/turning-dial/build.mjs: SHA-256 dcb1b2a1fec2c98c2cea401c6a5b1c7e6545da3b5ea08433cfd72a7f27a49248 - examples/turning-dial/dial.css: SHA-256 769fc9596dcd2bbc46823d6e2816a3e584b52e0a6db359d93bedce16f354bedd - examples/turning-dial/live.js: SHA-256 e872f0d930ba583ce7c4c252a3767aa6b9f6cd1f97fe6dddb212653a0579b41f - examples/turning-dial/stress.mjs: SHA-256 6d3aec19d8ce6daadffe15113da9415c2fe084c6407d1bb7fb4b5fec86330314 - kit/audit.mjs: SHA-256 74e605b5d549c1f31c8a1104db7560057105cf86809bf6ced00e4ac79194c8e2 - kit/canvas-painter.mjs: SHA-256 1918db10279c9d9df87d7df52c7ed8c2de8acd0bbce214c8f2115a39e7f955ac - kit/gl-shared.mjs: SHA-256 8c3773cf3e15844df332db3ba55af940186edb2227201e5839347ecc390c039c - kit/gl.mjs: SHA-256 17a477411e0b9fcb8e84e718094eaefa6be2c0b7d6ce15ee03fe8e252944130a - kit/iso-kit.mjs: SHA-256 6d3ecc725d30c3b0346da309cf61dfa5a65017c23620bbd4093009d4fb104018 - kit/iso-kit.ts: SHA-256 e9fc988c61a11bfac1f097e62419915ea86b2130ab091f1b50c0e019c907e253 - kit/iso.css: SHA-256 ef19bac5a42ba9be42b56b2c1cf7fc7e21d332a8060765e9ca1d987b8ab23924 - kit/lathe.mjs: SHA-256 a4e7e974b1a37e603ad2b76363b6f9815cc101dfff0ad277a5d4e8f1dc56fccb - kit/pdf-button.mjs: SHA-256 884de49c75f11c78a102b4b413006f36b087e0e3bc9f33dc462dc44430d69342 - kit/react/draw.tsx: SHA-256 d5389bd78aa3d5424a37b1ce6f635bd102eb86faf27d064b10957716278a631c - kit/react/live.tsx: SHA-256 6d01fa12bca4ec14d1b7d7d5331d18a997dd3ee131d59dd57f83b932a1705f42 - kit/tube.mjs: SHA-256 bcb3cc360f6d83e6a5753f4c464b4587ab7965028b05a5d58e285abce58667c9 - kit/turn-audit.mjs: SHA-256 e4385f1a8a388c4544b49c6677ff8ab7048f7fcfa8cd5fe653d96a4a0df62843 - kit/turn-build.mjs: SHA-256 0c088efd9f22329d1b0c2190c95e5b5b43a2c46deae6ff047b3166ef643cfa83 - kit/turn-fixed.mjs: SHA-256 7429b46eb7673aefb6ed90adeaf130c1dafe8e32af038cbde24a04e693d13fc7 - kit/turn.mjs: SHA-256 cb4b530b5e1750ba0e4fd2367d5f25e00195c0136672aa2ecd665c0622ffd1a2 - references/3d.md: SHA-256 de58da5415b4c9fe7712b5b71e0868c4d36363d54e4e32d98a6b016363554536 - references/craft.md: SHA-256 38761fa9b81d66b30e50b05488501d4815830d3627f153d60f76ca783f598936 - references/kit.md: SHA-256 684672e069fdb52735efabc3f4310dedd840d0c8066a8dc7784be2b7e656be71 - references/motion.md: SHA-256 dda401ca1b4661a5f0b7c1e33dac6e7e4b8c13d51ca5d9312123a5c02dab320b - references/print.md: SHA-256 1b4146c35214f76bf8ddc1765b3d1540d9bdfceba0c641e7b93c33229265c0be - references/publish.md: SHA-256 57790e740662bc8f2044ba5f0385598bad955d6a38dd2a47d56d644f21d8deb8 - references/react.md: SHA-256 76b5cee6e0a7513e3c77a832e3f58b1343806597d469774e1749f141525801fd - references/verify.md: SHA-256 fb81437fc5d75094a34432eb6f545644aa228e15173a27d08b3cace912033561 - references/walkthrough.md: SHA-256 4d157e0169080a6ed44d5b06de0a5de2931baf3d0fac30283d2644dd66506dfa - references/webgl.md: SHA-256 fb4e2421c6a705d4ad849c8e516731ebc958bc5ff0855548ff58232b0aa01923 - scripts/capture.mjs: SHA-256 12e901efe79df75073eeeaf5462ac989a8e2892279253d27f8ee114c54be43d3 - scripts/chrome-port.mjs: SHA-256 6775d3d389d26f37a52be8358aa88d1dc0aded63cb24ae20a936505a192e5d9d - scripts/drive.mjs: SHA-256 49c22499827a2a5effb802513976bcb8b6dfced139bb4d677ff6e9edd2700eec - scripts/fingerprint.mjs: SHA-256 1582728c6f70b340f8fdda28f287e6f8d45e291ab739ef9ff527a5374f7b1654 - scripts/inline-kit.mjs: SHA-256 01e08df7c2556ce52a7e8ed9009a332036b209ab7e42389874af2a65fda6e9db - scripts/line-ends.mjs: SHA-256 da79cc624c5bda0cb8af8f864dbe53026e44ca2377dab3665076ad570d804f42 - scripts/lines.mjs: SHA-256 b0ca73ab3a0d1cd4a28fda933496cbd7384ef315d821b5d2fffae1c704ce79cc - scripts/print-sheet.mjs: SHA-256 d2874dd7353a55b1a4aec87bd642fdeb8230a2aadeb33a16ed9cb5bae96d091c - scripts/print.mjs: SHA-256 eb3b2c6f45f10c9a66ddd9e7f89867b70c8dcb6a8200ac030028f16df306b6e8 - scripts/publish.mjs: SHA-256 03400f14063e717a7f05d599d02fc47fd18ba60756f170d6e0ed5065fae1fdbe - scripts/session.mjs: SHA-256 8896ea1587a5a612a20db7a7a9310a53387d6eef640277834f7bac7e69109302 - scripts/turn-bench.mjs: SHA-256 d86cd53e3702fa92e22b4052ee9bf47da10fd0a71401fe477bd8da2fe30b1631 - scripts/turn-check.mjs: SHA-256 c76f93ad3aad63006b4539dd420d671e4665ac148ba733d3cd50b2ffd4b5c5f2 - scripts/turn-fidelity.mjs: SHA-256 d033fa1fcff2672db9a823d5155b531d190875a42e2812091cb6079b14d4bf20 If a file does not match, it changed since the listing was prepared: do not install it yet, tell me what you found and let me decide. 2. Read SKILL.md in full, all 10 guides in references/ (craft.md, kit.md, motion.md, react.md, verify.md, webgl.md, walkthrough.md, 3d.md, print.md, publish.md), all of kit/, all 14 runtime scripts in scripts/, and the example sources, and tell me in plain words: what the skill does when used, which services it connects to, whether it reads or sends any personal information or keys, and anything that seems unusual. Stop on any red flag and tell me before going further. Confirm these points from the files: - The installed folder holds exactly 81 files: SKILL.md and LICENSE at the root, agents/openai.yaml, the 10 references, 16 files in kit/ (iso-kit.ts, iso-kit.mjs, iso.css, lathe.mjs, tube.mjs, audit.mjs, gl.mjs, gl-shared.mjs, canvas-painter.mjs, turn.mjs, turn-build.mjs, turn-audit.mjs, turn-fixed.mjs, pdf-button.mjs, react/draw.tsx, react/live.tsx), 14 runtime scripts in scripts/ (capture.mjs, chrome-port.mjs, drive.mjs, fingerprint.mjs, inline-kit.mjs, line-ends.mjs, lines.mjs, print.mjs, print-sheet.mjs, publish.mjs, session.mjs, turn-bench.mjs, turn-check.mjs, turn-fidelity.mjs), and 38 example source files in examples/ (the build scripts, live code, models, sheets and styles of the 9 examples: dial-indicator, desk-computer, arcade-cabinet, raptor-engine, ripple-tank, test-rig, spot-plate, turning-dial, push-button). The import closure stays inside this perimeter plus Node built-ins: examples import kit/ and scripts/inline-kit.mjs, kit files import each other (inline-kit.mjs reads iso-kit.mjs, gl.mjs, turn.mjs, turn-fixed.mjs, canvas-painter.mjs and gl-shared.mjs from kit/), and the runtime scripts import only each other (chrome-port, line-ends, fingerprint, session, print-sheet, turn-fidelity) and node: modules. Not installed, because SKILL.md never uses them and nothing in the perimeter imports them: the 45 scripts/*.test.mjs unit tests and tests/fixtures/ (4 PNG files), .github/ (CI, issue forms and README images), evals/evals.json (the authors' evaluation prompts), the repository housekeeping docs (README.md, CHANGELOG.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, .gitignore, .gitattributes), and the 25 generated outputs committed in examples/ (16 built .html pages and 9 .pdf sheets — build.mjs and scripts/print.mjs regenerate them from the installed sources). - Nothing is sent anywhere during installation itself; the only download at install time is the pinned commit from GitHub. No script is run during installation, no key is asked for, and there is no telemetry in the perimeter. - What happens at use time, disclosed here before it ever happens — using the skill is a separate step that only starts when I ask for a figure, and almost everything is local: building a figure (node examples/<name>/build.mjs or my own build script) reads and writes only local files and writes the standalone page next to the build script; the geometry audit (kit/audit.mjs) and the 3D bench (scripts/turn-bench.mjs) are pure local computation. The checks and the printer (scripts/capture.mjs, drive.mjs, lines.mjs, turn-check.mjs, print.mjs) launch my locally installed Chrome or Chromium headless, with a temporary profile in the system temp folder that is removed afterwards, and talk to it only on this machine through the Chrome DevTools protocol at http://127.0.0.1 (a fetch and a WebSocket to 127.0.0.1 on an ephemeral port — nothing leaves this machine); they load the local figure page, and write screenshots, contact sheets and PDFs locally. They read only the CHROME_PATH environment variable (and LOCALAPPDATA on Windows) to find the Chrome binary. A figure I build is itself offline: the gallery rules the skill teaches forbid network calls in figures, and the kit contains no fetch to any outside host (the only http:// address in the code is 127.0.0.1 above, plus the SVG XML namespace http://www.w3.org/2000/svg, which is an identifier, never fetched). - The ONE route that sends data off this machine, disclosed in full: publishing to the community gallery, only when I explicitly ask to publish a finished figure and then confirm the plan (references/publish.md: the agent must show the plan and may run --submit only after my yes; the script itself asks for confirmation unless told --yes after I approved). scripts/publish.mjs first reads, locally, my Claude Code session log (scripts/session.mjs: the .jsonl file for this session under ~/.claude/projects/, located through the CLAUDE_CODE_SESSION_ID environment variable) to compute only the minutes spent and the token count for the figure — the prompt text is searched in that log locally only to find the time window; only the two numbers leave, inside figure.json. With --submit it then uses git and the GitHub CLI under my own signed-in account: gh api user (reads my GitHub login), a permissions check on wheresryan22/anatomy-community, optionally making a fork of wheresryan22/anatomy-community for me (gh repo fork) and gh auth setup-git, a git fetch of the gallery's main from https://github.com/wheresryan22/anatomy-community.git, and then a git push of ONE new folder, figures/<my-github-username>/<figure-id>/, to my fork (or to the gallery itself if I have push access), and gh pr create opening a pull request on wheresryan22/anatomy-community whose body is my figure's prompt plus the line "Published with Anatomy's publish.mjs.". That folder contains only my figure's source files (build script and its local sources, no built pages), a preview PNG made locally by capture.mjs, and figure.json: title, my GitHub username as author, my prompt (the reference guide trims it to 600 characters), the agent name, the model name, the minutes and token count above, the kit fingerprint (a SHA-256 over kit/ plus scripts/inline-kit.mjs, computed by scripts/fingerprint.mjs), the license I chose (MIT or CC-BY-4.0), any tags, and the date. Without --submit, publish.mjs sends nothing at all: it only prepares that folder inside a local clone of the gallery and prints the git and gh commands for me to run myself. Cloning the gallery in the first place (gh repo clone wheresryan22/anatomy-community) is a download from github.com. Never publish anything during installation, and never run publish.mjs for me without my explicit ask and my yes on the shown plan. - Do not install Node.js, Chrome, React or the gh CLI during this install, do not run any build, check, print or publish script, and do not build any figure: those are my decisions, later, when I actually ask for a figure. 3. When I say "yes, install", install it as a skill: copy the 81 perimeter files from the pinned checkout into the agent's skills directory, in a folder named "anatomy", keeping every relative path (SKILL.md at its root). A manual clone followed by copying the listed files into ~/.claude/skills/anatomy is the route described here; any other route is fine only as long as every installed file matches its fingerprint and no extra repository file is added. 4. Verify with no network calls: frontmatter valid (name: anatomy), all 81 files in place with matching fingerprints, and no extra files. Do not run any script in scripts/ or any example build to verify. 5. Report what was installed, where, and what I still need to do myself (for example: have Node.js 20.10+ available before building a figure, and Chrome or Chromium before running the checks or printing; add React 18+ and TypeScript from my own project only if I use the React path; sign in to the GitHub CLI myself only if I later ask to publish to the community gallery, knowing exactly what that route sends as disclosed in point 2; using the skill is a separate step that only starts when I ask for a figure, and the publish send disclosed above happens only then, and only with my explicit yes). GitHub is optional: if I have a GitHub account or the gh CLI, you may use it; otherwise public access is fine. Never require it unless it's in the prerequisites above. Rules: don't touch anything outside the temp folder and the install target. If anything looks off, stop and ask me.

?

Questions

How do I install a build?

Every product page includes a copy-paste install prompt. Paste it into your Muse and it sets the build up for you — no manual configuration.

Where does my money go?

Straight to the seller. Skill Harbor never processes payments: checkout happens on the seller’s own page, usually Stripe.

What does the ✓ next to a creator’s name mean?

It means we confirmed the identity of the person behind the listing. It says nothing about the code itself — always check a build before installing it.