3D Generation Partner Integration#
Two 3D generation partners β Tripo and Rodin β are defined in the comfy-cli OpenAPI spec but are deliberately excluded from the comfy generate CLI surface. Their endpoints live in the proxy spec as released API nodes, but no user-facing CLI commands exist for them.
OpenAPI Spec Definitions#
Both partners are defined in comfy_cli/command/generate/spec/openapi.yml (accessed via spec.py):
Tripo (/proxy/tripo/v2/openapi/β¦) exposes four endpoints, each marked x-excluded: true :
GET /proxy/tripo/v2/openapi/task/{task_id}β poll task status (tripoGetTask)POST /proxy/tripo/v2/openapi/uploadβ upload a reference image for 3D generation (tripoUploadFile)POST /proxy/tripo/v2/openapi/taskβ create a 3D generation task (tripoCreateTask)GET /proxy/tripo/v2/openapi/user/balanceβ query account balance (tripoGetBalance)
Rodin (/proxy/rodin/api/v2/β¦) exposes three endpoints, all marked x-excluded: true:
POST /proxy/rodin/api/v2/rodinβ create a 3D generation task (rodinGenerate3DAsset)POST /proxy/rodin/api/v2/statusβ check generation status (rodinCheckStatus)POST /proxy/rodin/api/v2/downloadβ get download URL list for generated assets (rodinDownload)
How Exclusion Works#
The CLI's endpoint registry is inclusion-based: only endpoints explicitly listed in _ENDPOINT_ALLOWLIST in spec.py are surfaced to users. Neither Tripo nor Rodin appears in that list, so neither is reachable via comfy generate.
The x-excluded: true marker in the OpenAPI YAML is not read by spec.py β it is metadata for external tooling (e.g., documentation generation or API gateway config). Filtering is driven purely by absence from _ENDPOINT_ALLOWLIST. No entry in the _ALIASES dictionary maps to either partner either.
3D Mesh Output Format Handling#
The spec defines rich 3D mesh output schemas for Tripo:
TripoStandardFormat:glb,fbxTripoConvertFormat:GLTF,USDZ,FBX,OBJ,STL,3MFTripoTextureFormat:BMP,DPX,HDR,JPEG,OPEN_EXR,PNG,TARGA,TIFF,WEBP
Rodin's output is simpler, parameterized by:
RodinMeshModeType:QuadorRawRodinQualityType:extra-low,low,medium,highRodinMaterialType:PBRorShadedRodinTierType:Regular,Sketch,Detail,Smooth
3D output URLs (.gltf, .glb, .obj, .fbx) are treated identically to image or video URLs by the polling layer. The _MEDIA_EXTS tuple in poll.py includes .gltf, .glb, .obj, and .fbx alongside image/video extensions, so any 3D mesh URL surfaced in a completed job's response body will be collected into PollResult.image_urls using the same _extract_urls walker . There is no special-cased 3D output path.
No Polling Adapters for 3D Partners#
The _POLL_SPECS registry in poll.py contains entries for every active video/image partner (Kling, Luma, Runway, MiniMax, etc.), but neither Tripo nor Rodin has a PollSpec entry. If either partner were added to _ENDPOINT_ALLOWLIST in the future, a matching PollSpec would also need to be added (or a BFL-style self-polling URL returned on creation).