?Главная • ?Функции • ?Установка • ?Использование • Документация • ?API
✅Требования • CLI • ?Docker • ?Ограничения
Библиотека 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 для своего пользовательского интерфейса.
Это упрощает создание рабочих процессов через пользовательский интерфейс, а затем использование их из программы.
# Inside your environment:
# From pypi:
pip install comfy_catapult
# From git:
pip install git+https://github.com/realazthat/[email protected]
Проект | API-оболочка ComfyUI | Аутсорсинг бэкенда | Распределить выполнение | Рабочий процесс обертывания | Студия |
---|---|---|---|---|---|
CushyStudio | ? | ? | ? | ? | Да |
ComfyUI-Serving-Toolkit | Х | ? | ? | Да | ? |
ComfyUI_NetDist | Х | ? | Да | ? | ? |
ComfyUI script_examples | Да | Нет | Нет | Нет | Нет |
comfyui-python-api | ? | ? | ? | Да | ? |
comfyui-deploy | ? | ? | ? | Да | ? |
Расширение ComfyUI-to-Python | ? | ? | ? | Да | ? |
КомфиСкрипт | ? | ? | ? | Да | ? |
хорделиб | ? | Да | ? | ? | ? |
comfyui-облако | ? | Да | ? | ? | ? |
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/dependents.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.
act (чтобы запустить действие GH локально):
Создать анимацию:
docker (для создания образа докера).
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.