PhotoshopToComfyUI
L'IA générative directement dans Photoshop
Motivation
En septembre 2025, j’ai suivi un cours d’initiation à ComfyUI donné par Rémy Sohier. Le projet part d’une question : comment intégrer une assistance IA sans qu’elle remplace celui qui dessine ?
Pour y répondre, j’ai cherché ce qui définit l’humain dans l’acte de dessiner et ce que l’IA ne pourra pas reproduire. Après avoir pesé le pour et le contre, j’ai retenu le geste et la vibrance qu’il porte, et c’est de là que j’ai commencé.
Le plugin complète le dessin au lieu de générer à la place de l’utilisateur. Il prévisualise en temps réel la direction donnée au trait, et des LoRAs personnalisés, entraînés depuis le plugin, affinent les suggestions.
Le plugin Photoshop (UXP)
Le plugin est un Adobe UXP (Unified Extensibility Platform, le système de plugins d’Adobe en JS), installé comme un panel natif. J’ai découpé le code en modules : core/api parle à ComfyUI, core/photoshop exporte le document, core/lora gère la pipeline d’entraînement, core/network tient le WebSocket de progression, ui regroupe les sélecteurs de workflow et le download monitor.
J’ai packagé six workflows Flux (fp8, gguf, schnell, variantes LoRA), sélectionnables depuis le panel.
Le serveur : ComfyUI, Caddy, custom node
ComfyUI tourne en local et expose ses APIs via un reverse proxy Caddy. C’est nécessaire parce qu’UXP impose HTTPS sur certaines APIs réseau ; Caddy génère son certificat auto-signé en interne et redirige https://localhost:8443 vers http://127.0.0.1:8188, sans toucher à ComfyUI.
J’ai écrit un custom node lora_training qui ajoute des routes aiohttp à ComfyUI : upload base64 des images depuis le plugin, attribution d’IDs utilisateurs persistants (users.json), déclenchement asynchrone des jobs.
Entraînement LoRA via Kohya_ss
L’entraînement LoRA passe par Kohya_ss, isolé dans son propre venv Python 3.11.9 géré par uv. Le wrapper kohya_trainer.py construit la config, lance le training en sous-processus, expose l’avancement via /training/status/{lora_id}, et range les .safetensors directement dans ComfyUI/models/loras/. Le LoRA est utilisable dans le workflow suivant sans rien copier à la main.
Packaging et désinstallation
setup.ps1 installe l’ensemble : uv, ComfyUI cloné avec ses dépendances, Kohya, copie du custom node. Le dossier d’installation par défaut est %LOCALAPPDATA%\SelixyAI, mais on peut le rediriger.
uninstall.ps1 retrouve le chemin via le registre Windows (HKCU et HKLM), tue les processus Python/Caddy encore actifs, retire l’entrée du PATH, nettoie les clés de registre et supprime les fichiers.
Ce qui m’a tenu sur ce projet, c’est ce niveau de finition : l’outil s’installe et se désinstalle comme un logiciel normal.