1 view
alchaincyf/huashu-design
Huashu Design 3.0 · 在 agent 里打一句话,拿回能交付的设计:网页 / App 原型 / 可编辑 PPTX / 动画 / 信息图 · 六个候选挑三个方向 · 84 种带样张的风格库 · 越用越懂你的外观账本与设计体检 · HTML-native design skill for Claude Code, Codex, Cursor & any agent
HTML★ 27,163+251 that day#9 on trending
E25.6/100
Duplication81
2.3% in javascript, python, jsx, bashDead code3
45.6%Complexity53
51.5% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
2.28%duplicated code · 185 of 8,105 lines
13clones in code
34code files of 294 scanned
16.38%duplicated over all files · 254 clones
Most complex files
- scripts/html2pptx.js293 cx
- scripts/design_lint.py180 cx
- scripts/pptx_from_rendered.py117 cx
- assets/narration_stage.jsx109 cx
- scripts/cloud/ai-review-video.py92 cx
- scripts/learn.py83 cx
- scripts/cloud/tts-doubao.mjs69 cx
- scripts/narrate-pipeline.mjs65 cx
- assets/animations.jsx57 cx
- scripts/render-video-seek.js49 cx
Dead code 45.56% unused · 14 findings
- scripts/html2pptx.jsunused-file
- assets/narration_stage.jsxunused-file
- assets/deck_stage.jsunused-file
- assets/cursor.jsxunused-file
- assets/animations.jsxunused-file
- assets/design_canvas.jsxunused-file
- assets/ios_frame.jsxunused-file
- assets/android_frame.jsxunused-file
- assets/browser_window.jsxunused-file
- assets/macos_window.jsxunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 47 lines in 2 placesjavascript348 tokens
138await context.addInitScript(css => { 139 const HIDE_MARK = 'data-video-hidden'; 140 function injectStyle() { 141 const style = document.createElement('style'); 142 style.setAttribute('data-inject', 'render-video-chrome-hide'); 143 style.textContent = css; 144 (document.head || document.documentElement).appendChild(style); 145 } 146 function hideChromeBars() { 147 const vh = window.innerHeight;137await recordCtx.addInitScript(css => { 138 const HIDE_MARK = 'data-video-hidden'; 139 140 function injectStyle() { 141 const style = document.createElement('style'); 142 style.setAttribute('data-inject', 'render-video-chrome-hide'); 143 style.textContent = css; 144 (document.head || document.documentElement).appendChild(style); 145 } 146First 10 of 47 lines, the second copy on the right.
- 16 lines in 2 placesjavascript130 tokens
31const { chromium } = require('playwright'); 32const path = require('path'); 33const fs = require('fs'); 34const { spawnSync } = require('child_process'); 35 36function arg(name, def) { 37 const p = process.argv.find(a => a.startsWith('--' + name + '=')); 38 return p ? p.slice(name.length + 3) : def; 39} 40function hasFlag(name) {First 10 of 16 lines.
- 14 lines in 2 placesjavascript123 tokens
431if (hasBg || hasUniformBorder) { 432 const shadow = parseBoxShadow(cs.boxShadow); 433 shapeEl = { 434 type: 'shape', 435 x: toIn(rect.x), 436 y: toIn(rect.y), 437 w: toIn(rect.w), 438 h: toIn(rect.h), 439 fill: hasBg ? fillFieldOf(bgColor) : null, 440 line: hasUniformBorder ? { color: parseColorString(b.top.c).hex, width: toPt(b.top.w) } : null,First 10 of 14 lines.
7 more
- 14 lines in 2 placesjavascript108 tokens
- 12 lines in 2 placesjavascript92 tokens
- 11 lines in 2 placesjavascript88 tokens
- 12 lines in 2 placesjavascript84 tokens
- 8 lines in 2 placesjavascript77 tokens
- 8 lines in 2 placesjsx70 tokens
- 14 lines in 2 placesjavascript70 tokens
Largest clones over all files, tests and data included
- 559 lines in 2 placesmarkupdocs and examples4,941 tokens
576 <div class="sub" id="introSub">MOTION · ENGINE · ANIMATED</div> 577</div> 578 579<!-- ============ Scene 1: Split view (1.6 → 8.2s) ============ --> 580<div class="scene" id="scene-main"> 581 <div class="split"> 582 583 <!-- TOP: Timeline --> 584 <div class="split-top"> 585 <div class="panel-label">TIMELINE · <span class="accent">PLAYHEAD</span></div>First 10 of 559 lines.
- 545 lines in 2 placesmarkupdocs and examples4,358 tokens
15--muted: rgba(255,255,255,0.40); 16--dim: rgba(255,255,255,0.18); 17--hairline: rgba(255,255,255,0.12); 18--accent: #D97757; 19--accent-deep: #B85D3D; 20--bad: #6E3A2E; /* 失败暗红调,不刺眼 */ 21--bad-strong: #C85A42; /* 失败叉号强调,对比度提升 */ 22--cool: rgba(255,255,255,0.42); /* 冷色参考线(左路径) */ 23--cd-bg: #F5F4F0; 24--cd-panel: #FFFFFF;First 10 of 545 lines.
- 570 lines in 2 placesmarkupdocs and examples4,309 tokens
28 --sans: "Inter", -apple-system, system-ui, sans-serif; 29 --mono: "JetBrains Mono", "SF Mono", ui-monospace, monospace; 30} 31html, body { 32 margin: 0; padding: 0; 33 background: #000; 34 overflow: hidden; 35 font-family: var(--sans); 36 color: var(--ink); 37 -webkit-font-smoothing: antialiased;First 10 of 570 lines.
- 477 lines in 2 placesmarkupdocs and examples4,056 tokens
- 285 lines in 2 placesmarkupdocs and examples2,515 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| javascript | 10 | 3,009 | 12 | 177 | 5.88% |
| jsx | 8 | 2,060 | 1 | 8 | 0.39% |
| python | 9 | 2,354 | 0 | 0 | 0% |
| bash | 7 | 682 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| markup | 148 | 35,524 | 236 | 9,663 | 27.2% |
| javascript | 20 | 3,433 | 13 | 183 | 5.33% |
| text | 19 | 732 | 2 | 14 | 1.91% |
| markdown | 50 | 14,365 | 1 | 9 | 0.06% |
| python | 12 | 2,628 | 1 | 10 | 0.38% |
| jsx | 15 | 2,435 | 1 | 8 | 0.33% |
| bash | 16 | 825 | 0 | 0 | 0% |
| css | 10 | 261 | 0 | 0 | 0% |
| json | 2 | 109 | 0 | 0 | 0% |
| typescript | 1 | 40 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Oct 27, 2026 | #9 | 27,163 (+251) | 294 | 60,359 | 254 | 16.38% | 2.28% | E 25.6 | 4fc7bfd |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.