1 view

earthtojake/text-to-cad

Give your agent CAD superpowers.

Python★ 18,086+619 that day#2 on trending

Analyzed October 7, 2026 at af990e6 (main) with jscpd 5.4.0 in 4.7s. Code duplication went from 2.44% on Sep 10 to 4.77% on Oct 7.

D51.7/100
Project health462,883 lines of code (L)
Duplication70
4.3% in python, javascript, tsx, jsx, typescript, bash, c, perl, sql
Dead code44
8.9%
Complexity44
58.9%

The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.

4.77%duplicated code · 15,372 of 322,142 lines
839clones in code
1,630code files of 2,742 scanned
5.56%duplicated over all files · 1,477 clones

The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 1 generated file: models/radial/src/lib/anim_js.py.

Largest clones in the code

  • 7 lines in 5 placespython50,299 tokens
    8ANIMATION_JS = r'''// Static surface presentation only; no joint choreography.
    9const ropes = [{"name":"thumb_cmc_abduction_positive","normal":[1,0,0],"segments":[{"kind":"bezier","points":[[-20.0,-252.0,30.6],[-20.0,-248.13400675118444,30…
    10export const clips={presentation:{label:"Braided surface study",duration:1,loop:false,update(t,m){for(const rope of ropes){const rest={normal:rope.normal,segme…
    11'''
    12
    13
    14@step(out='../STEP/hand_export_repair_context.step', materials=ASSEMBLY_MATERIALS, animation=ANIMATION_JS)
    
    27ANIMATION_JS = r'''// Static surface presentation only; no joint choreography.
    28const ropes = [{"name":"thumb_cmc_abduction_positive","normal":[1,0,0],"segments":[{"kind":"bezier","points":[[-20.0,-252.0,30.6],[-20.0,-248.13400675118444,30…
    29export const clips={presentation:{label:"Braided surface study",duration:1,loop:false,update(t,m){for(const rope of ropes){const rest={normal:rope.normal,segme…
    30'''
    31
    32
    33@step(out='../STEP/hand_mechanical_candidate.step', materials=ASSEMBLY_MATERIALS, animation=ANIMATION_JS)
    
  • 33 lines in 3 placespython50,505 tokens
    1"""Complete mechanical candidate assembled from the actual exported components.
    2
    3The pose/explode gauntlet is still separate. Native reconstruction here keeps
    4this assembled export aligned with the components used by the physical audits.
    5"""
    6import hashlib,json
    7from pathlib import Path
    8from cadgen import step,read_step
    9from lib.native_integration import integrated_native_bodies,overlay,ROOT
    10from lib.assembly import compound
    

    First 10 of 33 lines.

  • 10 lines in 2 placespython50,315 tokens
    4from lib.native_integration import frozen_bodies
    5from lib.palette import ASSEMBLY_MATERIALS
    6from phalanx_beauty_review import replacements
    7ANIMATION_JS = r'''// Static surface presentation only; no joint choreography.
    8const ropes = [{"name":"thumb_cmc_abduction_positive","normal":[1,0,0],"segments":[{"kind":"bezier","points":[[-20.0,-252.0,30.6],[-20.0,-248.13400675118444,30…
    9export const clips={presentation:{label:"Braided surface study",duration:1,loop:false,update(t,m){for(const rope of ropes){const rest={normal:rope.normal,segme…
    10'''
    11
    12
    13@step(out='../STEP/phalanx_beauty_context.step', animation=ANIMATION_JS, materials=ASSEMBLY_MATERIALS)
    
    4from lib.native_integration import frozen_bodies
    5from lib.palette import ASSEMBLY_MATERIALS
    6from phalanx_beauty_review import replacements
    7ANIMATION_JS = r'''// Static surface presentation only; no joint choreography.
    8const ropes = [{"name":"thumb_cmc_abduction_positive","normal":[1,0,0],"segments":[{"kind":"bezier","points":[[-20.0,-252.0,30.6],[-20.0,-248.13400675118444,30…
    9export const clips={presentation:{label:"Braided surface study",duration:1,loop:false,update(t,m){for(const rope of ropes){const rest={normal:rope.normal,segme…
    10'''
    11
    12
    13@step(out='../STEP/phalanx_sculpt_representative_context.step', animation=ANIMATION_JS, materials=ASSEMBLY_MATERIALS)
    
7 more
Largest clones over all files, tests and data included
By format, code only
FormatFilesLinesClonesDuplicated linesDuplication
python1,087220,70569513,2636.01%
javascript38581,2901261,9182.36%
jsx6711,800101130.96%
typescript462,8496511.79%
bash212,5041140.56%
tsx222,0671130.63%
c1753000%
perl1174000%
By format, all files
FormatFilesLinesClonesDuplicated linesDuplication
python1,391292,48584115,0415.14%
javascript700138,0613744,7383.43%
json11567,5511849,49814.06%
markdown16927,060211,0013.7%
tsx10112,067141080.9%
css77881110513.32%
jsx6811,819101130.96%
typescript674,4727571.27%
txt13744753772.18%
yaml181,4185634.44%

Trending appearances

DayRankStarsFilesLinesClonesAll filesCodeHealthCommit
Oct 7, 2026#218,086 (+619)2,742563,2711,4775.56%4.77%D 51.7af990e6
Oct 6, 2026#317,530 (+437)2,741563,1511,4765.55%4.77%D 51.7941ac2f
Oct 5, 2026#216,966 (+83)2,735561,2261,4725.56%4.78%D 51.6d749a19
Sep 10, 2026#415,147 (+124)1,344313,4116212.93%2.44%—d0e4cb6

Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.