From f00bdcc8e290690247ae66fdd9cc6f205a1aa013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=CC=A7ag=CC=86an=20Kiraz?= Date: Thu, 6 Aug 2026 12:45:39 +0300 Subject: [PATCH] feat: add flux virtual try-on v2 node BFL released flux-tools/vto-v2 on 2026-07-17 with sharper face preservation and inputs up to 4 MP. The request/response format is identical to v1, so the node subclasses FluxVirtualTryOn and overrides only the endpoint path via a new URL_PATH class attribute. --- nodes/flux_tools.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/nodes/flux_tools.py b/nodes/flux_tools.py index 3d2a186..bbb2214 100644 --- a/nodes/flux_tools.py +++ b/nodes/flux_tools.py @@ -246,6 +246,7 @@ class FluxOutpaint(BaseFlux): class FluxVirtualTryOn(BaseFlux): CATEGORY = "BFL" + URL_PATH = "flux-tools/vto-v1" @classmethod def INPUT_TYPES(cls): @@ -332,17 +333,26 @@ class FluxVirtualTryOn(BaseFlux): arguments["webhook_url"] = webhook_url if webhook_secret: arguments["webhook_secret"] = webhook_secret - return super().generate_image("flux-tools/vto-v1", arguments, config) + return super().generate_image(self.URL_PATH, arguments, config) + + +class FluxVirtualTryOnV2(FluxVirtualTryOn): + """Virtual Try-On v2 (flux-tools/vto-v2): sharper face preservation and garment + detail, inputs up to 4 MP. Drop-in replacement for v1 — identical request format.""" + + URL_PATH = "flux-tools/vto-v2" NODE_CLASS_MAPPINGS = { "FluxErase_BFL": FluxErase, "FluxOutpaint_BFL": FluxOutpaint, "FluxVirtualTryOn_BFL": FluxVirtualTryOn, + "FluxVirtualTryOnV2_BFL": FluxVirtualTryOnV2, } NODE_DISPLAY_NAME_MAPPINGS = { "FluxErase_BFL": "Flux Erase (BFL)", "FluxOutpaint_BFL": "Flux Outpaint (BFL)", "FluxVirtualTryOn_BFL": "Flux Virtual Try-On (BFL)", + "FluxVirtualTryOnV2_BFL": "Flux Virtual Try-On v2 (BFL)", }