?홈 • ?기능 • ?설치 • ?사용법 • 문서 • ?API
✅요구 사항 • CLI • ?Docker • ?제한 사항
ComfyUI API를 통해 ComfyUI 워크플로를 프로그래밍 방식으로 예약하는 Python 라이브러리
나뭇가지 | 빌드 상태 | 이후 커밋 | 마지막 커밋 |
---|---|---|---|
주인 | |||
개발하다 |
ComfyUI API Endpoint <| <= Comfy Catapult <=> HTTP Server <| <= Public users
<| <|
<| Your python program <| Your Webui/JS frontend
<| <|
<| Your workflows <|
<| Your HTTP server <|
Comfy Catapult는 기존 API 엔드포인트를 통해 Python 프로그램에서 ComfyUI 워크플로를 예약하고 실행하기 위한 라이브러리입니다. ComfyUI는 일반적으로 사용자 인터페이스에 대해 이 API 엔드포인트를 호스팅하여 작동합니다.
이를 통해 UI를 통해 워크플로를 더 쉽게 만든 다음 프로그램에서 사용할 수 있습니다.
# Inside your environment:
# From pypi:
pip install comfy_catapult
# From git:
pip install git+https://github.com/realazthat/[email protected]
프로젝트 | ComfyUI API 래퍼 | 아웃소싱 백엔드 | 실행 분산 | 랩 작업 흐름 | 사진관 |
---|---|---|---|---|---|
쿠시 스튜디오 | ? | ? | ? | ? | 예 |
ComfyUI-Serving-Toolkit | 엑스 | ? | ? | 예 | ? |
ComfyUI_NetDist | 엑스 | ? | 예 | ? | ? |
ComfyUI 스크립트_예제 | 예 | 아니요 | 아니요 | 아니요 | 아니요 |
comfyui-python-api | ? | ? | ? | 예 | ? |
편안한 배포 | ? | ? | ? | 예 | ? |
ComfyUI-to-Python 확장 | ? | ? | ? | 예 | ? |
ComfyScript | ? | ? | ? | 예 | ? |
호르델리브 | ? | 예 | ? | ? | ? |
comfyui-cloud | ? | 예 | ? | ? | ? |
comfy_runner | ? | ? | ? | ? | ? |
ComfyUI-ComfyRun | ? | ? | ? | ? | ? |
comfy_catapult/catapult_base.py
에서:
async def Catapult (
self ,
* ,
job_id : JobID ,
prepared_workflow : dict ,
important : Sequence [ APINodeID ],
use_future_api : Literal [ True ],
job_debug_path : Optional [ Path ] = None
) -> Tuple [ JobStatus , 'asyncio.Future[dict]' ]:
examples/sdxlturbo_example_catapulter.py
에서:
class ExampleWorkflowInfo :
# Direct wrapper around the ComfyUI API.
client : ComfyAPIClientBase
# Job scheduler (the main point of this library).
catapult : ComfyCatapultBase
# Something to help with retrieving files from the ComfyUI storage.
remote : RemoteFileAPIBase
comfy_api_url : str
# This should be the workflow json as a dict.
workflow_template_dict : dict
# This should begin as a deep copy of the template.
workflow_dict : dict
# This will hold the node ids that we must have results for.
important : List [ APINodeID ]
# Make this any string unique to this job.
job_id : str
# When the job is complete, this will be the `/history` json/dictionary for
# this job.
job_history_dict : Optional [ dict ]
# These are inputs that modify this particular workflow.
ckpt_name : Optional [ str ]
positive_prompt : str
negative_prompt : str
# For this particular workflow, this will define the path to the output image.
output_path : Path
async def RunExampleWorkflow ( * , job_info : ExampleWorkflowInfo ):
# You have to write this function, to change the workflow_dict as you like.
await PrepareWorkflow ( job_info = job_info )
job_id : str = job_info . job_id
workflow_dict : dict = job_info . workflow_dict
important : List [ APINodeID ] = job_info . important
# Here the magic happens, the job is submitted to the ComfyUI server.
status , future = await job_info . catapult . Catapult (
job_id = job_id ,
prepared_workflow = workflow_dict ,
important = important ,
use_future_api = True )
# Wait for the job to complete.
while not future . done ():
status , _ = await job_info . catapult . GetStatus ( job_id = job_id )
print ( f'status: { status } ' , file = sys . stderr )
await asyncio . sleep ( 3 )
job_info . job_history_dict = await future
# Now that the job is done, you have to write something that will go and get
# the results you care about, if necessary.
await DownloadResults ( job_info = job_info )
ComfyUI 웹 인터페이스에서:
Enable Dev mode Options
.Save (API format)
클릭합니다. execute
옵션:
사용 예:
python -m comfy_catapult.cli
execute --workflow-path ./test_data/sdxlturbo_example_api.json
3.8.0, 3.9.0, 3.10.0, 3.11.0, 3.12.0
, GitHub Actions 워크플로(./.github/workflows/build-and-test.yml)에서 테스트되었습니다. Docker 이미지는 각 태그의 ghcr.io/realazthat/comfy-catapult에 게시됩니다.
# Use the published images at https://ghcr.io/realazthat/comfy-catapult.
docker run --rm --tty ghcr.io/realazthat/comfy-catapult:v3.0.0 --help
# /data in the docker image is the working directory, so paths are simpler.
docker run --rm --tty
-v " ${PWD} :/data "
-e " COMFY_API_URL= ${COMFY_API_URL} "
ghcr.io/realazthat/comfy-catapult:v3.0.0
execute --workflow-path ./test_data/sdxlturbo_example_api.json
이미지를 직접 빌드하려면 저장소의 Dockerfile을 사용할 수 있습니다.
# Build the docker image.
docker build -t my-comfy-catapult-image .
# Print usage.
docker run --rm --tty my-comfy-catapult-image --help
# /data in the docker image is the working directory, so paths are simpler.
docker run --rm --tty
-v " ${PWD} :/data "
-e " COMFY_API_URL= ${COMFY_API_URL} "
my-comfy-catapult-image
execute --workflow-path ./test_data/sdxlturbo_example_api.json
pre.sh
실행용(Linux 유사 환경)
GH Action이 모든 항목을 새로 설치하는 데 사용되는 ./.github/dependents.yml에서:
bash : scripts.
findutils : scripts.
grep : tests.
xxd : tests.
git : scripts, tests.
xxhash : scripts (changeguard).
rsync : out-of-directory test.
jq : dependency for [yq](https://github.com/kislyuk/yq), which is used to generate
the README; the README generator needs to use `tomlq` (which is a part of `yq`)
to query `pyproject.toml`.
pyenv
또는 ./.python-version에서와 같이 정확하게 일치하는 Python 버전이 필요합니다.
yq에 필요한 jq
(설치)는 ./README.md
생성에 필요하며, ./pyproject.toml의 버전 문자열을 포함하기 위해 tomlq
(yq 패키지의)를 사용합니다.
act(GH 작업을 로컬에서 실행하기 위해):
애니메이션 생성:
docker(도커 이미지 구축용)
develop
분기를 포크합니다.git add path/to/file.py
.bash scripts/pre.sh
, 이는 코드 형식화, 린트 및 테스트를 수행합니다.git status
변경된 사항이 있는지 확인합니다(예: ./README.md
생성). 그렇다면 변경 사항을 git add
하고 이전 단계로 돌아갑니다.git commit -m "..."
.develop
위해 PR을 하세요(또는 권리가 있는 경우 개발을 추진하세요). 이 지침은 프로젝트 관리자를 위한 것입니다.
develop
브랜치: bash ./scripts/pre.sh
실행하여 모든 것이 올바른지 확인하세요.develop
브랜치: 의미론적 버전 관리 원칙에 따라 ./pyproject.toml에서 버전을 범프합니다. 또한 [tool.comfy_catapult-project-metadata]
테이블의 last_release
및 last_stable_release
적절하게 수정하세요.develop
브랜치: "Prepare release XYZ"와 같은 메시지를 사용하여 이러한 변경 사항을 커밋합니다. (위의 기여 섹션을 참조하세요).master
브랜치: develop
브랜치를 master
브랜치에 병합: git checkout master && git merge develop --no-ff
.master
브랜치: 릴리스에 태그 지정: git tag -a vX.YZ -m "Version XYZ"
사용하여 릴리스에 대한 git 태그를 생성합니다.bash ./scripts/utilities/deploy-to-pypi.sh
사용하여 PyPI에 릴리스를 게시합니다.git push
및 git push --tags
사용하여 커밋과 태그를 GitHub에 푸시합니다.git checkout develop && git merge master
--no-ff
옵션은 병합을 위해 마스터 브랜치에 커밋을 추가하므로 마스터 브랜치에서 개발 브랜치를 다시 분기합니다.git push origin develop
개발 브랜치를 GitHub에 푸시합니다.