?Startseite • ?Funktionen • ?Installation • ?Nutzung • Dokumentation • ?API
✅Anforderungen • CLI • ?Docker • ?Einschränkungen
Python-Bibliothek zum programmgesteuerten Planen von ComfyUI-Workflows über die ComfyUI-API
Zweig | Build-Status | Commits seitdem | Letzter Commit |
---|---|---|---|
Master | |||
Entwickeln |
ComfyUI API Endpoint <| <= Comfy Catapult <=> HTTP Server <| <= Public users
<| <|
<| Your python program <| Your Webui/JS frontend
<| <|
<| Your workflows <|
<| Your HTTP server <|
Comfy Catapult ist eine Bibliothek zum Planen und Ausführen von ComfyUI-Workflows aus einem Python-Programm über den vorhandenen API-Endpunkt. ComfyUI funktioniert normalerweise, indem es diesen API-Endpunkt für seine Benutzeroberfläche hostet.
Dies erleichtert Ihnen die Erstellung von Arbeitsabläufen über die Benutzeroberfläche und die anschließende Verwendung in einem Programm.
# Inside your environment:
# From pypi:
pip install comfy_catapult
# From git:
pip install git+https://github.com/realazthat/[email protected]
Projekt | ComfyUI API Wrapper | Backend auslagern | Ausführung verteilen | Wrap-Workflow | Studio |
---|---|---|---|---|---|
CushyStudio | ? | ? | ? | ? | Ja |
ComfyUI-Serving-Toolkit | X | ? | ? | Ja | ? |
ComfyUI_NetDist | X | ? | Ja | ? | ? |
ComfyUI script_examples | Ja | NEIN | NEIN | NEIN | NEIN |
bequemui-python-api | ? | ? | ? | Ja | ? |
bequemui-bereitstellen | ? | ? | ? | Ja | ? |
ComfyUI-zu-Python-Erweiterung | ? | ? | ? | Ja | ? |
ComfyScript | ? | ? | ? | Ja | ? |
Hordelib | ? | Ja | ? | ? | ? |
Comfyui-Cloud | ? | Ja | ? | ? | ? |
bequemer_runner | ? | ? | ? | ? | ? |
ComfyUI-ComfyRun | ? | ? | ? | ? | ? |
Von 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]' ]:
Aus 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 )
In der ComfyUI-Weboberfläche:
Enable Dev mode Options
.Save (API format)
. execute
:
Beispielverwendung:
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
, getestet im GitHub Actions-Workflow (./.github/workflows/build-and-test.yml). Docker-Bilder werden an jedem Tag auf ghcr.io/realazthat/comfy-catapult veröffentlicht.
# 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
Wenn Sie das Image selbst erstellen möchten, können Sie die Docker-Datei im Repository verwenden.
# 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
Zum Ausführen von pre.sh
(Linux-ähnliche Umgebung).
Von ./.github/dependencies.yml, das für die GH-Aktion verwendet wird, um eine Neuinstallation von allem durchzuführen:
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`.
Erfordert pyenv
oder eine genau passende Version von Python wie in ./.python-version.
jq
(Installation) erforderlich für yq, das selbst für unsere ./README.md
erforderlich ist, die tomlq
(aus dem yq-Paket) verwendet, um Versionszeichenfolgen aus ./pyproject.toml einzuschließen.
act (um die GH-Aktion lokal auszuführen):
Animation generieren:
Docker (zum Erstellen des Docker-Images).
develop
.git add path/to/file.py
.bash scripts/pre.sh
, dies formatiert, lintet und testet den Code.git status
prüft, ob sich etwas geändert hat (z. B. ./README.md
generiert). Wenn ja, git add
die Änderungen hinzu und kehrt zum vorherigen Schritt zurück.git commit -m "..."
.develop
(oder drängen Sie zur Entwicklung, wenn Sie die Rechte dazu haben). Diese Anweisungen richten sich an Betreuer des Projekts.
develop
: Führen Sie bash ./scripts/pre.sh
aus, um sicherzustellen, dass alles in Ordnung ist.develop
: Erhöhen Sie die Version in ./pyproject.toml und folgen Sie dabei den Prinzipien der semantischen Versionierung. Ändern Sie außerdem last_release
und last_stable_release
in der Tabelle [tool.comfy_catapult-project-metadata]
entsprechend.develop
: Übernehmen Sie diese Änderungen mit einer Nachricht wie „Release XYZ vorbereiten“. (Siehe Abschnitt „Beiträge“ oben).master
: Führen Sie den develop
mit dem master
zusammen: git checkout master && git merge develop --no-ff
.master
: Markieren Sie die Veröffentlichung: Erstellen Sie ein Git-Tag für die Veröffentlichung mit git tag -a vX.YZ -m "Version XYZ"
.bash ./scripts/utilities/deploy-to-pypi.sh
.git push
und git push --tags
an GitHub.git checkout develop && git merge master
Die Option --no-ff
fügt einen Commit zum Master-Zweig für die Zusammenführung hinzu, also forken Sie den Develop-Zweig vom Master-Zweig neu.git push origin develop
Schieben Sie den Entwicklungszweig auf GitHub.