28 Commits

Author SHA1 Message Date
chasse20 2adbdf4aab Merge main while preserving native graph architecture 2026-11-06 00:58:56 -05:00
chasse20 fe88ee5c4d Unify graph editors and optimize material workflows 2026-11-06 00:13:10 -05:00
chasse20 d318484b41 Checkpoint native SBS primitive workflow
Replace the legacy Rust procedural library with clean-room native primitives, typed function execution and FX-Map graphs. Save supported content as native SBS and organize the model, evaluators, codecs and editors into focused modules.

Add shared graph editing behavior, flat filtered node menus, frame and comment editing, named Explorer outputs and an original atomic sample. Document the tested scope and remaining interoperability work.
2026-11-05 18:23:06 -05:00
FredApps 56407b9470 Revert the batch rollback and restore prior main 2026-11-05 22:04:58 +01:00
Rafael Mendes a7b9194820 Revert reviewed PR batch and cancel 0.1.3 preparation
Restore tracked files to 91bb53f07a, immediately before the batch, at the maintainer request. Preserve the existing history and earlier work, including PR #38. Revert the 50 reviewed PR merges and the version bump in 441092c. The published 0.1.2 release is unchanged.
2026-11-05 17:48:14 -03:00
Rafael Mendes cc9a5b3c82 Keep bitmap color-space requests unambiguous and inspectable 2026-11-05 15:19:39 -03:00
Rafael Mendes cd4c2dfa43 Merge reviewed preview changes and retain normal convention controls 2026-11-05 14:35:58 -03:00
Rafael Mendes 6b6f8728c2 Bound relief workers and integrate real height previews 2026-11-05 12:25:44 -03:00
Rafael Mendes b426aa1d52 Merge branch 'fix/automation-root-aliases-55' of https://github.com/jayzed80/materialcraft into review/pr-61 2026-11-05 12:13:37 -03:00
Rafael Mendes 96574eaba7 Integrate MCP material export with the current control protocol 2026-11-05 11:35:48 -03:00
Rafael Mendes f5b3fe73de Merge remote-tracking branch 'origin/main' into review/pr-42 2026-11-05 10:37:52 -03:00
Rafael Mendes 854764bddb Merge remote-tracking branch 'origin/main' into review/pr-25 2026-11-05 10:16:37 -03:00
Rafael Mendes 821c7172b5 Add DirectX normal-map interpretation to the 3D view 2026-11-05 00:04:50 -03:00
PiJellyPin 8bdae1157d Fixed Heightmap 2026-11-05 02:38:04 +01:00
Rafael Mendes 6a249c66ff Merge remote-tracking branch 'origin/main' into feat/alpha-3d-and-wire-editing
# Conflicts:
#	README.md
2026-11-04 20:11:35 -03:00
jayzed80 bdfc3daabd cli: accept --automation-read-root / --automation-write-root (#55)
materialcraft-cli mcp and serve now take the --automation-*-root spelling
the other crafting apps use, as aliases of --read-root / --write-root. The
parser stores them under the short names, so the last root given wins
whichever spelling it used. Adds unit tests and a note in the protocol doc.

Fixes #55

Co-Authored-By: Claude Opus <noreply@anthropic.com>
2026-11-04 21:58:48 +00:00
AndreIsraelAO 3947e3c6f5 Merge main into feat/22-graph-context-export 2026-11-04 17:53:40 -03:00
PiJellyPin 6310230ecd Load sbs files
save, load etc.. for sbs files
2026-11-04 07:03:54 +01:00
A-Gift-Of-Flame ef8ab335c2 feat(automation): material_export MCP tool for portable .mcmat
Sandboxed agents could not hand a material to TextureCraft: the workspace
sandbox refuses `file.*` commands and there was no MCP tool for `.mcmat`.

Add `material_export {path, graph?, size?, values?}` (RPC method
`material.export`). It cooks the graph through the same engine code as
`file.exportMaterial` and writes the `.mcmat` only through
AuthorizedWorkspace (cap-std, `--write-root`): no write root, a malformed
path or an escape is an error, the parent folder must exist, and the file is
capped at what `package_open` may read back. Bridge mode refuses it like the
other path tools. The engine gets a shared `material_request` helper so the
command and the tool parse graph/size/values identically.

Tests: file written and readable, bad requests, denied without a write root
(Denied and read-only workspace), path escapes (`..`, absolute, backslash,
drive, symlink) and the MCP tool end to end. docs/control-protocol.md lists
the method and tool.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 23:55:13 +01:00
Simon Hull 2bd4fd35b8 Control channel: harden the token file and the app's control server
The app wrote its control token to the temp folder with default permissions from a
hash-based generator, compared it with ==, spawned unlimited threads and let an
unauthenticated client hold a connection for 10 minutes. The shared token file was opened
with create+truncate, which follows a planted symlink.

- Token files are created new (remove, then O_EXCL) with mode 0600; clients only read a
  regular, owner-only, non-symlink file.
- The app's control server uses the shared security module: OS-random token, constant-time
  compare, bounded lines, at most 16 connections, one auth attempt within 10 s, close on
  malformed JSON before auth.
- serve --port and the app bind before writing the token file.

Ported from TextureCraft 5a065c1 and 836e3f2.
2026-11-03 13:17:16 -06:00
Rafael Mendes 29dee321d9 feat(graph): select several wires and swap their sources with X
Shift+click adds a wire to the selection and Ctrl+click toggles it. With two
or more wires selected, X swaps where they come from: two wires trade
sources, more reverse them in target-node and input order, so selecting a
Blend node's foreground and background wires and pressing X swaps the two
layers. The wires stay selected, so X again swaps back. Delete and
Backspace remove every selected wire in one undo step, and the wire menu
gains Swap selected links and Delete selected links.

New commands graph.wire.swap and graph.wire.delete take
{wires: [{to, toPort}, ...]}; a swap that would make a cycle is refused and
changes nothing. Engine and UI tests (real clicks on a Blend node) cover
both; docs/wires-and-alpha.md documents the gestures, the ordering rule and
the commands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 14:43:32 -03:00
Rafael Mendes 8f4dd5b6c1 feat: alpha in the 3D view; select, delete and reroute wires
3D view: the material's alpha (the Opacity output, else the Base color's
alpha channel) now makes the mesh see-through. Rays composite front to back
through up to eight transparent layers and back faces shade toward the
viewer, so the inside of a cut-out mesh and the environment show through.
view.3d takes `transparency` (default on) and `alphaView`; the Display menu
and a bottom-bar button toggle an unlit view of the alpha channel.

