Skip to content

Third-Party Notices

muriel incorporates work from the projects listed below. Their license terms are reproduced in full as required.

Acknowledged inspiration not incorporated

SVG Wave

anup-a/svgwave made layered SVG-wave generation approachable and directly inspired the decision to add muriel.patterns.wavefield().

No SVG Wave source code, assets, dependencies, algorithms, UI, presets, or generated files are copied, translated, vendored, imported, or linked into muriel. The Muriel primitive is an independent Python implementation based on seeded harmonic synthesis, caller-supplied normalized series, and a standard Catmull-Rom-to-cubic interpolation construction.

This separation is deliberate: SVG Wave's repository LICENSE prohibits commercial use and modification, while its package.json declares ISC. This notice credits the project as inspiration; it does not claim that its code is licensed for incorporation into Muriel.


diagram-design

The layout proportions and conventions for the layer_stack, pyramid, and swimlane diagram generators (muriel/tools/diagrams/layer_stack.py, muriel/tools/diagrams/pyramid.py, muriel/tools/diagrams/swimlane.py) — band/tier/lane heights, the linear-taper and proportional-width rules, lane dividers and handoff emphasis, label placement, and the single-focal-accent convention — are adapted from the diagram-design Claude Code skill.

  • Source: https://github.com/cathrynlavery/diagram-design
  • Adapted: 2026-05 (diagram-design relicensed to MIT)
  • Upstream re-checked: 2026-08-13 — the three adapted references (type-layers.md, type-pyramid.md, type-swimlane.md) are unchanged since the adaptation, so this notice still describes what muriel carries. Upstream has grown substantially elsewhere; the delta is summarised in the README's "Related prior art" entry.

muriel's own contribution is the deterministic Python generators, the epistemic-precondition / anti-prescription gate on each diagram, the 8:1 contrast floor (stricter than the source's WCAG AA), and integration with muriel's brand tokens. The source's typefaces and colour system were not adopted.

