Skip to main content
Comfy Router는 아직 일반에 공개되지 않았습니다. 아래의 라우트, 즉 POST /v1/models/{provider}/{model} 및 해당 카탈로그와 스키마 관련 라우트는 아직 요청을 처리하지 않습니다. 현재 인증된 호출은 404를 반환합니다. 이 페이지는 이 라우트가 제공할 계약을 문서화하며, 해당 출시에 앞서 게시되어 통합 코드를 미리 작성할 수 있도록 합니다. 지금 바로 사용할 수 있는 동작에 대한 설명은 아닙니다.
Comfy Router는 파트너 모델을 하나의 호스트, 하나의 자격 증명, 하나의 라우트 형태 뒤에서 실행합니다. 이 페이지는 생성된 이미지에 도달하는 가장 짧은 완전한 경로입니다. 클라이언트를 설치하고, 키를 설정하고, 요청을 하나 보내고, 결과를 읽고, 실제로 마주하기 이전에 첫 번째 실패가 어떤 모습인지 확인하는 것입니다. Base URL은 https://api.comfy.org입니다. 라우트는 POST /v1/models/{provider}/{model}이며, 요청 본문은 모델 자체의 네이티브 JSON 입력이고, 200은 모델 자체의 네이티브 JSON 출력을 전달합니다. Router는 입력도 출력도 래핑하지 않으므로, 이미 파트너 API에 대해 작성한 호출은 호스트만 변경하면 Router 호출이 됩니다.

이 페이지에서 bfl/flux-2-pro를 사용하는 이유

bfl/flux-2-pro는 p50 기준 약 3.1초 만에 결과를 반환하며, 이는 Router에서 측정된 경로 중 가장 빠른 것입니다. 바로 이 점 덕분에 5분 안에 첫 결과를 얻는 것이 현실적입니다. 더 느린 모델을 사용한다면 그 시간을 문서를 읽는 대신 기다리는 데 쓰게 될 것입니다. 이는 편의를 위한 것이지 필수 사항은 아닙니다. Router의 다른 모든 모델도 정확히 동일한 방식으로 호출됩니다. 동일한 라우트, 동일한 자격 증명 헤더, 동일한 오류 범주, 동일한 X-Comfy-Request-Id를 사용합니다. 변경되는 것은 모델 ID, 요청 본문 내부의 필드, 그리고 반환되는 결과의 형태뿐입니다. 예를 들어 Gemini는 p95 기준 72.8초로 여유 있게 완료됩니다. Router는 폴링할 작업 핸들을 반환하는 대신 전체 생성 과정 동안 연결을 유지합니다. 긴 호출을 중도에 끊는 엣지 상한선은 없지만, Router는 호출 자체에 한계를 둡니다. 자체 서버 데드라인(기본 10분)이 연결을 유지하는 최대 시간이며, 이를 초과하면 504 / deadline_exceeded로 응답하고 청구하지 않습니다. 모델 ID를 교체하고 해당 모델의 필드를 자체 스키마(아래)에서 읽으면 됩니다.

키 발급받기

Router는 Comfy API 키로 인증합니다. platform.comfy.org/profile/api-keys에서 키를 생성한 다음 환경 변수에 넣으세요. 아래 두 샘플 모두 COMFY_API_KEY를 읽으며 키를 리터럴로 받지 않으므로, 복사해서 붙여넣은 스니펫에는 자격 증명이 포함되지 않아 커밋에 올라갈 일이 없습니다.
comfyui- 키는 X-API-Key 헤더와 Authorization: Bearer 중 어느 쪽으로 보내도 허용됩니다. 서비스가 API 키임을 판별하는 기준은 헤더가 아니라 comfyui- 접두사이므로, 두 형식은 동일하게 조회됩니다. 아래 예시는 X-API-Key를 사용하지만 Authorization: Bearer $COMFY_API_KEY도 동등합니다. 두 헤더를 모두 보내면 X-API-Key의 키가 우선합니다. comfyui- 접두사가 없는 값을 Authorization: Bearer로 보내면 Cloud/Firebase JWT로 취급됩니다 (생성된 API reference에서 “bearer token”이 의미하는 바가 바로 이것입니다).
키는 워크스페이스별로 존재하며 해당 워크스페이스의 모델 사용 권한과 크레딧 잔액을 수반합니다. 사용 가능한 자격 증명이 없는 요청은 X-Comfy-Error-Type: unauthorized와 함께 401을 반환하고, 워크스페이스가 모델을 실행할 수 없는 요청은 403 / forbidden을 반환합니다.

cURL

가장 짧은 호출로, 스크립트, 스모크 테스트, 터미널에 복사하여 붙여넣기용입니다:
응답은 모델의 네이티브 출력이며, 아래 샘플들이 읽는 것과 정확히 동일합니다. 실패 시 본문에는 오류가 포함되고 X-Comfy-Error-Type 헤더가 오류 범주를 명명합니다. 나중에 문의해야 하는 응답의 X-Comfy-Request-Id 헤더를 보관하세요. macOS와 Linux에는 uuidgen이 기본 제공됩니다. Windows에서는 New-Guid 또는 다른 UUID 소스로 Idempotency-Key를 생성하세요.

Python

Python 3.9+ 및 httpx가 필요합니다:
quickstart.py로 저장하고 python quickstart.py로 실행합니다:

TypeScript

