Merge remote-tracking branch 'upstream/master' into ltxv_self_attn_mask

This commit is contained in:
kijai 2026-05-09 14:57:28 +03:00
commit 1356f0158c
55 changed files with 241 additions and 229 deletions

View File

@ -431,7 +431,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adjusts image brightness and contrast using a real-time GPU fragment shader."
} }
] ]
}, },

View File

@ -162,7 +162,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Canny to Image (Z-Image-Turbo)", "name": "Canny to Image (Z-Image-Turbo)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -1553,7 +1553,8 @@
"VHS_MetadataImage": true, "VHS_MetadataImage": true,
"VHS_KeepIntermediate": true "VHS_KeepIntermediate": true
}, },
"category": "Image generation and editing/Canny to image" "category": "Image generation and editing/Canny to image",
"description": "Generates an image from a Canny edge map using Z-Image-Turbo, with text conditioning."
} }
] ]
}, },

View File

@ -192,7 +192,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Canny to Video (LTX 2.0)", "name": "Canny to Video (LTX 2.0)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -3600,7 +3600,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Canny to video" "category": "Video generation and editing/Canny to video",
"description": "Generates video from Canny edge maps using LTX-2, with optional synchronized audio."
} }
] ]
}, },

View File

@ -377,7 +377,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adds lens-style chromatic aberration (color fringing) using a real-time GPU fragment shader."
} }
] ]
} }

View File

@ -596,7 +596,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adjusts saturation, temperature, tint, and vibrance using a real-time GPU fragment shader."
} }
] ]
} }

View File

@ -1129,7 +1129,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Balances colors across shadows, midtones, and highlights using a real-time GPU fragment shader."
} }
] ]
} }

View File

@ -608,7 +608,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Fine-tunes tone and color with per-channel curve adjustments using a real-time GPU fragment shader."
} }
] ]
} }

View File

@ -1609,7 +1609,8 @@
} }
], ],
"extra": {}, "extra": {},
"category": "Image Tools/Crop" "category": "Image Tools/Crop",
"description": "Splits an image into a 2×2 grid of four equal tiles."
} }
] ]
}, },

View File

@ -2946,7 +2946,8 @@
} }
], ],
"extra": {}, "extra": {},
"category": "Image Tools/Crop" "category": "Image Tools/Crop",
"description": "Splits an image into a 3×3 grid of nine equal tiles."
} }
] ]
}, },

View File

@ -1579,7 +1579,8 @@
"VHS_MetadataImage": true, "VHS_MetadataImage": true,
"VHS_KeepIntermediate": true "VHS_KeepIntermediate": true
}, },
"category": "Image generation and editing/Depth to image" "category": "Image generation and editing/Depth to image",
"description": "Generates an image from a depth map using Z-Image-Turbo with text conditioning."
}, },
{ {
"id": "458bdf3c-4b58-421c-af50-c9c663a4d74c", "id": "458bdf3c-4b58-421c-af50-c9c663a4d74c",
@ -2461,7 +2462,8 @@
] ]
}, },
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Estimates a monocular depth map from an input image using the Lotus depth estimation model."
} }
] ]
}, },

View File

@ -4233,7 +4233,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Depth to video" "category": "Video generation and editing/Depth to video",
"description": "Generates video from depth maps using LTX-2, with optional synchronized audio."
}, },
{ {
"id": "38b60539-50a7-42f9-a5fe-bdeca26272e2", "id": "38b60539-50a7-42f9-a5fe-bdeca26272e2",
@ -5192,7 +5193,8 @@
], ],
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Estimates a monocular depth map from an input image using the Lotus depth estimation model."
} }
] ]
}, },

View File

@ -450,7 +450,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Blur" "category": "Image Tools/Blur",
"description": "Applies bilateral (edge-preserving) blur to soften images while retaining detail."
} }
] ]
}, },

View File

@ -580,7 +580,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adds procedural film grain texture for a cinematic look via GPU fragment shader."
} }
] ]
} }

View File

@ -3350,7 +3350,8 @@
} }
], ],
"extra": {}, "extra": {},
"category": "Video generation and editing/First-Last-Frame to Video" "category": "Video generation and editing/First-Last-Frame to Video",
"description": "Generates a video interpolating between first and last keyframes using LTX-2.3."
} }
] ]
}, },

View File

@ -575,7 +575,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adds a glow/bloom effect around bright image areas via GPU fragment shader."
} }
] ]
} }

View File

@ -752,7 +752,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adjusts hue, saturation, and lightness of an image using a real-time GPU fragment shader."
} }
] ]
} }

View File

@ -374,7 +374,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Blur" "category": "Image Tools/Blur",
"description": "Applies Gaussian, Box, or Radial blur to soften images and create stylized depth or motion effects."
} }
] ]
} }

View File

@ -310,7 +310,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Text generation/Image Captioning" "category": "Text generation/Image Captioning",
"description": "Generates descriptive captions for images using Google's Gemini multimodal LLM."
} }
] ]
} }

