Skip to content

feat(cli): align with the current public API — Auto Split, Usage, new Creative Lab products, printability / animation / image params, polling + delete fixes [ENG-4062] - #12

Merged
Arlieeee merged 12 commits into
mainfrom
arliexubindu/eng-4062
Oct 13, 2026
Merged

Arlieeee merged 12 commits into
mainfrom
arliexubindu/eng-4062

Conversation

@Arlieeee

@Arlieeee Arlieeee commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Aligns meshy-cli with the current public API: request shapes the API actually accepts, polling that follows the documented task lifecycle, new endpoints (Auto Split, Usage, the animation library), the newer Creative Lab products, and the printability, animation, image, balance and generation parameters the docs list. Version 0.4.2.

Fixed

  • every --model-url (remesh, convert, resize, retexture, multi-color-print, analyze/repair-printability): a local model must be .glb/.gltf (multi-color-print: .glb) because the API takes inline models as glTF only; .stl/.obj/.fbx are refused before the request with a pointer to an http(s) URL or --input-task-id. A data:application/octet-stream URI is accepted when it holds a GLB
  • text-to-3d refine no longer pins remove_lighting and a 4k texture, which a meshy-6-lite preview refuses; make still refines at 4k and its resume command says so
  • image-to-3d --model-type smart-topology refuses --remove-lighting / --image-enhancement locally
  • wait / sync create / make: a 429, 5xx, read timeout or dropped connection on a status request is retried at the next tick, paced by Retry-After; an outage that outlasts --timeout is exit 8 with the task id
  • 409 on delete (task IN_PROGRESS) is a new conflict error, exit 14: the task cannot be stopped and its credits are spent, so the recovery is the resource's wait for the result (none from the top-level delete, which does not know the resource); deleting it after it finishes is permanent with no refund
  • v1 resources lists delete as kind action with its endpoint (it was local); counts.action added
  • meshy delete says it covers every resource except Creative Lab; Creative Lab delete reports canceled: true, deleted: false
  • animation tasks are typed animate, so download --task-json matches them

Added

  • auto-split (/print/split): create / get / list / wait / stream / delete
  • usage tasks (GET /usage/tasks, Studio/Enterprise)
  • animation-catalog list on the documented /animations/library endpoint (server-side search, category, sub-category, action ids)
  • animate --action-ids (up to 10 clips in one file) and --motion-task-id; rigging list
  • printability --printer-type, --intended-print-height-mm, --intended-print-longest-side-mm; repair --alpha-thumbnail
  • multi-color-print --style, --printer-brand
  • text-to-image / image-to-image --remove-background; image-to-image --input-task-id
  • balance reports monthly_credits, permanent_credits, monthly_resets_at
  • --geometry-resolution on text-to-3d preview and image-to-3d (--ultra-mode kept as its deprecated spelling); text-to-3d --model-type smart-topology --target-polycount (default 10000, like image-to-3d); multi-image-to-3d --texture-image-urls
  • Creative Lab: vinyl-figure, brick-figure, keycap (--candidate-id), fidget-pixel (--type), fidget-collapsible (single stage); keychain --name-text
  • --alpha-thumbnail on retexture / remesh; rigging --texture-image-url

Changed

  • help text: 800-character prompts, latest = Meshy 7.1 (multi-image-to-3d too, no longer called beta), image-to-3d --remove-lighting applies on meshy-6 only, emission maps only on meshy-6, --enable-original-uv defaults to false, repair input formats, --timeout wording (the task keeps running; the API advises up to 60 min)
  • docs and comments describe API behaviour only
  • version 0.4.2

Typecheck and the full suite (638 tests, loopback API only) pass. Every new command and flag was also run end to end against the live API (auto-split, animate --action-ids / --motion-task-id, text-to-motion, printability with --printer-type, multi-color --style / --printer-brand, image --remove-background / --input-task-id, the new Creative Lab products and fidget-pixel build, --geometry-resolution, smart topology, rigging list, animation-catalog, 409 → exit 14, download --task-json on an animate task).

Release notes (draft)