Two verification ideas were adapted from the same repository (upstream commit dc1ace4, 2026-09-19) on 2026-09-24:

  • Accessible-SVG lint rules — muriel/tools/diagrams/_a11y.py::lint_a11y re-implements the rule set of scripts/lint-skin.py::lint_accessible_svgs (with scripts/test-lint-a11y.py as the fixture model): skip aria-hidden="true" SVGs; require role="img", a four-number viewBox with positive size, <title> as the first child, a <desc>, slug-prefixed non-duplicate ids, and aria-labelledby naming the title then the desc. The 60-character title bound follows skills/diagram-design/scripts/self_check.py.
  • Slopegraph conventions — muriel/tools/diagrams/comparison_pair.py follows references/type-line.md (slopegraph variant): one scale shared by both axes, a run narrower than the plot is tall, dots and printed values at both ends, no gridlines, muted lines plus one weighted accent, and labels bound to their series by data-* attributes. The shared-scale and no-jitter checks in tests/test_diagram_comparison_pair.py follow scripts/verify-slopegraph.py. The label-spreading policy (labels move, endpoints never do) and the trace form are muriel's own.
  • Relative-error fidelity check — tests/test_diagram_fidelity.py checks proportional funnel widths as relative error against the values, the framing of scripts/verify-treemap.py's area-fidelity invariant, applied to bar width instead of cell area.
  • Motion contract — the static-first rule, the none / reveal / step / loop modes with reveal as the only autoplay, the 3 s decorative-loop floor, and the 8-step / 2-per-step / 12-item sequence budget follow references/animation.md and ADRs 0001 / 0003. They land in references/polish-rules.md (rules 28–29) and muriel/motion.py (validate_mode, validate_flash_rate, validate_sequence_shape). The upstream clock tokens and pinned controller were not adopted.
  • Treemap — muriel/tools/diagrams/treemap.py follows references/type-treemap.md for geometry and conventions: squarified layout, 4–8 cells with a named "Other", 4px gutters, the large / medium / small / sliver label tiers with a 16px top-left inset, the rank-ordered ink ramp with one accent cell, and data-share on every cell. tests/test_diagram_treemap.py checks area as relative error per cell, the invariant of scripts/verify-treemap.py, at a 4% bound. The gutter-compensating weight correction is muriel's own; no source files were copied.
  • Diagram guidance — behaviour-first pattern routing, the generator admission rule, callout discipline, the global node/arrow budget, and the redraw degrade ladder in channels/diagrams.md, plus the per-element removal test in agents/muriel-critique.md, paraphrase references/semantic-patterns.md, references/output-spec.md, references/primitive-annotation.md, and the skill's SKILL.md.
  • Sankey conventions (adapted 2026-09-24) — muriel/tools/diagrams/sankey.py follows references/type-sankey.md for the 12px node bar, one global px-per-unit scale, midline Bézier control points, the single accent path painted last, column-specific label placement and the 3-stage / 8-node / 12-flow budget; tests/test_diagram_sankey.py checks the invariants named in scripts/verify-sankey.py (conservation, stage totals, ribbon width constancy, relative value fidelity, square-on arrival). Bars are not rounded to the 4px grid, sub-4px flows raise rather than fold, and ribbons are written as flattened polylines so the contrast audit can score the labels.
  • Tree — muriel/tools/diagrams/dendrogram.py takes its node proportions (120–180 × 40–52, at most two widths), the orthogonal elbow-bus connectors drawn before the nodes, the 4-level / 5-children budget, the no-skipped-levels rule and the single accent on the root or one critical leaf from references/type-tree.md. The contour-based tidy-tree placement, the measured leaf-extent budget, collapse_over, and the DAG / treemap / process routing gates are muriel's.
  • Comparison heat-grid — muriel/tools/diagrams/heat_grid.py takes its cell geometry (116×56, 4px gap, 80px minimum width), the 3–7 row / 3–8 column budget, the single ink ramp with a single accent focal cell excluded from the scale, the 0.07 ramp floor and 0.70 ceiling, and the don'ts (hue per row, diverging ramp for unsigned data, gradient legend, dropped rows) from references/type-heatmap.md. tests/test_diagram_heat_grid.py follows scripts/verify-heatmap.py's data-row / data-col / data-value binding and monotone-fill check (±0.03). The per-brand ramp-ceiling solve for 8:1 value labels, the quantized stepped legend and the n/a cells are muriel's.
  • Cycle hub (adapted 2026-09-24) — the hub= option of muriel/tools/diagrams/cycle.py follows references/type-loop.md: one central accumulated-state node drawn inverted (ink fill, paper text), dashed write-back spokes as true radii from each station's inner edge that stop a 6px marker gap short of the hub, drawn beneath the stations, "one hub" and "a hub is state, not a step". The spoke-subset selection, the ring growth that keeps an 18px minimum spoke, and the measured hub box are muriel's.
  • Icon build pipeline — scripts/build_diagram_icons.py adapts the structure of scripts/build-icons.py (a curated slot → upstream-id manifest with one-line blurbs, fetch with a local vendor cache, normalize, emit a committed artifact). The icon source differs (Lucide, not Tabler) and so does the normalization: muriel keeps inner markup only, strips presentation attributes, and rewrites primitives as <path>.
  • Causal / dependency DAG — muriel/tools/diagrams/dag.py takes from references/type-dependency.md the ranked layers (120px pitch), the 160×56 rx=6 node box, the N in fan-in badge in a small rx=2 box, the budget (9 nodes, 14 edges, 4 ranks, 1 highlighted cycle), the single dashed 5,4 accent back-edge routed around the outside of the stack, and the tree-shaped-data anti-pattern. It takes from SKILL.md's connector rules the orthogonal elbows with r=8 corners, attach points ≥12px apart on a shared side, no transit behind a non-endpoint box, and drawing edges before nodes. The layout algorithm (longest-path ranking, barycenter ordering with adjacent swaps, isotonic-regression placement, per-channel jog tracks), the forward-cycle and tree-precondition errors, and the single-accent rule (upstream allows two) are muriel's.
  • Spectrum — muriel/tools/diagrams/spectrum.py takes its dumbbell conventions from references/type-bar.md's dumbbell variant: horizontal rows on one shared scale, hollow reference end and solid end, connector drawn before the dots, unsnapped data coordinates, value labels placed outside the pair by geometry with the floor exception, never-truncate / never-clamp, and a stated row order; references/type-line.md for the shared-scale rule. The two named poles, the explicit zero= choice for a scale that excludes zero, the change arrowhead, the extent mode and the 8:1 tokens are muriel's.

The code is muriel's own (ElementTree rather than the source's HTMLParser, and wired into muriel diagram-check); apart from the extractor below, no source files were copied.

