?หน้าแรก • ?คุณสมบัติ • ?การติดตั้ง • ?การใช้งาน • เอกสารประกอบ • ?API
✅ข้อกำหนด • CLI • ?นักเทียบท่า • ?ข้อจำกัด
ไลบรารี Python เพื่อกำหนดเวลาเวิร์กโฟลว์ ComfyUI โดยทางโปรแกรมผ่าน ComfyUI API
สาขา | สถานะการสร้าง | มุ่งมั่นตั้งแต่ | ความมุ่งมั่นครั้งสุดท้าย |
---|---|---|---|
ผู้เชี่ยวชาญ | |||
พัฒนา |
ComfyUI API Endpoint <| <= Comfy Catapult <=> HTTP Server <| <= Public users
<| <|
<| Your python program <| Your Webui/JS frontend
<| <|
<| Your workflows <|
<| Your HTTP server <|
Comfy Catapult เป็นไลบรารีสำหรับกำหนดเวลาและเรียกใช้เวิร์กโฟลว์ ComfyUI จากโปรแกรม Python ผ่านทางตำแหน่งข้อมูล API ที่มีอยู่ โดยทั่วไปแล้ว ComfyUI จะทำงานโดยการโฮสต์ตำแหน่งข้อมูล API นี้สำหรับอินเทอร์เฟซผู้ใช้
วิธีนี้ช่วยให้คุณสร้างเวิร์กโฟลว์ผ่าน UI จากนั้นใช้งานจากโปรแกรมได้ง่ายขึ้น
# Inside your environment:
# From pypi:
pip install comfy_catapult
# From git:
pip install git+https://github.com/realazthat/[email protected]
โครงการ | Wrapper API ของ ComfyUI | แบ็กเอนด์จากภายนอก | กระจายการดำเนินการ | ตัดเวิร์กโฟลว์ | สตูดิโอ |
---|---|---|---|---|---|
คุชชี่สตูดิโอ | - | - | - | - | ใช่ |
ComfyUI-Serving-Toolkit | เอ็กซ์ | - | - | ใช่ | - |
ComfyUI_NetDist | เอ็กซ์ | - | ใช่ | - | - |
สคริปต์ ComfyUI_examples | ใช่ | เลขที่ | เลขที่ | เลขที่ | เลขที่ |
Comfyui-หลาม-API | - | - | - | ใช่ | - |
Comfyui-ปรับใช้ | - | - | - | ใช่ | - |
ComfyUI-to-Python-Extension | - | - | - | ใช่ | - |
ComfyScript | - | - | - | ใช่ | - |
ฮอร์เดลิบ | - | ใช่ | - | - | - |
สุขสบาย-เมฆ | - | ใช่ | - | - | - |
สุขสบาย_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)
จาก ./.github/dependencies.yml ซึ่งใช้สำหรับ GH Action เพื่อทำการติดตั้งทุกสิ่งใหม่:
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 เช่นเดียวกับใน ./.python-version
jq
, (การติดตั้ง) จำเป็นสำหรับ yq ซึ่งจำเป็นสำหรับการสร้าง ./README.md
ของเรา ซึ่งใช้ tomlq
(จากแพ็คเกจ yq) เพื่อรวมสตริงเวอร์ชันจาก ./pyproject.toml
การกระทำ (เพื่อเรียกใช้ GH Action ในเครื่อง):
สร้างภาพเคลื่อนไหว:
นักเทียบท่า (สำหรับการสร้างอิมเมจนักเทียบท่า)
develop
git add path/to/file.py
bash scripts/pre.sh
ซึ่งจะจัดรูปแบบ เป็นขุย และทดสอบโค้ดgit status
หากมีสิ่งใดเปลี่ยนแปลง (เช่น ./README.md
ที่สร้างไว้) หากเป็นเช่นนั้น git add
การเปลี่ยนแปลงแล้วกลับไปที่ขั้นตอนก่อนหน้าgit commit -m "..."
.develop
(หรือผลักดันให้พัฒนาหากคุณมีสิทธิ์) คำแนะนำเหล่านี้มีไว้สำหรับผู้ดูแลโครงการ
develop
สาขา: เรียกใช้ bash ./scripts/pre.sh
เพื่อให้แน่ใจว่าทุกอย่างเป็นไปตามลำดับdevelop
สาขา: ชนเวอร์ชันใน ./pyproject.toml ตามหลักการกำหนดเวอร์ชันเชิงความหมาย นอกจากนี้ ให้แก้ไข last_release
และ last_stable_release
ในตาราง [tool.comfy_catapult-project-metadata]
ตามความเหมาะสมdevelop
สาขา: ยอมรับการเปลี่ยนแปลงเหล่านี้ด้วยข้อความเช่น "เตรียมรีลีส XYZ" (ดูส่วนการมีส่วนร่วมด้านบน)master
: รวมสาขา develop
เข้ากับสาขา master
: git checkout master && git merge develop --no-ff
master
: ติดแท็ก release: สร้างแท็ก git สำหรับ release ด้วย git tag -a vX.YZ -m "Version XYZ"
bash ./scripts/utilities/deploy-to-pypi.sh
git push
และ git push --tags
git checkout develop && git merge master
ตัวเลือก --no-ff
จะเพิ่มการคอมมิตให้กับสาขาหลักสำหรับการผสาน ดังนั้นให้แยกสาขาที่พัฒนาจากสาขาหลักใหม่git push origin develop
พุชสาขาพัฒนาไปที่ GitHub