Node now POSTs to arcIngest as multipart/form-data with 'image' (raw
PNG bytes) and 'metadata' (JSON object) parts, matching the server's
multipart-only transport that landed today on the platform side. The
legacy header transport (X-Arc-Generation-Metadata base64-encoded)
had a quiet GFE 431 cliff that fell over on the first real ComfyUI
workflow.
Changes:
nodes/arc_save.py
- _post_to_arc_ingest: builds multipart body via requests'
`files=` kwarg. Image part carries a filename ("image.png") so
it surfaces as a busboy 'file' event on the server; metadata
part uses filename=None so it arrives as a 'field' event
(server handles both shapes). Content-Type header drops away
— requests sets it automatically with the boundary parameter.
- X-Arc-Title header stays as-is (small, bounded; no cliff risk).
- 431 safety-net: explicit error message when status == 431,
pointing the creator at the issues URL. Trim per operator
direction: just the issue-report pointer, no workaround
paragraph (the multipart path means there is no real workaround
to suggest until the bug is fixed upstream).
- base64 import removed (was only used for the legacy header
encode).
- Trailing dash on the generic non-200 path replaced with a
hyphen so the "trailing into a dash" reading from the B1-FIX-1
diagnostic can't recur on truncated bodies either.
tests/test_save_smoke.py
- Docstring refreshed to record the multipart transport. The
smoke goes through save() so it inherits the new transport
automatically; no header-transport assertions remain (and none
existed at the smoke layer in the first place — the test
asserts on the receipt shape, not the wire encoding).
Live smoke against the just-deployed server reached the auth check
(traceId 4d9e90b51b1f464c37fa8ff401c2234a, ingest.auth_failed reason
"revoked"). That proves the multipart transport hit the function —
no 431 at GFE, no 415/400 from the parser. The 401 itself is operator-
side key state (the arc_config.json key was revoked in a prior pass);
re-issuing a fresh key from the Credentials surface will let smoke
re-pass against the new transport.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>