Additions on 2026-09-24 (upstream commit dc1ace4):

  • Excalidraw extractor — copied, not adapted. muriel/tools/excalidraw_extract.py is skills/diagram-design/scripts/excalidraw_extract.py verbatim, with only a leading comment block added (provenance plus this MIT notice). tests/test_excalidraw_extract.py pins the body to the upstream file's sha256, so a local edit fails the suite; re-copy upstream fixes instead of patching. The fixtures in tests/fixtures/excalidraw/ are copied from upstream scripts/fixtures/, and the test ports the essential checks of scripts/verify-excalidraw-import.py.
  • Strict SVG export — muriel/tools/diagrams/_export.py::strict_svg adapts the rgba() / transparent normalisation and the 1–4 raster-scale rule from references/export.md, extended by muriel to inline styles, <style> blocks, 8-digit hex and opacity multiplication.
MIT License

Copyright (c) 2025 Cathryn Lavery

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

ui-ux-pro-max corpus

The CSV reference data under muriel/uipromax/data/ (colors.csv, typography.csv, ui-reasoning.csv, ux-guidelines.csv, styles.csv, charts.csv, icons.csv) is a verbatim port of the ui-ux-pro-max skill's data files — product-type colour sets, font pairings, UI-reasoning rules, UX guidelines, design styles, chart taxonomy, and an icon index.

  • Source: https://github.com/nextlevelbuilder/ui-ux-pro-max-skill
  • Via: https://github.com/All-The-Vibes/ATV-Design (skills/ui-ux-pro-max/)
  • Adapted: 2026-06 (both upstreams MIT)

muriel's own contribution is the accessor layer (muriel/uipromax/__init__.py) and the 8:1 contrast re-gate: the colour sets target WCAG 3:1/AA, so each is measured against muriel's universal 8:1 floor via muriel.contrast. The data itself is unchanged; muriel adds no colours. The source palettes' interactive pairs (On Primary, On Accent, destructive, muted-on-muted) are reported as sub-8:1 and not adopted as compliant — only the body-text pairs that clear 8:1 are surfaced as muriel starting points. A copy of the upstream MIT license also ships at muriel/uipromax/LICENSE.txt.

MIT License

Copyright (c) 2024 Next Level Builder

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

emil-design-eng-inspired (motion principles)

The motion-quality axes added to muriel/motion.py (compositor-safe property set, easing-by-direction, entrance scale floor) and to plugins/muriel/skills/compose/channels/polish.md (rules 18–22) are paraphrased from the emil-design-eng-inspired skill — itself MIT-licensed original prose that the ATV-Design authors wrote as a clean-room paraphrase of Emil Kowalski's emil-design-eng skill.

  • Source: https://github.com/All-The-Vibes/ATV-Design (skills/emil-design-eng-inspired/)
  • Lineage: paraphrases https://github.com/emilkowalski/skill (MIT as of 2026-06-21; it carried no license when muriel first adapted via ATV-Design's clean-room paraphrase)
  • Adapted: 2026-06 (ATV-Design MIT)

muriel's own contribution is the programmatic enforcement (validate_properties, easing_for, validate_scale) and the integration with muriel's existing polish rules. muriel deliberately does not adopt the source's duration bands (100–500 ms) — they fall in muriel.motion's uncanny zone, where the forced utility (≤ 100 ms) / cinematic (≥ 1500 ms) binary overrides them — and keeps its own tuned 0.96 press-scale value over the source's 0.97.

MIT License

Copyright (c) 2026 atv-design contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

vibecoded-design-tells (devibe rules)

The rule table in muriel/devibe.py — the design-tell catalogue (shadcn defaults, AI-purple, gradient text, the cream + serif + sage "tasteful default", neon glow, emoji-as-icons, the hero + three-card skeleton) and their regex signatures — is derived from the vibecoded-design-tells project: a Reddit-mined ranking of the visual tells of AI-built sites (3.2M posts / 3,033 on-topic comments across 47 subreddits), with a standalone scanner (skill/scripts/devibe_scan.py) and catalogue (skill/references/tells.md).

  • Source: https://github.com/JCarterJohnson/vibecoded-design-tells
  • Adapted: 2026-06 (MIT)

muriel's own contributions: (1) the data-source severities are re-ranked to muriel's info/warn/error triple, with the cream + serif + sage combination elevated to error because it is the look muriel — and Claude's house style generally — is most likely to emit on autopilot; (2) an 8:1 contrast cross-check the source scanner has no equivalent of — colour tells that capture a concrete hex are measured against muriel's 8:1 floor via muriel.contrast on muriel's two canonical backgrounds (#ffffff, #0a0a0f), so a default colour that also fails accessibility is reported as such; (3) integration as a critique gate (muriel/critique.py, check 5) on HTML artifacts. muriel deliberately does not vendor the project's harvested Reddit text or quote banks — those are public Reddit content belonging to their authors; only the rule logic is derived.

