[{"data":1,"prerenderedAt":529},["ShallowReactive",2],{"navigation_docs":3,"-reference-lint-rules":148,"-reference-lint-rules-surround":524},[4,21,62,108],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":20},"Tutorials","i-lucide-graduation-cap","\u002Ftutorials","1.tutorials",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Your first texture","\u002Ftutorials\u002Ffirst-texture","1.tutorials\u002F1.first-texture","i-lucide-sprout",{"title":16,"path":17,"stem":18,"icon":19},"Grow a crop through its stages","\u002Ftutorials\u002Fgrowth-stages","1.tutorials\u002F2.growth-stages","i-lucide-wheat",false,{"title":22,"icon":23,"path":24,"stem":25,"children":26,"page":20},"How-to guides","i-lucide-wrench","\u002Fhow-to","2.how-to",[27,32,37,42,47,52,57],{"title":28,"path":29,"stem":30,"icon":31},"Install TextureScript","\u002Fhow-to\u002Finstall","2.how-to\u002F1.install","i-lucide-download",{"title":33,"path":34,"stem":35,"icon":36},"Compare a crop with vanilla","\u002Fhow-to\u002Fcompare-with-vanilla","2.how-to\u002F2.compare-with-vanilla","i-lucide-columns-2",{"title":38,"path":39,"stem":40,"icon":41},"Connect an agent","\u002Fhow-to\u002Fconnect-an-agent","2.how-to\u002F3.connect-an-agent","i-lucide-bot",{"title":43,"path":44,"stem":45,"icon":46},"Hand-edit a growth stage","\u002Fhow-to\u002Fhand-edit-a-stage","2.how-to\u002F4.hand-edit-a-stage","i-lucide-pencil",{"title":48,"path":49,"stem":50,"icon":51},"Turn a PNG into a grid","\u002Fhow-to\u002Fimport-a-png","2.how-to\u002F5.import-a-png","i-lucide-file-image",{"title":53,"path":54,"stem":55,"icon":56},"Prove a fix stayed in its region","\u002Fhow-to\u002Fprove-a-fix","2.how-to\u002F6.prove-a-fix","i-lucide-diff",{"title":58,"path":59,"stem":60,"icon":61},"Keep game assets out of git","\u002Fhow-to\u002Fkeep-game-assets-out","2.how-to\u002F7.keep-game-assets-out","i-lucide-shield-check",{"title":63,"icon":64,"path":65,"stem":66,"children":67,"page":20},"Reference","i-lucide-book-open","\u002Freference","3.reference",[68,73,78,83,88,93,98,103],{"title":69,"path":70,"stem":71,"icon":72},"Commands","\u002Freference\u002Fcommands","3.reference\u002F1.commands","i-lucide-terminal",{"title":74,"path":75,"stem":76,"icon":77},"Palette files","\u002Freference\u002Fpalette-files","3.reference\u002F2.palette-files","i-lucide-palette",{"title":79,"path":80,"stem":81,"icon":82},"Grid files","\u002Freference\u002Fgrid-files","3.reference\u002F3.grid-files","i-lucide-grid-3x3",{"title":84,"path":85,"stem":86,"icon":87},"Stages files","\u002Freference\u002Fstages-files","3.reference\u002F4.stages-files","i-lucide-layers",{"title":89,"path":90,"stem":91,"icon":92},"Scene files","\u002Freference\u002Fscene-files","3.reference\u002F5.scene-files","i-lucide-box",{"title":94,"path":95,"stem":96,"icon":97},"Lint rules","\u002Freference\u002Flint-rules","3.reference\u002F6.lint-rules","i-lucide-list-checks",{"title":99,"path":100,"stem":101,"icon":102},"MCP server","\u002Freference\u002Fmcp-server","3.reference\u002F7.mcp-server","i-lucide-plug",{"title":104,"path":105,"stem":106,"icon":107},"Environment","\u002Freference\u002Fenvironment","3.reference\u002F8.environment","i-lucide-settings",{"title":109,"icon":110,"path":111,"stem":112,"children":113,"page":20},"Explanation","i-lucide-lightbulb","\u002Fexplanation","4.explanation",[114,119,123,128,133,138,143],{"title":115,"path":116,"stem":117,"icon":118},"Textures as text","\u002Fexplanation\u002Ftextures-as-text","4.explanation\u002F1.textures-as-text","i-lucide-type",{"title":120,"path":121,"stem":122,"icon":77},"Colour from two anchors","\u002Fexplanation\u002Fcolour","4.explanation\u002F2.colour",{"title":124,"path":125,"stem":126,"icon":127},"Measured conventions","\u002Fexplanation\u002Fmeasured-conventions","4.explanation\u002F3.measured-conventions","i-lucide-ruler",{"title":129,"path":130,"stem":131,"icon":132},"Growth stages as maps","\u002Fexplanation\u002Fgrowth-stages","4.explanation\u002F4.growth-stages","i-lucide-chart-no-axes-column-increasing",{"title":134,"path":135,"stem":136,"icon":137},"The 3D view","\u002Fexplanation\u002Fthe-3d-view","4.explanation\u002F5.the-3d-view","i-lucide-rotate-3d",{"title":139,"path":140,"stem":141,"icon":142},"No game assets","\u002Fexplanation\u002Fno-game-assets","4.explanation\u002F6.no-game-assets","i-lucide-shield",{"title":144,"path":145,"stem":146,"icon":147},"Architecture","\u002Fexplanation\u002Farchitecture","4.explanation\u002F7.architecture","i-lucide-boxes",{"id":149,"title":94,"body":150,"description":517,"extension":518,"links":519,"meta":520,"navigation":521,"path":95,"seo":522,"stem":96,"__hash__":523},"docs\u002F3.reference\u002F6.lint-rules.md",{"type":151,"value":152,"toc":511},"minimark",[153,178,181,413,419,424,484,488],[154,155,156,160,161,164,165,169,170,173,174,177],"p",{},[157,158,159],"code",{},"texturescript lint"," and ",[157,162,163],{},"texturescript stages"," check each 16×16 sprite against conventions\nmeasured on a selection of vanilla Minecraft crop and item textures. Each finding has a level:\n",[166,167,168],"strong",{},"FAIL"," (exit code 1), ",[166,171,172],{},"WARN"," (worth a look, often fine) or ",[166,175,176],{},"OK",".",[154,179,180],{},"The thresholds describe vanilla, not taste. A warning means the sprite does something vanilla\ntextures rarely or never do; it may still be the right call.",[182,183,184,203],"table",{},[185,186,187],"thead",{},[188,189,190,194,197,200],"tr",{},[191,192,193],"th",{},"Rule",[191,195,196],{},"Level",[191,198,199],{},"Triggers when",[191,201,202],{},"Why",[204,205,206,222,237,253,271,289,304,319,334,349,364,379,394],"tbody",{},[188,207,208,214,216,219],{},[209,210,211],"td",{},[157,212,213],{},"size",[209,215,168],{},[209,217,218],{},"the image is not 16×16",[209,220,221],{},"Block and item textures are 16×16.",[188,223,224,229,231,234],{},[209,225,226],{},[157,227,228],{},"alpha",[209,230,168],{},[209,232,233],{},"any pixel is semi-transparent",[209,235,236],{},"Vanilla alpha is 0 or 255; the game cuts out crops at 50%, so partial alpha renders unpredictably.",[188,238,239,244,247,250],{},[209,240,241],{},[157,242,243],{},"budget",[209,245,246],{},"WARN \u002F FAIL",[209,248,249],{},"more than 10 \u002F more than 13 colours",[209,251,252],{},"The vanilla median is 6 colours and the maximum 13.",[188,254,255,260,262,268],{},[209,256,257],{},[157,258,259],{},"palette",[209,261,168],{},[209,263,264,265],{},"a colour is not a shade of ",[157,266,267],{},"--palette",[209,269,270],{},"A crop, its stages and its items share one family palette.",[188,272,273,278,280,286],{},[209,274,275],{},[157,276,277],{},"ramp",[209,279,172],{},[209,281,282,283,285],{},"a hue group has more than 6 shades (without ",[157,284,267],{},")",[209,287,288],{},"Vanilla materials use 3 to 6 shades.",[188,290,291,296,298,301],{},[209,292,293],{},[157,294,295],{},"noise",[209,297,168],{},[209,299,300],{},"more than half the opaque pixels differ from all of their (3 or 4) opaque neighbours",[209,302,303],{},"Vanilla reaches 0.48; programmer art sits between 0.45 and 0.77.",[188,305,306,311,313,316],{},[209,307,308],{},[157,309,310],{},"islands",[209,312,172],{},[209,314,315],{},"coverage ≥ 10% and more than 12 disconnected pieces",[209,317,318],{},"No vanilla crop has more than 12; blades should touch and overlap into a body.",[188,320,321,326,328,331],{},[209,322,323],{},[157,324,325],{},"solid",[209,327,172],{},[209,329,330],{},"one shade fills a rectangle at least 5 wide and 2 tall",[209,332,333],{},"Vanilla crops never fill more than a 4-wide band with one shade (the pitcher plant body excepted).",[188,335,336,341,343,346],{},[209,337,338],{},[157,339,340],{},"dither",[209,342,172],{},[209,344,345],{},"checkerboard fraction above 0.15",[209,347,348],{},"Vanilla never dithers at 16 px.",[188,350,351,356,358,361],{},[209,352,353],{},[157,354,355],{},"coverage",[209,357,172],{},[209,359,360],{},"blocks: more than 60% or less than 2% opaque",[209,362,363],{},"Mature vanilla crops are 26% to 54% opaque; even stage 0 has a few pixels.",[188,365,366,371,373,376],{},[209,367,368],{},[157,369,370],{},"outline",[209,372,172],{},[209,374,375],{},"blocks: edge pixels darker than the interior in more than 75% of cases; items: in less than 60%",[209,377,378],{},"Crops have no outline (vanilla 0.46); items carry a 1 px outline in the darkest shade (0.78).",[188,380,381,386,388,391],{},[209,382,383],{},[157,384,385],{},"light",[209,387,172],{},[209,389,390],{},"items: the lightest pixels sit below or right of the centre",[209,392,393],{},"Vanilla items are lit from the top left. A weak proxy: 5 of 19 vanilla items trip it, so don't tune pixels just to silence it.",[188,395,396,401,403,410],{},[209,397,398],{},[157,399,400],{},"seam",[209,402,168],{},[209,404,405,406,409],{},"with ",[157,407,408],{},"--lower",": the upper half's bottom row is empty, or has opaque columns the lower half's top row lacks",[209,411,412],{},"The two halves of a tall plant must join.",[154,414,415,418],{},[157,416,417],{},"stages"," runs lint on every generated half and checks the seam between halves automatically.",[420,421,423],"h2",{"id":422},"options-that-change-the-rules","Options that change the rules",[182,425,426,436],{},[185,427,428],{},[188,429,430,433],{},[191,431,432],{},"flag",[191,434,435],{},"effect",[204,437,438,449,459,472],{},[188,439,440,446],{},[209,441,442,445],{},[157,443,444],{},"--kind block"," (default)",[209,447,448],{},"crop and plant rules: no outline, coverage between 2% and 60%",[188,450,451,456],{},[209,452,453],{},[157,454,455],{},"--kind item",[209,457,458],{},"item rules: a 1 px outline expected, lit from the top left",[188,460,461,466],{},[209,462,463],{},[157,464,465],{},"--palette FAMILY.palette",[209,467,468,469,471],{},"adds ",[157,470,259],{},", and checks ramps per material instead of by hue",[188,473,474,479],{},[209,475,476],{},[157,477,478],{},"--lower LOWER.png",[209,480,481,482],{},"treats the texture as the upper half and adds ",[157,483,400],{},[420,485,487],{"id":486},"reading-the-output","Reading the output",[154,489,490,491,494,495,498,499,502,503,506,507,510],{},"Each line is ",[157,492,493],{},"LEVEL rule detail",". Pixels are named ",[157,496,497],{},"(column,row)",", x first, counted from the top\nleft. ",[157,500,501],{},"lint"," lists the pixels behind a measurement even when the rule passes; only WARN and FAIL\nlines ask for attention. The last line sums up, for example ",[157,504,505],{},"PASSED: 0 fail, 0 warn",". With\n",[157,508,509],{},"--json"," the findings come back as data.",{"title":512,"searchDepth":513,"depth":513,"links":514},"",2,[515,516],{"id":422,"depth":513,"text":423},{"id":486,"depth":513,"text":487},"Every rule lint applies, its level and threshold, and the vanilla measurement behind it.","md",null,{},{"icon":97},{"title":94,"description":517},"GWgje0fx3EgvJJV8aL9XCpfEPcETjDMNLYJGRBGIyK0",[525,527],{"title":89,"path":90,"stem":91,"description":526,"icon":92,"children":-1},"The TOML scene format used by view, shoot and the MCP shoot tool.",{"title":99,"path":100,"stem":101,"description":528,"icon":102,"children":-1},"The tools and resources texturescript mcp serves to agents.",1791722219415]