[{"data":1,"prerenderedAt":971},["ShallowReactive",2],{"navigation_docs":3,"-reference-commands":148,"-reference-commands-surround":966},[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":69,"body":150,"description":959,"extension":960,"links":961,"meta":962,"navigation":963,"path":70,"seo":964,"stem":71,"__hash__":965},"docs\u002F3.reference\u002F1.commands.md",{"type":151,"value":152,"toc":942},"minimark",[153,165,170,262,265,268,284,323,329,332,335,344,361,364,367,376,418,423,426,429,438,464,476,478,481,490,533,546,548,551,560,639,644,647,650,659,713,716,719,728,760,763,766,769,778,800,803,806,815,837,839,850,859,864,866,869,878,921,924,926,929,938],[154,155,156,160,161,164],"p",{},[157,158,159],"code",{},"texturescript COMMAND --help"," prints the same information. Relative paths inside ",[157,162,163],{},".stages"," and\nscene files are relative to that file.",[166,167,169],"h2",{"id":168},"common-behaviour","Common behaviour",[171,172,173,183,197,225],"ul",{},[174,175,176,182],"li",{},[177,178,179],"strong",{},[157,180,181],{},"--json"," prints machine-readable JSON instead of text, on every command that has it.",[174,184,185,188,189,192,193,196],{},[177,186,187],{},"Refusals."," A broken input is refused with ",[157,190,191],{},"REFUSED file:line: reason"," (or ",[157,194,195],{},"file:line:col",")\nand exit status 1. Nothing is written.",[174,198,199,202,203,206,207,210,211,206,214,210,217,220,221,224],{},[177,200,201],{},"Global flags:"," ",[157,204,205],{},"--help","\u002F",[157,208,209],{},"-h",", ",[157,212,213],{},"--version",[157,215,216],{},"-v",[157,218,219],{},"--completions bash|zsh|fish|sh"," and\n",[157,222,223],{},"--log-level",".",[174,226,227,202,230,210,233,210,236,210,239,242,243,246,247,250,251,210,253,242,255,257,258,261],{},[177,228,229],{},"Vanilla blocks.",[157,231,232],{},"view",[157,234,235],{},"shoot",[157,237,238],{},"mcp",[157,240,241],{},"fetch"," and ",[157,244,245],{},"jar"," take ",[157,248,249],{},"--jar PATH"," to choose a\nclient jar instead of the newest one found; ",[157,252,232],{},[157,254,235],{},[157,256,238],{}," also take ",[157,259,260],{},"--no-jar"," to\ndraw only your own blocks.",[166,263,264],{"id":264},"palette",[154,266,267],{},"Derives each material's shades from a dark and a light anchor.",[269,270,275],"pre",{"className":271,"code":272,"language":273,"meta":274,"style":274},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","texturescript palette [flags] FAMILY.palette\n","sh","",[157,276,277],{"__ignoreMap":274},[278,279,282],"span",{"class":280,"line":281},"line",1,[278,283,272],{},[285,286,287,299],"table",{},[288,289,290],"thead",{},[291,292,293,297],"tr",{},[294,295,296],"th",{},"flag",[294,298],{},[300,301,302,313],"tbody",{},[291,303,304,310],{},[305,306,307],"td",{},[157,308,309],{},"--out FILE",[305,311,312],{},"also write the palette section to FILE",[291,314,315,320],{},[305,316,317],{},[157,318,319],{},"--swatch FILE.png",[305,321,322],{},"write a PNG of the shades",[154,324,325,326,224],{},"Prints the palette section to paste into grids. Comment lines place each material's anchors\nagainst the vanilla envelope and warn when they fall outside. Refuses anchors closer than 15\nOKLab lightness units. Format: ",[327,328,74],"a",{"href":75},[166,330,331],{"id":331},"grid",[154,333,334],{},"Renders a character grid.",[269,336,338],{"className":271,"code":337,"language":273,"meta":274,"style":274},"texturescript grid [flags] SPEC.grid OUT.png\n",[157,339,340],{"__ignoreMap":274},[278,341,342],{"class":280,"line":281},[278,343,337],{},[154,345,346,347,350,351,354,355,358,359,224],{},"Writes ",[157,348,349],{},"OUT.png",", a ×16 preview ",[157,352,353],{},"OUT_x16.png"," and the grid as ASCII in ",[157,356,357],{},"OUT.txt",". Format:\n",[327,360,79],{"href":80},[166,362,363],{"id":363},"lint",[154,365,366],{},"Checks a texture against conventions measured on vanilla.",[269,368,370],{"className":271,"code":369,"language":273,"meta":274,"style":274},"texturescript lint [flags] TEXTURE.png\n",[157,371,372],{"__ignoreMap":274},[278,373,374],{"class":280,"line":281},[278,375,369],{},[285,377,378,386],{},[288,379,380],{},[291,381,382,384],{},[294,383,296],{},[294,385],{},[300,387,388,398,408],{},[291,389,390,395],{},[305,391,392],{},[157,393,394],{},"--kind block|item",[305,396,397],{},"rules for crops and plants (default) or for items",[291,399,400,405],{},[305,401,402],{},[157,403,404],{},"--palette FAMILY.palette",[305,406,407],{},"every colour must come from this family palette",[291,409,410,415],{},[305,411,412],{},[157,413,414],{},"--lower LOWER.png",[305,416,417],{},"marks TEXTURE as the upper half and checks the seam",[154,419,420,421,224],{},"Exits 1 when any rule fails. Rules: ",[327,422,94],{"href":95},[166,424,425],{"id":425},"stages",[154,427,428],{},"Generates a crop's growth stages and lints each one.",[269,430,432],{"className":271,"code":431,"language":273,"meta":274,"style":274},"texturescript stages [flags] CROP.stages OUT_DIR\n",[157,433,434],{"__ignoreMap":274},[278,435,436],{"class":280,"line":281},[278,437,431],{},[285,439,440,448],{},[288,441,442],{},[291,443,444,446],{},[294,445,296],{},[294,447],{},[300,449,450],{},[291,451,452,457],{},[305,453,454],{},[157,455,456],{},"--keep",[305,458,459,460,463],{},"render existing ",[157,461,462],{},"stageN\u002FHALF.grid"," files as hand-drawn overrides",[154,465,346,466,469,470,473,474,224],{},[157,467,468],{},"OUT_DIR\u002FstageN\u002F"," with each half's grid, PNG, preview and ASCII, and ",[157,471,472],{},"OUT_DIR\u002Fstrip.png","\nwith every stage side by side. Exits 1 when a stage fails lint; the rendered outputs stay for\ninspection. Refuses to write next to stale outputs from a run with more stages or halves.\nFormat: ",[327,475,84],{"href":85},[166,477,232],{"id":232},[154,479,480],{},"Opens a live 3D view of a scene that updates when you save.",[269,482,484],{"className":271,"code":483,"language":273,"meta":274,"style":274},"texturescript view [flags] SCENE.toml\n",[157,485,486],{"__ignoreMap":274},[278,487,488],{"class":280,"line":281},[278,489,483],{},[285,491,492,500],{},[288,493,494],{},[291,495,496,498],{},[294,497,296],{},[294,499],{},[300,501,502,512,522],{},[291,503,504,509],{},[305,505,506],{},[157,507,508],{},"--port N",[305,510,511],{},"port to serve on; default 8765, another is used if it is taken",[291,513,514,519],{},[305,515,516],{},[157,517,518],{},"--no-open",[305,520,521],{},"do not open a browser",[291,523,524,530],{},[305,525,526,210,528],{},[157,527,249],{},[157,529,260],{},[305,531,532],{},"see above",[154,534,535,536,539,540,543,544,224],{},"In the browser: drag to orbit, scroll to zoom, keys 1 to 9 pick a variant, ",[157,537,538],{},"v"," cycles variants,\n",[157,541,542],{},"l"," toggles labels. The view follows edits to the scene and to every grid, palette and map it\nuses. Format: ",[327,545,89],{"href":90},[166,547,235],{"id":235},[154,549,550],{},"Screenshots a scene from one or more angles and variants, in one browser.",[269,552,554],{"className":271,"code":553,"language":273,"meta":274,"style":274},"texturescript shoot [flags] SCENE.toml OUT.png\n",[157,555,556],{"__ignoreMap":274},[278,557,558],{"class":280,"line":281},[278,559,553],{},[285,561,562,570],{},[288,563,564],{},[291,565,566,568],{},[294,567,296],{},[294,569],{},[300,571,572,582,592,605,619,629],{},[291,573,574,579],{},[305,575,576],{},[157,577,578],{},"--cam YAW,PITCH,DISTANCE",[305,580,581],{},"degrees, degrees, blocks; repeat for more angles; default: the scene's camera",[291,583,584,589],{},[305,585,586],{},[157,587,588],{},"--variant NAME",[305,590,591],{},"variant to shoot; repeat for more; default: all",[291,593,594,599],{},[305,595,596],{},[157,597,598],{},"--size WIDTHxHEIGHT",[305,600,601,602],{},"size of each shot; default ",[157,603,604],{},"960x540",[291,606,607,612],{},[305,608,609],{},[157,610,611],{},"--split",[305,613,614,615,618],{},"one PNG per shot, ",[157,616,617],{},"OUT-VARIANT-N.png",", instead of a sheet",[291,620,621,626],{},[305,622,623],{},[157,624,625],{},"--no-labels",[305,627,628],{},"hide plot labels",[291,630,631,637],{},[305,632,633,210,635],{},[157,634,249],{},[157,636,260],{},[305,638,532],{},[154,640,641,642,224],{},"Writes one shot, or a labelled sheet with one row per variant and one column per camera. Needs a\nChromium; see ",[327,643,104],{"href":105},[166,645,646],{"id":646},"sheet",[154,648,649],{},"Builds a labelled contact sheet of upscaled textures.",[269,651,653],{"className":271,"code":652,"language":273,"meta":274,"style":274},"texturescript sheet [flags] OUT.png [FILES_OR_DIRS...]\n",[157,654,655],{"__ignoreMap":274},[278,656,657],{"class":280,"line":281},[278,658,652],{},[285,660,661,669],{},[288,662,663],{},[291,664,665,667],{},[294,666,296],{},[294,668],{},[300,670,671,681,691,704],{},[291,672,673,678],{},[305,674,675],{},[157,676,677],{},"--scale N",[305,679,680],{},"upscale factor; default 12",[291,682,683,688],{},[305,684,685],{},[157,686,687],{},"--cols N",[305,689,690],{},"tiles per row; default 8",[291,692,693,698],{},[305,694,695],{},[157,696,697],{},"--bg RRGGBB",[305,699,700,701],{},"tile background; default ",[157,702,703],{},"7f7f7f",[291,705,706,710],{},[305,707,708],{},[157,709,625],{},[305,711,712],{},"no file names; works without a browser",[166,714,715],{"id":715},"diff",[154,717,718],{},"Compares a texture with the one it should match.",[269,720,722],{"className":271,"code":721,"language":273,"meta":274,"style":274},"texturescript diff [flags] RENDERED.png TARGET.png\n",[157,723,724],{"__ignoreMap":274},[278,725,726],{"class":280,"line":281},[278,727,721],{},[285,729,730,738],{},[288,731,732],{},[291,733,734,736],{},[294,735,296],{},[294,737],{},[300,739,740,750],{},[291,741,742,747],{},[305,743,744],{},[157,745,746],{},"--sheet FILE.png",[305,748,749],{},"write rendered, target and wrong pixels side by side, upscaled",[291,751,752,757],{},[305,753,754],{},[157,755,756],{},"--check",[305,758,759],{},"exit 1 when any pixel differs",[154,761,762],{},"Prints the mismatch count, split into missing, extra and wrong-colour pixels, and a map of them.",[166,764,765],{"id":765},"togrid",[154,767,768],{},"Converts a PNG to an editable grid, letters ordered darkest first.",[269,770,772],{"className":271,"code":771,"language":273,"meta":274,"style":274},"texturescript togrid [flags] IMAGE.png OUT.grid\n",[157,773,774],{"__ignoreMap":274},[278,775,776],{"class":280,"line":281},[278,777,771],{},[285,779,780,788],{},[288,781,782],{},[291,783,784,786],{},[294,785,296],{},[294,787],{},[300,789,790],{},[291,791,792,797],{},[305,793,794],{},[157,795,796],{},"--name NAME",[305,798,799],{},"name for the header comment; default: the PNG's",[166,801,802],{"id":802},"skill",[154,804,805],{},"Prints where the authoring skill is, or exports it to a folder without game textures.",[269,807,809],{"className":271,"code":808,"language":273,"meta":274,"style":274},"texturescript skill [flags] [OUT_DIR]\n",[157,810,811],{"__ignoreMap":274},[278,812,813],{"class":280,"line":281},[278,814,808],{},[285,816,817,825],{},[288,818,819],{},[291,820,821,823],{},[294,822,296],{},[294,824],{},[300,826,827],{},[291,828,829,834],{},[305,830,831],{},[157,832,833],{},"--force",[305,835,836],{},"overwrite skill files already there",[166,838,238],{"id":238},[154,840,841,842,210,845,242,847,849],{},"Serves ",[157,843,844],{},"render",[157,846,363],{},[157,848,235],{}," and the skill to agents over MCP on stdio.",[269,851,853],{"className":271,"code":852,"language":273,"meta":274,"style":274},"texturescript mcp [--jar PATH | --no-jar]\n",[157,854,855],{"__ignoreMap":274},[278,856,857],{"class":280,"line":281},[278,858,852],{},[154,860,861,862,224],{},"Tools and resources: ",[327,863,99],{"href":100},[166,865,241],{"id":241},[154,867,868],{},"Extracts the skill's vanilla reference examples from your own client jar.",[269,870,872],{"className":271,"code":871,"language":273,"meta":274,"style":274},"texturescript fetch [flags]\n",[157,873,874],{"__ignoreMap":274},[278,875,876],{"class":280,"line":281},[278,877,871],{},[285,879,880,888],{},[288,881,882],{},[291,883,884,886],{},[294,885,296],{},[294,887],{},[300,889,890,904,913],{},[291,891,892,897],{},[305,893,894],{},[157,895,896],{},"--skill DIR",[305,898,899,900,903],{},"skill folder whose ",[157,901,902],{},"examples\u002Fmanifest.txt"," lists the textures",[291,905,906,910],{},[305,907,908],{},[157,909,756],{},[305,911,912],{},"report missing or changed examples without writing; exits 1 if any",[291,914,915,919],{},[305,916,917],{},[157,918,249],{},[305,920,532],{},[154,922,923],{},"Refuses to write anywhere git would track the files.",[166,925,245],{"id":245},[154,927,928],{},"Prints the Minecraft client jar TextureScript reads vanilla blocks from.",[269,930,932],{"className":271,"code":931,"language":273,"meta":274,"style":274},"texturescript jar [--jar PATH]\n",[157,933,934],{"__ignoreMap":274},[278,935,936],{"class":280,"line":281},[278,937,931],{},[939,940,941],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":274,"searchDepth":943,"depth":943,"links":944},2,[945,946,947,948,949,950,951,952,953,954,955,956,957,958],{"id":168,"depth":943,"text":169},{"id":264,"depth":943,"text":264},{"id":331,"depth":943,"text":331},{"id":363,"depth":943,"text":363},{"id":425,"depth":943,"text":425},{"id":232,"depth":943,"text":232},{"id":235,"depth":943,"text":235},{"id":646,"depth":943,"text":646},{"id":715,"depth":943,"text":715},{"id":765,"depth":943,"text":765},{"id":802,"depth":943,"text":802},{"id":238,"depth":943,"text":238},{"id":241,"depth":943,"text":241},{"id":245,"depth":943,"text":245},"Every texturescript command with its arguments and flags.","md",null,{},{"icon":72},{"title":69,"description":959},"3sceW8NE8lnSM8EPnUprIZwuaNdQukxBe7Vso2gY0vY",[967,969],{"title":58,"path":59,"stem":60,"description":968,"icon":61,"children":-1},"Use the pre-commit check so no Minecraft texture or model ends up in a commit.",{"title":74,"path":75,"stem":76,"description":970,"icon":77,"children":-1},"The .palette format for a family of materials.",1791722217440]