Highlights

  • New commands. meshy auto-split splits a model into printable parts (automatically, by named parts or by colour, with optional connectors). meshy usage tasks lists finished API tasks with the credits each consumed (Studio/Enterprise).
  • More Creative Lab products. vinyl-figure, brick-figure, keycap (build with --candidate-id), fidget-pixel (--type person|other) and the single-stage fidget-collapsible; keychains take an engraving with --name-text.
  • Animation. animate --action-ids puts up to 10 library actions in one file; --motion-task-id retargets a text-to-motion clip. animation-catalog list now uses the documented library endpoint with server-side filters (it needs an API key). rigging list works.
  • New parameters. Printability print size and printer type (wall-thickness check / thickening), multi-color --style and --printer-brand, --remove-background on the image commands, image-to-image --input-task-id, --geometry-resolution 2k|4k on text-to-3d preview and image-to-3d, text-to-3d smart topology, multi-image --texture-image-urls, --alpha-thumbnail on retexture/remesh/repair, rigging --texture-image-url. balance shows monthly and permanent credits and the next reset.
  • Waiting is sturdier. A 429, 5xx or timeout on a status request no longer ends wait: it is retried at the next poll, paced by Retry-After.
  • Behaviour changes to note.
    • delete of a running task exits 14 (conflict): it cannot be stopped and its credits are spent; wait for the result, and delete it afterwards only if it should be gone (permanent, no refund).
    • meshy resources --output-schema v1 lists delete as kind action.
    • Creative Lab delete reports canceled: true, deleted: false.
    • A standalone text-to-3d refine no longer sends remove_lighting: true or a 4k texture by default (a meshy-6-lite preview refuses them); pass --remove-lighting true --texture-resolution 4k for the previous request. make still refines at 4k.
    • A local --model-url must be .glb/.gltf (multi-color-print: .glb) on every command: the API takes inline models as glTF only, so .stl/.obj/.fbx now fail before the request — pass them as an http(s) URL or use --input-task-id.
    • animation-catalog list uses the documented library endpoint and now needs an API key. Its v1 result drops fetched, total and authenticated, search_scope is "server", and items no longer carry rig_type, is_free or is_default. --search matches name and key only; use --sub-category to filter by sub-category.
npm install -g [email protected]   # or @meshy-ai/[email protected]

🤖 Generated with Claude Code

Arlieeee and others added 11 commits October 12, 2026 18:09
…lict class for 409 [ENG-4062]

- analyze/repair-printability: a local model is sent inline, and the API
  takes inline models there as glTF only. A local .stl/.obj/.fbx (or a
  non-glTF data: URI) is now refused before the request with a pointer to an
  http(s) URL or --input-task-id; help text lists the formats each input
  form takes.
- text-to-3d refine no longer pins remove_lighting and a 4k texture: refine
  inherits the preview's model, and a meshy-6-lite preview refuses both.
  `make` still refines at 4k (it made the preview on latest), and its resume
  command now says so.
- image-to-3d --model-type smart-topology refuses --remove-lighting and
  --image-enhancement locally instead of a 400.
- wait / sync create / make: a 429, 5xx, read timeout or dropped connection
  on a status request is retried at the next tick, paced by Retry-After when
  the API sends it. An outage that outlasts --timeout is a timeout (exit 8)
  that keeps the task id; result.wait.failed_polls / last_poll_error and a
  poll_retried warning say what happened.
- 409 (delete of an IN_PROGRESS task) is a new `conflict` error, exit 14,
  with the wait command as recovery.
- `meshy delete` says what it covers (every resource except Creative Lab)
  and a 404 points at the Creative Lab command. Creative Lab delete cancels
  the task, and now reports canceled: true, deleted: false.
- animation tasks are typed `animate`, so download --task-json matches them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…y, multi-action animate, rigging list [ENG-4062]

- `auto-split` (POST /print/split, plus get / list / wait / stream / delete):
  --mode auto|by_parts|by_color with --prompt, --target-formats, --layout,
  --connectors with --connector-type / --connector-size / --connector-height.
  v1 envelope only, like the other new commands.
- `usage tasks` (GET /usage/tasks, Studio/Enterprise): --page, --page-size,
  --sort-by, --start-time / --end-time (RFC 3339), --endpoints, --status.
- `animation-catalog list` calls the documented GET /animations/library:
  server-side --search, --category, new --sub-category and --action-ids.
  It now needs an API key; items are the API's own (no rig_type / is_free).
- `animate create --action-ids` (up to 10, one file with one clip per
  action) and `--motion-task-id` (a text-to-motion clip); exactly one source
  is required.
- `rigging list` is enabled.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
… fidget-collapsible; keychain --name-text [ENG-4062]

