by Garinmckayl
Anima: a Claude Code skill that turns a biology idea into an interactive, sourced, isometric figure. Dopamine receptors, stimulants, addiction circuits, semaglutide.
# Add to your Claude Code skills
git clone https://github.com/Garinmckayl/animaSee how anima compares with popular alternatives.
anima is an open-source data processing skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Garinmckayl. Anima: a Claude Code skill that turns a biology idea into an interactive, sourced, isometric figure. Dopamine receptors, stimulants, addiction circuits, semaglutide. It has 55 GitHub stars.
anima's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/Garinmckayl/anima" and add it to your Claude Code skills directory (see the Installation section above). anima ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
anima is primarily written in JavaScript. It is open-source under Garinmckayl on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other Data Processing skills you can browse and compare side by side. Open the Data Processing category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh anima against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
Unlocks once the catalog security scan passes (runs nightly).
⚠️ 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.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
This skill makes visual explanations of biological structure and function. Show the real structure accurately and make its mechanism visible. Use literal anatomy for structures such as neurons, hearts, cells and organs; use a clearly identified mechanical metaphor for processes when it improves understanding (for example, a receptor and ligand as lock and key, or an ion channel as a gated valve). Never let a metaphor imply that it is the literal biology.
Six biology examples ship with the skill. Open the closest one before you start. Every example is built with node examples/<name>/build.mjs, which writes a standalone HTML page next to the script; add --light for the light theme.
examples/neuron/ is a neuron with branching dendrites, myelinated axon, animated action-potential readout and hoverable synapse. It is a schematic, and its representative voltage values cite educational sources.examples/dopamine-receptors/ is a flat cross-section of a dopamine synapse onto a striatal medium spiny neuron: D1-like receptors couple Gαs/olf and raise cAMP, D2-like receptors couple Gαi/o and lower it, with the full G-protein cycle, a dopamine-level slider and a generic D2-antagonist toggle.examples/stimulants-dat/ is a cutaway of a presynaptic dopamine terminal with a NONE, COCAINE or AMPHETAMINE selector: reuptake through the dopamine transporter, blockade, and amphetamine's transport, vesicle leak and reverse efflux. Skeletal formulas come from PubChem records.examples/reward-addiction/ is a schematic mid-sagittal brain showing the mesolimbic pathway (VTA to nucleus accumbens, with prefrontal cortex, amygdala and hippocampus), a first-exposure versus repeated-exposure model toggle and a cue sequence. Every claim is framed as one leading model with sources.examples/semaglutide-glp1/ is a GLP-1 receptor agonist (semaglutide) acting on a pancreatic beta cell, with glucose-dependent insulin secretion, the molecule's engineered features and the central appetite and reward context.examples/estrogen-aggression/ follows testosterone through aromatase to estradiol and estrogen receptor α in an amygdala-type neuron, with an aromatase-block toggle. It states plainly that the human evidence is weak (pooled Fisher z 0.16 across 14 studies).Each example has a sources block, an educational-not-medical-advice note, a live readout driven by one small model, a pause control, hover or focus explanations and a reduced-motion still frame. Copy the closest one as a template.
The mechanical examples that the craft references cite (a rocket engine, a ripple tank, an arcade cabinet and others) are not shipped here; the references describe them.
The real structure is the explanation. Draw the relevant biological structures faithfully, then use motion, cutaways and restrained labels to reveal how they work. A mechanical metaphor is an optional explanatory layer, not a replacement for the biology. Choose the mode that fits the request:
| Mode | Use |
|---|---|
| Literal anatomy | Neuron, heart, organ, tissue, cell, organelle or molecular structure. Preserve recognizable shape, spatial relationships and relevant scale. |
| Mechanical metaphor | A process or interaction that benefits from analogy, such as receptor–ligand binding as a lock and key or an ion channel as a gated valve. Label the analogy and explain where it differs from biology. |
Accuracy takes precedence over decorative detail. Don't invent anatomy, imply a mechanism unsupported by evidence, or make a drawn scale look quantitative unless it is. Every displayed number—including size, concentration, membrane potential, rate and dose—needs a citation in the figure caption or a sources block. Cite primary or authoritative sources, and keep the cited conditions and units visible. Figures are educational, not medical advice; this warning is especially important for drugs and dosing.
Sources first. Collect trusted references before drawing. Reconcile conflicting measurements, identify species/tissue/conditions where relevant, and state uncertainty or omit a number when it cannot be verified. See references/bio.md and the domain guides.
Avoid abstract boxes-and-arrows when a recognizable structure can be shown. Use detailed, purposeful parts, but don't add detail that undermines accuracy or obscures the mechanism.
Every creation is highly detailed. This holds for every figure, however small the idea or request. What scales with the size (workflow step 1) is how far you push it: a Figure gets the 4× sweep over its subject and mechanism, a Hero or an Epic over the whole drawing.
Work in this order. Write the concept and the parts list before any geometry. Most of the quality is decided there.
date at the start and at each step, and when a step runs past twice its share of the estimate, tell the user where it stands and what is left.references/bio.md and the domain guides.kit/blob.mjs for smooth organic forms, kit/branch.mjs for branches and variable-radius structures, and kit/chem.mjs for molecules, helices and ribbons. Existing kit/lathe.mjs and kit/tube.mjs remain useful for mechanical metaphors. Moving parts are built once at rest and driven by the shared model; rebuild only shapes that change per frame.depthOf. Split anything that wraps another part into a back half and a front half: the springs around a rod, the bars of a frame around a carriage. A moving part is drawn in the slot where it physically sits. See "Painter's order" in references/craft.md. Once a figure has pipes, cables and round parts, stop tuning keys by eye: record each item's shape as you put it into A.recorder(P, { order, spring }), let A.settle(R, P) measure true depth wherever two items overlap and set the keys, and end the build with A.auditOrExit(R, P). Route pipes before you draw them: real ports at both ends, legs along the structure, crossings on straights, collars gapping the pipe (references/craft.md, section 8). Record the true shape of what you draw: a stand-in shape that silences the audit is a bug, and the audit fails one. A rod that slides out of a gland is one rod from G.rodOut, recorded with A.slide.Fig n at top left, a short title at top right, the interaction hint at bottom left and the live readout at bottom right. Add a concise caption and citations for every displayed number under the card or in a sources block. Include the educational-not-medical-advice note, especially for drugs and dosing.references/motion.md.kit/bio-audit.mjs checks for biological figures. Read every PNG you make.scripts/capture.mjs; use scripts/drive.mjs for sequences, the apart pose and the --no-webgl fallback.node build.mjs --audit must end audit passed, every failing line at 0: clearance at rest, apart and in mid-flight, terminals, loose ends, folds, self-overlap, crowding (against slender solids too), stand-in shapes, support, wobble, saddles and depth order. Fix an interlock in the geometry, never with a key bias.node scripts/lines.mjs page.html --out shots/lines.png (and on the -light page, and in every resting pose with drive.mjs's ["lines"] action) must print line ends: 0: every seam, rule, rib, tick and pointer ends on a stroke, a dot or an outline. Read the ringed PNG.--light too), assembled and apart: every flange, tee, elbow, clamp, valve, bellows, band, saddle, ball joint and crossing, every curved body (no tone staircase), every place a texture ends (on an edge or fading), flat box faces with their seams, every textured hose at a chunk joint, every sliding rod at rest and at full stroke, and every window with text or shader content in it.["slow", 0.05] across every transition; nothing pops, no colour switch, edges read 0. In light, also log ink per frame through each transition (it must follow the light monotonically) and crop where the ink meets strokes at 8–16× (references/verify.md, "Light-theme shaders").references/verify.md.The kit is in kit/:
| File | Use it for |
|---|---|
kit/iso-kit.ts |
The whole core in one file: camera, solids, a parts library, an SVG string renderer, card and page builders, and the CSS (ISO_CSS). Copy it into a TypeScript project. |
kit/iso-kit.mjs |
The same core compiled to plain ESM, for Node scripts. Import it directly. |
kit/iso.css |
ISO_CSS written out. Import it once and put class="iso" (plus data-theme="light" for light) on a wrapper or <body>. |
kit/react/draw.tsx |
Server-safe React components: Solid, Line, Wire, Dots, FaceText, IsoFigure, Plate. |
kit/react/live.tsx |
"use client" hooks: useReadout, useLoop, useEased, useInView, useStillness, plus spring and follow. |
kit/lathe.mjs |
Round parts along any axis: frameAlong, lathe (smooth shading switches on by itself for any profile with a smooth knot), solidOf, disc, ringBand, sphereOf, saddleOf, bandsOf (one curved body cut into depth-sortable bands that share one surface, with one outline from sidesOf), visible arcs, ribs and bolt circles on round surfaces (ribsOf and dotsOf take fade, ribsOf takes seams), rodOut for a rod that slides out of a gland, and fillet for pipe routes. |
kit/tube.mjs |
tubePieces splits a 3D pipe or cable into depth-sortable chunks (with breaks, gaps under collars and clamps, elliptical end caps, and rings for a braid, corrugation or wrap that follows the cross-section through every joint), and tubeSvg draws one; crossingsOf finds where a route passes through a clamp, runsOf the drawn runs. Its .tb-* fills are in ISO_CSS. |
kit/audit.mjs |
Proves the geometry. recorder(P, { order, spring }) collects items, shapes (turned bodies, slabs, prisms, boxes, balls, tubes, pads cut by their host) and routes as the helpers draw them; settle(R, P) ray-casts every overlapping pair for true depth, at rest, apart and in the replayed explode, and sets the painter's keys (overlapsOf, orderKeys); auditOrExit(R, P) is the --audit hook that runs every check (clearances, solidClearances, terminals, looseEnds, supports, folds, selfOverlaps, crowding with slender solids as lines, coverage for stand-in shapes, wobble, seats, depthOrder) and exits non-zero on any problem. A.slide records a rod that slides out of a gland. references/kit.md, section 12. |
kit/blob.mjs, kit/branch.mjs, kit/chem.mjs |
Organic forms, variable-radius branch segments and molecular primitives for biological figures. |
kit/bio-audit.mjs |
Checks biological membrane intersections, label targets and consistency between declared units-per-micron scale and known dimensions. |
kit/gl.mjs |
The WebGL layer for shaders inside the drawing: GLSL_ISO (the camera in GLSL, including rayOf and pixelOf), glCamera(P), glLayer(...), and the JS envelopes smooth, burst and settle. For 3D figures, GLSL_TURN and glslPose(name) bring world points into a moving group and mask a front canvas with coverOf. |
kit/turn.mjs, kit/turn-build.mjs, kit/turn-audit.mjs |
The optional 3D mode. turn-build.mjs has turning(P, { recorder }): groups (turn, slide, hinge, free), live layers, convex parts with materials, and T.build. turn.mjs is the runtime: TURN.mount, the controller, TURN.cover, TURN.poseUniforms and TURN_CSS. turn-audit.mjs has orbitOrExit, the orbit audit over every turn angle and motion clip. references/3d.md. |
scripts/capture.mjs |
Headless Chrome screenshots, close-ups and console checks, with WebGL on. Run with node. |
scripts/drive.mjs |
Scripted headless Chrome with WebGL: move, click, key, slow motion, wait-until, eval, shots and contact sheets that catch pops; --no-webgl and --preload. |
scripts/lines.mjs |
The line-end check on a built page, in headless Chrome: every texture line must end on a stroke, a dot or an outline. Rings the failures with --out; exits 1 on any. |
scripts/inline-kit.mjs |
kitScript(), glScript() and turnScript() return the kit, the WebGL layer and the 3D runtime as source to inline into a standalone page. |
scripts/turn-check.mjs, scripts/turn-bench.mjs |
3D figures: fidelity against the kit builders, a z-buffer order check, pixel pops, line ends at 24 angles and frame timing in the browser; Node CPU time per part kind. |
Pick the path that fits the project:
examples/neuron/build.mjs. It imports kit/iso-kit.mjs, assembles strings with solidSvg, lineSvg, dotsSvg, wireSvg and faceTextSvg, wraps them with figureSvg and plateHtml, and writes the page with pageHtml({ script: kitScript() + live }), or kitScript() + glScript() + live when it has a shader. For a lone .svg file use figureSvg({ standalone: "dark" | "light" }), which embeds the styles.kit/ into the project (for example components/iso/). Keep geometry in plain .ts modules, build the static art in a server component with the draw.tsx components, and pass it as element props to one "use client" live component that moves things. references/react.md explains the split and a trap with large pages.These are the rules that separate a crafted figure from a diagram. references/craft.md gives the full reasoning and recipes.
extrude returns four side tones by facing plus a lighter top. Keep it for anything with height, and use flat only for floors and inlays thinner than 1 unit.lo, structure is mid and the subject is hi. Exactly one accent is lit (white in dark, black in light): the part the reader should watch. Grooves are faint, minor ticks lo, major ticks mid and the zero mark hi. Use colour only when colour is the subject, such as red, green and blue channels.Wires whose terminal dots land on objects. There are no leader lines, balloons, dimension arrows or labels floating in the air.G.saddleOf, when the port is curved), a branch leaves from a ball tee, and every end, apart too, finishes on a flange, coupling, connector shell or terminal dot.A.settle and the audit, not tuned by eye. Lines cross on straights, well apart in depth: a bend, end or clamp that lands on another line's outline reads as a joint (a rod, tie rod, post or rail counts as a line: a pipe's last leg never runs along one on screen), a leg that points at the viewer and then turns pinches to a V (leave such a port through an elbow ball), and a route never doubles back on screen. A pair that can't be ordered interlocks, and the fix is a cut or a tangent contact, never a bias.[s, r, 1]) and lathe shades them from one monotone curve that also draws the outline; give any curved body larger than a fitting an analytic profile with smooth: { slope }, cut long bodies with G.bandsOf, and use G.sphereOf for balls. Tone bands taper to nothing instead of ending on a straight cut, and seams go under the outline (inner).ribsOf and dotsOf take fade (draw faded ribs with fadedSvg), a rib row ends on its seams (ribsOf(…, { seams: true })), a seam or weld on a box wraps its corners (k.sideSeam, as the slab's inner), a line on one face runs edge to edge, vents are closed slots, ticks hang from a ruler strip's edge, a single line that must stop ramps out with fadeLineSvg, and a row whose features face up (holes on top of a ring) is seen all round (all: true). A texture on a pipe (braid, corrugation, wrap) follows its cross-section and runs through every chunk joint: tubePieces(…, { rings }), never a dashed stroke down the centreline. A pipe's shine and shade run onto its end caps and through every chunk joint. Only rule lines that stand for printed text, a needle's tail and a pointer's tip may stop on a bare face, marked free.Use a shader only for what lines can't draw: fire and exhaust, water and caustics, real lamp light, glow, steam. The parts stay SVG. The core rules come from the first shader figure, whose colour change between phases looked cut rather than crossfaded:
pointer-events: none), and a front SVG holds what covers it. Split a part, or the effect, when it is on both sides.onFloor, onWallX and onWallY, or march the pixel's ray rayOf(vb) + t·towardViewer(). Size everything in world units times uK. Anything lying on a plane registers exactly with that plane's SVG lines.burst for events, settle for levels). Phase changes are crossfades where colour shifts continuously with the physical quantity, and a fade-out only gets darker.if, bound or canvas edge, and before any cell edge of a cell noise.references/webgl.md, section 5).tonemap() and dither. In dark, a canvas that only adds light uses premultiplied output with mix-blend-mode: screen, and one that must also darken (the ripple tank's water) stays normal-blended.references/webgl.md, section 8, has the recipes and the faults reviewers found.Read references/webgl.md before writing any shader.
3D is an option like WebGL. Use it when a part moving in depth is the idea: a dial or turntable that turns, fingers that flex, a piece that breaks off and falls. The rest of the figure stays static kit art.
It is in beta: the engine is proved on its example and one test figure, not yet on a production figure. Turn one subject at a time and keep the clutter around it static. A small figure runs at 60 fps; a dense 380-part flexing hand measured about 20 fps at 1440 and 13–15 fps on a phone profile (390 px, 4× CPU throttle) on a heavily loaded machine.
a − θ.gaps. That holds at every angle and in every pose.controller.anchor or toGroup, occlude a front canvas with coverOf, and keep world effects (smoke, falling sparks, oil on the bench) out of group space.--audit (turn audit passed) and scripts/turn-check.mjs (--fidelity, --order, --pops, --lines, --perf). Iterate with --quick --only=…. Only a full run proves the figure, and it takes 15–20 minutes for 30 parts, so run it in the background.Read references/3d.md first.
references/bio.md: biological sourcing, scale and general representation rules.references/neuro.md: neurons and neural signaling.references/pharma.md: drug–target interactions and dose-response figures.references/molecular.md: molecular structures, helices and proteins.This is an educational illustration tool, not a validated anatomy atlas, diagnostic aid or treatment guide. Biology varies by species, tissue, individual and experimental conditions; state the scope, show uncertainty and don't invent unsupported details. Schematic or isometric drawings cannot represent every spatial relationship. Drug and dose figures are educational, not medical advice or prescribing guidance.
Read these as you need them:
references/craft.md: the look in depth, including the parts vocabulary with code, tone tables, painter's order patterns, round parts, pipes and harnesses, exploded views, screens on faces, and the anti-patterns that got figures rejected. Read it before designing.references/kit.md: the API, with signatures and examples.references/motion.md: live behaviour (loops, springs, tours, pointer, keyboard, accessibility, reduced motion), plus envelopes for one-shot events, exploded views, depth re-sorting and arming, in vanilla JS and React.references/react.md: the React/Next.js server/client split, element props and the large-payload key-warning trap.references/verify.md: the capture.mjs and drive.mjs commands, the review checklist (including shaders) and common faults.references/webgl.md: shaders inside the drawing: when one earns its place, the layer stack, the camera contract, ray-marching in the iso camera, the full API with a minimal page, the craft rules with the bugs that taught them, the light theme (inks on paper, per-phenomenon recipes, the reviewers' faults), and how to verify them.references/3d.md: the optional 3D mode: groups and poses, live layers, convex parts and their rules, materials, free groups, hinge chains, painter's order, static clutter around a turntable, shaders that follow the turn, the orbit audit, browser checks, performance and limits.Ask Claude for a biology figure. Get an interactive, sourced, isometric one.
A Claude Code skill that turns "show me how cocaine and amphetamine act differently at a dopamine synapse" into a live, standalone page: real structures, a mechanism you can toggle, a readout driven by one small model, and a citation for every number on screen.
Most science graphics are either static diagrams or confident-looking animations with no sources. This skill holds itself to a different standard:
npx skills add Garinmckayl/anima -g -a claude-code
Requires Claude Code and Node.js 20.10 or later. The drawing kit uses only Node built-ins and has zero runtime dependencies. Chrome or Chromium is needed only for the capture and verification scripts.
In Claude Code:
/anima show how cocaine and amphetamine act differently at the dopamine transporter, with a drug selector and sourced mechanisms; standalone HTML
/anima visualize semaglutide acting on a pancreatic beta cell, with glucose-dependent insulin release, cited label numbers and an educational-use note
/anima show D1 and D2 receptor signalling in a striatal neuron, with the G-protein cycle and a receptor-antagonist toggle
/anima make a mid-sagittal brain showing the mesolimbic pathway and one model of how it changes with repeated drug exposure; cite every claim
More to try:
/anima show how CRISPR-Cas9 finds and cuts a target sequence, with a guide-mismatch toggle and cited cleavage numbers
/anima animate the mitochondrial electron transport chain with a proton-gradient readout and an inhibitor toggle
Name the biological subject, the mechanism to explain, the audience and the output format. The skill sizes the job first (Figure, Hero or Epic), collects sources before drawing, builds the page, then checks it the way a reviewer would: zoomed in, in both themes, at phone width.
Each figure builds to a standalone HTML page in dark and light themes. The links open the live pages, so they run in your browser. To open them from a clone, use the files in examples/.
| Dopamine receptors (light)D1-like receptors couple Gαs/olf and raise cAMP; D2-like receptors couple Gαi/o and lower it. Full G-protein cycle, a dopamine-level slider and a generic D2-antagonist toggle. | Stimulants at the transporter (light)None, cocaine or amphetamine. Reuptake, blockade, and amphetamine's transport, vesicle leak and reverse efflux. Skeletal formulas from PubChem. |
| Reward and addiction (light)The mesolimbic pathway, a cue sequence, and one leading model of what changes after repeated exposure. Framed as a model, with sources. | Semaglutide and GLP-1 (light)A GLP-1 receptor agonist on a beta cell: glucose-dependent insulin release, the molecule's engineered features, and the preclinical-versus-clinical state of the appetite and reward evidence. |
| Estrogen and aggression (light)Testosterone to estradiol by aromatase, then estrogen receptor α, in an amygdala-type neuron. States that the human evidence is weak (pooled Fisher z 0.16 across 14 studies). | A myelinated neuron (light)Saltatory conduction along a myelinated axon with a hoverable synapse. |
Fig n top left, a short title top right, the interaction hint bottom left, a live readout bottom right.prefers-reduced-motion, and no animation while offscreen.Copy the closest example and change the biology:
node examples/dopamine-receptors/build.mjs
node examples/dopamine-receptors/build.mjs --light
Each build.mjs imports the kit from kit/ and writes standalone pages next to itself. kit/blob.mjs draws organic forms, kit/branch.mjs branching structures, kit/chem.mjs molecules, helices and ribbons, and kit/bio-audit.mjs checks membrane intersections, label targets and declared scale. WebGL shaders and a 3D mode are optional extras for figures that need them.
Record a demo of your own figures with scripts/make-demo.mjs (needs Chrome and ffmpeg), and check a page with scripts/capture.mjs, scripts/drive.mjs and scripts/lines.mjs. CONTRIBUTING.md lists every check.
SKILL.md defines the workflow, visual standards, sourcing rules and safety limits.kit/ is the isometric drawing library plus the biology primitives.references/ has general, neurobiology, pharmacology and molecular-biology guidance alongside the craft and rendering guides.evals/evals.json holds representative biology requests with what a good answer must contain.Every displayed number, including sizes, concentrations, potentials, rates and doses, must cite its source in the caption or a sources block, with species, tissue, conditions and units. Schematic scales are labelled as schematic.
These are educational figures. They are not medical advice, not a validated anatomy atlas, and not a diagnostic or prescribing tool. Drug figures explain mechanism only. Biology varies between species, tissues and individuals, and a 2D or isometric illustration cannot capture every spatial relationship.
If you or someone you know is struggling with substance use, a local health service or helpline can help.
Anima grows by figures. If a subject you know well is missing,