Remarque : ce projet était auparavant connu sous le nom de
hordelib
. L'espace de noms du projet sera modifié dans un avenir proche pour refléter ce changement.
horde-engine
est un wrapper autour de ComfyUI principalement pour permettre à AI Horde d'exécuter des pipelines d'inférence conçus visuellement dans l'interface graphique de ComfyUI.
Les développeurs de horde-engine
peuvent être trouvés sur le serveur AI Horde Discord : https://discord.gg/3DxrhksKzn
Notez que horde-engine
(anciennement connu sous le nom de hordelib
) est la bibliothèque backend d'inférence par défaut de AI Horde depuis hordelib
v1.0.0.
L'objectif ici est de pouvoir concevoir des pipelines d'inférence dans l'excellent ComfyUI, puis d'appeler ces pipelines d'inférence par programme. Tout en fournissant des fonctionnalités qui maintiennent la compatibilité avec l’implémentation de la horde existante.
Si vous êtes installé à partir de pypi, utilisez un fichier d'exigences du formulaire :
--extra-index-url https://download.pytorch.org/whl/cu121 hordelib ...your other dependencies...
Sous Linux, vous devrez installer le Nvidia CUDA Toolkit. Les installateurs Linux sont fournis par Nvidia sur https://developer.nvidia.com/cuda-downloads
Notez que si vous ne disposez que de 16 Go de RAM et d'un /tmp par défaut sur tmpfs, vous devrez probablement augmenter la taille de votre espace temporaire pour installer le Toolkit CUDA, sinon l'extraction de l'archive pourrait échouer. Une façon de le faire est juste avant d'installer le CUDA Toolkit :
sudo mount -o remount, taille = 16G /tmp
Si vous ne disposez que de 16 Go de RAM, vous aurez également besoin d’espace de swap. Donc, si vous exécutez généralement sans swap, ajoutez-en. Vous ne pourrez pas exécuter cette bibliothèque sans cela.
Les charges utiles de la Horde peuvent être traitées simplement avec (par exemple) :
# import os# Où que se trouvent vos modèles# os.environ["AIWORKER_CACHE_HOME"] = "f:/ai/models" # La valeur par défaut est `models/` dans le répertoire de travail actuel import hordelibhordelib.initialise() # Ceci doit être appelé avant tout autres fonctions hordelibde hordelib.horde import HordeLibfrom hordelib.shared_model_manager import SharedModelManagergenerate = HordeLib()if SharedModelManager.manager.compvis est Aucun :raise Exception("Échec du chargement du gestionnaire de modèles compvis")SharedModelManager.manager.compvis.download_model("Deliberate")SharedModelManager.manager.compvis.validate_model("Deliberate")data = {"sampler_name" : "k_dpmpp_2m","cfg_scale": 7.5,"denoising_strength": 1.0,"seed": 123456789,"height": 512,"width": 512,"karras": False,"tiling": False,"hires_fix": False,"clip_skip": 1,"control_type": Aucun, "image_is_control": False,"return_control_map": False,"prompt": "un ancien monstre lamia", "ddim_steps": 25,"n_iter": 1,"model": "Délibéré", }pil_image = generate.basic_inference_single_image(data).imageif pil_image est Aucun :raise Exception("Échec de la génération de l'image")pil_image.save("test.png")
Notez que hordelib.initialise()
effacera tous les arguments de ligne de commande d'argv. Assurez-vous donc de les analyser avant d'appeler cela.
Voir tests/run_*.py
pour plus d'exemples autonomes.
Si vous ne voulez pas hordelib
configure et contrôle la configuration de la journalisation (nous utilisons loguru), initialisez-la avec :
importer hordelibhordelib.initialise(setup_logging=False)
hordelib
dépend d'un grand nombre de projets open source, et la plupart de ces dépendances sont automatiquement téléchargées et installées lorsque vous installez hordelib
. En raison de la nature et du but de hordelib
certaines dépendances sont regroupées directement dans hordelib
lui-même.
Une interface graphique de diffusion stable puissante et modulaire avec une interface graphique/nœuds. Sous licence selon les termes de la licence publique générale GNU v3.0.
Le but de hordelib
est d’accéder à la puissance de ComfyUI.
Nœuds personnalisés pour ComfyUI offrant une capacité de prétraitement Controlnet. Sous licence selon les termes de la licence Apache 2.0.
Nœuds personnalisés pour ComfyUI fournissant la restauration du visage.
Nœuds pour générer des codes QR
Exigences:
git
(installer git)
tox
( pip install tox
)
Définissez la variable d'environnement AIWORKER_CACHE_HOME
pour qu'elle pointe vers un répertoire de modèle.
Notez que le répertoire modèle doit actuellement se trouver dans la structure de répertoires d'origine d'AI Horde :
clip codeformer compvis Deliberate.ckpt ...etc... controlnet embeds esrgan gfpgan safety_checker
Exécutez simplement : tox
(ou tox -q
pour une sortie moins bruyante)
Cela prendra un certain temps la première fois car toutes les dépendances seront installées.
Si les tests s'exécutent avec succès, des images seront produites dans le dossier images/
.
tox -- -k
par exemple tox -- -k test_initialisation
tox list
Cela répertoriera tous les groupes de tests impliqués dans le processus de développement, de construction ou de CI. Les tests contenant le mot « fix » appliqueront automatiquement les modifications lors de leur exécution, telles que le peluchage ou le formatage. Vous pouvez le faire en exécutant :
tox -e [test_suite_name_here]
hordelib/pipeline_designs/
Contient des pipelines ComfyUI dans un format qui peut être ouvert par l'application Web ComfyUI. Ceux-ci sont enregistrés directement depuis l’application Web.
hordelib/pipelines/
Contient les fichiers JSON du pipeline ci-dessus convertis au format requis par le processeur du pipeline backend. Ceux-ci sont convertis à partir de l'application Web, voir Conversion des pipelines ComfyUI ci-dessous.
hordelib/nodes/
Ce sont les nœuds ComfyUI personnalisés que nous utilisons pour le traitement spécifique hordelib
.
Dans cet exemple, nous installons les dépendances dans l'environnement par défaut du système d'exploitation. Lors de l'utilisation de la version git de hordelib
, depuis la racine du projet :
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu118 --upgrade
Assurez-vous que ComfyUI est installé. Une solution consiste à exécuter les tests :
tox -- -k test_comfy_install
À partir de là, pour exécuter ComfyUI :
cd ComfyUI
python main.py
Ensuite, ouvrez un navigateur sur : http://127.0.0.1:8188/
Utilisez l'application Web ComfyUI standard. Utilisez l'attribut "title" pour nommer les nœuds, ces noms deviennent des noms de paramètres dans l' hordelib
. Par exemple, un KSampler avec le "titre" de "sampler2" deviendrait un paramètre sampler2.seed
, sampler2.cfg
, etc. Chargez le pipeline hordelib/pipeline_designs/pipeline_stable_diffusion.json
dans l'application Web ComfyUI pour un exemple.
Enregistrez tout nouveau pipeline dans hordelib/pipeline_designs
en utilisant la convention de dénomination « pipeline_
Convertissez le JSON pour le modèle (voir Conversion des pipelines ComfyUI ci-dessous) et enregistrez le JSON résultant dans hordelib/pipelines
en utilisant le même nom de fichier que le fichier JSON précédent.
C'est tout. Cela peut ensuite être appelé depuis hordelib
en utilisant la méthode run_image_pipeline()
dans hordelib.comfy.Comfy()
En plus du fichier de conception enregistré depuis l'interface utilisateur, nous devons enregistrer le fichier de pipeline au format backend. Ce fichier est créé automatiquement à la racine du projet hordelib
nommé comfy-prompt.json
si vous exécutez un pipeline via la version ComfyUI intégrée dans hordelib
. L'exécution de ComfyUI avec tox -e comfyui
corrige automatiquement ComfyUI afin que ce fichier JSON soit enregistré.
Les principaux fichiers de configuration du projet sont : pyproject.toml
, tox.ini
et requirements.txt
La publication Pypi est automatique depuis le site Web GitHub.
Créer un PR du main
aux releases
Étiquetez le PR avec « release:patch » (0.0.1) ou « release:minor » (0.1.0)
Fusionner le PR avec un commit de fusion standard (pas d'écrasement)
Voici un exemple :
Commencez dans un nouveau répertoire vide. Créez un fichier exigences.txt :
--extra-index-url https://download.pytorch.org/whl/cu118 hordelib
Créez le répertoire images/
et copiez-y le test_db0.jpg
.
Copiez run_controlnet.py
depuis le répertoire hordelib/tests/
.
Construisez un venv :
python -m venv venv .venvScriptsactivate pip install -r requirements.txt
Exécutez le test que nous avons copié :
python run_controlnet.py The `images/` directory should have our test images.
Ceci est utile lors du test de nouveaux nœuds via horde-reGen-worker, etc.
python build_helper.py python -m build --sdist --wheel --outdir dist/ .python build_helper.py --fix
Sur le venv où vous souhaitez installer la nouvelle version
python -m pip install /chemin/vers/hordelib/dist/horde_engine-*.whl
Remplacez la valeur dans consts.py
par la version ComfyUI souhaitée.
Exécutez la suite de tests via tox