- vinyl-figure and brick-figure: prototype → build like figure.
- keycap: build takes --candidate-id (from the prototype's candidate_ids)
  and options head_size_mm / vertical_offset_mm / base_model; its OBJ
  bundle (model_urls.obj_zip) is saved as model.obj.zip.
- fidget-pixel: prototype --type person|other (no --remove-background);
  build options shape / grid_size / piece_size_mm / color_count /
  piece_height_mm, --model-format 3mf.
- fidget-collapsible: a single stage, `meshy creative-lab
  fidget-collapsible create|get|list|wait|stream|delete`.
- keychain prototype --name-text: up to 10 characters, engraved.
- Every documented option range is checked before the request.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ckground removal, balance split, Ultra geometry and smart topology flags [ENG-4062]

- analyze/repair-printability: --printer-type, --intended-print-height-mm,
  --intended-print-longest-side-mm (wall-thickness check / thickening at
  that size); repair --alpha-thumbnail; input-task-id help lists the
  accepted source tasks.
- multi-color-print: --style realistic|cartoon, --printer-brand.
- text-to-image / image-to-image: --remove-background; image-to-image
  --input-task-id (reference images become optional).
- balance: monthly_credits, permanent_credits and monthly_resets_at.
- text-to-3d preview: --geometry-resolution standard|2k|4k, --model-type
  smart-topology with --target-polycount (100-15000).
- image-to-3d: --geometry-resolution standard|2k|4k; --ultra-mode is kept
  as its deprecated spelling of 2k.
- multi-image-to-3d: --texture-image-urls (1-4 texture views, local files
  inlined).
- retexture / remesh --alpha-thumbnail; rigging --texture-image-url.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
… Meshy 7.1 default, emission maps, original UVs, wait budget [ENG-4062]

- prompt / texture-prompt limits are 800 characters.
- `latest` is Meshy 7.1 on text-to-3d and image-to-3d; comments and help
  no longer say Meshy 6 / Meshy 7 there.
- --enable-pbr: an emission map comes only from meshy-6 below 8k.
- retexture --enable-original-uv defaults to false (fresh UVs), as the API
  does; the help said true.
- --timeout help says the task keeps running past it and that the API
  advises allowing up to 60 minutes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
README and package description list printability, auto split and usage;
migration notes record what 0.5.0 changes for existing callers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…request [ENG-4062]

The API takes an inline (data:) model only as glTF; data:model/obj and
data:model/stl are refused, and an FBX sent as application/octet-stream is
taken for a GLB. The CLI inlines every local file, so a local .stl/.obj/.fbx
on remesh, convert, resize, retexture or multi-color-print failed after the
round trip, as it did on the printability commands.

- remesh, convert, resize, retexture: a local or inline model must be
  .glb/.gltf; multi-color-print: .glb. Anything else exits 2 before any
  request, pointing at an http(s) URL or --input-task-id. URLs unchanged.
- A data:application/octet-stream URI is accepted when its bytes are a GLB.
- --model-url help, docs/usage.md, SKILL.md and the migration notes say so.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…elete is an action in the index [ENG-4062]

- A running task cannot be stopped and its credits are spent, and deleting it
  once it finishes is permanent with no refund. The conflict hint, the delete
  help and the docs now say that instead of "wait, then delete again".
- The top-level delete does not know the resource, so its conflict recovery
  carries no command rather than a `<resource>` placeholder.
- v1 `resources` lists `delete` as kind `action` with its endpoint, not as a
  local helper; `counts.action` is added (D-077).
- text-to-3d smart topology defaults to 10000 faces, like image-to-3d.
- Help: multi-image-to-3d is not beta and runs Meshy 7.1 by default;
  image-to-3d `--remove-lighting` applies on meshy-6 only; the legacy
  `resources` listing names all nine Creative Lab products.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…d background flags [ENG-4062]

- Exit 14: wait for the result; delete afterwards only if the user wants it
  gone (permanent, no refund).
- `recovery.command` is runnable verbatim once a download `<dir>`/`<file>`
  placeholder is filled in.
- Meshy 7.1 is the default on all three generators; multi-image is not beta.
- text-to-image / image-to-image → 3D via `--input-task-id`; printability
  print size and printer type, multi-color style and brand, image background
  removal; auto split and usage in the description; duplicate Creative Lab
  delete note removed. metadata.version 1.2.0.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The parity docs and a few comments cited server source files and account
gating. They now state the observed API behaviour instead, keeping the facts
and dates: task responses carry no face_count, showcase_type is
all|animate|static, uv-unwrap answers 404 when the endpoint is not enabled
for the account. The baseline cross-check block is renamed to
api_behaviour_crosscheck; nothing reads it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@Arlieeee
Arlieeee marked this pull request as ready for review October 13, 2026 09:11
@Arlieeee
Arlieeee merged commit 4626503 into main Oct 13, 2026
5 checks passed
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