MIT License

Copyright (c) 2026 Carter Johnson

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

baoyu-infographic (dense-modules module vocabulary)

The module vocabulary and high-density-guide recipe in plugins/muriel/skills/compose/channels/infographics.md — the seven typed module archetypes (Option Array, Scale/Gauge, Anatomy Callout, Use-Case Matrix, Diagnostic Checklist, Pitfall Panel, TL;DR Block), the every-module-carries-concrete-data density rule, and the text-placement conventions (module-count subtitle, badge-framed module headers, data values oversized in the accent color) — are adapted from the dense-modules layout definition in the baoyu-infographic skill of the baoyu-skills collection.

  • Source: https://github.com/JimLiu/baoyu-skills (skills/baoyu-infographic/references/layouts/dense-modules.md)
  • Adapted: 2026-07 (MIT)

muriel's own contribution is the re-cast from prompt spec to content contract — each module declares structured-input minimums (item counts, required numerics, stated consequences) that a deterministic SVG panel builder can refuse to render below — plus genre-neutral renamings of the source's buying-guide-specific module names. Two source rules are deliberately not adopted: the shrink-text-and-eliminate-whitespace density rule (it conflicts with muriel's 18px type floor and 8:1 contrast floor — density comes from module count and data specificity instead), and emoji quality indicators (muriel renders drawn ✓/✗ glyphs). The source's raster generation pipeline (prompt-to-image via image-gen backends) is not used in any form — muriel's lane is deterministic SVG.

MIT License

Copyright (c) 2026 Jim Liu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Lucide icons

The 30 glyphs in muriel/tools/diagrams/icons/glyphs.py are generated from Lucide icons by scripts/build_diagram_icons.py: the outer <svg> and all presentation attributes are removed and each primitive is rewritten as an equivalent <path>; the geometry is otherwise unchanged. The source SVGs are vendored unmodified in muriel/tools/diagrams/icons/vendor/lucide/, with Lucide's LICENSE. Some of the glyphs used (clock, database, link, lock, search, target, zoom-in) are derived from Feather and fall under the MIT notice below.

  • Source: https://lucide.dev — npm package lucide-static
  • Version: 1.48.0 (pinned in muriel/tools/diagrams/icons/_manifest.py)
  • License: ISC; Feather-derived icons MIT
ISC License

Copyright (c) 2026 Lucide Icons and Contributors

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

---

The following Lucide icons are derived from the Feather project:

airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, calendar, cast, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, circle, clipboard, clock, code, columns, command, compass, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, crosshair, database, divide-circle, divide-square, dollar-sign, download, external-link, feather, frown, hash, headphones, help-circle, info, italic, key, layout, life-buoy, link-2, link, loader, lock, log-in, log-out, maximize, meh, minimize, minimize-2, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, move, music, navigation-2, navigation, octagon, pause-circle, percent, plus-circle, plus-square, plus, power, radio, rss, search, server, share, shopping-bag, sidebar, smartphone, smile, square, table-2, tablet, target, terminal, trash-2, trash, triangle, tv, type, upload, x-circle, x-octagon, x-square, x, zoom-in, zoom-out

The MIT License (MIT) (for the icons listed above)

Copyright (c) 2013-present Cole Bemis

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

anatomy (line-end check, Loupe lens)

muriel/line_ends.js is a modified port of scripts/line-ends.mjs from anatomy, an agent skill for isometric technical figures. The SVG path flattener, the spatial grid, the under-a-fill test and the short-mark rule are anatomy's. muriel changed how lines are chosen, made fill outlines, text labels, arrowhead markers and the canvas edge into landing targets, added the implied-edge rule, and made the check run in a standalone SVG document; the file's header lists each change and why.

muriel/loupe.py (the Loupe seat's lens) takes its practice, 4× close-ups of every junction, from anatomy's verification loop. No anatomy code is in it.

  • Source: https://github.com/wheresryan22/anatomy
  • Version: commit 1482e8469b0a9e0d8cc18ea2740a01423d29ae80 (2026-10-18)
  • License: MIT
MIT License

Copyright (c) 2026 Ryan

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.