Round 2 from the live netherstorm smokes — three places where the real APIs contradicted their documentation:
ACE-Step's result blob is an array with raw control chars. The double-encoded result string is [{...}] (not {...}) and contains literal newlines inside string values — Go's strict JSON rejected it, so every successful music job would have failed at the last step. parseMusicResult sanitizes control characters (only legal inside string values in that blob) and accepts both shapes. Regression test uses the exact live payload shape.
Hunyuan3D always returns GLB. Its GenerationRequest has no output-format field at all (the type param in their API docs doesn't exist in the code) — so a format: stl request came back as GLB bytes labelled model/stl. Results are now labelled by sniffed magic (glTF / solid ), never by the request.
NEW meshgen.Converter optional surface + llamaswap impl over the mediautils shim's POST /v1/convert_mesh (steveternet 12b52a2) — the GLB→STL hop that makes format: stl actually deliverable for the printer pipeline.
Tests: live-shape music parse (array+ctrl chars, docs-shape object, garbage), sniffed-GLB-despite-stl-request labelling, converter happy path. All green.
Round 2 from the live netherstorm smokes — three places where the real APIs contradicted their documentation:
1. **ACE-Step's `result` blob is an array with raw control chars.** The double-encoded `result` string is `[{...}]` (not `{...}`) and contains literal newlines inside string values — Go's strict JSON rejected it, so every successful music job would have failed at the last step. `parseMusicResult` sanitizes control characters (only legal inside string values in that blob) and accepts both shapes. Regression test uses the exact live payload shape.
2. **Hunyuan3D always returns GLB.** Its `GenerationRequest` has no output-format field at all (the `type` param in their API docs doesn't exist in the code) — so a `format: stl` request came back as GLB bytes labelled `model/stl`. Results are now labelled by sniffed magic (`glTF` / `solid `), never by the request.
3. **NEW `meshgen.Converter` optional surface** + llamaswap impl over the mediautils shim's `POST /v1/convert_mesh` (steveternet `12b52a2`) — the GLB→STL hop that makes `format: stl` actually deliverable for the printer pipeline.
Tests: live-shape music parse (array+ctrl chars, docs-shape object, garbage), sniffed-GLB-despite-stl-request labelling, converter happy path. All green.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Round 2 from live smokes on netherstorm (2026-07-14):
- ACE-Step result blob is an ARRAY of objects and carries RAW control
characters inside string values (literal newlines) — strict JSON
rejected it. parseMusicResult sanitizes control chars (only legal
inside string values in the double-encoded blob) and accepts array or
object shapes. Regression test uses the live payload shape.
- Hunyuan3D GenerationRequest has NO output-format field (the documented
type param is fiction) — it always returns GLB. Results are now
labelled by sniffed magic bytes, never by the requested format.
- NEW meshgen.Converter/ConverterProvider optional surface + llamaswap
impl over the mediautils shim POST /v1/convert_mesh — the STL hop for
the printer pipeline.
Co-Authored-By: Claude Fable 5 <[email protected]>
steve
merged commit 19972b1864 into main2026-07-14 16:45:58 +00:00
steve
deleted branch fix/live-smoke-round22026-07-14 16:45:58 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Round 2 from the live netherstorm smokes — three places where the real APIs contradicted their documentation:
resultblob is an array with raw control chars. The double-encodedresultstring is[{...}](not{...}) and contains literal newlines inside string values — Go's strict JSON rejected it, so every successful music job would have failed at the last step.parseMusicResultsanitizes control characters (only legal inside string values in that blob) and accepts both shapes. Regression test uses the exact live payload shape.GenerationRequesthas no output-format field at all (thetypeparam in their API docs doesn't exist in the code) — so aformat: stlrequest came back as GLB bytes labelledmodel/stl. Results are now labelled by sniffed magic (glTF/solid), never by the request.meshgen.Converteroptional surface + llamaswap impl over the mediautils shim'sPOST /v1/convert_mesh(steveternet12b52a2) — the GLB→STL hop that makesformat: stlactually deliverable for the printer pipeline.Tests: live-shape music parse (array+ctrl chars, docs-shape object, garbage), sniffed-GLB-despite-stl-request labelling, converter happy path. All green.
🤖 Generated with Claude Code