texturecraft
Skill66 starsChanged 6 days agoMITView on GitHub
TextureCraft is the ArtCraft team's open-source, pure-Rust 3D texture-painting app — a clean-room reimplementation of the Adobe Substance 3D Painter texturing workflow (`ROADMAP.md`): paint PBR materials straight onto 3D models in layers with masks and generators, bake mesh maps, drive smart materials, and export texture sets for any engine (glTF, Unreal, Unity, Blender, Godot, OpenPBR). Trigger this skill whenever the user mentions TextureCraft — or a `.tcraft`, `.tcmat` file — asks what it can or cannot do, which mesh formats it opens, how to bake ambient occlusion / curvature / normal maps, how to script, automate, batch or headlessly drive it (texturecraft-cli, MCP, the JSON control channel), wants textures painted or exported for a game engine, needs baked maps verified, or troubleshoots it. Also when the job is described without naming the app — "paint rust onto this model", "bake an AO map for this mesh", "export a glTF PBR texture set", "make a smart material from these layers", "reimport the mesh without losing my paint". Do not guess its capabilities from Substance Painter knowledge — read this first.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- hermes-pro/storytold-skillstheir own version, first seen Nov 8, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- hermes-pro/storytold-skills★ 36same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- AGENTS.mdAGENTS.md
- artcraft-studioSkill
- cadcraftSkill
- craft-anythingSkill
- deckcraftSkill
- designcraftSkill
- effectcraftSkill
- figcraftSkill
- filmcraftSkill
- gridcraftSkill
- lightcraftSkill
- materialcraftSkill
- pdfcraftSkill
- photocraftSkill
- solidcraftSkill
- soundcraftSkill
- vectorcraftSkill
- wordcraftSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 85
Verify without screenshots: session.inspect / session_inspect return project, mesh, texture sets (including each tile's bakeEnabled), layer …
- Very specific: line 91
Every tool call maps to one control method.
- Very specific: line 95
Treat a recovered project as untrusted until re-baked: check the log for the recovery warning, run session.inspect, re-bake the affected …
- Very specific: line 111
Read: README.md, ROADMAP.md, AGENTS.md, Cargo.toml, docs/{control-protocol,features,parity,localization-parity}.md, …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Audit basis. Refreshed 2026-11-07 against tag v0.4.0, commit 16e9d21516434a63ac457f49ffd09005f649c02f — git rev-parse HEAD in the pinned checkout confirms. The installed bundle (see Sources & evidence) prints TextureCraft 0.4.0 (16e9d21 2026-11-06). This skill previously described v0.3.0 (8547514).
v0.3.0 → v0.4.0 delta. git diff --stat v0.3.0..HEAD shows 216 files changed, +14,040/−5,788 (the GitHub compare lists 86 commits). The engine registry moves 162 → 172 ids: camera.bookmark1…camera.bookmark9 (Ctrl+1…Ctrl+9), bake.tile.set, bake.cage.paint and bake.cage.reset are new; bake.autoRebake and bake.autoRebake.run are gone, so nothing re-bakes itself — call bake.run after changing bake settings, the mesh, high polys or the skew/cage paint. Bake settings were rebuilt into a nested per-map BakeSettings model (crates/core/src/bake/, crates/engine/src/bake/): bake.settings takes model, patch and preserveEnabled and targets ts (the active set by default, an index, an array, "all" or "selected"); bake.run accepts the same parameters and returns {baked, tracer}, and each texture set owns its settings plus per-tile bake flags. The baked-map set shrinks 12 → 10: ColorMap and WorldDirection are removed (crates/core/src/bake/baked_map.rs). Six smart masks (snow from top, moss from ground, rust in cavities, edge scratches, dirt streaks, occluded areas) take the shelf to 24; three new Views entries (Common Settings, Mesh Map Bakers, Mesh Map Settings) take menu parity to 58/58. Old .tcraft files whose bake settings or baked maps no longer parse are recovered field by field with defaults and a log warning (crates/formats/src/project_file/recovery.rs); file.reimportMesh now marks the project modified (crates/engine/src/file_cmds.rs); masks and content evaluate every neighbourhood filter in stack order instead of only the last (crates/compose/src/eval.rs); exports sample baked maps through the working tile layout (crates/formats/src/export/mod.rs). UI-side: mode buttons and view-layout/projection dropdowns in the top bar, a draggable 3D/2D divider, scrolling tool controls, smart-mask and shelf hover previews, and dropping a shelf material on the texture set under the cursor (crates/ui-egui/src/{toolbar,viewport,shelf}.rs).
v0.2.0 → v0.3.0 delta (historical). 168 files changed; the engine command extract grew 135 → 162 ids (+27: bake.autoRebake*, bake.skew.*, brush.preset.*, effect.copy/cut/duplicate/histogram/move, …), none removed then. Menu parity 55/55. The control channel hardened: owner-only token file, 10 s auth deadline, one attempt per connection, 16-connection cap, 600 s idle.
Verify against your installed version — the ArtCraft Launcher auto-updates, so a newer build may differ; every count quoted here was re-measured at this tag with the method recorded in evidence.md.
TextureCraft
Overview
TextureCraft is an open-source (MIT OR Apache-2.0), pure-Rust 3D texture-painting application — the ArtCraft suite's clean-room answer to Adobe Substance 3D Painter (the repo aims for 1:1 parity with that texturing workflow, with better performance, a smaller footprint and every feature drivable by agents — ROADMAP.md). Its own weighted estimate is ≈94% done across 11 areas (ROADMAP.md "Honest parity estimate (2026-11-04)"; baking was lowered to 90% pending reference-asset validation). It runs natively on macOS (universal, signed, notarized), Windows, Linux, FreeBSD and in the browser via WebAssembly/WebGPU-or-WebGL2 (README.md, ROADMAP.md Platforms). Source: GitHub storytold/texturecraft. The workspace is 11 crates (automation, bake, compose, core, engine, formats, geom, paint, render, texel, ui-egui) plus three apps (apps/texturecraft, apps/texturecraft-cli, apps/texturecraft-web).
The one governing idea: everything is an engine command with a stable id (layer.add.fill, bake.run, edit.undo, … — docs/control-protocol.md), and the UI, texturecraft-cli, the JSON control channel and the MCP server all run the same registry (172 unique command ids at v0.4.0; the generated menu doc counts 58 of 58 menu items live, docs/parity.md, regenerated by TC_UPDATE_PARITY=1 cargo test -p texturecraft-ui-egui parity). Programmatic calls never open dialogs; session.inspect reports every layer, mask, effect, fill source, per-tile bakeEnabled flag and painted tile count so an agent can verify work without screenshots.
Capabilities (verified)
Count status at v0.4.0 (every set re-measured at both tags; method in evidence.md). Changed: engine ids 172 (162), menu items 58/58 (55/55), smart masks 24 (18), baked maps 10 (12; ColorMap/WorldDirection removed), project format_version 2 (1). Unchanged at v0.4.0: CLI 10 subcommands, MCP 22 tools, serve 17 methods, control 13 methods, 31 filters, 21 channels, 32 blend modes, 72 procedural + 21 smart materials, 23 procedurals, 6 environments, 67 brush alphas, 18 brush presets, 10 export presets, 8 texture formats, 12 mesh import / 5 mesh export formats, 9 built-in meshes, 10 UI languages.
One command registry, four surfaces
- Engine registry: 172 unique command ids (every
cmd!/query!registration with a string id acrosscrates/engine/src, tests excluded;texturecraft-cli commands [--filter]prints the live set for the build in front of you). All 58/58 target menu items are wired (docs/parity.md). - CLI
texturecraft-cli— 10 subcommands (apps/texturecraft-cli/src/main.rsSUBCOMMANDS):info,commands [--filter],run <input> <command-id> [params-json] [-o out.tcraft],batch <script.json>,bake <input> [-o out] [--resolution px] [--maps id,id],export <input> <dir> [--preset --format --padding --size],render <input> <out.png> [--size WxH --view 3d|2d --camera name --yaw --pitch --samples --bounces] [--cpu],new <input> <out.tcraft> [--resolution] [--sample],mcp [--bridge --token --read-root --write-root --automation-read-root --automation-write-root],serve [--port --read-root --write-root --automation-read-root --automation-write-root]; plus--version/--help(hand-rolled parser, not clap). - Control channel —
texturecraft --control <port>, loopback TCP, one JSON object per line, 8 MiB request cap. Token-authenticated: the first request on every connection must be{"id":0,"method":"auth","params":{"token":"…"}}; the token isTEXTURECRAFT_CONTROL_TOKEN(16–1024 printable ASCII characters) or a fresh random token the app writes to<temp>/texturecraft-control-<port>.token(owner-only) and prints to stderr. One auth attempt, 10 s deadline, 16 connections, 600 s idle (docs/control-protocol.md,crates/automation/src/security.rs). 13 methods:ping,command.run,command.list,session.inspect,ui.inspect,ui.menu.list,ui.menu.invoke,ui.set(layout/dock/prefs/keymap —prefscoverslanguage,brightness(4 levels),accent(7 colours),system_title_bar),viewport.screenshot {view: 3d|2d},ui.screenshot,ui.resize(640–7680 points),debug.paintTest {from,to,frames}(a real per-frame scripted stroke),debug.frames(frame timing breakdown). Scripted runs can setTEXTURECRAFT_NO_PREFSto start from defaults in a throwaway state. - MCP server
texturecraft-cli mcp— 22 tools (crates/automation/src/server.rs#[tool]entries):session_inspect,command_list,command_run,command_batch(stops at first error, ≤256 steps),project_new(9 built-in meshes: material_ball, sphere, cube, rounded_cube, cylinder, torus, plane, crate, udim_plane; templates),project_open,project_save,mesh_import(glTF/GLB, FBX binary+ASCII, COLLADA, USD usda/usdc/usdz, Alembic, OBJ, PLY, STL),mesh_reimport(preserveStrokes: truere-projects paint where UVs changed; it is off by default),mesh_export(obj, glb, usda, usdc, usdz),bake_mesh_add(high-poly + cage),resource_import,material_save/material_load(.tcmatsmart materials; load also takes MaterialCraft.mcmat/.mcraft),textures_export(preset-driven),bake,paint_stroke(points in viewport pixels, sharing one space withviewport_render),viewport_render(headless PNG ≤2048 px, optional path-tracedsamples1–4096 on GPU or CPU), bridge-onlyviewport_screenshot/ui_screenshot/ui_inspect/ui_menu_invoke. Path confinement: headless mode touches files only below--read-root/--write-root(forward-slash relative paths;.., absolute paths, drive letters, device names, symlink/junction escapes refused); throughcommand_run, everyfile.*command is refused exceptfile.close,file.removeUnusedandfile.reimportMeshwithout apath, and so is any command given apath/dir, in both modes — use the workspace tools. Replies capped at 8 MiB JSON / 5 MiB PNG / 256 batch steps. - Headless JSON-lines server
texturecraft-cli serve— 17 methods (crates/automation/src/rpc.rsMETHODS):ping,methods,session.inspect,command.list,command.run,command.batch,project.open,project.save,mesh.import,mesh.reimport,mesh.export,bake.mesh.add,resource.import,material.save,material.load,textures.export,render.
Painting, layers and materials
- Paint on the 3D mesh or the 2D UV view: brush (size/flow/stroke-opacity/spacing/hardness/angle/follow-path, jitters, tangent or camera alignment, angle fade, backface culling, lazy mouse, X/Y/Z mirror + radial symmetry, pen pressure), eraser, projection with image stencils (hold S), polygon fill (triangle/UV-island/mesh), path and lasso fill, particle brush, smudge, clone (V + click sets source), colour picker, Shift+click straight lines, quick mask (Y), geometry decals and text (
docs/features.md§Paint in 3D). 67 procedural brush alphas (31 generated shapes + 36 stencil glyphs,crates/paint/src/alphas.rs) plus any imported image; 18 brush presets in three groups, with user presets saved as.tcbrush(crates/paint/src/presets.rs,crates/engine/src/brush_preset_cmds.rs). - Layer stack: paint, fill, folder and instance layers; 32 blend modes per channel with per-channel opacity; white/black/painted masks, mask with height, smart masks, generators; 31 library filters (
crates/engine/src/filter_lib.rsFILTERS: adjustments, blur/sharpen/high-pass, bevel, glow, edge detect, warps, mosaic, baked lighting, four material finishes); geometry masks (a layer visible only on chosen mesh parts); anchor points; copy/paste across texture sets, flatten, save layers/folders as.tcmatsmart materials. All 24 smart masks are procedural and expose their preset id:mask.smart.listto enumerate,mask.smart.apply {name, layer?}to replace a layer's mask; the six new ones aresnow_top,moss_ground,rust_cavities,edge_scratches,dirt_streaks,occluded(crates/engine/src/smart_masks.rs). - Bundled library: 72 procedural materials and 21 smart materials (93 shelf entries), 24 smart masks, 23 procedurals, 6 procedural environments plus imported HDR/EXR panoramas (
crates/engine/src/materials.rsMATERIALS,crates/core/src/layer.rsProceduralKind,crates/core/src/project.rsENVIRONMENTS). A shelf material can be dropped on the texture set under the cursor, and hover shows a large preview (crates/ui-egui/src/shelf.rs). MaterialCraft materials:material.loadaccepts a.mcmatportable material or.mcraftpackage as a fill layer, re-cooked through MaterialCraft's command line with the set's baked mesh maps (docs/control-protocol.md§MaterialCraft materials,crates/engine/src/link_cmds.rs). - Channels: 21
Channelvariants per texture set — base color, metallic, roughness, height, normal, emissive, opacity, AO, specular level, specular, glossiness, clear coat weight/roughness/normal, sheen weight/colour/roughness, anisotropy level/angle, subsurface scattering weight, transmission (crates/core/src/channel.rspub enum Channel). Texture sets 128–8192 px, UDIM/UV tiles with per-tile working resolution and$udimexport. - Viewport: PBR with IBL, ACES/linear tone mapping, depth of field, displacement, 4× MSAA + idle temporal accumulation, channel/mesh-map/mask/UV-checker views, saved cameras (also imported from glTF/FBX/COLLADA/USD) with Ctrl+1…9 bookmarks (
camera.bookmark1…9), top-bar layout and perspective/orthographic dropdowns, a draggable 3D/2D divider, and Rendering mode (F10) — a progressive path tracer on GPU compute (the repo claims ~25× CPU) or CPU, with environment importance sampling and an edge-aware denoiser.
Bake and export
- Bake mesh maps — 10 baked maps: normal, world-space normal, ID, ambient occlusion, curvature (also from the normal map), position, thickness, height, bent normal, opacity (
crates/core/src/bake/baked_map.rsBakedMap::ALL). v0.3.0 also hadColorMapandWorldDirection; both are gone at v0.4.0, so do not requestcolorMap/worldDirectionany more. GPU ray tracing (the repo claims ~12× the CPU path) or all CPU cores; high-poly meshes with cage, frontal/rear distances, average normals, match by mesh name; 2D cage and skew paint (bake.cage.paint/bake.cage.reset,bake.skew.*); mesh maps can also be imported as images (textureSet.meshMap.set). Fresh settings default to 64 AO rays, cosine distribution, 180° spread and linear AO attenuation (crates/core/src/bake/ray_settings.rs,crates/core/src/bake/ambient_occlusion_attenuation.rs). - Per-set bake settings: each texture set owns a nested
BakeSettings(common resolution/antialiasing/dilation plus per-map parameters).bake.settingsreads or edits it:modelreplaces the whole settings object,patchchanges only the named fields (nestedmaps.ao.parameters.rays.rays, …;nullclears optional fields),preserveEnabledkeeps the set's Include-in-Bake flag, and flat parameters (resolution,antialiasing,dilation,ao,thickness,bentNormal,rays,maxDistance,curvatureMethod,positionMode,maps,enabled, …) apply last. It returns[{ts, settings, model}]per targeted set (crates/engine/src/bake/mesh_map_command.rs).bake.runtakes the same parameters plusts/cpuand returns{baked, tracer}; there is no auto-rebake at v0.4.0. - Per-tile bake selection:
bake.tile.set {ts?, tile: 1002, enabled: false}excludes one UV tile;session.inspectreports each tile'sbakeEnabled; excluded tiles keep their previous baked pixels (crates/engine/src/bake/tile_command.rs). - Export presets:
Document channels + Normal + AO,glTF PBR Metal Roughness,Unreal Engine (Packed),Unity HDRP (Mask Map),Unity Standard (Metallic Smoothness),Blender (Principled BSDF),Godot 4 (ORM),OpenPBR (separate maps)(coat/fuzz/anisotropy/transmission/subsurface maps),Separate maps,Mesh maps— 10 built-ins plus user output templates (per-channel packing, converted maps, JSON shareable) (crates/formats/src/presets.rs). Texture formats: PNG, JPEG, TGA, TIFF, BMP, WEBP, EXR, HDR — depth is per format (PNG/TIFF 8 or 16, EXR 16 or 32 float, HDR 32, the rest 8), plus UV padding, size override, OpenGL/DirectX normals, colour-space conversion of colour maps and$udimtiles (crates/formats/src/export/mod.rs). Mesh export to OBJ (+MTL and maps), textured GLB (clear coat + sheen) and USD (clear coat), 5 formats (crates/engine/src/file_cmds.rsMESH_EXPORT_FORMATS).
Known limitations and not-implemented
At v0.4.0, do not assign these:
- No auto-rebake. The
bake.autoRebakecommands of v0.3.0 were removed. After changingbake.settings, the mesh, high polys or the skew/cage paint, runbake.runyourself; nothing bakes in the background. - Old projects are recovered, not converted. v0.4.0 writes
format_version: 2(v0.3.0 wrote 1); older files load, newer files are refused (crates/core/src/project.rsFORMAT_VERSION,crates/formats/src/project_file/mod.rs). A.tcraftwhose bake settings or baked map entries no longer deserialize opens with defaults for the unreadable fields (and drops unreadable maps, including the removedColorMap/WorldDirection) under a log warning (crates/formats/src/project_file/recovery.rs); re-bake to restore those maps. Baked pixels of older UDIM projects keep their old layout — the app does not convert baked pixels. mesh_reimportdoes not preserve paint by default. PasspreserveStrokes: true(MCP/command) to re-project painted pixels where UVs changed; without it the mesh is replaced with no re-projection.- The macOS app bundle contains only
TextureCraft— notexturecraft-cli. Get the CLI from the release's separate macOS CLI zip (packaging/macos/package.sh), or build it.Contents/MacOSverified. - Pen tilt is not exposed by the windowing layer (
ROADMAP.mdM2). - HDF5 Alembic is unsupported (Ogawa only) and Alembic animation reads the first sample only (
ROADMAP.mdProject and files gaps). - Sheen and anisotropy do not export through USD (UsdPreviewSurface has no such inputs; GLB and OpenPBR maps carry them) (
ROADMAP.mdExport gaps). - The bundled asset library is smaller than the reference app's, and translations have had no native-speaker review (
ROADMAP.mdMaterials/UI gaps). - Hardware ray tracing is not used (compute shaders only) (
ROADMAP.mdViewport gaps). - The CLI/control/MCP surfaces run commands with defaults and never open dialogs; only
ui.menu.invokebehaves like a click (docs/control-protocol.md). Bridge mode cannot touch files itself — the app does — so path tools are unavailable there andproject_savewithout a path becomes File › Save.
How to operate
- Headless one-shot (positional order: input first;
runtakes the command id then optional JSON params, with-olast):texturecraft-cli new builtin:material_ball out.tcraft→texturecraft-cli bake out.tcraft --resolution 1024 --maps ambientOcclusion,curvature→texturecraft-cli export out.tcraft textures/ --preset "glTF PBR Metal Roughness" --format png→texturecraft-cli render out.tcraft preview.png --size 1024x1024(apps/texturecraft-cli/src/main.rs;docs/features.md§Built for agents). - Script a session:
texturecraft-cli run project.tcraft layer.add.fill '{"color":"#336699","roughness":0.2}' -o result.tcraft— commands are the same idscommands --filterlists. A batch script is a step list or{"open", "steps", "save"}with paths relative to the current directory. - Edit bake settings precisely:
texturecraft-cli run out.tcraft bake.settings '{"ts":"all","patch":{"maps":{"ao":{"parameters":{"rays":{"rays":128}}}}}}'; bake with overrides viatexturecraft-cli run out.tcraft bake.run '{"ts":"all","maps":["ambientOcclusion","curvature"],"resolution":2048}'. Exclude a tile withbake.tile.set {"tile":1002,"enabled":false}. - Cameras:
camera.add {"name":"Hero"}saves the current view;camera.bookmark1…9(orcamera.select {name}) jump to it;texturecraft-cli render scene.tcraft hero.png --camera Herorenders through it. - Drive the live app: on macOS
open -a TextureCraft --args --control 7878(the bundle has no CLI;--argsapply on a fresh launch, so quit a running copy first), or launch thetexturecraftbinary with--control 7878; read the token from stderr or<temp>/texturecraft-control-7878.token(or setTEXTURECRAFT_CONTROL_TOKEN), send theauthline, thencommand.run/session.inspect/viewport.screenshot. - Agent flows:
claude mcp add texturecraft -- texturecraft-cli mcp --read-root . --write-root .(or a.mcp.json); bridge to the running app with--bridge 7878. Typical run:project_new→command_run layer.add.fill→bake→command_run mask.add.black→command_run effect.add.generator {"generator":"edgeWear"}→session_inspect→viewport_render→project_save→textures_export(docs/control-protocol.md). - Verify without screenshots:
session.inspect/session_inspectreturn project, mesh, texture sets (including each tile'sbakeEnabled), layer stack, tool, camera, display, history;bake.settingsreturns the effective settings per set;debug.framesreports frame timing after a scripted stroke. TEXTURECRAFT_NO_PREFS=1isolates a scripted run from the user's saved layout/settings.
Working with an AI agent
- Register the MCP server per
docs/control-protocol.md(headless with roots, or bridged). In bridge mode the app reads and writes its own files, so path tools are unavailable andproject_savewithout a path performs File › Save. - Every tool call maps to one control method;
command_runaccepts any engine command id except the refusedfile.*set and path-taking commands.command_list {filter}is the discovery contract. - Painted strokes and renders share one pixel space: coordinates for
paint_strokecan be read off aviewport_renderimage at the default 1280×800. - Baking is GPU-first with
cpu: truefallback; usebake.settingspatchfor one parameter instead of hand-building a whole model, and always passtswhen more than one texture set must change. - For reusable material libraries use the
.tcmatround trip (material_save, thenmaterial_loadabove the selection);material_loadalso ingests MaterialCraft.mcmat/.mcraftpackages. - Treat a recovered project as untrusted until re-baked: check the log for the recovery warning, run
session.inspect, re-bake the affected sets, then re-export. - Reimport a changed mesh with
mesh_reimport {"path":"model.glb","preserveStrokes":true}and confirmsession_inspectreportsmodified: truebefore saving.
Verification protocol
texturecraft-cli commands --filter <text>— the live registry for the build in front of you; never trust any static number in this skill over it.session.inspectafter each mutation — layer stack, mask targets, fill sources, tilebakeEnabled, baked maps,modifiedflag and painted tile counts.- Bake:
bake.settingsfor the effective per-set model,bake.runfor its{baked, tracer}result;session.inspectconfirms the baked maps per texture set. Baked output is per-set and per-tile — check the tiles you meant to include. - Exports:
textures_exportreturns the written files; check names, packing, per-format bit depth and UDIM tiles against the preset. - Frame-loop work (recordings, perf):
debug.framesbefore/after;strokeEndin its result names the frame a scripted stroke committed. - Re-derive counts at v0.4.0: engine registry 172, MCP
tools/list22, servemethods17, control methods 13, CLI--help10 subcommands, menu parity 58/58 (docs/parity.md).
Sources & evidence
- Repo: https://github.com/storytold/texturecraft — inspected at tag v0.4.0, commit
16e9d21516434a63ac457f49ffd09005f649c02f(2026-11-06), inspection date 2026-11-07, shallow checkout pinned to the tag;git rev-parse HEADandgit describe --tagsboth confirm v0.4.0. MIT OR Apache-2.0. - Installed app:
/Applications/TextureCraft.app—TextureCraft 0.4.0 (16e9d21 2026-11-06), bundleai.storyteller.texturecraft,CFBundleShortVersionString0.4.0;Contents/MacOSholds onlyTextureCraft(no CLI); GUI never launched (--version/--helponly). - Read:
README.md,ROADMAP.md,AGENTS.md,Cargo.toml,docs/{control-protocol,features,parity,localization-parity}.md,apps/texturecraft-cli/src/main.rs,crates/automation/src/{server,rpc,workspace,security,budgets}.rs,crates/engine/src/{commands,filter_lib,smart_masks,camera_cmds,file_cmds}.rs,crates/engine/src/bake/{mesh_map_command,tile_command,paint_command,model_patch}.rs,crates/core/src/{channel,blend}.rs,crates/core/src/bake/,crates/formats/src/{presets.rs,export/mod.rs,mesh_import/mod.rs,project_file/recovery.rs},crates/compose/src/eval.rs,crates/paint/src/{alphas,presets}.rs,crates/ui-egui/src/{control,i18n}.rsandcrates/ui-egui/src/{toolbar,shelf,viewport}.rs,crates/geom/src/primitives.rs. - Counts measured from code, not docs: 172 engine command ids (full
cmd!/query!extract), 22 MCP#[tool]entries, 17 serveMETHODS, 13 control methods (+auth), 10 CLI subcommands, 58/58 menu items (docs/parity.md, generated + test-enforced), 31FILTERSdefs, 24SMART_MASKS, 72m(+ 21sm(materials, 23ProceduralKind, 6ENVIRONMENTS, 67 alpha-library entries (31 shapes + 36 glyphs), 18 brush presets, 21Channelvariants, 32BlendModevariants, 10BakedMaps (12 at v0.3.0;ColorMap/WorldDirectionremoved), 10 built-in export presets, 9 built-in meshes, 10 UI languages. - Where repo docs disagree, the code counts win and the drift is noted:
ROADMAP.mdsays 63 procedural materials, 30 filters and 19 channels (code: 72 / 31 / 21);README.md's "8, 16 or 32 bits" shorthand is per-format (PNG/TIFF 8–16, EXR 16–32, HDR 32, others 8);docs/control-protocol.md's CLI--versionsample still shows an old 0.1.0 string. - Per-claim tiering:
evidence.mdnext to this file. Interfaces: 10 languages — English, French, German, Spanish, Portuguese (Brazil), Italian, Japanese, Simplified Chinese, Korean, Arabic (crates/ui-egui/src/i18n.rs).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

