mesh-avatar-studio
일러스트를 코딩 에이전트와 로컬 편집기로 2D 메쉬 애니메이션 아바타로 변환
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A visual style compass: search a library of design systems, see each one rendered rather
than described, compare them side by side, pick one per project, and export the spec.
No login, no database, no network — the library is static data compiled into the
bundle, so it works on a plane.
Search that understands more than substrings. Free text is matched across name,
aliases, moods, use cases, signature moves, typefaces and prose, each field weighted, and
a one-character typo still finds the style. A small query language sits on top:README 전문 보기 ↗A visual style compass: search a library of design systems, see each one rendered rather than described, compare them side by side, pick one per project, and export the spec.
No login, no database, no network — the library is static data compiled into the bundle, so it works on a plane.
npm install
npm run dev # http://localhost:3000
Search that understands more than substrings. Free text is matched across name, aliases, moods, use cases, signature moves, typefaces and prose, each field weighted, and a one-character typo still finds the style. A small query language sits on top:
| Query | Means |
|---|---|
calm dashboard | both words must match somewhere (AND) |
"quiet luxury" | matched as a phrase |
-neon | drop anything matching neon |
family:retro | field-scoped: family, for, mood, era, a11y, font, name |
fintech | synonyms map onto vocabulary the library actually uses |
If strict AND finds nothing, the search widens to OR and says so. If a word matches no style anywhere, it names the word rather than showing an empty screen.
Filters that are honest about counts. Family, what you are building, accessibility level, mood, and a bucketed range on each of the six axes. Every facet count is computed against all filters except itself, so a checkbox never says zero for an option that would widen the results.
Typography as a scale. Every preview shows H1, H2, H3 and body together, because the interval between levels is what actually separates two typographic systems — Data Dense and Luxury Minimal can share a typeface and look nothing alike. The ratio is derived from the density axis rather than authored, and everything that reports it says so.
Visual identification. Every card renders the same miniature interface — nav bar, headline, body copy, primary and ghost buttons, stat panels, palette strip — from that style's own tokens. Fixed sample copy, on purpose: if the words changed per style you would be comparing the writing.
Comparison. Up to four styles line up in columns with the identical preview in each, then a table of era, use cases, typefaces, accent, radius, border, spacing, measured body contrast, and all six axis positions. Exportable as a Markdown table.
Exploration. The compass view plots every style on two axes you choose, each dot
filled with its own accent color. Hovering a name in the legend lights up its dot. Every
style also carries declared neighbors, and nearest() falls back to axis distance.
Projects. A named project holds a brief, a shortlist, one pick and notes, and lives in
browser storage. Export brief produces a Markdown document: the decision, what it beat,
the reasoning, and the full build spec for the chosen style.
Color combinations. A fourth view builds a complete, role-assigned palette from one brand color and a harmony scheme, then checks it against the rules that matter. It is not a swatch generator: it corrects as it goes. Any tool can rotate a hue 180 degrees; the work is knowing the complement it just produced cannot hold white text, and moving it until it can.
--series-N with a readable label color for each.
Secondaries are staggered in lightness as well as hue, because that is what makes a
categorical set survive color-vision deficiency.Exports. Four formats per style — a one-page Markdown summary, W3C-shaped token JSON,
CSS custom properties, and a Tailwind v4 @theme block — all generated from the same
token object the preview renders, so a downloaded file is never a prettier description of
something else.
Two of them were calibrated by measurement rather than taste, and both changed as a result.
Status colors under red-green deficiency. The first threshold flagged every palette the tool produced. Measuring the shipping status pairs from Material, Tailwind, GOV.UK, Bootstrap, IBM Carbon and Ant Design put all six between 0.02 and 0.06 on the same scale — that is, no red-green pair separates by hue for a deuteranope, and a stricter threshold would only have been calling every design system in the industry wrong. So the rule was rewritten around what is actually achievable: separate the two by lightness, and treat the second channel — an icon, a word, a shape — as mandatory rather than a nicety.
The focus ring. The rule warned on every palette, because a ring drawn in the accent color has no contrast against an accent-colored button. That is not a palette defect, it is why the two-tone ring exists. The generator now emits both halves — an outer color sized against the page, an inner one sized against whatever it surrounds — and the rule checks the pattern that is actually shipped.
The rest: body and muted text contrast, button labels on the accent, a text-safe accent variant, control borders at 3:1 (dividers deliberately exempt — forcing 3:1 on a hairline makes every card look boxed in), status separation in greyscale, brand-versus- error hue collision, tinted neutrals, no pure black on pure white, and a cap on how many hues one team can actually govern.
A red brand fails the collision rule, and should. If the brand color is the error color, users cannot tell the primary action from the failure message. The generator moves the error color apart in lightness and says so; the finding stays.
A separate section from style and color, because they are separate decisions: 38
navigation, layout, hero, content and footer patterns, each with a wireframe rather than
a description. Every one answers the question nobody asks in time — how much does it
hold before it breaks — and states what you are also signing up to build if you pick
it (a hamburger means aria-expanded, focus management and Escape; a mega menu means
click-to-open and a way out of eighty links).
Wireframes render in any of the 73 library styles, so a navigation choice can be judged in the visual language it will actually ship in. Choices are recorded per project and reach the exported brief with their obligations attached.
The wireframes are data, not markup, which means they are checked like data: every block must sit inside the canvas, use more than one kind, and cover enough of it to read as a layout. That check caught six patterns whose blocks ran off the right edge because a horizontal helper was used where a vertical stack was meant.
npm run audit:controls drives every interactive control in the running app and reports
any that produce no change in the rendered DOM.
It exists because four controls shipped doing nothing visible: the Color tab's search box
and its example chips (they filter the style library, which is not on that screen), a
results bar carrying a hidden attribute that a class with display: flex silently
overrode, and the Scheme dropdown, which changed zero roles and zero ramps. Every one was
found by a person clicking it and asking what it did — never by a test.
It needs a running server and Playwright, so it is a pre-release check rather than a CI
step. It hashes outerHTML; an earlier version compared lengths and reported four false
positives, because swapping one hex fill for another leaves the length identical.
| Path | What it is |
|---|---|
lib/types.ts | Axes, families, use cases, and the token contract every style fills in |
lib/styles.ts | The library — 73 styles |
lib/search.ts | Query parsing, weighted scoring, synonyms, filters, similarity |
lib/export.ts | The four export formats, plus comparison and project briefs |
lib/typography.ts | The derived type scale |
lib/patterns.ts | 38 structure patterns and their wireframes |
lib/color.ts | WCAG contrast, OKLCH conversion, color-vision simulation |
lib/shades.ts | 98 named shades and the nine hue guides |
lib/palette.ts | Schemes, role assignment with contrast correction, the rules engine |
app/ | The page, the scoped stylesheet, and the seventeen typefaces the previews need |
components/ | The UI |
scripts/audit-controls.mjs | Drives every control and reports the dead ones |
scripts/test.ts | The checks below. Runs in npm test, which runs in prebuild — a failing invariant fails the deploy |
Append an entry to STYLES in lib/styles.ts and run
npx tsx scripts/tests/design-compass.ts. The suite will stop you if:
neighbors entry names a style that does not exist;avoidWhen entries or four
signature moves;--dc-* variable that app/layout.tsx never binds,
which would silently render the style in a fallback serif and make it look like every
other style that failed the same way.bg is deliberately exempt from the contrast floor: it is a backdrop, not a text surface.
Skeuomorphic's dark felt page under light steel panels is the case that proves it.
Append to SHADES in lib/shades.ts. Every pairs entry must name
another shade in the library, the note has to say something specific enough to argue
with, and every hue family needs a guide with at least three tips and a trap.
The generator is swept across all 98 shades in both modes — 196 palettes, every role checked for contrast on every one. Two bugs were caught that way and are now regression guards:
Both were found by the sweep, not by looking at screenshots. The suite also mutation- tests cleanly: reverting either fix, or clipping instead of gamut-fitting in OKLCH, fails with a message naming the specific palette and the specific number.
Generated from the sources in the RoboTrig repo by scripts/extract-design-compass.sh.
Edit it there and re-run the script, or adopt this copy as the origin and delete
the route from that repo — but do not maintain both.