Node 18+(기본 제공 fetch, AbortSignal.timeout, crypto.randomUUID 사용)와 TypeScript를 직접 실행하기 위한 tsx가 필요합니다:
quickstart.mts로 저장합니다. .mts 확장자는 중요합니다. 파일이 최상위 await를 사용하므로 ES 모듈이 필요하기 때문입니다. npx tsx quickstart.mts로 실행합니다:

422 읽기

422는 첫 실제 호출 이전에 이해할 가치가 있는 유일한 오류입니다. 바로 사용자가 발생시키는 오류이기 때문입니다. Router가 요청 본문을 모델 자체의 입력 스키마와 대조한 후 거부했음을 의미합니다. 필수 필드 누락, 범위를 벗어난 값, 너무 작은 이미지 등이 그 예입니다. 이 검사는 모든 공급자 호출 이전에 실행되므로 422는 비용이 들지 않습니다. 파트너 지출도 없고, 이후에 답변해야 할 청구 문제도 없습니다. 이는 필드별 실패가 아닌 요청 수준 실패(잘못된 커서, 읽을 수 없는 봉투)인 400과는 다릅니다. 그 본문은 FastAPI의 detail[] 형태입니다. 문제가 있는 각 필드마다 항목이 하나씩 있는 배열이며, 각 항목은 자체 loc(필드 경로), msg, type(공급자 수준의 구체적인 이유: missing, value_error, image_too_small) 및 이유에 경계값이 포함된 경우 ctx를 유지합니다. 이러한 필드별 세분성 때문에 위 샘플들은 배열을 예외 메시지로 평탄화하지 않고 데이터로 유지하는 것입니다.
입력 스키마가 아직 작성되지 않은 모델은 모든 JSON 객체를 허용하는 문서화된 관대한 폴백으로 처리되므로 422로 응답하는 대신 본문을 전달합니다. 위 샘플은 스키마가 존재할 때 처리하는 형태를 보여줍니다. 422 블록을 특정 본문에 대한 보장된 응답이 아닌 오류 경로로 취급하세요.
해당 본문에는 자체 error_type 필드가 없으므로 422에서는 X-Comfy-Error-Type 헤더가 머신이 읽을 수 있는 유일한 버킷입니다. 두 샘플 모두 바로 그 이유로 먼저 헤더에서 버킷을 읽습니다. 이는 또한 하나의 오류 클래스만으로 Router가 반환할 수 있는 모든 실패를 처리하기에 충분한 이유이기도 합니다. X-Comfy-Request-Id는 성공, 4xx, 5xx 할 것 없이 모든 응답에 포함되며 지원팀 요청에서 인용할 ID입니다. 두 샘플 모두 헤더 로깅을 켜고 다시 실행하여 찾도록 하는 대신 이 ID를 예외에 첨부합니다.

모델 찾기

bfl/flux-2-pro는 ID 하나일 뿐이고, 나머지는 카탈로그에 있습니다. GET /v1/models는 Router가 실행할 수 있는 모든 모델을 한 페이지씩 나열하며, 각 항목은 호출에 필요한 정보 그 자체입니다. 경로에 넣을 id, 따로 담긴 providermodel 세그먼트, 그리고 비용을 쓰기 전에 분기 판단에 쓸 수 있는 billing 블록입니다.
오프셋이 아니라 커서로 순회하세요. next_cursor?cursor=로 그대로 돌려보내고, 페이지가 짧게 돌아왔을 때가 아니라 has_morefalse일 때 멈추세요. 커서는 불투명한 값이며 그대로 왕복시키기만 합니다. Router가 받아들이지 않는 커서는 400 / invalid_input이 되며, 조용히 첫 페이지부터 다시 시작하는 일은 결코 없습니다. 커서는 카탈로그 정렬 순서상의 위치이므로 모델을 추가하거나 제거하는 배포를 거쳐도 유효합니다. 이미 지나온 위치에 추가된 모델은 이번 순회에서 방문되지 않을 뿐입니다. 목록에 대한 503 / service_unavailable은 Router가 아직 응답할 수 없다는 뜻입니다(파드가 릴리스 상태를 아직 로드하는 중). 재시도하세요. 빈 카탈로그로 해석하면 안 됩니다. 응답의 limit은 실제로 제공된 페이지 크기입니다. 상한을 넘는 요청은 거부되지 않고 상한으로 잘리므로, 돌아온 숫자로 페이지를 나누세요. 배포되었지만 아직 릴리스되지 않은 모델은 어느 페이지에도 나타나지 않습니다.

모델 필드의 출처

promptbfl/flux-2-pro가 요구하는 유일한 필드이며, 다음으로 자주 사용하게 될 필드는 width, height, seed, output_format입니다. 시간이 지나며 달라질 수 있는 필드 목록을 그대로 옮겨 적는 대신, 모델의 스키마를 실시간으로 확인하세요:
이 문서는 서버가 호출을 검증할 때 사용하는 바로 그 문서로, 독립형 OpenAPI 문서로 제공됩니다. 따라서 게시된 내용과 실제로 적용되는 내용이 서로 어긋날 수 없습니다. 위 카탈로그에서 아무 id나 선택한 뒤 해당 호출 경로에 /openapi.json을 붙이면, 반환된 결과를 기준으로 생성을 진행할 수 있습니다.

다음

  • Comfy Router API 참조: 모든 엔드포인트와 모든 매개변수, 그리고 15가지 오류 범주를 다룹니다.
  • Comfy Router 제한 사항: 현재 Router가 지원하지 않는 기능과 대신 사용할 수 있는 방법을 설명합니다.