View File

@ -315,7 +315,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Manipulates individual RGBA channels for masking, compositing, and channel effects."
} }
] ]
} }

View File

@ -2138,7 +2138,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Edit image" "category": "Image generation and editing/Edit image",
"description": "Edits images via text instructions using FireRed Image Edit 1.1, a diffusion-based instruction-following editing model."
} }
] ]
}, },

View File

@ -1472,7 +1472,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Edit image" "category": "Image generation and editing/Edit image",
"description": "Edits an input image via text instructions using FLUX.2 [klein] 4B."
}, },
{ {
"id": "6007e698-2ebd-4917-84d8-299b35d7b7ab", "id": "6007e698-2ebd-4917-84d8-299b35d7b7ab",
@ -1821,7 +1822,8 @@
], ],
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Applies reference image conditioning for style/identity transfer (Flux.2 Klein 4B)."
} }
] ]
}, },

View File

@ -1417,7 +1417,8 @@
} }
], ],
"extra": {}, "extra": {},
"category": "Image generation and editing/Edit image" "category": "Image generation and editing/Edit image",
"description": "Edits images via text instructions using LongCat Image Edit, an instruction-following image editing diffusion model."
} }
] ]
}, },

View File

@ -132,7 +132,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Image Edit (Qwen 2511)", "name": "Image Edit (Qwen 2511)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -1468,7 +1468,8 @@
"VHS_MetadataImage": true, "VHS_MetadataImage": true,
"VHS_KeepIntermediate": true "VHS_KeepIntermediate": true
}, },
"category": "Image generation and editing/Edit image" "category": "Image generation and editing/Edit image",
"description": "Edits images via text instructions using Qwen-Image-Edit-2511 with improved character consistency and integrated LoRA."
} }
] ]
}, },

View File

@ -1188,7 +1188,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Inpaint image" "category": "Image generation and editing/Inpaint image",
"description": "Inpaints masked image regions using Flux.1 fill [dev], Black Forest Labs' inpainting/outpainting model."
} }
] ]
}, },

View File

@ -1548,7 +1548,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Inpaint image" "category": "Image generation and editing/Inpaint image",
"description": "Inpaints masked regions using Qwen-Image, extending its multilingual text rendering to inpainting tasks."
}, },
{ {
"id": "56a1f603-fbd2-40ed-94ef-c9ecbd96aca8", "id": "56a1f603-fbd2-40ed-94ef-c9ecbd96aca8",
@ -1907,7 +1908,8 @@
], ],
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Expands and softens mask edges to reduce visible seams after image processing."
} }
] ]
}, },

View File

@ -742,7 +742,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Color adjust" "category": "Image Tools/Color adjust",
"description": "Adjusts black point, white point, and gamma for tonal range control via GPU shader."
} }
] ]
}, },

View File

@ -1919,7 +1919,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Outpaint image" "category": "Image generation and editing/Outpaint image",
"description": "Outpaints beyond image boundaries using Qwen-Image's outpainting capabilities."
}, },
{ {
"id": "f93c215e-c393-460e-9534-ed2c3d8a652e", "id": "f93c215e-c393-460e-9534-ed2c3d8a652e",
@ -2278,7 +2279,8 @@
], ],
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Expands and softens mask edges to reduce visible seams after image processing."
}, },
{ {
"id": "2a4b2cc0-db37-4302-a067-da392f38f06b", "id": "2a4b2cc0-db37-4302-a067-da392f38f06b",
@ -2733,7 +2735,8 @@
], ],
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Scales both image and mask together while preserving alignment for editing workflows."
} }
] ]
}, },

View File

@ -141,7 +141,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Image Upscale(Z-image-Turbo)", "name": "Image Upscale (Z-image-Turbo)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -1302,7 +1302,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Enhance" "category": "Image generation and editing/Enhance",
"description": "Upscales images to higher resolution using Z-Image-Turbo."
} }
] ]
}, },

View File

@ -99,7 +99,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Image to Depth Map (Lotus)", "name": "Image to Depth Map (Lotus)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -948,7 +948,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Depth to image" "category": "Image generation and editing/Depth to image",
"description": "Estimates a monocular depth map from an input image using the Lotus depth estimation model."
} }
] ]
}, },

View File

@ -1586,7 +1586,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Image to layers" "category": "Image generation and editing/Image to layers",
"description": "Decomposes an image into variable-resolution RGBA layers for independent editing using Qwen-Image-Layered."
} }
] ]
}, },

View File

@ -72,7 +72,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Image to Model (Hunyuan3d 2.1)", "name": "Image to 3D Model (Hunyuan3d 2.1)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -765,7 +765,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "3D/Image to 3D Model" "category": "3D/Image to 3D Model",
"description": "Generates 3D mesh models from a single input image using Hunyuan3D 2.0/2.1."
} }
] ]
}, },

View File

@ -4223,7 +4223,8 @@
"extra": { "extra": {
"workflowRendererVersion": "Vue-corrected" "workflowRendererVersion": "Vue-corrected"
}, },
"category": "Video generation and editing/Image to video" "category": "Video generation and editing/Image to video",
"description": "Generates video from a single input image using LTX-2.3."
} }
] ]
}, },

View File

@ -206,7 +206,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Image to Video (Wan 2.2)", "name": "Image to Video (Wan 2.2)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -2027,7 +2027,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Image to video" "category": "Video generation and editing/Image to video",
"description": "Generates video from an image and text prompt using Wan 2.2, supporting T2V and I2V."
} }
] ]
}, },

View File

@ -134,7 +134,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Pose to Image (Z-Image-Turbo)", "name": "Pose to Image (Z-Image-Turbo)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -1298,7 +1298,8 @@
"VHS_MetadataImage": true, "VHS_MetadataImage": true,
"VHS_KeepIntermediate": true "VHS_KeepIntermediate": true
}, },
"category": "Image generation and editing/Pose to image" "category": "Image generation and editing/Pose to image",
"description": "Generates an image from pose keypoints using Z-Image-Turbo with text conditioning."
} }
] ]
}, },

View File

@ -3870,7 +3870,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Pose to video" "category": "Video generation and editing/Pose to video",
"description": "Generates video from pose reference frames using LTX-2, with optional synchronized audio."
} }
] ]
}, },

View File

@ -270,7 +270,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Text generation/Prompt enhance" "category": "Text generation/Prompt enhance",
"description": "Expands short text prompts into detailed descriptions using a text generation model for better generation quality."
} }
] ]
}, },

View File

@ -302,7 +302,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Sharpen" "category": "Image Tools/Sharpen",
"description": "Sharpens image details using a GPU fragment shader for enhanced clarity."
} }
] ]
} }

View File

@ -222,7 +222,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Text to Audio (ACE-Step 1.5)", "name": "Text to Audio (ACE-Step 1.5)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -1502,7 +1502,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Audio/Music generation" "category": "Audio/Music generation",
"description": "Generates audio/music from text prompts using ACE-Step 1.5, a diffusion-based audio generation model."
} }
] ]
}, },

View File

@ -1029,7 +1029,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Text to image" "category": "Image generation and editing/Text to image",
"description": "Generates images from text prompts using Flux.1 [dev], Black Forest Labs' 12B diffusion model."
} }
] ]
}, },

View File

@ -1023,7 +1023,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Text to image" "category": "Image generation and editing/Text to image",
"description": "Generates images from text prompts using Flux.1 Krea Dev, a Black Forest Labs × Krea collaboration variant."
} }
] ]
}, },

View File

@ -1104,7 +1104,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Text to image" "category": "Image generation and editing/Text to image",
"description": "Generates images from text prompts using NetaYume Lumina, fine-tuned from Neta Lumina for anime-style and illustration generation."
}, },
{ {
"id": "a07fdf06-1bda-4dac-bdbd-63ee8ebca1c9", "id": "a07fdf06-1bda-4dac-bdbd-63ee8ebca1c9",
@ -1458,7 +1459,8 @@
], ],
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
} },
"description": "Encodes a negative text prompt via CLIP for classifier-free guidance in anime-style generation (NetaYume Lumina)."
} }
] ]
}, },

View File

@ -1941,7 +1941,8 @@
"extra": { "extra": {
"workflowRendererVersion": "Vue-corrected" "workflowRendererVersion": "Vue-corrected"
}, },
"category": "Image generation and editing/Text to image" "category": "Image generation and editing/Text to image",
"description": "Generates images from text prompts using Qwen-Image-2512, with enhanced human realism and finer natural detail over the base version."
} }
] ]
}, },

View File

@ -1873,7 +1873,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Text to image" "category": "Image generation and editing/Text to image",
"description": "Generates images from text prompts using Qwen-Image, Alibaba's 20B MMDiT model with excellent multilingual text rendering."
} }
] ]
}, },

View File

@ -149,7 +149,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Text to Image (Z-Image-Turbo)", "name": "Text to Image (Z-Image-Turbo)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -1054,7 +1054,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image generation and editing/Text to image" "category": "Image generation and editing/Text to image",
"description": "Generates images from text prompts using Z-Image-Turbo, Alibaba's distilled 6B DiT model."
} }
] ]
}, },

View File

@ -4286,7 +4286,8 @@
"extra": { "extra": {
"workflowRendererVersion": "Vue-corrected" "workflowRendererVersion": "Vue-corrected"
}, },
"category": "Video generation and editing/Text to video" "category": "Video generation and editing/Text to video",
"description": "Generates video from text prompts using LTX-2.3, Lightricks' video diffusion model."
} }
] ]
}, },

View File

@ -1572,7 +1572,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Text to video" "category": "Video generation and editing/Text to video",
"description": "Generates video from text prompts using Wan2.2, Alibaba's diffusion video model."
} }
] ]
}, },

View File

@ -434,7 +434,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Image Tools/Sharpen" "category": "Image Tools/Sharpen",
"description": "Enhances edge contrast via unsharp masking for a sharper image appearance."
} }
] ]
} }

View File

@ -307,7 +307,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Text generation/Video Captioning" "category": "Text generation/Video Captioning",
"description": "Generates descriptive captions for video input using Google's Gemini multimodal LLM."
} }
] ]
} }

View File

@ -165,7 +165,7 @@
}, },
"revision": 0, "revision": 0,
"config": {}, "config": {},
"name": "local-Video Inpaint(Wan2.1 VACE)", "name": "Video Inpaint (Wan 2.1 VACE)",
"inputNode": { "inputNode": {
"id": -10, "id": -10,
"bounding": [ "bounding": [
@ -2368,7 +2368,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Inpaint video" "category": "Video generation and editing/Inpaint video",
"description": "Inpaints masked regions in video frames using Wan 2.1 VACE."
} }
] ]
}, },

View File

@ -584,7 +584,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video Tools/Stitch videos" "category": "Video Tools/Stitch videos",
"description": "Stitches multiple video clips into a single sequential video file."
} }
] ]
} }

View File

@ -412,7 +412,8 @@
"extra": { "extra": {
"workflowRendererVersion": "LG" "workflowRendererVersion": "LG"
}, },
"category": "Video generation and editing/Enhance video" "category": "Video generation and editing/Enhance video",
"description": "Upscales video to 4× resolution using a GAN-based upscaling model."
} }
] ]
}, },

View File

@ -1390,7 +1390,7 @@ def convert_old_quants(state_dict, model_prefix="", metadata={}):
k_out = "{}.weight_scale".format(layer) k_out = "{}.weight_scale".format(layer)
if layer is not None: if layer is not None:
layer_conf = {"format": "float8_e4m3fn"} # TODO: check if anyone did some non e4m3fn scaled checkpoints layer_conf = {"format": "float8_e4m3fn"}
if full_precision_matrix_mult: if full_precision_matrix_mult:
layer_conf["full_precision_matrix_mult"] = full_precision_matrix_mult layer_conf["full_precision_matrix_mult"] = full_precision_matrix_mult
layers[layer] = layer_conf layers[layer] = layer_conf

View File

@ -1,10 +1,11 @@
from __future__ import annotations
from enum import Enum from enum import Enum
from typing import Optional, List, Dict, Any, Union from typing import Optional, Any
from pydantic import BaseModel, Field, RootModel from pydantic import BaseModel, Field, RootModel
class TripoModelVersion(str, Enum): class TripoModelVersion(str, Enum):
v3_1_20260211 = 'v3.1-20260211'
v3_0_20250812 = 'v3.0-20250812' v3_0_20250812 = 'v3.0-20250812'
v2_5_20250123 = 'v2.5-20250123' v2_5_20250123 = 'v2.5-20250123'
v2_0_20240919 = 'v2.0-20240919' v2_0_20240919 = 'v2.0-20240919'
@ -142,7 +143,7 @@ class TripoFileEmptyReference(BaseModel):
pass pass
class TripoFileReference(RootModel): class TripoFileReference(RootModel):
root: Union[TripoFileTokenReference, TripoUrlReference, TripoObjectReference, TripoFileEmptyReference] root: TripoFileTokenReference | TripoUrlReference | TripoObjectReference | TripoFileEmptyReference
class TripoGetStsTokenRequest(BaseModel): class TripoGetStsTokenRequest(BaseModel):
format: str = Field(..., description='The format of the image') format: str = Field(..., description='The format of the image')
@ -183,7 +184,7 @@ class TripoImageToModelRequest(BaseModel):
class TripoMultiviewToModelRequest(BaseModel): class TripoMultiviewToModelRequest(BaseModel):
type: TripoTaskType = TripoTaskType.MULTIVIEW_TO_MODEL type: TripoTaskType = TripoTaskType.MULTIVIEW_TO_MODEL
files: List[TripoFileReference] = Field(..., description='The file references to convert to a model') files: list[TripoFileReference] = Field(..., description='The file references to convert to a model')
model_version: Optional[TripoModelVersion] = Field(None, description='The model version to use for generation') model_version: Optional[TripoModelVersion] = Field(None, description='The model version to use for generation')
orthographic_projection: Optional[bool] = Field(False, description='Whether to use orthographic projection') orthographic_projection: Optional[bool] = Field(False, description='Whether to use orthographic projection')
face_limit: Optional[int] = Field(None, description='The number of faces to limit the generation to') face_limit: Optional[int] = Field(None, description='The number of faces to limit the generation to')
@ -251,27 +252,13 @@ class TripoConvertModelRequest(BaseModel):
with_animation: Optional[bool] = Field(None, description='Whether to include animations') with_animation: Optional[bool] = Field(None, description='Whether to include animations')
pack_uv: Optional[bool] = Field(None, description='Whether to pack the UVs') pack_uv: Optional[bool] = Field(None, description='Whether to pack the UVs')
bake: Optional[bool] = Field(None, description='Whether to bake the model') bake: Optional[bool] = Field(None, description='Whether to bake the model')
part_names: Optional[List[str]] = Field(None, description='The names of the parts to include') part_names: Optional[list[str]] = Field(None, description='The names of the parts to include')
fbx_preset: Optional[TripoFbxPreset] = Field(None, description='The preset for the FBX export') fbx_preset: Optional[TripoFbxPreset] = Field(None, description='The preset for the FBX export')
export_vertex_colors: Optional[bool] = Field(None, description='Whether to export the vertex colors') export_vertex_colors: Optional[bool] = Field(None, description='Whether to export the vertex colors')
export_orientation: Optional[TripoOrientation] = Field(None, description='The orientation for the export') export_orientation: Optional[TripoOrientation] = Field(None, description='The orientation for the export')
animate_in_place: Optional[bool] = Field(None, description='Whether to animate in place') animate_in_place: Optional[bool] = Field(None, description='Whether to animate in place')
class TripoTaskRequest(RootModel):
root: Union[
TripoTextToModelRequest,
TripoImageToModelRequest,
TripoMultiviewToModelRequest,
TripoTextureModelRequest,
TripoRefineModelRequest,
TripoAnimatePrerigcheckRequest,
TripoAnimateRigRequest,
TripoAnimateRetargetRequest,
TripoStylizeModelRequest,
TripoConvertModelRequest
]
class TripoTaskOutput(BaseModel): class TripoTaskOutput(BaseModel):
model: Optional[str] = Field(None, description='URL to the model') model: Optional[str] = Field(None, description='URL to the model')
base_model: Optional[str] = Field(None, description='URL to the base model') base_model: Optional[str] = Field(None, description='URL to the base model')
@ -283,12 +270,13 @@ class TripoTask(BaseModel):
task_id: str = Field(..., description='The task ID') task_id: str = Field(..., description='The task ID')
type: Optional[str] = Field(None, description='The type of task') type: Optional[str] = Field(None, description='The type of task')
status: Optional[TripoTaskStatus] = Field(None, description='The status of the task') status: Optional[TripoTaskStatus] = Field(None, description='The status of the task')
input: Optional[Dict[str, Any]] = Field(None, description='The input parameters for the task') input: Optional[dict[str, Any]] = Field(None, description='The input parameters for the task')
output: Optional[TripoTaskOutput] = Field(None, description='The output of the task') output: Optional[TripoTaskOutput] = Field(None, description='The output of the task')
progress: Optional[int] = Field(None, description='The progress of the task', ge=0, le=100) progress: Optional[int] = Field(None, description='The progress of the task', ge=0, le=100)
create_time: Optional[int] = Field(None, description='The creation time of the task') create_time: Optional[int] = Field(None, description='The creation time of the task')
running_left_time: Optional[int] = Field(None, description='The estimated time left for the task') running_left_time: Optional[int] = Field(None, description='The estimated time left for the task')
queue_position: Optional[int] = Field(None, description='The position in the queue') queue_position: Optional[int] = Field(None, description='The position in the queue')
consumed_credit: int | None = Field(None)
class TripoTaskResponse(BaseModel): class TripoTaskResponse(BaseModel):
code: int = Field(0, description='The response code') code: int = Field(0, description='The response code')
@ -296,7 +284,7 @@ class TripoTaskResponse(BaseModel):
class TripoGeneralResponse(BaseModel): class TripoGeneralResponse(BaseModel):
code: int = Field(0, description='The response code') code: int = Field(0, description='The response code')
data: Dict[str, str] = Field(..., description='The task ID data') data: dict[str, str] = Field(..., description='The task ID data')
class TripoBalanceData(BaseModel): class TripoBalanceData(BaseModel):
balance: float = Field(..., description='The account balance') balance: float = Field(..., description='The account balance')

View File

@ -60,6 +60,7 @@ async def poll_until_finished(
], ],
status_extractor=lambda x: x.data.status, status_extractor=lambda x: x.data.status,
progress_extractor=lambda x: x.data.progress, progress_extractor=lambda x: x.data.progress,
price_extractor=lambda x: x.data.consumed_credit * 0.01 if x.data.consumed_credit else None,
estimated_duration=average_duration, estimated_duration=average_duration,
) )
if response_poll.data.status == TripoTaskStatus.SUCCESS: if response_poll.data.status == TripoTaskStatus.SUCCESS:
@ -113,7 +114,6 @@ class TripoTextToModelNode(IO.ComfyNode):
depends_on=IO.PriceBadgeDepends( depends_on=IO.PriceBadgeDepends(
widgets=[ widgets=[
"model_version", "model_version",
"style",
"texture", "texture",
"pbr", "pbr",
"quad", "quad",
@ -124,20 +124,17 @@ class TripoTextToModelNode(IO.ComfyNode):
expr=""" expr="""
( (
$isV14 := $contains(widgets.model_version,"v1.4"); $isV14 := $contains(widgets.model_version,"v1.4");
$style := widgets.style; $isV3OrLater := $contains(widgets.model_version,"v3.");
$hasStyle := ($style != "" and $style != "none");
$withTexture := widgets.texture or widgets.pbr; $withTexture := widgets.texture or widgets.pbr;
$isHdTexture := (widgets.texture_quality = "detailed"); $isHdTexture := (widgets.texture_quality = "detailed");
$isDetailedGeometry := (widgets.geometry_quality = "detailed"); $isDetailedGeometry := (widgets.geometry_quality = "detailed");
$baseCredits := $credits := $isV14 ? 20 : (
$isV14 ? 20 : ($withTexture ? 20 : 10); ($withTexture ? 20 : 10)
$credits :=
$baseCredits
+ ($hasStyle ? 5 : 0)
+ (widgets.quad ? 5 : 0) + (widgets.quad ? 5 : 0)
+ ($isHdTexture ? 10 : 0) + ($isHdTexture ? 10 : 0)
+ ($isDetailedGeometry ? 20 : 0); + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)
{"type":"usd","usd": $round($credits * 0.01, 2)} );
{"type":"usd","usd": $round($credits * 0.01, 2), "format": {"approximate": true}}
) )
""", """,
), ),
@ -239,7 +236,6 @@ class TripoImageToModelNode(IO.ComfyNode):
depends_on=IO.PriceBadgeDepends( depends_on=IO.PriceBadgeDepends(
widgets=[ widgets=[
"model_version", "model_version",
"style",
"texture", "texture",
"pbr", "pbr",
"quad", "quad",
@ -250,20 +246,17 @@ class TripoImageToModelNode(IO.ComfyNode):
expr=""" expr="""
( (
$isV14 := $contains(widgets.model_version,"v1.4"); $isV14 := $contains(widgets.model_version,"v1.4");
$style := widgets.style; $isV3OrLater := $contains(widgets.model_version,"v3.");
$hasStyle := ($style != "" and $style != "none");
$withTexture := widgets.texture or widgets.pbr; $withTexture := widgets.texture or widgets.pbr;
$isHdTexture := (widgets.texture_quality = "detailed"); $isHdTexture := (widgets.texture_quality = "detailed");
$isDetailedGeometry := (widgets.geometry_quality = "detailed"); $isDetailedGeometry := (widgets.geometry_quality = "detailed");
$baseCredits := $credits := $isV14 ? 30 : (
$isV14 ? 30 : ($withTexture ? 30 : 20); ($withTexture ? 30 : 20)
$credits :=
$baseCredits
+ ($hasStyle ? 5 : 0)
+ (widgets.quad ? 5 : 0) + (widgets.quad ? 5 : 0)
+ ($isHdTexture ? 10 : 0) + ($isHdTexture ? 10 : 0)
+ ($isDetailedGeometry ? 20 : 0); + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)
{"type":"usd","usd": $round($credits * 0.01, 2)} );
{"type":"usd","usd": $round($credits * 0.01, 2), "format": {"approximate": true}}
) )
""", """,
), ),
@ -358,7 +351,7 @@ class TripoMultiviewToModelNode(IO.ComfyNode):
"texture_alignment", default="original_image", options=["original_image", "geometry"], optional=True, advanced=True "texture_alignment", default="original_image", options=["original_image", "geometry"], optional=True, advanced=True
), ),
IO.Int.Input("face_limit", default=-1, min=-1, max=500000, optional=True, advanced=True), IO.Int.Input("face_limit", default=-1, min=-1, max=500000, optional=True, advanced=True),
IO.Boolean.Input("quad", default=False, optional=True, advanced=True), IO.Boolean.Input("quad", default=False, optional=True, advanced=True, tooltip="This parameter is deprecated and does nothing."),
IO.Combo.Input("geometry_quality", default="standard", options=["standard", "detailed"], optional=True, advanced=True), IO.Combo.Input("geometry_quality", default="standard", options=["standard", "detailed"], optional=True, advanced=True),
], ],
outputs=[ outputs=[
@ -379,7 +372,6 @@ class TripoMultiviewToModelNode(IO.ComfyNode):
"model_version", "model_version",
"texture", "texture",
"pbr", "pbr",
"quad",
"texture_quality", "texture_quality",
"geometry_quality", "geometry_quality",
], ],
@ -387,17 +379,16 @@ class TripoMultiviewToModelNode(IO.ComfyNode):
expr=""" expr="""
( (
$isV14 := $contains(widgets.model_version,"v1.4"); $isV14 := $contains(widgets.model_version,"v1.4");
$isV3OrLater := $contains(widgets.model_version,"v3.");
$withTexture := widgets.texture or widgets.pbr; $withTexture := widgets.texture or widgets.pbr;
$isHdTexture := (widgets.texture_quality = "detailed"); $isHdTexture := (widgets.texture_quality = "detailed");
$isDetailedGeometry := (widgets.geometry_quality = "detailed"); $isDetailedGeometry := (widgets.geometry_quality = "detailed");
$baseCredits := $credits := $isV14 ? 30 : (
$isV14 ? 30 : ($withTexture ? 30 : 20); ($withTexture ? 30 : 20)
$credits :=
$baseCredits
+ (widgets.quad ? 5 : 0)
+ ($isHdTexture ? 10 : 0) + ($isHdTexture ? 10 : 0)
+ ($isDetailedGeometry ? 20 : 0); + (($isDetailedGeometry and $isV3OrLater) ? 20 : 0)
{"type":"usd","usd": $round($credits * 0.01, 2)} );
{"type":"usd","usd": $round($credits * 0.01, 2), "format": {"approximate": true}}
) )
""", """,
), ),
@ -457,7 +448,7 @@ class TripoMultiviewToModelNode(IO.ComfyNode):
geometry_quality=geometry_quality, geometry_quality=geometry_quality,
texture_alignment=texture_alignment, texture_alignment=texture_alignment,
face_limit=face_limit if face_limit != -1 else None, face_limit=face_limit if face_limit != -1 else None,
quad=quad, quad=None,
), ),
) )
return await poll_until_finished(cls, response, average_duration=80) return await poll_until_finished(cls, response, average_duration=80)
@ -498,7 +489,7 @@ class TripoTextureNode(IO.ComfyNode):
expr=""" expr="""
( (
$tq := widgets.texture_quality; $tq := widgets.texture_quality;
{"type":"usd","usd": ($contains($tq,"detailed") ? 0.2 : 0.1)} {"type":"usd","usd": ($contains($tq,"detailed") ? 0.2 : 0.1), "format": {"approximate": true}}
) )
""", """,
), ),
@ -555,7 +546,7 @@ class TripoRefineNode(IO.ComfyNode):
is_api_node=True, is_api_node=True,
is_output_node=True, is_output_node=True,
price_badge=IO.PriceBadge( price_badge=IO.PriceBadge(
expr="""{"type":"usd","usd":0.3}""", expr="""{"type":"usd","usd":0.3, "format": {"approximate": true}}""",
), ),
) )
@ -592,7 +583,7 @@ class TripoRigNode(IO.ComfyNode):
is_api_node=True, is_api_node=True,
is_output_node=True, is_output_node=True,
price_badge=IO.PriceBadge( price_badge=IO.PriceBadge(
expr="""{"type":"usd","usd":0.25}""", expr="""{"type":"usd","usd":0.25, "format": {"approximate": true}}""",
), ),
) )
@ -652,7 +643,7 @@ class TripoRetargetNode(IO.ComfyNode):
is_api_node=True, is_api_node=True,
is_output_node=True, is_output_node=True,
price_badge=IO.PriceBadge( price_badge=IO.PriceBadge(
expr="""{"type":"usd","usd":0.1}""", expr="""{"type":"usd","usd":0.1, "format": {"approximate": true}}""",
), ),
) )
@ -761,19 +752,10 @@ class TripoConversionNode(IO.ComfyNode):
"face_limit", "face_limit",
"texture_size", "texture_size",
"texture_format", "texture_format",
"force_symmetry",
"flatten_bottom", "flatten_bottom",
"flatten_bottom_threshold", "flatten_bottom_threshold",
"pivot_to_center_bottom", "pivot_to_center_bottom",
"scale_factor", "scale_factor",
"with_animation",
"pack_uv",
"bake",
"part_names",
"fbx_preset",
"export_vertex_colors",
"export_orientation",
"animate_in_place",
], ],
), ),
expr=""" expr="""
@ -783,28 +765,16 @@ class TripoConversionNode(IO.ComfyNode):
$flatThresh := (widgets.flatten_bottom_threshold != null) ? widgets.flatten_bottom_threshold : 0; $flatThresh := (widgets.flatten_bottom_threshold != null) ? widgets.flatten_bottom_threshold : 0;
$scale := (widgets.scale_factor != null) ? widgets.scale_factor : 1; $scale := (widgets.scale_factor != null) ? widgets.scale_factor : 1;
$texFmt := (widgets.texture_format != "" ? widgets.texture_format : "jpeg"); $texFmt := (widgets.texture_format != "" ? widgets.texture_format : "jpeg");
$part := widgets.part_names;
$fbx := (widgets.fbx_preset != "" ? widgets.fbx_preset : "blender");
$orient := (widgets.export_orientation != "" ? widgets.export_orientation : "default");
$advanced := $advanced :=
widgets.quad or widgets.quad or
widgets.force_symmetry or
widgets.flatten_bottom or widgets.flatten_bottom or
widgets.pivot_to_center_bottom or widgets.pivot_to_center_bottom or
widgets.with_animation or
widgets.pack_uv or
widgets.bake or
widgets.export_vertex_colors or
widgets.animate_in_place or
($face != -1) or ($face != -1) or
($texSize != 4096) or ($texSize != 4096) or
($flatThresh != 0) or ($flatThresh != 0) or
($scale != 1) or ($scale != 1) or
($texFmt != "jpeg") or ($texFmt != "jpeg");
($part != "") or {"type":"usd","usd": ($advanced ? 0.1 : 0.05), "format": {"approximate": true}}
($fbx != "blender") or
($orient != "default");
{"type":"usd","usd": ($advanced ? 0.1 : 0.05)}
) )
""", """,
), ),

View File

@ -74,6 +74,8 @@ tags:
description: Cloud workflow management and versioning (cloud-only) description: Cloud workflow management and versioning (cloud-only)
- name: task - name: task
description: Background task management (cloud-only) description: Background task management (cloud-only)
- name: runtime-only
description: Operations served exclusively by the cloud runtime with no local equivalent
paths: paths:
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@ -2573,35 +2575,38 @@ paths:
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
/api/experiment/nodes: /api/experiment/nodes:
get: get:
operationId: listCloudNodes operationId: getNodeInfoSchema
tags: [node] tags: [runtime-only]
summary: List installed custom nodes summary: Get pre-rendered node info schema
description: "[cloud-only] Returns the list of custom node packages installed in the cloud runtime." description: "[cloud-only] Returns the static ComfyUI object_info schema, identical for every caller, rendered once at startup with empty model/user-file context. Served by a raw HTTP handler that writes pre-rendered bytes with ETag + Cache-Control validators for RFC 7232 conditional GETs."
x-runtime: [cloud] x-runtime: [cloud]
parameters: parameters:
- name: limit - name: If-None-Match
in: query in: header
required: false
schema: schema:
type: integer type: string
description: Maximum number of results description: Entity tag previously returned by this endpoint. When present and matching, the server returns 304 Not Modified.
- name: offset
in: query
schema:
type: integer
description: Pagination offset
responses: responses:
"200": "200":
description: Custom node list description: Node info schema
headers:
ETag:
schema:
type: string
description: Entity tag for conditional request validation
Cache-Control:
schema:
type: string
description: Cache directives for the response
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/CloudNodeList" type: object
"401": additionalProperties:
description: Unauthorized $ref: "#/components/schemas/NodeInfo"
content: "304":
application/json: description: Not Modified — returned when the client sends a matching If-None-Match header
schema:
$ref: "#/components/schemas/CloudError"
post: post:
operationId: installCloudNode operationId: installCloudNode
tags: [node] tags: [node]
@ -2651,10 +2656,10 @@ paths:
/api/experiment/nodes/{id}: /api/experiment/nodes/{id}:
get: get:
operationId: getCloudNode operationId: getNodeByID
tags: [node] tags: [runtime-only]
summary: Get details of an installed custom node summary: Get a single node definition by ID
description: "[cloud-only] Returns details about a specific installed custom node package." description: "[cloud-only] Returns one node's definition from the pre-indexed object_info schema. Served by a raw HTTP handler that writes pre-rendered bytes with ETag + Cache-Control validators for RFC 7232 conditional GETs."
x-runtime: [cloud] x-runtime: [cloud]
parameters: parameters:
- name: id - name: id
@ -2662,26 +2667,33 @@ paths:
required: true required: true
schema: schema:
type: string type: string
description: Custom node package ID description: Node class identifier
- name: If-None-Match
in: header
required: false
schema:
type: string
description: Entity tag previously returned by this endpoint. When present and matching, the server returns 304 Not Modified.
responses: responses:
"200": "200":
description: Node detail description: Single node definition
headers:
ETag:
schema:
type: string
description: Entity tag for conditional request validation
Cache-Control:
schema:
type: string
description: Cache directives for the response
content: content:
application/json: application/json:
schema: schema:
$ref: "#/components/schemas/CloudNode" $ref: "#/components/schemas/NodeInfo"
"401": "304":
description: Unauthorized description: Not Modified — returned when the client sends a matching If-None-Match header
content:
application/json:
schema:
$ref: "#/components/schemas/CloudError"
"404": "404":
description: Not found description: Node not found
content:
application/json:
schema:
$ref: "#/components/schemas/CloudError"
delete: delete:
operationId: uninstallCloudNode operationId: uninstallCloudNode
tags: [node] tags: [node]
@ -7100,22 +7112,6 @@ components:
enabled: enabled:
type: boolean type: boolean
CloudNodeList:
type: object
x-runtime: [cloud]
description: "[cloud-only] Paginated list of installed custom node packages."
required:
- nodes
properties:
nodes:
type: array
items:
$ref: "#/components/schemas/CloudNode"
total:
type: integer
has_more:
type: boolean
HubLabel: HubLabel:
type: object type: object
x-runtime: [cloud] x-runtime: [cloud]