[{"data":1,"prerenderedAt":845},["ShallowReactive",2],{"navigation_docs":3,"trending-repo-scenario-labs\u002Fskills":249,"page-views-\u002Ftrending\u002Fscenario-labs\u002Fskills":843},[4,29,104,124,194],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Start",false,"\u002Fstart","1.start",[10,14,19,24],{"title":11,"path":7,"stem":12,"icon":13},"What jscpd finds","1.start\u002Findex","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fstart\u002Finstallation","1.start\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quickstart","\u002Fstart\u002Fquickstart","1.start\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Configuration basics","\u002Fstart\u002Fconfiguration","1.start\u002F4.configuration","i-lucide-settings-2",{"title":30,"icon":6,"path":31,"stem":32,"children":33,"page":6},"Guides","\u002Fguides","2.guides",[34,39,44,49,54,59,64,69,74,79,84,89,94,99],{"title":35,"path":36,"stem":37,"icon":38},"Use jscpd in CI","\u002Fguides\u002Fci","2.guides\u002F01.ci","i-lucide-github",{"title":40,"path":41,"stem":42,"icon":43},"Pre-commit hooks","\u002Fguides\u002Fpre-commit","2.guides\u002F02.pre-commit","i-lucide-git-commit",{"title":45,"path":46,"stem":47,"icon":48},"Fail only on new duplication","\u002Fguides\u002Fbaseline","2.guides\u002F03.baseline","i-lucide-git-compare",{"title":50,"path":51,"stem":52,"icon":53},"Monorepos","\u002Fguides\u002Fmonorepos","2.guides\u002F04.monorepos","i-lucide-folder-tree",{"title":55,"path":56,"stem":57,"icon":58},"Cross-format detection","\u002Fguides\u002Fcross-format","2.guides\u002F05.cross-format","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Agents","\u002Fguides\u002Fagents","2.guides\u002F06.agents","i-lucide-cpu",{"title":65,"path":66,"stem":67,"icon":68},"Editors","\u002Fguides\u002Feditors","2.guides\u002F07.editors","i-lucide-code",{"title":70,"path":71,"stem":72,"icon":73},"Duplication over git history","\u002Fguides\u002Fhistory","2.guides\u002F08.history","i-lucide-chart-no-axes-combined",{"title":75,"path":76,"stem":77,"icon":78},"Dashboard and health score","\u002Fguides\u002Fdashboard","2.guides\u002F09.dashboard","i-lucide-layout-dashboard",{"title":80,"path":81,"stem":82,"icon":83},"Dead code","\u002Fguides\u002Fdead-code","2.guides\u002F10.dead-code","i-lucide-ghost",{"title":85,"path":86,"stem":87,"icon":88},"Comparing two codebases","\u002Fguides\u002Fcompare","2.guides\u002F11.compare","i-lucide-git-compare-arrows",{"title":90,"path":91,"stem":92,"icon":93},"Semantic clones","\u002Fguides\u002Fsemantic-clones","2.guides\u002F12.semantic-clones","i-lucide-brain-circuit",{"title":95,"path":96,"stem":97,"icon":98},"Similar functions","\u002Fguides\u002Fsimilarity","2.guides\u002F13.similarity","i-lucide-list-tree",{"title":100,"path":101,"stem":102,"icon":103},"Boundaries","\u002Fguides\u002Fboundaries","2.guides\u002F14.boundaries","i-lucide-fence",{"title":105,"icon":6,"path":106,"stem":107,"children":108,"page":6},"Concepts","\u002Fconcepts","3.concepts",[109,114,119],{"title":110,"path":111,"stem":112,"icon":113},"Types of code clones","\u002Fconcepts\u002Fclone-types","3.concepts\u002F1.clone-types","i-lucide-copy",{"title":115,"path":116,"stem":117,"icon":118},"How detection works","\u002Fconcepts\u002Fhow-detection-works","3.concepts\u002F2.how-detection-works","i-lucide-scan-search",{"title":120,"path":121,"stem":122,"icon":123},"The health score","\u002Fconcepts\u002Fhealth-score","3.concepts\u002F3.health-score","i-lucide-heart-pulse",{"title":125,"icon":6,"path":126,"stem":127,"children":128,"page":6},"Reference","\u002Freference","4.reference",[129,134,139,144,181,186,190],{"title":130,"path":131,"stem":132,"icon":133},"CLI options","\u002Freference\u002Fcli","4.reference\u002F1.cli","i-lucide-terminal",{"title":135,"path":136,"stem":137,"icon":138},"The config file","\u002Freference\u002Fconfig-file","4.reference\u002F2.config-file","i-lucide-settings",{"title":140,"path":141,"stem":142,"icon":143},"Exit codes","\u002Freference\u002Fexit-codes","4.reference\u002F3.exit-codes","i-lucide-log-out",{"title":145,"icon":6,"path":146,"stem":147,"children":148},"Reporters","\u002Freference\u002Freporters","4.reference\u002F4.reporters\u002Findex",[149,151,156,161,166,171,176],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-file-chart-column",{"title":152,"path":153,"stem":154,"icon":155},"HTML reporter","\u002Freference\u002Freporters\u002Fhtml","4.reference\u002F4.reporters\u002F2.html","i-lucide-file-code",{"title":157,"path":158,"stem":159,"icon":160},"JSON reporter","\u002Freference\u002Freporters\u002Fjson","4.reference\u002F4.reporters\u002F3.json","i-lucide-braces",{"title":162,"path":163,"stem":164,"icon":165},"Badge reporter","\u002Freference\u002Freporters\u002Fbadge","4.reference\u002F4.reporters\u002F4.badge","i-lucide-award",{"title":167,"path":168,"stem":169,"icon":170},"SARIF reporter","\u002Freference\u002Freporters\u002Fsarif","4.reference\u002F4.reporters\u002F5.sarif","i-lucide-shield-check",{"title":172,"path":173,"stem":174,"icon":175},"CodeClimate reporter","\u002Freference\u002Freporters\u002Fcodeclimate","4.reference\u002F4.reporters\u002F6.codeclimate","i-lucide-flag-triangle-right",{"title":177,"path":178,"stem":179,"icon":180},"OpenMetrics reporter","\u002Freference\u002Freporters\u002Fopenmetrics","4.reference\u002F4.reporters\u002F7.openmetrics","i-lucide-activity",{"title":182,"path":183,"stem":184,"icon":185},"Supported formats","\u002Freference\u002Fsupported-formats","4.reference\u002F5.supported-formats","i-lucide-languages",{"title":187,"path":188,"stem":189,"icon":38},"GitHub Action","\u002Freference\u002Fgithub-action","4.reference\u002F6.github-action",{"title":191,"path":192,"stem":193,"icon":68},"Rust crates","\u002Freference\u002Frust-crates","4.reference\u002F7.rust-crates",{"title":195,"icon":6,"path":196,"stem":197,"children":198,"page":6},"Project","\u002Fproject","5.project",[199,204,209,214,239,244],{"title":200,"path":201,"stem":202,"icon":203},"Changelog","\u002Fproject\u002Fchangelog","5.project\u002F1.changelog","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"Migrating from v4 to v5","\u002Fproject\u002Fmigration","5.project\u002F2.migration","i-lucide-arrow-right-left",{"title":210,"path":211,"stem":212,"icon":213},"jscpd v4 (TypeScript)","\u002Fproject\u002Fv4","5.project\u002F3.v4","i-simple-icons-typescript",{"title":215,"icon":6,"path":216,"stem":217,"children":218},"Benchmarks","\u002Fproject\u002Fbenchmarks","5.project\u002F4.benchmarks\u002Findex",[219,221,226,230,235],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-gauge",{"title":222,"path":223,"stem":224,"icon":225},"Detection Speed","\u002Fproject\u002Fbenchmarks\u002Fdetection-speed","5.project\u002F4.benchmarks\u002F2.detection-speed","i-lucide-zap",{"title":227,"path":228,"stem":229,"icon":58},"Multi-Format Detection","\u002Fproject\u002Fbenchmarks\u002Fcross-format","5.project\u002F4.benchmarks\u002F3.cross-format",{"title":231,"path":232,"stem":233,"icon":234},"AI Token Efficiency","\u002Fproject\u002Fbenchmarks\u002Fai-token-efficiency","5.project\u002F4.benchmarks\u002F4.ai-token-efficiency","i-lucide-sparkles",{"title":236,"path":237,"stem":238,"icon":93},"Embedding Models","\u002Fproject\u002Fbenchmarks\u002Fembedding-models","5.project\u002F4.benchmarks\u002F5.embedding-models",{"title":240,"path":241,"stem":242,"icon":243},"Research","\u002Fproject\u002Fresearch","5.project\u002F5.research","i-lucide-graduation-cap",{"title":245,"path":246,"stem":247,"icon":248},"Articles","\u002Fproject\u002Farticles","5.project\u002F6.articles","i-lucide-newspaper",{"name":250,"url":251,"appearances":252,"latest":268},"scenario-labs\u002Fskills","https:\u002F\u002Fgithub.com\u002Fscenario-labs\u002Fskills",[253],{"date":254,"rank":255,"stars":256,"starsToday":257,"headSha":258,"sources":259,"lines":260,"clones":261,"duplicatedLines":262,"percentage":263,"codePercentage":264,"codeSources":265,"healthScore":266,"healthGrade":267},"2026-11-05",10,2567,224,"6e4a6f00939102bdccbf7d34a7fa8a3e2d22c8c6",1726,409042,702,10226,2.5,1.11,610,23.1,"E",{"date":254,"generatedAt":269,"name":250,"url":251,"description":270,"language":271,"stars":256,"starsToday":257,"defaultBranch":272,"headSha":258,"durationMs":273,"total":274,"formats":278,"topClones":347,"code":553,"health":722,"complexity":758,"deadCode":809},"2026-11-05T05:21:19.579Z","Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through the Scenario MCP, plus expert teams that drive Blender, Maya, ZBrush, Unreal, and Unity.","Python","main",4016,{"sources":259,"lines":260,"tokens":275,"clones":261,"duplicatedLines":262,"duplicatedTokens":276,"percentage":263,"percentageTokens":277},5092942,90102,1.77,[279,286,293,300,307,314,321,328,334,340],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},"markdown",696,141252,358,2487,1.76,{"format":287,"sources":288,"lines":289,"clones":290,"duplicatedLines":291,"percentage":292},"python",379,171178,181,2629,1.54,{"format":294,"sources":295,"lines":296,"clones":297,"duplicatedLines":298,"percentage":299},"csharp",254,43150,55,544,1.26,{"format":301,"sources":302,"lines":303,"clones":304,"duplicatedLines":305,"percentage":306},"gdscript",183,21794,38,328,1.51,{"format":308,"sources":309,"lines":310,"clones":311,"duplicatedLines":312,"percentage":313},"json",37,4799,24,836,17.42,{"format":315,"sources":316,"lines":317,"clones":318,"duplicatedLines":319,"percentage":320},"javascript",26,5159,13,135,2.62,{"format":322,"sources":323,"lines":324,"clones":325,"duplicatedLines":326,"percentage":327},"txt",7,6759,12,2327,34.43,{"format":329,"sources":330,"lines":331,"clones":323,"duplicatedLines":332,"percentage":333},"lua",21,6218,67,1.08,{"format":335,"sources":336,"lines":337,"clones":323,"duplicatedLines":338,"percentage":339},"markup",8,4242,743,17.52,{"format":341,"sources":342,"lines":343,"clones":344,"duplicatedLines":345,"percentage":346},"yaml",30,1394,5,114,8.18,[348,372,410,432,452,464,475,485,492,523],{"format":322,"lines":349,"tokens":350,"first":351,"others":355,"copies":358,"excerpt":359,"kind":371},824,6779,{"name":352,"start":353,"end":354},"skills\u002Fscenario-kinetic-music-video\u002Fassets\u002Fpython\u002Flinux-x86_64.txt",621,1444,[356],{"name":357,"start":353,"end":354},"skills\u002Fscenario-kinetic-music-video\u002Fassets\u002Fpython\u002Fmacos-arm64.txt",2,{"lines":360,"total":349},[361,362,363,364,365,366,367,368,369,370],"idna==3.20 \\","    --hash=sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44 \\","    --hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c","    # via","    #   anyio","    #   httpx2","    #   requests","jax==0.10.2 \\","    --hash=sha256:724d73c4678d8b06f6a6ab4db1b8a2fea8cd4f1e2c2564f99601634ec7b8d1c6 \\","    --hash=sha256:bf77428a8c2e6904c4f46d5ab12aa5cfc6cad2179f07f7e4c0fc75ac86ef0639","docs",{"format":280,"lines":373,"tokens":374,"first":375,"others":378,"copies":397,"excerpt":398,"excerptSecond":406,"kind":371},6,84,{"name":376,"start":318,"end":377},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-animation\u002FSKILL.md",18,[379,382,384,387,389,391,393,395],{"name":380,"start":381,"end":330},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-blockout\u002FSKILL.md",16,{"name":383,"start":318,"end":377},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-geometry-nodes\u002FSKILL.md",{"name":385,"start":325,"end":386},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-hair\u002FSKILL.md",17,{"name":388,"start":318,"end":377},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-hard-surface\u002FSKILL.md",{"name":390,"start":325,"end":386},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-lighting-rendering\u002FSKILL.md",{"name":392,"start":325,"end":386},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-previs-storyboard\u002FSKILL.md",{"name":394,"start":318,"end":377},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-retopology\u002FSKILL.md",{"name":396,"start":325,"end":386},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-rigging\u002FSKILL.md",62,{"lines":399,"total":373},[400,401,402,403,404,405],"curve plot, and a playblast it actually looks at. If a sibling skill named here is missing from your","available skills, load it with `skill_get` (Scenario MCP) or ask the user to install it","(https:\u002F\u002Fgithub.com\u002Fscenario-labs\u002Fskills#install); unattended, proceed from tool schemas and flag","the gap.","","**REQUIRED BACKGROUND:** scenario-blender-expert (execution channel, review loop, 5.2 API changes).",{"lines":407,"total":373},[408,409,402,403,404,405],"in the viewport alone. If a sibling skill named here is missing from your available skills, load it","with `skill_get` (Scenario MCP) or ask the user to install it",{"format":322,"lines":411,"tokens":412,"first":413,"others":416,"copies":358,"excerpt":420,"kind":371},461,3682,{"name":352,"start":414,"end":415},1551,2011,[417],{"name":357,"start":418,"end":419},1468,1928,{"lines":421,"total":411},[422,423,424,425,426,427,428,429,430,431],"    # via faster-whisper","opencv-contrib-python==5.0.0.93 \\","    --hash=sha256:29b916da864002a921c79b6df4cfb2dcf79870f166ddf3ce1179b558bc7313d7 \\","    --hash=sha256:3ebb8e0506573f36f54038116321a086c97aeda8ef154198931f3ea18b435cc7 \\","    --hash=sha256:45a1ce7c68828907348e649edd471a7dc5244d3d0ac21989e67c63d2f4fa629a \\","    --hash=sha256:461622db95c964652d4d8fda171034961c3de270f78a6095aaad31050771774a \\","    --hash=sha256:8427dcb0561dc3ba32f3771c627f52b87c29932c265bea28ffcb54804c3c3fec \\","    --hash=sha256:b84f0b0fcdbd2421b5819e517542463e71eed7f41e0a0c4ec280ed88b7269a66 \\","    --hash=sha256:cac609c9a4fce67feb287837c671a2c4da9467df8e47fa0cce7bdc453d12a529 \\","    --hash=sha256:da0ba61096b08c63cb4440d8fd6f323835cbb78b714c5ba22a39e1db68c83166 \\",{"format":287,"lines":433,"tokens":434,"first":435,"others":438,"copies":323,"kind":451},73,490,{"name":436,"start":437,"end":433},"tests\u002Fscenario-blender-expert\u002Ftest_family_imports.py",1,[439,441,443,445,447,449],{"name":440,"start":437,"end":433},"tests\u002Fscenario-godot-expert\u002Ftest_family_imports.py",{"name":442,"start":437,"end":433},"tests\u002Fscenario-maya-expert\u002Ftest_family_imports.py",{"name":444,"start":437,"end":433},"tests\u002Fscenario-roblox-expert\u002Ftest_family_imports.py",{"name":446,"start":437,"end":433},"tests\u002Fscenario-unity-expert\u002Ftest_family_imports.py",{"name":448,"start":437,"end":433},"tests\u002Fscenario-unreal-expert\u002Ftest_family_imports.py",{"name":450,"start":437,"end":433},"tests\u002Fscenario-zbrush-expert\u002Ftest_family_imports.py","tests",{"format":335,"lines":453,"tokens":454,"first":455,"others":459,"copies":358,"kind":335},327,2831,{"name":456,"start":457,"end":458},"skills\u002Fscenario-admin-analytics\u002Fassets\u002Fdashboard.html",385,711,[460],{"name":461,"start":462,"end":463},"tests\u002Fscenario-admin-analytics\u002Fevidence\u002Fexample\u002Fdashboard.html",882,1208,{"format":287,"lines":302,"tokens":465,"first":466,"others":470,"copies":358,"kind":371},2550,{"name":467,"start":468,"end":469},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-geometry-nodes\u002Freferences\u002Fprocedures.md",524,706,[471],{"name":472,"start":473,"end":474},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-geometry-nodes\u002Fscripts\u002Fbx_gn.py",975,1124,{"format":322,"lines":476,"tokens":477,"first":478,"others":481,"copies":358,"kind":371},295,2495,{"name":352,"start":479,"end":480},39,333,[482],{"name":357,"start":483,"end":484},70,364,{"format":335,"lines":486,"tokens":487,"first":488,"others":490,"copies":358,"kind":335},374,2108,{"name":456,"start":255,"end":489},383,[491],{"name":461,"start":255,"end":489},{"format":280,"lines":373,"tokens":493,"first":494,"others":497,"copies":309,"kind":371},56,{"name":376,"start":495,"end":496},158,163,[498,501,504,507,509,512,515,519],{"name":383,"start":499,"end":500},129,134,{"name":385,"start":502,"end":503},149,154,{"name":388,"start":505,"end":506},147,152,{"name":390,"start":503,"end":508},159,{"name":396,"start":510,"end":511},167,172,{"name":513,"start":514,"end":319},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-sculpting\u002FSKILL.md",130,{"name":516,"start":517,"end":518},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-deformation\u002FSKILL.md",137,142,{"name":520,"start":521,"end":522},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-pipeline-scripting\u002FSKILL.md",143,148,{"format":280,"lines":373,"tokens":524,"first":525,"others":528,"copies":377,"kind":371},91,{"name":392,"start":526,"end":527},101,106,[529,531,534,537,540,544,548,551],{"name":396,"start":530,"end":345},109,{"name":532,"start":345,"end":533},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-animation\u002FSKILL.md",119,{"name":516,"start":535,"end":536},108,113,{"name":538,"start":539,"end":499},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-fx\u002FSKILL.md",124,{"name":541,"start":542,"end":543},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-groom\u002FSKILL.md",121,126,{"name":545,"start":546,"end":547},"skills\u002Fdcc\u002Fzbrush\u002Fscenario-zbrush-automation\u002FSKILL.md",102,107,{"name":549,"start":550,"end":535},"skills\u002Fdcc\u002Fzbrush\u002Fscenario-zbrush-paint-render\u002FSKILL.md",103,{"name":552,"start":510,"end":511},"skills\u002Fgame-engines\u002Fgodot\u002Fscenario-godot-performance-export\u002FSKILL.md",{"sources":265,"lines":554,"tokens":555,"clones":556,"duplicatedLines":557,"duplicatedTokens":558,"percentage":264,"percentageTokens":559,"formats":560,"topClones":588,"generated":719},213972,2073145,218,2367,22079,1.07,[561,566,572,577,581,585],{"format":287,"sources":562,"lines":563,"clones":502,"duplicatedLines":564,"percentage":565},201,148774,1747,1.17,{"format":294,"sources":567,"lines":568,"clones":569,"duplicatedLines":570,"percentage":571},225,40609,36,310,0.76,{"format":301,"sources":503,"lines":573,"clones":574,"duplicatedLines":575,"percentage":576},19896,27,240,1.21,{"format":315,"sources":578,"lines":579,"clones":373,"duplicatedLines":483,"percentage":580},19,3872,1.81,{"format":582,"sources":255,"lines":583,"clones":584,"duplicatedLines":584,"percentage":584},"bash",779,0,{"format":586,"sources":437,"lines":587,"clones":584,"duplicatedLines":584,"percentage":584},"swift",42,[589,611,629,647,659,667,677,693,701,710],{"format":287,"lines":590,"tokens":591,"first":592,"others":596,"copies":358,"excerpt":599,"kind":610},110,1103,{"name":593,"start":594,"end":595},"skills\u002Fgame-engines\u002Fgodot\u002Fscenario-godot-expert\u002Fscripts\u002Fgd_review.py",23,132,[597],{"name":598,"start":330,"end":514},"skills\u002Fgame-engines\u002Froblox\u002Fscenario-roblox-expert\u002Fscripts\u002Frbx_review.py",{"lines":600,"total":590},[601,602,603,604,605,606,404,607,608,609],"import math","import shutil","import struct","import subprocess","import zlib","from pathlib import Path","try:","    from PIL import Image, ImageDraw  # type: ignore","    HAVE_PIL = True","code",{"format":287,"lines":612,"tokens":613,"first":614,"others":616,"copies":358,"excerpt":619,"kind":610},99,1027,{"name":615,"start":437,"end":612},"skills\u002Fscenario-blender-2d-animation\u002Fscripts\u002Freframe_stills.py",[617],{"name":618,"start":437,"end":612},"skills\u002Fscenario-side-view-game-kit\u002Fscripts\u002Freframe_stills.py",{"lines":620,"total":612},[621,622,404,623,624,625,626,627,628,404],"#!\u002Fusr\u002Fbin\u002Fenv python3","\"\"\"Split a two-pose still into two square first frames with headroom.","The still holds one character twice on a flat magenta (#FF00FF) field, in","side profile facing right: the rest pose on the left half, the jump (hero) or","attack wind-up (enemy) on the right half. Each pose is cut out, scaled so the","figure is a fixed share of the frame height, and pasted centered on a fresh","magenta square with its feet on a fixed baseline. The empty space above the","head leaves room for a raised weapon or a jump in the animated clip.",{"format":287,"lines":630,"tokens":631,"first":632,"others":635,"copies":358,"excerpt":638,"kind":610},54,769,{"name":593,"start":633,"end":634},169,222,[636],{"name":598,"start":510,"end":637},220,{"lines":639,"total":630},[640,641,642,404,404,643,644,404,645,646],"            \"surround_luma\": round(sm, 4), \"centre_contrast\": round(abs(cm - sm), 4), \"unique_colors\": uniq,","            \"alpha_mean\": round(alpha, 4), \"histogram\": [round(c \u002F n, 4) for c in hist], \"flags\": flags,","            \"ok\": not any(f in flags for f in (\"all_black\", \"all_white\", \"uniform\", \"transparent\"))}","def compare(a, b, sample: int = 256) -> dict:","    \"\"\"Mean absolute difference (0..1) and changed-pixel fraction (> 0.1) between two images on a grid.","    Use it to prove an edit changed the render (or that a refactor did not).\"\"\"","    _, _, gwa, gha, pa = _samples(a, sample)",{"format":287,"lines":648,"tokens":649,"first":650,"others":654,"copies":358,"kind":610},33,506,{"name":651,"start":652,"end":653},"skills\u002Fgame-engines\u002Funity\u002Fscenario-unity-expert\u002Fscripts\u002Fut_review.py",418,450,[655],{"name":656,"start":657,"end":658},"skills\u002Fgame-engines\u002Funreal\u002Fscenario-unreal-expert\u002Fscripts\u002Fue_review.py",519,551,{"format":287,"lines":660,"tokens":652,"first":661,"others":663,"copies":358,"kind":610},52,{"name":651,"start":630,"end":662},105,[664],{"name":656,"start":665,"end":666},68,120,{"format":287,"lines":668,"tokens":669,"first":670,"others":673,"copies":358,"kind":610},20,282,{"name":651,"start":671,"end":672},341,360,[674],{"name":656,"start":675,"end":676},437,456,{"format":287,"lines":336,"tokens":297,"first":678,"others":680,"copies":373,"kind":610},{"name":679,"start":381,"end":594},"skills\u002Fscenario-kinetic-music-video\u002Fscripts\u002Faudio_analysis.py",[681,684,687,689,691],{"name":682,"start":336,"end":683},"skills\u002Fscenario-kinetic-music-video\u002Fscripts\u002Fav_sync_check.py",15,{"name":685,"start":323,"end":686},"skills\u002Fscenario-kinetic-music-video\u002Fscripts\u002Fbeatwarp.py",14,{"name":688,"start":336,"end":683},"skills\u002Fscenario-kinetic-music-video\u002Fscripts\u002Fplot_lyrics.py",{"name":690,"start":668,"end":574},"skills\u002Fscenario-kinetic-music-video\u002Fscripts\u002Fprep_video.py",{"name":692,"start":373,"end":318},"skills\u002Fscenario-kinetic-music-video\u002Fscripts\u002Fsynth_beat.py",{"format":287,"lines":318,"tokens":694,"first":695,"others":698,"copies":358,"kind":610},271,{"name":651,"start":696,"end":697},273,285,[699],{"name":656,"start":700,"end":457},373,{"format":287,"lines":574,"tokens":702,"first":703,"others":705,"copies":358,"kind":610},252,{"name":704,"start":542,"end":505},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-lighting-rendering\u002Fscripts\u002Fmx_light.py",[706],{"name":707,"start":708,"end":709},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-rigging\u002Fscripts\u002Fmx_rig.py",86,112,{"format":287,"lines":711,"tokens":712,"first":713,"others":715,"copies":358,"kind":610},28,249,{"name":651,"start":714,"end":510},140,[716],{"name":656,"start":717,"end":718},178,205,{"files":437,"minified":584,"sample":720},[721],"skills\u002Fgame-engines\u002Fgodot\u002Fscenario-godot-multiplayer\u002Fscripts\u002Fagentkit\u002Fmultiplayer\u002Fnet_audit.gd",{"score":266,"grade":267,"size":723,"dimensions":727},{"lines":724,"files":725,"class":726},231207,737,"L",[728,743,751],{"id":729,"source":730,"value":731,"adjusted":731,"lines":732,"halfLife":733,"formats":734,"excluded":739,"weight":437,"score":742},"duplication","jscpd",1.4,3136,8.5,[287,294,301,315,582,735,736,737,586,738],"typescript","hlsl","c","glsl",[335,740,741],"text","data",89.4,{"id":744,"source":730,"value":745,"adjusted":746,"lines":747,"halfLife":748,"coverage":749,"weight":750,"score":358},"dead-code",43,42.5,71509,7.5,71.9,0.719,{"id":752,"source":730,"value":753,"adjusted":754,"lines":755,"halfLife":756,"weight":437,"score":757},"complexity",77.2,76.8,178595,50,34.5,{"total":759,"mean":760,"files":761},60862,82.6,[762,767,771,776,781,786,791,795,800,804],{"path":763,"complexity":764,"lines":765,"bytes":766},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-groom\u002Fscripts\u002Fmx_groom.py",1546,3620,169006,{"path":704,"complexity":768,"lines":769,"bytes":770},1291,3848,196902,{"path":772,"complexity":773,"lines":774,"bytes":775},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-retopology-uv\u002Fscripts\u002Fmx_retopology_uv.py",1168,3334,151687,{"path":777,"complexity":778,"lines":779,"bytes":780},"skills\u002Fgame-engines\u002Funreal\u002Fscenario-unreal-animation\u002Fscripts\u002Fue_anim.py",1050,2767,151350,{"path":782,"complexity":783,"lines":784,"bytes":785},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-deformation\u002Fscripts\u002Fmx_skin.py",985,2646,115009,{"path":787,"complexity":788,"lines":789,"bytes":790},"skills\u002Fdcc\u002Fmaya\u002Fscenario-maya-animation\u002Fscripts\u002Fmx_anim.py",973,2370,111867,{"path":707,"complexity":792,"lines":793,"bytes":794},943,2596,126334,{"path":796,"complexity":797,"lines":798,"bytes":799},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-retopology\u002Fscripts\u002Fbx_retopo.py",926,2872,128581,{"path":801,"complexity":797,"lines":802,"bytes":803},"skills\u002Fgame-engines\u002Funreal\u002Fscenario-unreal-lighting-rendering\u002Fscripts\u002Fue_light.py",2763,163646,{"path":805,"complexity":806,"lines":807,"bytes":808},"skills\u002Fgame-engines\u002Funreal\u002Fscenario-unreal-materials\u002Fscripts\u002Fue_materials.py",911,3141,163463,{"percentage":810,"findings":811,"files":812,"byCategory":813,"largest":822},42.99,80,311,[814,817,820],{"category":815,"count":816},"unused-file",64,{"category":818,"count":819},"unused-symbol",9,{"category":821,"count":323},"unused-import",[823,824,825,828,831,832,835,836,837,840],{"category":815,"path":772,"name":404,"line":437,"lines":774},{"category":815,"path":805,"name":404,"line":437,"lines":807},{"category":815,"path":826,"name":404,"line":437,"lines":827},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-rigging\u002Fscripts\u002Fbx_rig.py",3120,{"category":815,"path":829,"name":404,"line":437,"lines":830},"skills\u002Fgame-engines\u002Funreal\u002Fscenario-unreal-gameplay\u002Fscripts\u002Fue_gameplay.py",2994,{"category":815,"path":796,"name":404,"line":437,"lines":798},{"category":815,"path":833,"name":404,"line":437,"lines":834},"skills\u002Fgame-engines\u002Funreal\u002Fscenario-unreal-vfx\u002Fscripts\u002Fue_vfx.py",2706,{"category":815,"path":707,"name":404,"line":437,"lines":793},{"category":815,"path":787,"name":404,"line":437,"lines":789},{"category":815,"path":838,"name":404,"line":437,"lines":839},"skills\u002Fdcc\u002Fblender\u002Fscenario-blender-uv-baking\u002Fscripts\u002Fbx_uvbake.py",2337,{"category":815,"path":841,"name":404,"line":437,"lines":842},"skills\u002Fdcc\u002Fzbrush\u002Fscenario-zbrush-character-creature\u002Fscripts\u002Fzb_character.py",2333,{"\u002Ftrending\u002Fscenario-labs\u002Fskills":844},{"views":584,"visits":584},1793861477656]