الصفحة الرئيسية • الميزات • التثبيت • الاستخدام • الوثائق • واجهة برمجة التطبيقات
✅المتطلبات • CLI • Docker • القيود
مكتبة Python لجدولة سير عمل ComfyUI برمجيًا عبر واجهة برمجة تطبيقات ComfyUI
فرع | حالة البناء | يرتكب منذ | الالتزام الأخير |
---|---|---|---|
يتقن | |||
يطور |
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) لواجهة المستخدم الخاصة بها.
وهذا يسهل عليك إجراء عمليات سير العمل عبر واجهة المستخدم، ثم استخدامها من خلال البرنامج.
# Inside your environment:
# From pypi:
pip install comfy_catapult
# From git:
pip install git+https://github.com/realazthat/[email protected]
مشروع | غلاف واجهة برمجة التطبيقات ComfyUI | الاستعانة بمصادر خارجية الخلفية | توزيع التنفيذ | التفاف سير العمل | استوديو |
---|---|---|---|---|---|
CushyStudio | ؟ | ؟ | ؟ | ؟ | نعم |
ComfyUI-Serving-Toolkit | X | ؟ | ؟ | نعم | ؟ |
ComfyUI_NetDist | X | ؟ | نعم | ؟ | ؟ |
ComfyUI script_examples | نعم | لا | لا | لا | لا |
comfyui-python-api | ؟ | ؟ | ؟ | نعم | ؟ |
comfyui-deploy | ؟ | ؟ | ؟ | نعم | ؟ |
ComfyUI-to-Python-Extension | ؟ | ؟ | ؟ | نعم | ؟ |
comfyScript | ؟ | ؟ | ؟ | نعم | ؟ |
hordelib | ؟ | نعم | ؟ | ؟ | ؟ |
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).
من ./.github/dependeency.yml، والذي يُستخدم لإجراء GH لإجراء تثبيت جديد لكل شيء:
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 محليًا):
توليد الرسوم المتحركة:
عامل الإرساء (لبناء صورة عامل الإرساء).
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
: وضع علامة على الإصدار: قم بإنشاء علامة git للإصدار باستخدام 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.