Graph editor: click a wire to select it (Delete or Backspace removes it),
drag a wire to pull a reroute Dot out of it, double-click a wire to drop a
Dot there, right-click a wire for Insert reroute dot and Delete link. The
new graph.wire.insertDot command splits a wire with a Dot in one undo step.

Docs: docs/wires-and-alpha.md (gestures, commands, rendering, tests) with
two snapshot screenshots, plus architecture, parity, control protocol,
README and ATTRIBUTION updates.

Clean-room implementation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 14:32:48 -03:00
AndreIsraelAO e816ad75bb Keep export proportions and expose size in the CLI and MCP
size is now the larger side in pixels and the other side keeps its
proportion; 0 means the graph's size. Adds --size to the CLI export,
size to the MCP outputs_export, and the docs line. The resolution combo
shows the graph's real size.

Refs #22
2026-11-03 07:29:07 -03:00
bflatastic 539febca0a Merge remote-tracking branch 'origin/main' into feat/cross-app-materials 2026-11-02 12:49:27 +07:00
bflatastic 288e6f22ce Beauty renders and eight new sample materials for the README
- render: an offline hq path (displaced subdivided mesh, ray-traced AO,
  shadowed key light, 3x3 supersampling) on a vignette backdrop; the
  sphere's UVs wrap twice so texels stay square
- CLI/RPC/MCP render: --tiling, --hq and --displacement
- templates: new painted metal plates, lava rock, polished marble and
  wicker weave; reworked brick wall, stone tiles, wood planks and mossy
  ground
- README: new material gallery and refreshed screenshots

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 12:24:11 +07:00
bflatastic 53ab0f2d6a Cross-app materials: .mcmat portable materials for TextureCraft
- formats: .mcmat (zip: material.json manifest, maps/<usage>.png, source.mcraft) with
  read/write and caps; color usages 8-bit sRGB, data maps 16-bit linear
- engine: file.exportMaterial {path, size?, values?, inputs?}, file.sendToTextureCraft
  (TextureCraft's library folder), graph.input.bind/unbind; file.open reads .mcmat
- core/eval: Graph::input_images preview images for input nodes (mesh maps from
  TextureCraft); caller images win; grayscale inputs convert to gray
- ui: File > Export material..., File > Send to TextureCraft, Open accepts .mcmat,
  input previews in the graph properties
- docs: control protocol (portable materials), file formats, gaps, parity ≈ 67%,
  roadmap, architecture, AGENTS convention for shared formats

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 12:06:09 +07:00
bflatastic 6e2d3932ab Docs: parity ≈ 66%, re-ranked gaps, new commands and CLI --set
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 05:08:27 +07:00
bflatastic 54fc5b9571 README, AGENTS, ATTRIBUTION, roadmap and docs; web app; icons
The README in the Crafting Apps frame with real screenshots and renders made
by MaterialCraft, the agent guide with the asset and clean-room rules, the
attribution list, the parity assessment, gaps, roadmap, architecture,
control protocol, localization and file format docs. Adds the browser build
(trunk), the .ico/.icns icons and centers the 3D camera on the mesh bounds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 04:04:13 +07:00