Skip to content

feat!: image generators texture by default like the API; inspect faces --model counts a local GLB [ENG-4880] - #26

Merged
yujiaxu-ops merged 1 commit into
mainfrom
yujiaxu/eng-4880
Oct 27, 2026
Merged

yujiaxu-ops merged 1 commit into
mainfrom
yujiaxu/eng-4880

Conversation

@yujiaxu-ops

Copy link
Copy Markdown
Collaborator

Linear: ENG-4880. These come from an agent's end-to-end run of image → model → remesh → rig → animate.

1. image-to-3d and multi-image-to-3d texture by default, as the API does

meshyd defaults should_texture to true on both endpoints, v1 and v2 (api_image23d_handlers.go). The CLI forced false (draft-first), with two effects:

  • An agent that forgot the flag paid 20 credits for a white mesh, then had to run a separate retexture.
  • make textures by default, so it disagreed with the command it runs.

Now:

  • With no flag, should_texture is left to the API. The CLI adds its game-ready texture settings: enable_pbr: true and texture_resolution: "4k".
  • --should-texture false turns texturing off and sends no texture settings. --data '{"should_texture":false}' does the same, because toDefaults now receives the parsed --data.
  • A texture setting on an untextured run is refused before the POST, whether it came from a flag or from --data. The API answers that with a 400. The check runs on the merged payload, in src/internal/texturing.ts.

2. inspect faces --model <file.glb|.gltf>

The public task response has no face_count. meshyd stores the count, and the rigging 300k ceiling reads it, but it does not expose it. So the task sources could only ever answer unknown (exit 13).

--model counts the triangles of a local model from the glTF JSON alone, using accessor counts, so Draco- and meshopt-compressed files count too:

  • every mesh instance of the default scene is counted;
  • triangle strips and fans count as n − 2;
  • points and lines count as 0.

Malformed files are refused with a usage error that names the file. A failing model suggests meshy remesh create --model-url <file>. A task source that answers unknown now hints at --model.

I checked it against the real outputs of that run:

File Triangles counted
image-to-3d model 982,320
remesh output 15,500
rigged character 15,500

Tests

  • pnpm typecheck is clean and pnpm test passes 644/644.
  • New tests/texturing.test.ts checks the wire payload for both commands:
    • the default;
    • false set by flag or by --data;
    • conflicting settings refused with no POST.
  • Model counting has unit tests (instances, nesting, strips, lines, no scene, .glb and .gltf, and six malformed cases) and command tests (pass, fail, the remesh suggestion, the unknown hint).
  • Tests that pinned the old draft default were updated.

Docs: usage.md, SKILL.md, and decision D-083.

🤖 Generated with Claude Code

…s --model counts a local GLB [ENG-4880]

- image-to-3d and multi-image-to-3d no longer force should_texture=false.
  The API textures by default, so the CLI leaves the flag to it and adds
  the game-ready texture settings (PBR maps, 4k) unless the flag or --data
  turns texturing off. toDefaults now receives the parsed --data.
  --should-texture false is the draft. Texture settings on an untextured
  run are refused after merging (texturing.ts), whether they came from
  flags or --data.
- inspect faces --model <file.glb|.gltf> counts the triangles of a local
  model from the glTF JSON: every mesh instance of the scene, strips and
  fans as n-2, points and lines as 0, compressed files included. The API
  does not report face_count, so a task source that answers unknown now
  hints at --model, and a failing model suggests `remesh --model-url`.
  Checked against real outputs: 982,320 (image-to-3d) and 15,500 (remesh).

Docs: usage, SKILL.md, decision D-083.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@yujiaxu-ops
yujiaxu-ops merged commit d31ebfa into main Oct 27, 2026
10 checks passed
yujiaxu-ops added a commit that referenced this pull request Oct 27, 2026
This is a minor bump because #24, #25 and #26 contain breaking changes.

- #24 (ENG-4877): `-o` saves only the primary files by default, and `--all-assets` saves everything. A file path for `-o` now picks the asset whose format matches the extension.
- #25 (ENG-4878): legacy code and compatibility layers are removed. `--output-schema` and `--ultra-mode` are gone. `-o` uses the same asset keys and file names as `meshy download`. Project metadata is read only at schema_version 2.
- #26 (ENG-4880): image-to-3d and multi-image-to-3d now texture by default, as the API does. `inspect faces --model` counts the faces of a local GLB.
- #27 (ENG-4881): text-to-image and image-to-image warn when a pose on a nano-banana model ignores `--aspect-ratio`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@yujiaxu-ops
yujiaxu-ops deleted the yujiaxu/eng-4880 branch October 27, 2026 14:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant