diff --git a/.github/scripts/i18n/sync-docs-json.mjs b/.github/scripts/i18n/sync-docs-json.mjs index 3d9e197f7..129926ad0 100644 --- a/.github/scripts/i18n/sync-docs-json.mjs +++ b/.github/scripts/i18n/sync-docs-json.mjs @@ -118,8 +118,14 @@ export function normalizeNavTree(nodes, options = {}) { } if (node && typeof node === "object" && Array.isArray(node.pages)) { const pages = normalizeNavTree(node.pages, options); - if (pages.length === 0 && pruneMissing) continue; + if (pages.length === 0 && pruneMissing && node.openapi == null) continue; out.push({ ...node, pages }); + continue; + } + // OpenAPI-only groups have `openapi` and no `pages`; dropping them + // removes the API reference from the sidebar. + if (node && typeof node === "object" && node.openapi != null) { + out.push(node); } } return out; @@ -156,11 +162,15 @@ export function localizeNavTree(nodes, langDir, langDirs) { if (typeof node === "string") { return localizePagePath(node, langDir, langDirs); } - if (node && typeof node === "object" && Array.isArray(node.pages)) { - return { - ...node, - pages: localizeNavTree(node.pages, langDir, langDirs), - }; + if (node && typeof node === "object") { + const next = { ...node }; + if (node.openapi != null) { + next.openapi = localizeOpenApi(node.openapi, langDir); + } + if (Array.isArray(node.pages)) { + next.pages = localizeNavTree(node.pages, langDir, langDirs); + } + return next; } return node; }); @@ -242,15 +252,42 @@ function findGroupMatch(existingPages, newChild, langDirs) { return best; } +/** @param {unknown} openapi @returns {string | null} */ +export function openApiSourceKey(openapi) { + if (typeof openapi === "string") return openapi; + if (openapi && typeof openapi === "object" && typeof openapi.source === "string") { + return openapi.source; + } + return null; +} + /** - * @param {unknown[]} newPages * @param {unknown[]} existingPages - * @param {string[]} langDirs + * @param {object} newChild */ +function findOpenApiMatch(existingPages, newChild) { + const source = openApiSourceKey(newChild?.openapi); + if (!source || !Array.isArray(existingPages)) return null; + return ( + existingPages.find( + (node) => + node && typeof node === "object" && openApiSourceKey(node.openapi) === source + ) ?? null + ); +} + export function mergeNavPages(newPages, existingPages, langDirs) { if (!Array.isArray(newPages)) return []; return newPages.map((newChild) => { if (typeof newChild === "string") return newChild; + if (newChild?.openapi != null && !Array.isArray(newChild.pages)) { + const match = findOpenApiMatch(existingPages, newChild); + if (!match) return newChild; + const merged = { ...newChild }; + if (match.group) merged.group = match.group; + if (match.icon) merged.icon = match.icon; + return merged; + } if (!newChild?.pages) return newChild; const match = findGroupMatch(existingPages, newChild, langDirs); diff --git a/custom-nodes/intro.mdx b/custom-nodes/intro.mdx new file mode 100644 index 000000000..6f1f2cad6 --- /dev/null +++ b/custom-nodes/intro.mdx @@ -0,0 +1,23 @@ +--- +title: "Custom Nodes" +sidebarTitle: "Overview" +description: "Choose the right path for building, extending, and publishing ComfyUI custom nodes." +--- + +Custom Nodes extend ComfyUI with new server-side behavior, user-interface features, and integrations. Choose a path based on what you are trying to do. + + + + Learn the client-server model, node categories, Python backend, and JavaScript frontend before building your node. + + + Prepare a node package, publish it to the Comfy Registry, and manage versions and releases. + + + +## Choose a starting point + +- **New to custom nodes:** start with [Custom Nodes Overview](/custom-nodes/overview). +- **Building the backend:** see [Python (Backend)](/custom-nodes/backend/server_overview). +- **Extending the UI:** see [JavaScript (UI)](/custom-nodes/js/javascript_overview). +- **Publishing a package:** start with the [Registry Overview](/registry/overview). diff --git a/development/api-development/sdks.mdx b/development/api-development/sdks.mdx index dbccd4ae1..34f67df73 100644 --- a/development/api-development/sdks.mdx +++ b/development/api-development/sdks.mdx @@ -1,7 +1,7 @@ --- title: "Comfy SDKs" description: "Official Python and TypeScript SDKs for running ComfyUI workflows from your own application" -sidebarTitle: "Overview" +sidebarTitle: "SDK Overview" icon: "code" --- diff --git a/development/overview.mdx b/development/overview.mdx index bb1275fbb..981dda90d 100644 --- a/development/overview.mdx +++ b/development/overview.mdx @@ -55,39 +55,10 @@ Manage your ComfyUI installation, custom nodes, and workflows from the command l See also: [CLI Reference](/comfy-cli/reference) · [Troubleshooting](/comfy-cli/troubleshooting) -## Develop Custom Nodes +## Custom Nodes -Custom nodes let you extend ComfyUI with your own Python backends, JavaScript UI widgets, and integrations. This is one of the most powerful ways to contribute to the ecosystem. - - - - New to custom nodes? Learn the anatomy of a node, how to publish it, and best practices. -

- Key pages: Walkthrough · v3 Migration Guide -
- - - Build the server-side of your custom node. Covers data types, image & mask handling, lazy evaluation, tensors, and more. -

- Key pages: Data Types · Images & Masks · Lazy Evaluation · Node Expansion -
- - - Add custom UI widgets, sidebar tabs, keybindings, and dialogs to your nodes. Full control over the ComfyUI frontend. -

- Key pages: Hooks · Sidebar Tabs · Commands & Keybindings · Examples -
- -
- -See also: Internationalization (i18n) +Extend ComfyUI with Python backends, JavaScript UI extensions, and integrations. Start with the [Custom Nodes overview](/custom-nodes/overview). ## Registry -Publish and manage your custom nodes through the Comfy Registry. The Registry provides versioning, security scanning, and discovery for the community. - - - Register as a publisher, publish your first node, claim existing ones, and set up CI/CD for automated releases. - - -See also: [Publishing Tutorial](/registry/publishing) · [Standards](/registry/standards) · [CI/CD](/registry/cicd) · [Specifications](/registry/specifications) +Package and publish custom nodes through the Comfy Registry. Start with the [Registry overview](/registry/overview) or the [publishing tutorial](/registry/publishing). diff --git a/docs.json b/docs.json index 63c72cce6..fe63b4781 100644 --- a/docs.json +++ b/docs.json @@ -2753,24 +2753,12 @@ ] }, { - "tab": "Development", + "tab": "API Development", "pages": [ - "development/overview", { - "group": "Run Workflows", + "group": "Develop with Comfy", "pages": [ - "development/api-development/overview", - "development/api-development/getting-an-api-key", - "development/api-development/sdks", - "api-reference/v2/overview", - { - "group": "Comfy API v2 Reference", - "openapi": { - "source": "openapi-v2.yaml", - "directory": "api-reference/v2" - } - }, - "development/api-development/sdks-design", + "development/overview", { "group": "Comfy Cloud", "pages": [ @@ -2788,17 +2776,62 @@ "development/comfyui-server/comms_messages", "development/comfyui-server/startup-flags" ] + } + ] + }, + { + "group": "Run Workflows", + "pages": [ + "development/api-development/sdks", + "development/api-development/getting-an-api-key", + "development/api-development/overview", + "api-reference/v2/overview", + { + "group": "Comfy API v2 Reference", + "openapi": { + "source": "openapi-v2.yaml", + "directory": "api-reference/v2" + } }, + "development/api-development/sdks-design", + "development/api-development/workflow-api-format", + "development/api-development/workflow-metadata", + "development/comfyui-server/api-key-integration" + ] + }, + { + "group": "Comfy CLI", + "pages": [ + "comfy-cli/getting-started", + "comfy-cli/reference", + "comfy-cli/troubleshooting" + ] + }, + { + "group": "Specifications", + "pages": [ { - "group": "Workflow Formats", + "group": "Workflow JSON", "pages": [ - "development/api-development/workflow-api-format", - "development/api-development/workflow-metadata" + "specs/workflow_json", + "specs/workflow_json_0.4" ] }, - "development/comfyui-server/api-key-integration" + { + "group": "Node Definitions", + "pages": [ + "specs/nodedef_json", + "specs/nodedef_json_1_0" + ] + } ] - }, + } + ] + }, + { + "tab": "Custom Nodes", + "pages": [ + "custom-nodes/intro", { "group": "Build Custom Nodes", "pages": [ @@ -2864,33 +2897,6 @@ "registry/specifications", "registry/api-reference/overview" ] - }, - { - "group": "Comfy CLI", - "pages": [ - "comfy-cli/getting-started", - "comfy-cli/reference", - "comfy-cli/troubleshooting" - ] - }, - { - "group": "Specifications", - "pages": [ - { - "group": "Workflow JSON", - "pages": [ - "specs/workflow_json", - "specs/workflow_json_0.4" - ] - }, - { - "group": "Node Definitions", - "pages": [ - "specs/nodedef_json", - "specs/nodedef_json_1_0" - ] - } - ] } ] }, @@ -3641,53 +3647,157 @@ ] }, { - "group": "API Node", + "group": "高级", "pages": [ { - "group": "Image", + "group": "Debug", + "pages": [ + "zh/built-in-nodes/EasyCache", + "zh/built-in-nodes/LazyCache", + "zh/built-in-nodes/ModelComputeDtype" + ] + }, + { + "group": "Guidance", + "pages": [ + "zh/built-in-nodes/CFGNorm", + "zh/built-in-nodes/CFGZeroStar", + "zh/built-in-nodes/LTXVModalityGuidance", + "zh/built-in-nodes/LTXVSpatioTemporalGuidance", + "zh/built-in-nodes/NAGuidance", + "zh/built-in-nodes/SkipLayerGuidanceDiT", + "zh/built-in-nodes/SkipLayerGuidanceDiTSimple", + "zh/built-in-nodes/SkipLayerGuidanceSD3", + "zh/built-in-nodes/TCFG" + ] + }, + { + "group": "Hooks", "pages": [ { - "group": "BFL", + "group": "Clip", "pages": [ - "zh/built-in-nodes/FluxProCannyNode", - "zh/built-in-nodes/FluxProDepthNode", - "zh/built-in-nodes/FluxProImageNode" + "zh/built-in-nodes/SetClipHooks" ] }, { - "group": "Bytedance", + "group": "Combine", "pages": [ - "zh/built-in-nodes/ByteDanceImageEditNode" + "zh/built-in-nodes/CombineHooks", + "zh/built-in-nodes/CombineHooksEight", + "zh/built-in-nodes/CombineHooksFour" ] - } + }, + { + "group": "Cond Pair", + "pages": [ + "zh/built-in-nodes/PairConditioningCombine", + "zh/built-in-nodes/PairConditioningSetDefaultAndCombine", + "zh/built-in-nodes/PairConditioningSetProperties", + "zh/built-in-nodes/PairConditioningSetPropertiesAndCombine" + ] + }, + { + "group": "Cond Single", + "pages": [ + "zh/built-in-nodes/ConditioningSetDefaultAndCombine", + "zh/built-in-nodes/ConditioningSetProperties", + "zh/built-in-nodes/ConditioningSetPropertiesAndCombine" + ] + }, + { + "group": "Create", + "pages": [ + "zh/built-in-nodes/CreateHookLora", + "zh/built-in-nodes/CreateHookLoraModelOnly", + "zh/built-in-nodes/CreateHookModelAsLora", + "zh/built-in-nodes/CreateHookModelAsLoraModelOnly" + ] + }, + { + "group": "Manual", + "pages": [ + "zh/built-in-nodes/SetModelHooksOnCond" + ] + }, + { + "group": "Scheduling", + "pages": [ + "zh/built-in-nodes/CreateHookKeyframe", + "zh/built-in-nodes/CreateHookKeyframesFromFloats", + "zh/built-in-nodes/CreateHookKeyframesInterpolated", + "zh/built-in-nodes/SetHookKeyframes" + ] + }, + "zh/built-in-nodes/ConditioningTimestepsRange" ] }, { - "group": "Video", + "group": "Loaders", "pages": [ - { - "group": "Pika", - "pages": [ - "zh/built-in-nodes/Pikadditions", - "zh/built-in-nodes/Pikaffects", - "zh/built-in-nodes/PikaImageToVideoNode2_2", - "zh/built-in-nodes/PikaScenesV2_2", - "zh/built-in-nodes/PikaStartEndFrameNode2_2", - "zh/built-in-nodes/Pikaswaps", - "zh/built-in-nodes/PikaTextToVideoNode2_2" - ] - } + "zh/built-in-nodes/DeprecatedCheckpointLoader", + "zh/built-in-nodes/DeprecatedDiffusersLoader" ] }, { - "group": "图像", + "group": "Model Merging", + "pages": [ + "zh/built-in-nodes/SaveLoRANode" + ] + }, + { + "group": "Multigpu", + "pages": [ + "zh/built-in-nodes/MultiGPU_Options", + "zh/built-in-nodes/MultiGPU_WorkUnits", + "zh/built-in-nodes/SelectCLIPDevice", + "zh/built-in-nodes/SelectModelDevice", + "zh/built-in-nodes/SelectVAEDevice" + ] + }, + "zh/built-in-nodes/IdeogramV1", + "zh/built-in-nodes/IdeogramV2", + "zh/built-in-nodes/KlingCameraControlI2VNode", + "zh/built-in-nodes/KlingCameraControls", + "zh/built-in-nodes/KlingCameraControlT2VNode", + "zh/built-in-nodes/KlingDualCharacterVideoEffectNode", + "zh/built-in-nodes/KlingSingleImageVideoEffectNode", + "zh/built-in-nodes/KlingVirtualTryOnNode", + "zh/built-in-nodes/MoonvalleyImg2VideoNode", + "zh/built-in-nodes/MoonvalleyTxt2VideoNode", + "zh/built-in-nodes/MoonvalleyVideo2VideoNode", + "zh/built-in-nodes/SeedVR2ProgressiveSampler", + "zh/built-in-nodes/StabilityAudioInpaint", + "zh/built-in-nodes/StabilityAudioToAudio", + "zh/built-in-nodes/StabilityStableImageSD_3_5Node", + "zh/built-in-nodes/StabilityStableImageUltraNode", + "zh/built-in-nodes/StabilityTextToAudio", + "zh/built-in-nodes/StabilityUpscaleConservativeNode", + "zh/built-in-nodes/StabilityUpscaleCreativeNode", + "zh/built-in-nodes/StabilityUpscaleFastNode" + ] + }, + { + "group": "API Node", + "pages": [ + { + "group": "Image", "pages": [ { "group": "BFL", "pages": [ + "zh/built-in-nodes/FluxProCannyNode", + "zh/built-in-nodes/FluxProDepthNode", + "zh/built-in-nodes/FluxProImageNode", "zh/built-in-nodes/partner-node/image/bfl/flux-1-1-pro-ultra-image" ] }, + { + "group": "Bytedance", + "pages": [ + "zh/built-in-nodes/ByteDanceImageEditNode" + ] + }, { "group": "Ideogram", "pages": [ @@ -3734,7 +3844,7 @@ ] }, { - "group": "视频", + "group": "Video", "pages": [ { "group": "Google", @@ -3773,7 +3883,14 @@ "pages": [ "zh/built-in-nodes/partner-node/video/pika/pika-image-to-video", "zh/built-in-nodes/partner-node/video/pika/pika-scenes", - "zh/built-in-nodes/partner-node/video/pika/pika-text-to-video" + "zh/built-in-nodes/partner-node/video/pika/pika-text-to-video", + "zh/built-in-nodes/Pikadditions", + "zh/built-in-nodes/Pikaffects", + "zh/built-in-nodes/PikaImageToVideoNode2_2", + "zh/built-in-nodes/PikaScenesV2_2", + "zh/built-in-nodes/PikaStartEndFrameNode2_2", + "zh/built-in-nodes/Pikaswaps", + "zh/built-in-nodes/PikaTextToVideoNode2_2" ] }, { @@ -3810,18 +3927,36 @@ ] }, { - "group": "Experimental", + "group": "条件", "pages": [ { - "group": "Attention Experiments", + "group": "Video Models", "pages": [ - "zh/built-in-nodes/CLIPAttentionMultiply", - "zh/built-in-nodes/UNetCrossAttentionMultiply", - "zh/built-in-nodes/UNetSelfAttentionMultiply", - "zh/built-in-nodes/UNetTemporalAttentionMultiply" - ] - }, - { + "zh/built-in-nodes/conditioning/video-models/wan-vace-to-video", + "zh/built-in-nodes/LTXVDurationPredictor", + "zh/built-in-nodes/Stablezero123Conditioning", + "zh/built-in-nodes/Stablezero123ConditioningBatched", + "zh/built-in-nodes/SVD_img2vid_Conditioning", + "zh/built-in-nodes/SvdImg2vidConditioning" + ] + }, + "zh/built-in-nodes/ConditioningAverage", + "zh/built-in-nodes/Sd4xupscaleConditioning" + ] + }, + { + "group": "Experimental", + "pages": [ + { + "group": "Attention Experiments", + "pages": [ + "zh/built-in-nodes/CLIPAttentionMultiply", + "zh/built-in-nodes/UNetCrossAttentionMultiply", + "zh/built-in-nodes/UNetSelfAttentionMultiply", + "zh/built-in-nodes/UNetTemporalAttentionMultiply" + ] + }, + { "group": "Stable Cascade", "pages": [ "zh/built-in-nodes/StableCascade_SuperResolutionControlnet" @@ -3840,6 +3975,218 @@ "zh/built-in-nodes/TorchCompileModel" ] }, + { + "group": "图像", + "pages": [ + { + "group": "Adjustments", + "pages": [ + "zh/built-in-nodes/AdjustBrightness", + "zh/built-in-nodes/AdjustContrast" + ] + }, + { + "group": "Background Removal", + "pages": [ + "zh/built-in-nodes/RemoveBackground" + ] + }, + { + "group": "Batch", + "pages": [ + "zh/built-in-nodes/ImageDeduplication", + "zh/built-in-nodes/ImageFromBatch", + "zh/built-in-nodes/ImageGrid", + "zh/built-in-nodes/ImageMergeTileList", + "zh/built-in-nodes/MergeImageLists", + "zh/built-in-nodes/RebatchImages", + "zh/built-in-nodes/RepeatImageBatch", + "zh/built-in-nodes/ShuffleDataset", + "zh/built-in-nodes/ShuffleImageTextDataset", + "zh/built-in-nodes/SplitImageToTileList" + ] + }, + { + "group": "Color", + "pages": [ + "zh/built-in-nodes/ImageRGBToYUV", + "zh/built-in-nodes/ImageYUVToRGB", + "zh/built-in-nodes/NormalizeImages" + ] + }, + { + "group": "Compositing", + "pages": [ + "zh/built-in-nodes/ImageCompositeMasked", + "zh/built-in-nodes/JoinImageWithAlpha", + "zh/built-in-nodes/PorterDuffImageComposite", + "zh/built-in-nodes/SplitImageWithAlpha" + ] + }, + { + "group": "Detection", + "pages": [ + "zh/built-in-nodes/DrawBBoxes", + "zh/built-in-nodes/MediaPipeFaceLandmarker", + "zh/built-in-nodes/MediaPipeFaceMask", + "zh/built-in-nodes/MediaPipeFaceMeshVisualize", + "zh/built-in-nodes/RTDETR_detect", + "zh/built-in-nodes/SAM3_Detect", + "zh/built-in-nodes/SAM3_TrackPreview", + "zh/built-in-nodes/SAM3_TrackToMask", + "zh/built-in-nodes/SAM3_VideoTrack", + "zh/built-in-nodes/SDPoseDrawKeypoints", + "zh/built-in-nodes/SDPoseFaceBBoxes", + "zh/built-in-nodes/SDPoseKeypointExtractor" + ] + }, + { + "group": "Filters", + "pages": [ + "zh/built-in-nodes/Canny", + "zh/built-in-nodes/ColorTransfer", + "zh/built-in-nodes/ImageAddNoise", + "zh/built-in-nodes/ImageBlend", + "zh/built-in-nodes/ImageBlur", + "zh/built-in-nodes/ImageQuantize", + "zh/built-in-nodes/ImageSharpen", + "zh/built-in-nodes/Morphology" + ] + }, + { + "group": "Geometry Estimation", + "pages": [ + "zh/built-in-nodes/DA3GeometryToMesh", + "zh/built-in-nodes/DA3GeometryToPointCloud", + "zh/built-in-nodes/DA3Inference", + "zh/built-in-nodes/DA3Render", + "zh/built-in-nodes/MoGeInference", + "zh/built-in-nodes/MoGePanoramaInference", + "zh/built-in-nodes/MoGePointMapToMesh", + "zh/built-in-nodes/MoGeRender" + ] + }, + { + "group": "Mask", + "pages": [ + "zh/built-in-nodes/BatchMasksNode", + "zh/built-in-nodes/CropMask", + "zh/built-in-nodes/FeatherMask", + "zh/built-in-nodes/GrowMask", + "zh/built-in-nodes/ImageColorToMask", + "zh/built-in-nodes/ImageToMask", + "zh/built-in-nodes/InvertMask", + "zh/built-in-nodes/MaskComposite", + "zh/built-in-nodes/MaskPreview", + "zh/built-in-nodes/MaskToImage", + "zh/built-in-nodes/SolidMask", + "zh/built-in-nodes/ThresholdMask", + "zh/built-in-nodes/VOIDQuadmaskPreprocess" + ] + }, + { + "group": "Post Processors", + "pages": [ + "zh/built-in-nodes/SeedVR2PostProcessing" + ] + }, + { + "group": "Pre Processors", + "pages": [ + "zh/built-in-nodes/SeedVR2Preprocess" + ] + }, + { + "group": "Shader", + "pages": [ + "zh/built-in-nodes/GLSLShader" + ] + }, + { + "group": "Transform", + "pages": [ + "zh/built-in-nodes/CenterCropImages", + "zh/built-in-nodes/CropByBBoxes", + "zh/built-in-nodes/ImageCrop", + "zh/built-in-nodes/ImageCropV2", + "zh/built-in-nodes/ImageFlip", + "zh/built-in-nodes/ImagePadForOutpaint", + "zh/built-in-nodes/ImageRotate", + "zh/built-in-nodes/ImageStitch", + "zh/built-in-nodes/RandomCropImages", + "zh/built-in-nodes/ResizeAndPadImage", + "zh/built-in-nodes/ResizeImagesByLongerEdge", + "zh/built-in-nodes/ResizeImagesByShorterEdge" + ] + }, + { + "group": "Upscaling", + "pages": [ + "zh/built-in-nodes/ImageScale", + "zh/built-in-nodes/ImageScaleBy", + "zh/built-in-nodes/ImageScaleToMaxDimension", + "zh/built-in-nodes/ImageScaleToTotalPixels", + "zh/built-in-nodes/ImageUpscaleWithModel" + ] + }, + { + "group": "Video", + "pages": [ + "zh/built-in-nodes/ShuffleVideoTextDataset", + "zh/built-in-nodes/WanDancerPadKeyframes", + "zh/built-in-nodes/WanDancerPadKeyframesList" + ] + }, + "zh/built-in-nodes/AddLayer", + "zh/built-in-nodes/BatchImagesNode", + "zh/built-in-nodes/ConditioningCombine", + "zh/built-in-nodes/EmptyImage", + "zh/built-in-nodes/GetImageSize", + "zh/built-in-nodes/ImageBatch", + "zh/built-in-nodes/ImageCompare", + "zh/built-in-nodes/ImageCompositor", + "zh/built-in-nodes/ImageInvert", + "zh/built-in-nodes/LayersFromBoundingBoxes", + "zh/built-in-nodes/LoadImage", + "zh/built-in-nodes/LoadImageDataSetFromFolder", + "zh/built-in-nodes/LoadImageMask", + "zh/built-in-nodes/LoadImageOutput", + "zh/built-in-nodes/LoadImageSetFromFolderNode", + "zh/built-in-nodes/LoadImageSetNode", + "zh/built-in-nodes/LoadImageTextDataSetFromFolder", + "zh/built-in-nodes/LoadImageTextSetFromFolderNode", + "zh/built-in-nodes/LoraLoader", + "zh/built-in-nodes/LoraLoaderModelOnly", + "zh/built-in-nodes/Painter", + "zh/built-in-nodes/PreviewImage", + "zh/built-in-nodes/ResizeImageMaskNode", + "zh/built-in-nodes/SaveAnimatedPNG", + "zh/built-in-nodes/SaveAnimatedWEBP", + "zh/built-in-nodes/SaveImage", + "zh/built-in-nodes/SaveImageAdvanced", + "zh/built-in-nodes/SaveImageDataSetToFolder", + "zh/built-in-nodes/SaveImageTextDataSetToFolder", + "zh/built-in-nodes/SaveSVGNode", + "zh/built-in-nodes/WebcamCapture" + ] + }, + { + "group": "潜变量", + "pages": [ + { + "group": "Video", + "pages": [ + "zh/built-in-nodes/latent/video/trim-video-latent" + ] + } + ] + }, + { + "group": "加载器", + "pages": [ + "zh/built-in-nodes/ControlNetLoader" + ] + }, { "group": "Model", "pages": [ @@ -4661,6 +5008,17 @@ } ] }, + { + "group": "模型补丁", + "pages": [ + { + "group": "Anima", + "pages": [ + "zh/built-in-nodes/AnimaLLLiteApply" + ] + } + ] + }, { "group": "Partner", "pages": [ @@ -5210,14 +5568,31 @@ ] }, { - "group": "Text", + "group": "采样", "pages": [ - "zh/built-in-nodes/AddTextPrefix", - "zh/built-in-nodes/AddTextSuffix", - "zh/built-in-nodes/BuildJsonPromptIdeogram", - "zh/built-in-nodes/CaseConverter", - "zh/built-in-nodes/ConvertArrayToString", - "zh/built-in-nodes/ConvertDictionaryToString", + { + "group": "Custom Sampling", + "pages": [ + { + "group": "Samplers", + "pages": [ + "zh/built-in-nodes/SamplerDpmpp2mSde", + "zh/built-in-nodes/SamplerDpmppSde" + ] + } + ] + } + ] + }, + { + "group": "Text", + "pages": [ + "zh/built-in-nodes/AddTextPrefix", + "zh/built-in-nodes/AddTextSuffix", + "zh/built-in-nodes/BuildJsonPromptIdeogram", + "zh/built-in-nodes/CaseConverter", + "zh/built-in-nodes/ConvertArrayToString", + "zh/built-in-nodes/ConvertDictionaryToString", "zh/built-in-nodes/JsonExtractString", "zh/built-in-nodes/MergeTextLists", "zh/built-in-nodes/RegexExtract", @@ -5285,6 +5660,17 @@ "zh/built-in-nodes/SeedNode" ] }, + { + "group": "实用工具", + "pages": [ + "zh/built-in-nodes/BatchImagesMasksLatentsNode", + "zh/built-in-nodes/MarkdownNote", + "zh/built-in-nodes/Note", + "zh/built-in-nodes/Reroute", + "zh/built-in-nodes/TerminalLog", + "zh/built-in-nodes/wanBlockSwap" + ] + }, { "group": "Video", "pages": [ @@ -5318,421 +5704,44 @@ "zh/built-in-nodes/Video Slice", "zh/built-in-nodes/VideoFrameSample" ] - }, + } + ] + } + ] + }, + { + "tab": "API 开发", + "pages": [ + { + "group": "使用 Comfy 开发", + "pages": [ + "zh/development/overview", { - "group": "加载器", + "group": "Comfy Cloud", "pages": [ - "zh/built-in-nodes/ControlNetLoader" + "zh/development/cloud/overview", + "zh/development/cloud/api-reference", + "zh/development/cloud/openapi" ] }, { - "group": "图像", + "group": "自托管服务器", "pages": [ - { - "group": "Adjustments", - "pages": [ - "zh/built-in-nodes/AdjustBrightness", - "zh/built-in-nodes/AdjustContrast" - ] - }, - { - "group": "Background Removal", - "pages": [ - "zh/built-in-nodes/RemoveBackground" - ] - }, - { - "group": "Batch", - "pages": [ - "zh/built-in-nodes/ImageDeduplication", - "zh/built-in-nodes/ImageFromBatch", - "zh/built-in-nodes/ImageGrid", - "zh/built-in-nodes/ImageMergeTileList", - "zh/built-in-nodes/MergeImageLists", - "zh/built-in-nodes/RebatchImages", - "zh/built-in-nodes/RepeatImageBatch", - "zh/built-in-nodes/ShuffleDataset", - "zh/built-in-nodes/ShuffleImageTextDataset", - "zh/built-in-nodes/SplitImageToTileList" - ] - }, - { - "group": "Color", - "pages": [ - "zh/built-in-nodes/ImageRGBToYUV", - "zh/built-in-nodes/ImageYUVToRGB", - "zh/built-in-nodes/NormalizeImages" - ] - }, - { - "group": "Compositing", - "pages": [ - "zh/built-in-nodes/ImageCompositeMasked", - "zh/built-in-nodes/JoinImageWithAlpha", - "zh/built-in-nodes/PorterDuffImageComposite", - "zh/built-in-nodes/SplitImageWithAlpha" - ] - }, - { - "group": "Detection", - "pages": [ - "zh/built-in-nodes/DrawBBoxes", - "zh/built-in-nodes/MediaPipeFaceLandmarker", - "zh/built-in-nodes/MediaPipeFaceMask", - "zh/built-in-nodes/MediaPipeFaceMeshVisualize", - "zh/built-in-nodes/RTDETR_detect", - "zh/built-in-nodes/SAM3_Detect", - "zh/built-in-nodes/SAM3_TrackPreview", - "zh/built-in-nodes/SAM3_TrackToMask", - "zh/built-in-nodes/SAM3_VideoTrack", - "zh/built-in-nodes/SDPoseDrawKeypoints", - "zh/built-in-nodes/SDPoseFaceBBoxes", - "zh/built-in-nodes/SDPoseKeypointExtractor" - ] - }, - { - "group": "Filters", - "pages": [ - "zh/built-in-nodes/Canny", - "zh/built-in-nodes/ColorTransfer", - "zh/built-in-nodes/ImageAddNoise", - "zh/built-in-nodes/ImageBlend", - "zh/built-in-nodes/ImageBlur", - "zh/built-in-nodes/ImageQuantize", - "zh/built-in-nodes/ImageSharpen", - "zh/built-in-nodes/Morphology" - ] - }, - { - "group": "Geometry Estimation", - "pages": [ - "zh/built-in-nodes/DA3GeometryToMesh", - "zh/built-in-nodes/DA3GeometryToPointCloud", - "zh/built-in-nodes/DA3Inference", - "zh/built-in-nodes/DA3Render", - "zh/built-in-nodes/MoGeInference", - "zh/built-in-nodes/MoGePanoramaInference", - "zh/built-in-nodes/MoGePointMapToMesh", - "zh/built-in-nodes/MoGeRender" - ] - }, - { - "group": "Mask", - "pages": [ - "zh/built-in-nodes/BatchMasksNode", - "zh/built-in-nodes/CropMask", - "zh/built-in-nodes/FeatherMask", - "zh/built-in-nodes/GrowMask", - "zh/built-in-nodes/ImageColorToMask", - "zh/built-in-nodes/ImageToMask", - "zh/built-in-nodes/InvertMask", - "zh/built-in-nodes/MaskComposite", - "zh/built-in-nodes/MaskPreview", - "zh/built-in-nodes/MaskToImage", - "zh/built-in-nodes/SolidMask", - "zh/built-in-nodes/ThresholdMask", - "zh/built-in-nodes/VOIDQuadmaskPreprocess" - ] - }, - { - "group": "Post Processors", - "pages": [ - "zh/built-in-nodes/SeedVR2PostProcessing" - ] - }, - { - "group": "Pre Processors", - "pages": [ - "zh/built-in-nodes/SeedVR2Preprocess" - ] - }, - { - "group": "Shader", - "pages": [ - "zh/built-in-nodes/GLSLShader" - ] - }, - { - "group": "Transform", - "pages": [ - "zh/built-in-nodes/CenterCropImages", - "zh/built-in-nodes/CropByBBoxes", - "zh/built-in-nodes/ImageCrop", - "zh/built-in-nodes/ImageCropV2", - "zh/built-in-nodes/ImageFlip", - "zh/built-in-nodes/ImagePadForOutpaint", - "zh/built-in-nodes/ImageRotate", - "zh/built-in-nodes/ImageStitch", - "zh/built-in-nodes/RandomCropImages", - "zh/built-in-nodes/ResizeAndPadImage", - "zh/built-in-nodes/ResizeImagesByLongerEdge", - "zh/built-in-nodes/ResizeImagesByShorterEdge" - ] - }, - { - "group": "Upscaling", - "pages": [ - "zh/built-in-nodes/ImageScale", - "zh/built-in-nodes/ImageScaleBy", - "zh/built-in-nodes/ImageScaleToMaxDimension", - "zh/built-in-nodes/ImageScaleToTotalPixels", - "zh/built-in-nodes/ImageUpscaleWithModel" - ] - }, - { - "group": "Video", - "pages": [ - "zh/built-in-nodes/ShuffleVideoTextDataset", - "zh/built-in-nodes/WanDancerPadKeyframes", - "zh/built-in-nodes/WanDancerPadKeyframesList" - ] - }, - "zh/built-in-nodes/AddLayer", - "zh/built-in-nodes/BatchImagesNode", - "zh/built-in-nodes/ConditioningCombine", - "zh/built-in-nodes/EmptyImage", - "zh/built-in-nodes/GetImageSize", - "zh/built-in-nodes/ImageBatch", - "zh/built-in-nodes/ImageCompare", - "zh/built-in-nodes/ImageCompositor", - "zh/built-in-nodes/ImageInvert", - "zh/built-in-nodes/LayersFromBoundingBoxes", - "zh/built-in-nodes/LoadImage", - "zh/built-in-nodes/LoadImageDataSetFromFolder", - "zh/built-in-nodes/LoadImageMask", - "zh/built-in-nodes/LoadImageOutput", - "zh/built-in-nodes/LoadImageSetFromFolderNode", - "zh/built-in-nodes/LoadImageSetNode", - "zh/built-in-nodes/LoadImageTextDataSetFromFolder", - "zh/built-in-nodes/LoadImageTextSetFromFolderNode", - "zh/built-in-nodes/LoraLoader", - "zh/built-in-nodes/LoraLoaderModelOnly", - "zh/built-in-nodes/Painter", - "zh/built-in-nodes/PreviewImage", - "zh/built-in-nodes/ResizeImageMaskNode", - "zh/built-in-nodes/SaveAnimatedPNG", - "zh/built-in-nodes/SaveAnimatedWEBP", - "zh/built-in-nodes/SaveImage", - "zh/built-in-nodes/SaveImageAdvanced", - "zh/built-in-nodes/SaveImageDataSetToFolder", - "zh/built-in-nodes/SaveImageTextDataSetToFolder", - "zh/built-in-nodes/SaveSVGNode", - "zh/built-in-nodes/WebcamCapture" - ] - }, - { - "group": "实用工具", - "pages": [ - "zh/built-in-nodes/BatchImagesMasksLatentsNode", - "zh/built-in-nodes/MarkdownNote", - "zh/built-in-nodes/Note", - "zh/built-in-nodes/Reroute", - "zh/built-in-nodes/TerminalLog", - "zh/built-in-nodes/wanBlockSwap" - ] - }, - { - "group": "条件", - "pages": [ - { - "group": "Video Models", - "pages": [ - "zh/built-in-nodes/conditioning/video-models/wan-vace-to-video", - "zh/built-in-nodes/LTXVDurationPredictor", - "zh/built-in-nodes/Stablezero123Conditioning", - "zh/built-in-nodes/Stablezero123ConditioningBatched", - "zh/built-in-nodes/SVD_img2vid_Conditioning", - "zh/built-in-nodes/SvdImg2vidConditioning" - ] - }, - "zh/built-in-nodes/ConditioningAverage", - "zh/built-in-nodes/Sd4xupscaleConditioning" - ] - }, - { - "group": "模型补丁", - "pages": [ - { - "group": "Anima", - "pages": [ - "zh/built-in-nodes/AnimaLLLiteApply" - ] - } - ] - }, - { - "group": "潜变量", - "pages": [ - { - "group": "Video", - "pages": [ - "zh/built-in-nodes/latent/video/trim-video-latent" - ] - } - ] - }, - { - "group": "采样", - "pages": [ - { - "group": "Custom Sampling", - "pages": [ - { - "group": "Samplers", - "pages": [ - "zh/built-in-nodes/SamplerDpmpp2mSde", - "zh/built-in-nodes/SamplerDpmppSde" - ] - } - ] - } - ] - }, - { - "group": "高级", - "pages": [ - { - "group": "Debug", - "pages": [ - "zh/built-in-nodes/EasyCache", - "zh/built-in-nodes/LazyCache", - "zh/built-in-nodes/ModelComputeDtype" - ] - }, - { - "group": "Guidance", - "pages": [ - "zh/built-in-nodes/CFGNorm", - "zh/built-in-nodes/CFGZeroStar", - "zh/built-in-nodes/LTXVModalityGuidance", - "zh/built-in-nodes/LTXVSpatioTemporalGuidance", - "zh/built-in-nodes/NAGuidance", - "zh/built-in-nodes/SkipLayerGuidanceDiT", - "zh/built-in-nodes/SkipLayerGuidanceDiTSimple", - "zh/built-in-nodes/SkipLayerGuidanceSD3", - "zh/built-in-nodes/TCFG" - ] - }, - { - "group": "Hooks", - "pages": [ - { - "group": "Clip", - "pages": [ - "zh/built-in-nodes/SetClipHooks" - ] - }, - { - "group": "Combine", - "pages": [ - "zh/built-in-nodes/CombineHooks", - "zh/built-in-nodes/CombineHooksEight", - "zh/built-in-nodes/CombineHooksFour" - ] - }, - { - "group": "Cond Pair", - "pages": [ - "zh/built-in-nodes/PairConditioningCombine", - "zh/built-in-nodes/PairConditioningSetDefaultAndCombine", - "zh/built-in-nodes/PairConditioningSetProperties", - "zh/built-in-nodes/PairConditioningSetPropertiesAndCombine" - ] - }, - { - "group": "Cond Single", - "pages": [ - "zh/built-in-nodes/ConditioningSetDefaultAndCombine", - "zh/built-in-nodes/ConditioningSetProperties", - "zh/built-in-nodes/ConditioningSetPropertiesAndCombine" - ] - }, - { - "group": "Create", - "pages": [ - "zh/built-in-nodes/CreateHookLora", - "zh/built-in-nodes/CreateHookLoraModelOnly", - "zh/built-in-nodes/CreateHookModelAsLora", - "zh/built-in-nodes/CreateHookModelAsLoraModelOnly" - ] - }, - { - "group": "Manual", - "pages": [ - "zh/built-in-nodes/SetModelHooksOnCond" - ] - }, - { - "group": "Scheduling", - "pages": [ - "zh/built-in-nodes/CreateHookKeyframe", - "zh/built-in-nodes/CreateHookKeyframesFromFloats", - "zh/built-in-nodes/CreateHookKeyframesInterpolated", - "zh/built-in-nodes/SetHookKeyframes" - ] - }, - "zh/built-in-nodes/ConditioningTimestepsRange" - ] - }, - { - "group": "Loaders", - "pages": [ - "zh/built-in-nodes/DeprecatedCheckpointLoader", - "zh/built-in-nodes/DeprecatedDiffusersLoader" - ] - }, - { - "group": "Model Merging", - "pages": [ - "zh/built-in-nodes/SaveLoRANode" - ] - }, - { - "group": "Multigpu", - "pages": [ - "zh/built-in-nodes/MultiGPU_Options", - "zh/built-in-nodes/MultiGPU_WorkUnits", - "zh/built-in-nodes/SelectCLIPDevice", - "zh/built-in-nodes/SelectModelDevice", - "zh/built-in-nodes/SelectVAEDevice" - ] - }, - "zh/built-in-nodes/IdeogramV1", - "zh/built-in-nodes/IdeogramV2", - "zh/built-in-nodes/KlingCameraControlI2VNode", - "zh/built-in-nodes/KlingCameraControls", - "zh/built-in-nodes/KlingCameraControlT2VNode", - "zh/built-in-nodes/KlingDualCharacterVideoEffectNode", - "zh/built-in-nodes/KlingSingleImageVideoEffectNode", - "zh/built-in-nodes/KlingVirtualTryOnNode", - "zh/built-in-nodes/MoonvalleyImg2VideoNode", - "zh/built-in-nodes/MoonvalleyTxt2VideoNode", - "zh/built-in-nodes/MoonvalleyVideo2VideoNode", - "zh/built-in-nodes/SeedVR2ProgressiveSampler", - "zh/built-in-nodes/StabilityAudioInpaint", - "zh/built-in-nodes/StabilityAudioToAudio", - "zh/built-in-nodes/StabilityStableImageSD_3_5Node", - "zh/built-in-nodes/StabilityStableImageUltraNode", - "zh/built-in-nodes/StabilityTextToAudio", - "zh/built-in-nodes/StabilityUpscaleConservativeNode", - "zh/built-in-nodes/StabilityUpscaleCreativeNode", - "zh/built-in-nodes/StabilityUpscaleFastNode" + "zh/development/comfyui-server/comms_overview", + "zh/development/comfyui-server/api-examples", + "zh/development/comfyui-server/comms_routes", + "zh/development/comfyui-server/comms_messages", + "zh/development/comfyui-server/startup-flags" ] } ] - } - ] - }, - { - "tab": "开发", - "pages": [ - "zh/development/overview", + }, { "group": "运行工作流", "pages": [ - "zh/development/api-development/overview", - "zh/development/api-development/getting-an-api-key", "zh/development/api-development/sdks", + "zh/development/api-development/getting-an-api-key", + "zh/development/api-development/overview", "zh/api-reference/v2/overview", { "group": "Comfy API v2 参考文档", @@ -5742,34 +5751,44 @@ } }, "zh/development/api-development/sdks-design", + "zh/development/api-development/workflow-api-format", + "zh/development/api-development/workflow-metadata", + "zh/development/comfyui-server/api-key-integration" + ] + }, + { + "group": "Comfy CLI", + "pages": [ + "zh/comfy-cli/getting-started", + "zh/comfy-cli/reference", + "zh/comfy-cli/troubleshooting" + ] + }, + { + "group": "规范", + "pages": [ { - "group": "Comfy Cloud", - "pages": [ - "zh/development/cloud/overview", - "zh/development/cloud/api-reference", - "zh/development/cloud/openapi" - ] - }, - { - "group": "自托管服务器", + "group": "Workflow JSON", "pages": [ - "zh/development/comfyui-server/comms_overview", - "zh/development/comfyui-server/api-examples", - "zh/development/comfyui-server/comms_routes", - "zh/development/comfyui-server/comms_messages", - "zh/development/comfyui-server/startup-flags" + "zh/specs/workflow_json", + "zh/specs/workflow_json_0.4" ] }, { - "group": "工作流格式", + "group": "节点定义", "pages": [ - "zh/development/api-development/workflow-api-format", - "zh/development/api-development/workflow-metadata" + "zh/specs/nodedef_json", + "zh/specs/nodedef_json_1_0" ] - }, - "zh/development/comfyui-server/api-key-integration" + } ] - }, + } + ] + }, + { + "tab": "自定义节点", + "pages": [ + "zh/custom-nodes/intro", { "group": "构建自定义节点", "pages": [ @@ -5835,44 +5854,17 @@ "zh/registry/specifications", "zh/registry/api-reference/overview" ] - }, + } + ] + }, + { + "tab": "支持", + "pages": [ + "zh/support/contact-support", + "zh/support/data-retention", { - "group": "Comfy CLI", - "pages": [ - "zh/comfy-cli/getting-started", - "zh/comfy-cli/reference", - "zh/comfy-cli/troubleshooting" - ] - }, - { - "group": "规范", - "pages": [ - { - "group": "Workflow JSON", - "pages": [ - "zh/specs/workflow_json", - "zh/specs/workflow_json_0.4" - ] - }, - { - "group": "节点定义", - "pages": [ - "zh/specs/nodedef_json", - "zh/specs/nodedef_json_1_0" - ] - } - ] - } - ] - }, - { - "tab": "支持", - "pages": [ - "zh/support/contact-support", - "zh/support/data-retention", - { - "group": "账户管理", - "icon": "user", + "group": "账户管理", + "icon": "user", "pages": [ "zh/account/create-account", "zh/account/login", @@ -6249,7 +6241,6 @@ "pages": [ "ja/tutorials/video/wan/wan-video", "ja/tutorials/video/wan/wan-causal-forcing", - "ko/tutorials/video/wan/wan-causal-forcing", "ja/tutorials/video/wan/vace", "ja/tutorials/video/wan/wan-move", "ja/tutorials/video/wan/wan-alpha", @@ -6569,7 +6560,8 @@ ] } ] - } + }, + "ja/changelog/index" ] }, { @@ -6612,107 +6604,157 @@ ] }, { - "group": "API Node", + "group": "上級", "pages": [ { - "group": "Image", + "group": "Debug", "pages": [ - { - "group": "BFL", - "pages": [ - "ja/built-in-nodes/FluxProCannyNode", - "ja/built-in-nodes/FluxProDepthNode", - "ja/built-in-nodes/FluxProImageNode" - ] - }, - { - "group": "Bytedance", - "pages": [ - "ja/built-in-nodes/ByteDanceImageEditNode" - ] - } + "ja/built-in-nodes/EasyCache", + "ja/built-in-nodes/LazyCache", + "ja/built-in-nodes/ModelComputeDtype" ] }, { - "group": "Video", + "group": "Guidance", "pages": [ - { - "group": "Pika", - "pages": [ - "ja/built-in-nodes/Pikadditions", - "ja/built-in-nodes/Pikaffects", - "ja/built-in-nodes/PikaImageToVideoNode2_2", - "ja/built-in-nodes/PikaScenesV2_2", - "ja/built-in-nodes/PikaStartEndFrameNode2_2", - "ja/built-in-nodes/Pikaswaps", - "ja/built-in-nodes/PikaTextToVideoNode2_2" - ] - } + "ja/built-in-nodes/CFGNorm", + "ja/built-in-nodes/CFGZeroStar", + "ja/built-in-nodes/LTXVModalityGuidance", + "ja/built-in-nodes/LTXVSpatioTemporalGuidance", + "ja/built-in-nodes/NAGuidance", + "ja/built-in-nodes/SkipLayerGuidanceDiT", + "ja/built-in-nodes/SkipLayerGuidanceDiTSimple", + "ja/built-in-nodes/SkipLayerGuidanceSD3", + "ja/built-in-nodes/TCFG" ] }, { - "group": "ビデオ", + "group": "Hooks", "pages": [ { - "group": "Google", + "group": "Clip", "pages": [ - "ja/built-in-nodes/partner-node/video/google/google-veo2-video" + "ja/built-in-nodes/SetClipHooks" ] }, { - "group": "Kling", + "group": "Combine", "pages": [ - "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-control-i2v", - "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-control-t2v", - "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-controls", - "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-image-to-video", - "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-start-end-frame-to-video", - "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-text-to-video" + "ja/built-in-nodes/CombineHooks", + "ja/built-in-nodes/CombineHooksEight", + "ja/built-in-nodes/CombineHooksFour" ] }, { - "group": "Luma", + "group": "Cond Pair", "pages": [ - "ja/built-in-nodes/partner-node/video/luma/luma-concepts", - "ja/built-in-nodes/partner-node/video/luma/luma-image-to-video", - "ja/built-in-nodes/partner-node/video/luma/luma-text-to-video" + "ja/built-in-nodes/PairConditioningCombine", + "ja/built-in-nodes/PairConditioningSetDefaultAndCombine", + "ja/built-in-nodes/PairConditioningSetProperties", + "ja/built-in-nodes/PairConditioningSetPropertiesAndCombine" ] }, { - "group": "MiniMax", + "group": "Cond Single", "pages": [ - "ja/built-in-nodes/partner-node/video/minimax/minimax-image-to-video", - "ja/built-in-nodes/partner-node/video/minimax/minimax-text-to-video" + "ja/built-in-nodes/ConditioningSetDefaultAndCombine", + "ja/built-in-nodes/ConditioningSetProperties", + "ja/built-in-nodes/ConditioningSetPropertiesAndCombine" ] }, { - "group": "Pika", + "group": "Create", "pages": [ - "ja/built-in-nodes/partner-node/video/pika/pika-image-to-video", - "ja/built-in-nodes/partner-node/video/pika/pika-scenes", - "ja/built-in-nodes/partner-node/video/pika/pika-text-to-video" + "ja/built-in-nodes/CreateHookLora", + "ja/built-in-nodes/CreateHookLoraModelOnly", + "ja/built-in-nodes/CreateHookModelAsLora", + "ja/built-in-nodes/CreateHookModelAsLoraModelOnly" ] }, { - "group": "PixVerse", + "group": "Manual", "pages": [ - "ja/built-in-nodes/partner-node/video/pixverse/pixverse-image-to-video", - "ja/built-in-nodes/partner-node/video/pixverse/pixverse-template", - "ja/built-in-nodes/partner-node/video/pixverse/pixverse-text-to-video", - "ja/built-in-nodes/partner-node/video/pixverse/pixverse-transition-video" + "ja/built-in-nodes/SetModelHooksOnCond" ] - } + }, + { + "group": "Scheduling", + "pages": [ + "ja/built-in-nodes/CreateHookKeyframe", + "ja/built-in-nodes/CreateHookKeyframesFromFloats", + "ja/built-in-nodes/CreateHookKeyframesInterpolated", + "ja/built-in-nodes/SetHookKeyframes" + ] + }, + "ja/built-in-nodes/ConditioningTimestepsRange" ] }, { - "group": "画像", + "group": "Loaders", + "pages": [ + "ja/built-in-nodes/DeprecatedCheckpointLoader", + "ja/built-in-nodes/DeprecatedDiffusersLoader" + ] + }, + { + "group": "Model Merging", + "pages": [ + "ja/built-in-nodes/SaveLoRANode" + ] + }, + { + "group": "Multigpu", + "pages": [ + "ja/built-in-nodes/MultiGPU_Options", + "ja/built-in-nodes/MultiGPU_WorkUnits", + "ja/built-in-nodes/SelectCLIPDevice", + "ja/built-in-nodes/SelectModelDevice", + "ja/built-in-nodes/SelectVAEDevice" + ] + }, + "ja/built-in-nodes/IdeogramV1", + "ja/built-in-nodes/IdeogramV2", + "ja/built-in-nodes/KlingCameraControlI2VNode", + "ja/built-in-nodes/KlingCameraControls", + "ja/built-in-nodes/KlingCameraControlT2VNode", + "ja/built-in-nodes/KlingDualCharacterVideoEffectNode", + "ja/built-in-nodes/KlingSingleImageVideoEffectNode", + "ja/built-in-nodes/KlingVirtualTryOnNode", + "ja/built-in-nodes/MoonvalleyImg2VideoNode", + "ja/built-in-nodes/MoonvalleyTxt2VideoNode", + "ja/built-in-nodes/MoonvalleyVideo2VideoNode", + "ja/built-in-nodes/SeedVR2ProgressiveSampler", + "ja/built-in-nodes/StabilityAudioInpaint", + "ja/built-in-nodes/StabilityAudioToAudio", + "ja/built-in-nodes/StabilityStableImageSD_3_5Node", + "ja/built-in-nodes/StabilityStableImageUltraNode", + "ja/built-in-nodes/StabilityTextToAudio", + "ja/built-in-nodes/StabilityUpscaleConservativeNode", + "ja/built-in-nodes/StabilityUpscaleCreativeNode", + "ja/built-in-nodes/StabilityUpscaleFastNode" + ] + }, + { + "group": "API Node", + "pages": [ + { + "group": "Image", "pages": [ { "group": "BFL", "pages": [ + "ja/built-in-nodes/FluxProCannyNode", + "ja/built-in-nodes/FluxProDepthNode", + "ja/built-in-nodes/FluxProImageNode", "ja/built-in-nodes/partner-node/image/bfl/flux-1-1-pro-ultra-image" ] }, + { + "group": "Bytedance", + "pages": [ + "ja/built-in-nodes/ByteDanceImageEditNode" + ] + }, { "group": "Ideogram", "pages": [ @@ -6757,65 +6799,356 @@ ] } ] - } - ] - }, - { - "group": "Audio", - "pages": [ - "ja/built-in-nodes/AudioAdjustVolume", - "ja/built-in-nodes/AudioConcat", - "ja/built-in-nodes/AudioEqualizer3Band", - "ja/built-in-nodes/AudioMerge", - "ja/built-in-nodes/EmptyAudio", - "ja/built-in-nodes/JoinAudioChannels", - "ja/built-in-nodes/LoadAudio", - "ja/built-in-nodes/PreviewAudio", - "ja/built-in-nodes/RecordAudio", - "ja/built-in-nodes/SaveAudio", - "ja/built-in-nodes/SaveAudioAdvanced", - "ja/built-in-nodes/SaveAudioMP3", - "ja/built-in-nodes/SaveAudioOpus", - "ja/built-in-nodes/SplitAudioChannels", - "ja/built-in-nodes/TrimAudioDuration" - ] - }, - { - "group": "Experimental", - "pages": [ - { - "group": "Attention Experiments", - "pages": [ - "ja/built-in-nodes/CLIPAttentionMultiply", - "ja/built-in-nodes/UNetCrossAttentionMultiply", - "ja/built-in-nodes/UNetSelfAttentionMultiply", - "ja/built-in-nodes/UNetTemporalAttentionMultiply" - ] }, { - "group": "Stable Cascade", - "pages": [ - "ja/built-in-nodes/StableCascade_SuperResolutionControlnet" - ] - }, - "ja/built-in-nodes/DifferentialDiffusion", - "ja/built-in-nodes/FluxKVCache", - "ja/built-in-nodes/FreSca", - "ja/built-in-nodes/LatentBlend", - "ja/built-in-nodes/LoraSave", - "ja/built-in-nodes/Mahiro", - "ja/built-in-nodes/PerpNeg", - "ja/built-in-nodes/PerpNegGuider", - "ja/built-in-nodes/SamplerEulerCFGpp", - "ja/built-in-nodes/SelfAttentionGuidance", - "ja/built-in-nodes/TorchCompileModel" - ] - }, - { - "group": "Model", - "pages": [ - { - "group": "Conditioning", + "group": "Video", + "pages": [ + { + "group": "Google", + "pages": [ + "ja/built-in-nodes/partner-node/video/google/google-veo2-video" + ] + }, + { + "group": "Kling", + "pages": [ + "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-control-i2v", + "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-control-t2v", + "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-camera-controls", + "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-image-to-video", + "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-start-end-frame-to-video", + "ja/built-in-nodes/partner-node/video/kwai_vgi/kling-text-to-video" + ] + }, + { + "group": "Luma", + "pages": [ + "ja/built-in-nodes/partner-node/video/luma/luma-concepts", + "ja/built-in-nodes/partner-node/video/luma/luma-image-to-video", + "ja/built-in-nodes/partner-node/video/luma/luma-text-to-video" + ] + }, + { + "group": "MiniMax", + "pages": [ + "ja/built-in-nodes/partner-node/video/minimax/minimax-image-to-video", + "ja/built-in-nodes/partner-node/video/minimax/minimax-text-to-video" + ] + }, + { + "group": "Pika", + "pages": [ + "ja/built-in-nodes/partner-node/video/pika/pika-image-to-video", + "ja/built-in-nodes/partner-node/video/pika/pika-scenes", + "ja/built-in-nodes/partner-node/video/pika/pika-text-to-video", + "ja/built-in-nodes/Pikadditions", + "ja/built-in-nodes/Pikaffects", + "ja/built-in-nodes/PikaImageToVideoNode2_2", + "ja/built-in-nodes/PikaScenesV2_2", + "ja/built-in-nodes/PikaStartEndFrameNode2_2", + "ja/built-in-nodes/Pikaswaps", + "ja/built-in-nodes/PikaTextToVideoNode2_2" + ] + }, + { + "group": "PixVerse", + "pages": [ + "ja/built-in-nodes/partner-node/video/pixverse/pixverse-image-to-video", + "ja/built-in-nodes/partner-node/video/pixverse/pixverse-template", + "ja/built-in-nodes/partner-node/video/pixverse/pixverse-text-to-video", + "ja/built-in-nodes/partner-node/video/pixverse/pixverse-transition-video" + ] + } + ] + } + ] + }, + { + "group": "Audio", + "pages": [ + "ja/built-in-nodes/AudioAdjustVolume", + "ja/built-in-nodes/AudioConcat", + "ja/built-in-nodes/AudioEqualizer3Band", + "ja/built-in-nodes/AudioMerge", + "ja/built-in-nodes/EmptyAudio", + "ja/built-in-nodes/JoinAudioChannels", + "ja/built-in-nodes/LoadAudio", + "ja/built-in-nodes/PreviewAudio", + "ja/built-in-nodes/RecordAudio", + "ja/built-in-nodes/SaveAudio", + "ja/built-in-nodes/SaveAudioAdvanced", + "ja/built-in-nodes/SaveAudioMP3", + "ja/built-in-nodes/SaveAudioOpus", + "ja/built-in-nodes/SplitAudioChannels", + "ja/built-in-nodes/TrimAudioDuration" + ] + }, + { + "group": "条件付け", + "pages": [ + { + "group": "Video Models", + "pages": [ + "ja/built-in-nodes/conditioning/video-models/wan-vace-to-video", + "ja/built-in-nodes/LTXVDurationPredictor", + "ja/built-in-nodes/Stablezero123Conditioning", + "ja/built-in-nodes/Stablezero123ConditioningBatched", + "ja/built-in-nodes/SVD_img2vid_Conditioning", + "ja/built-in-nodes/SvdImg2vidConditioning" + ] + }, + "ja/built-in-nodes/ConditioningAverage", + "ja/built-in-nodes/Sd4xupscaleConditioning" + ] + }, + { + "group": "Experimental", + "pages": [ + { + "group": "Attention Experiments", + "pages": [ + "ja/built-in-nodes/CLIPAttentionMultiply", + "ja/built-in-nodes/UNetCrossAttentionMultiply", + "ja/built-in-nodes/UNetSelfAttentionMultiply", + "ja/built-in-nodes/UNetTemporalAttentionMultiply" + ] + }, + { + "group": "Stable Cascade", + "pages": [ + "ja/built-in-nodes/StableCascade_SuperResolutionControlnet" + ] + }, + "ja/built-in-nodes/DifferentialDiffusion", + "ja/built-in-nodes/FluxKVCache", + "ja/built-in-nodes/FreSca", + "ja/built-in-nodes/LatentBlend", + "ja/built-in-nodes/LoraSave", + "ja/built-in-nodes/Mahiro", + "ja/built-in-nodes/PerpNeg", + "ja/built-in-nodes/PerpNegGuider", + "ja/built-in-nodes/SamplerEulerCFGpp", + "ja/built-in-nodes/SelfAttentionGuidance", + "ja/built-in-nodes/TorchCompileModel" + ] + }, + { + "group": "画像", + "pages": [ + { + "group": "Adjustments", + "pages": [ + "ja/built-in-nodes/AdjustBrightness", + "ja/built-in-nodes/AdjustContrast" + ] + }, + { + "group": "Background Removal", + "pages": [ + "ja/built-in-nodes/RemoveBackground" + ] + }, + { + "group": "Batch", + "pages": [ + "ja/built-in-nodes/ImageDeduplication", + "ja/built-in-nodes/ImageFromBatch", + "ja/built-in-nodes/ImageGrid", + "ja/built-in-nodes/ImageMergeTileList", + "ja/built-in-nodes/MergeImageLists", + "ja/built-in-nodes/RebatchImages", + "ja/built-in-nodes/RepeatImageBatch", + "ja/built-in-nodes/ShuffleDataset", + "ja/built-in-nodes/ShuffleImageTextDataset", + "ja/built-in-nodes/SplitImageToTileList" + ] + }, + { + "group": "Color", + "pages": [ + "ja/built-in-nodes/ImageRGBToYUV", + "ja/built-in-nodes/ImageYUVToRGB", + "ja/built-in-nodes/NormalizeImages" + ] + }, + { + "group": "Compositing", + "pages": [ + "ja/built-in-nodes/ImageCompositeMasked", + "ja/built-in-nodes/JoinImageWithAlpha", + "ja/built-in-nodes/PorterDuffImageComposite", + "ja/built-in-nodes/SplitImageWithAlpha" + ] + }, + { + "group": "Detection", + "pages": [ + "ja/built-in-nodes/DrawBBoxes", + "ja/built-in-nodes/MediaPipeFaceLandmarker", + "ja/built-in-nodes/MediaPipeFaceMask", + "ja/built-in-nodes/MediaPipeFaceMeshVisualize", + "ja/built-in-nodes/RTDETR_detect", + "ja/built-in-nodes/SAM3_Detect", + "ja/built-in-nodes/SAM3_TrackPreview", + "ja/built-in-nodes/SAM3_TrackToMask", + "ja/built-in-nodes/SAM3_VideoTrack", + "ja/built-in-nodes/SDPoseDrawKeypoints", + "ja/built-in-nodes/SDPoseFaceBBoxes", + "ja/built-in-nodes/SDPoseKeypointExtractor" + ] + }, + { + "group": "Filters", + "pages": [ + "ja/built-in-nodes/Canny", + "ja/built-in-nodes/ColorTransfer", + "ja/built-in-nodes/ImageAddNoise", + "ja/built-in-nodes/ImageBlend", + "ja/built-in-nodes/ImageBlur", + "ja/built-in-nodes/ImageQuantize", + "ja/built-in-nodes/ImageSharpen", + "ja/built-in-nodes/Morphology" + ] + }, + { + "group": "Geometry Estimation", + "pages": [ + "ja/built-in-nodes/DA3GeometryToMesh", + "ja/built-in-nodes/DA3GeometryToPointCloud", + "ja/built-in-nodes/DA3Inference", + "ja/built-in-nodes/DA3Render", + "ja/built-in-nodes/MoGeInference", + "ja/built-in-nodes/MoGePanoramaInference", + "ja/built-in-nodes/MoGePointMapToMesh", + "ja/built-in-nodes/MoGeRender" + ] + }, + { + "group": "Mask", + "pages": [ + "ja/built-in-nodes/BatchMasksNode", + "ja/built-in-nodes/CropMask", + "ja/built-in-nodes/FeatherMask", + "ja/built-in-nodes/GrowMask", + "ja/built-in-nodes/ImageColorToMask", + "ja/built-in-nodes/ImageToMask", + "ja/built-in-nodes/InvertMask", + "ja/built-in-nodes/MaskComposite", + "ja/built-in-nodes/MaskPreview", + "ja/built-in-nodes/MaskToImage", + "ja/built-in-nodes/SolidMask", + "ja/built-in-nodes/ThresholdMask", + "ja/built-in-nodes/VOIDQuadmaskPreprocess" + ] + }, + { + "group": "Post Processors", + "pages": [ + "ja/built-in-nodes/SeedVR2PostProcessing" + ] + }, + { + "group": "Pre Processors", + "pages": [ + "ja/built-in-nodes/SeedVR2Preprocess" + ] + }, + { + "group": "Shader", + "pages": [ + "ja/built-in-nodes/GLSLShader" + ] + }, + { + "group": "Transform", + "pages": [ + "ja/built-in-nodes/CenterCropImages", + "ja/built-in-nodes/CropByBBoxes", + "ja/built-in-nodes/ImageCrop", + "ja/built-in-nodes/ImageCropV2", + "ja/built-in-nodes/ImageFlip", + "ja/built-in-nodes/ImagePadForOutpaint", + "ja/built-in-nodes/ImageRotate", + "ja/built-in-nodes/ImageStitch", + "ja/built-in-nodes/RandomCropImages", + "ja/built-in-nodes/ResizeAndPadImage", + "ja/built-in-nodes/ResizeImagesByLongerEdge", + "ja/built-in-nodes/ResizeImagesByShorterEdge" + ] + }, + { + "group": "Upscaling", + "pages": [ + "ja/built-in-nodes/ImageScale", + "ja/built-in-nodes/ImageScaleBy", + "ja/built-in-nodes/ImageScaleToMaxDimension", + "ja/built-in-nodes/ImageScaleToTotalPixels", + "ja/built-in-nodes/ImageUpscaleWithModel" + ] + }, + { + "group": "Video", + "pages": [ + "ja/built-in-nodes/ShuffleVideoTextDataset", + "ja/built-in-nodes/WanDancerPadKeyframes", + "ja/built-in-nodes/WanDancerPadKeyframesList" + ] + }, + "ja/built-in-nodes/AddLayer", + "ja/built-in-nodes/BatchImagesNode", + "ja/built-in-nodes/ConditioningCombine", + "ja/built-in-nodes/EmptyImage", + "ja/built-in-nodes/GetImageSize", + "ja/built-in-nodes/ImageBatch", + "ja/built-in-nodes/ImageCompare", + "ja/built-in-nodes/ImageCompositor", + "ja/built-in-nodes/ImageInvert", + "ja/built-in-nodes/LayersFromBoundingBoxes", + "ja/built-in-nodes/LoadImage", + "ja/built-in-nodes/LoadImageDataSetFromFolder", + "ja/built-in-nodes/LoadImageMask", + "ja/built-in-nodes/LoadImageOutput", + "ja/built-in-nodes/LoadImageSetFromFolderNode", + "ja/built-in-nodes/LoadImageSetNode", + "ja/built-in-nodes/LoadImageTextDataSetFromFolder", + "ja/built-in-nodes/LoadImageTextSetFromFolderNode", + "ja/built-in-nodes/LoraLoader", + "ja/built-in-nodes/LoraLoaderModelOnly", + "ja/built-in-nodes/Painter", + "ja/built-in-nodes/PreviewImage", + "ja/built-in-nodes/ResizeImageMaskNode", + "ja/built-in-nodes/SaveAnimatedPNG", + "ja/built-in-nodes/SaveAnimatedWEBP", + "ja/built-in-nodes/SaveImage", + "ja/built-in-nodes/SaveImageAdvanced", + "ja/built-in-nodes/SaveImageDataSetToFolder", + "ja/built-in-nodes/SaveImageTextDataSetToFolder", + "ja/built-in-nodes/SaveSVGNode", + "ja/built-in-nodes/WebcamCapture" + ] + }, + { + "group": "潜在変数", + "pages": [ + { + "group": "Video", + "pages": [ + "ja/built-in-nodes/latent/video/trim-video-latent" + ] + } + ] + }, + { + "group": "ローダー", + "pages": [ + "ja/built-in-nodes/ControlNetLoader" + ] + }, + { + "group": "Model", + "pages": [ + { + "group": "Conditioning", "pages": [ { "group": "Ace", @@ -7632,6 +7965,17 @@ } ] }, + { + "group": "モデルパッチ", + "pages": [ + { + "group": "Anima", + "pages": [ + "ja/built-in-nodes/AnimaLLLiteApply" + ] + } + ] + }, { "group": "Partner", "pages": [ @@ -7873,821 +8217,449 @@ "ja/built-in-nodes/RecraftStyleV3DigitalIllustration", "ja/built-in-nodes/RecraftStyleV3InfiniteStyleLibrary", "ja/built-in-nodes/RecraftStyleV3LogoRaster", - "ja/built-in-nodes/RecraftStyleV3RealisticImage", - "ja/built-in-nodes/RecraftStyleV3VectorIllustrationNode", - "ja/built-in-nodes/RecraftTextToImageNode", - "ja/built-in-nodes/RecraftTextToVectorNode", - "ja/built-in-nodes/RecraftV4TextToImageNode", - "ja/built-in-nodes/RecraftV4TextToVectorNode", - "ja/built-in-nodes/RecraftVectorizeImageNode" - ] - }, - { - "group": "Reve", - "pages": [ - "ja/built-in-nodes/ReveImageCreateNode", - "ja/built-in-nodes/ReveImageEditNode", - "ja/built-in-nodes/ReveImageRemixNode" - ] - }, - { - "group": "Runway", - "pages": [ - "ja/built-in-nodes/RunwayTextToImageNode" - ] - }, - { - "group": "Topaz", - "pages": [ - "ja/built-in-nodes/TopazImageEnhance", - "ja/built-in-nodes/TopazImageEnhanceV2" - ] - }, - { - "group": "Wan", - "pages": [ - "ja/built-in-nodes/WanImageToImageApi", - "ja/built-in-nodes/WanTextToImageApi" - ] - }, - { - "group": "Wavespeed", - "pages": [ - "ja/built-in-nodes/WavespeedImageUpscaleNode" - ] - } - ] - }, - { - "group": "Text", - "pages": [ - { - "group": "Anthropic", - "pages": [ - "ja/built-in-nodes/ClaudeNode" - ] - }, - { - "group": "Bytedance", - "pages": [ - "ja/built-in-nodes/ByteDanceSeedNode" - ] - }, - { - "group": "Gemini", - "pages": [ - "ja/built-in-nodes/GeminiInputFiles", - "ja/built-in-nodes/GeminiNode", - "ja/built-in-nodes/GeminiNodeV2" - ] - }, - { - "group": "Openai", - "pages": [ - "ja/built-in-nodes/OpenAIChatConfig", - "ja/built-in-nodes/OpenAIChatNode", - "ja/built-in-nodes/OpenAIInputFiles" - ] - }, - { - "group": "Openrouter", - "pages": [ - "ja/built-in-nodes/OpenRouterLLMNode" - ] - } - ] - }, - { - "group": "Video", - "pages": [ - { - "group": "Beeble", - "pages": [ - "ja/built-in-nodes/BeebleSwitchXVideoEdit" - ] - }, - { - "group": "BFL", - "pages": [ - "ja/built-in-nodes/Flux3ImageToVideoNode", - "ja/built-in-nodes/Flux3TextToVideoNode", - "ja/built-in-nodes/Flux3VideoContinuationNode" - ] - }, - { - "group": "Bria", - "pages": [ - "ja/built-in-nodes/BriaRemoveVideoBackground", - "ja/built-in-nodes/BriaTransparentVideoBackground", - "ja/built-in-nodes/BriaVideoGreenScreen", - "ja/built-in-nodes/BriaVideoReplaceBackground" - ] - }, - { - "group": "Bytedance", - "pages": [ - "ja/built-in-nodes/ByteDance2FirstLastFrameNode", - "ja/built-in-nodes/ByteDance2ReferenceNode", - "ja/built-in-nodes/ByteDance2TextToVideoNode", - "ja/built-in-nodes/ByteDanceCreateVideoAsset", - "ja/built-in-nodes/ByteDanceFirstLastFrameNode", - "ja/built-in-nodes/ByteDanceImageReferenceNode", - "ja/built-in-nodes/ByteDanceImageToVideoNode", - "ja/built-in-nodes/ByteDanceTextToVideoNode" - ] - }, - { - "group": "Gemini", - "pages": [ - "ja/built-in-nodes/GeminiVideoOmni" - ] - }, - { - "group": "Grok", - "pages": [ - "ja/built-in-nodes/GrokVideoEditNode", - "ja/built-in-nodes/GrokVideoExtendNode", - "ja/built-in-nodes/GrokVideoNode", - "ja/built-in-nodes/GrokVideoReferenceNode" - ] - }, - { - "group": "Heygen", - "pages": [ - "ja/built-in-nodes/HeyGenAvatarVideoNode", - "ja/built-in-nodes/HeyGenCreateAvatarNode", - "ja/built-in-nodes/HeyGenTalkingPhotoNode", - "ja/built-in-nodes/HeyGenVideoTranslateNode" - ] - }, - { - "group": "Hitpaw", - "pages": [ - "ja/built-in-nodes/HitPawVideoEnhance" - ] - }, - { - "group": "Kling", - "pages": [ - "ja/built-in-nodes/KlingAvatarNode", - "ja/built-in-nodes/KlingFirstLastFrameNode", - "ja/built-in-nodes/KlingImage2VideoNode", - "ja/built-in-nodes/KlingImageToVideoWithAudio", - "ja/built-in-nodes/KlingLipSyncAudioToVideoNode", - "ja/built-in-nodes/KlingLipSyncTextToVideoNode", - "ja/built-in-nodes/KlingMotionControl", - "ja/built-in-nodes/KlingOmniProEditVideoNode", - "ja/built-in-nodes/KlingOmniProFirstLastFrameNode", - "ja/built-in-nodes/KlingOmniProImageToVideoNode", - "ja/built-in-nodes/KlingOmniProTextToVideoNode", - "ja/built-in-nodes/KlingOmniProVideoToVideoNode", - "ja/built-in-nodes/KlingStartEndFrameNode", - "ja/built-in-nodes/KlingTextToVideoNode", - "ja/built-in-nodes/KlingTextToVideoWithAudio", - "ja/built-in-nodes/KlingVideoExtendNode", - "ja/built-in-nodes/KlingVideoNode" - ] - }, - { - "group": "LTXV", - "pages": [ - "ja/built-in-nodes/LtxApi25AudioToVideo", - "ja/built-in-nodes/LtxApi25ImageToVideo", - "ja/built-in-nodes/LtxApi25TextToVideo", - "ja/built-in-nodes/LtxvApiImageToVideo", - "ja/built-in-nodes/LtxvApiTextToVideo" - ] - }, - { - "group": "Luma", - "pages": [ - "ja/built-in-nodes/LumaConceptsNode", - "ja/built-in-nodes/LumaImageToVideoNode", - "ja/built-in-nodes/LumaRay32ExtendVideoNode", - "ja/built-in-nodes/LumaRay32ImageToVideoNode", - "ja/built-in-nodes/LumaRay32KeyframeNode", - "ja/built-in-nodes/LumaRay32KeyframesToVideoNode", - "ja/built-in-nodes/LumaRay32TextToVideoNode", - "ja/built-in-nodes/LumaRay32VideoEditNode", - "ja/built-in-nodes/LumaRay32VideoReframeNode", - "ja/built-in-nodes/LumaVideoNode" - ] - }, - { - "group": "Minimax", - "pages": [ - "ja/built-in-nodes/MinimaxHailuo03ContextIRNode", - "ja/built-in-nodes/MinimaxHailuo03FirstLastFrameNode", - "ja/built-in-nodes/MinimaxHailuo03ReferenceNode", - "ja/built-in-nodes/MinimaxHailuo03RegenerateNode", - "ja/built-in-nodes/MinimaxHailuo03TextToVideoNode", - "ja/built-in-nodes/MinimaxHailuoVideoNode", - "ja/built-in-nodes/MinimaxImageToVideoNode", - "ja/built-in-nodes/MinimaxSubjectToVideoNode", - "ja/built-in-nodes/MinimaxTextToVideoNode" - ] - }, - { - "group": "Pixverse", - "pages": [ - "ja/built-in-nodes/PixverseImageToVideoNode", - "ja/built-in-nodes/PixverseTemplateNode", - "ja/built-in-nodes/PixverseTextToVideoNode", - "ja/built-in-nodes/PixverseTransitionVideoNode" - ] - }, - { - "group": "Runway", - "pages": [ - "ja/built-in-nodes/RunwayAleph2KeyframeNode", - "ja/built-in-nodes/RunwayAleph2PromptImageNode", - "ja/built-in-nodes/RunwayAleph2VideoToVideoNode", - "ja/built-in-nodes/RunwayFirstLastFrameNode", - "ja/built-in-nodes/RunwayImageToVideoNodeGen3a", - "ja/built-in-nodes/RunwayImageToVideoNodeGen4" - ] - }, - { - "group": "Sora", - "pages": [ - "ja/built-in-nodes/OpenAIVideoSora2" - ] - }, - { - "group": "Sync.so", - "pages": [ - "ja/built-in-nodes/SyncLipSyncNode", - "ja/built-in-nodes/SyncTalkingImageNode" + "ja/built-in-nodes/RecraftStyleV3RealisticImage", + "ja/built-in-nodes/RecraftStyleV3VectorIllustrationNode", + "ja/built-in-nodes/RecraftTextToImageNode", + "ja/built-in-nodes/RecraftTextToVectorNode", + "ja/built-in-nodes/RecraftV4TextToImageNode", + "ja/built-in-nodes/RecraftV4TextToVectorNode", + "ja/built-in-nodes/RecraftVectorizeImageNode" ] }, { - "group": "Topaz", + "group": "Reve", "pages": [ - "ja/built-in-nodes/TopazVideoEnhance", - "ja/built-in-nodes/TopazVideoEnhanceV2" + "ja/built-in-nodes/ReveImageCreateNode", + "ja/built-in-nodes/ReveImageEditNode", + "ja/built-in-nodes/ReveImageRemixNode" ] }, { - "group": "Veo", + "group": "Runway", "pages": [ - "ja/built-in-nodes/Veo3FirstLastFrameNode", - "ja/built-in-nodes/Veo3VideoGenerationNode", - "ja/built-in-nodes/VeoVideoGenerationNode" + "ja/built-in-nodes/RunwayTextToImageNode" ] }, { - "group": "Vidu", + "group": "Topaz", "pages": [ - "ja/built-in-nodes/Vidu2ImageToVideoNode", - "ja/built-in-nodes/Vidu2ReferenceVideoNode", - "ja/built-in-nodes/Vidu2StartEndToVideoNode", - "ja/built-in-nodes/Vidu2TextToVideoNode", - "ja/built-in-nodes/Vidu3ImageToVideoNode", - "ja/built-in-nodes/Vidu3StartEndToVideoNode", - "ja/built-in-nodes/Vidu3TextToVideoNode", - "ja/built-in-nodes/ViduExtendVideoNode", - "ja/built-in-nodes/ViduImageToVideoNode", - "ja/built-in-nodes/ViduMultiFrameVideoNode", - "ja/built-in-nodes/ViduReferenceVideoNode", - "ja/built-in-nodes/ViduStartEndToVideoNode", - "ja/built-in-nodes/ViduTextToVideoNode" + "ja/built-in-nodes/TopazImageEnhance", + "ja/built-in-nodes/TopazImageEnhanceV2" ] }, { "group": "Wan", "pages": [ - "ja/built-in-nodes/HappyHorseImageToVideoApi", - "ja/built-in-nodes/HappyHorseReferenceVideoApi", - "ja/built-in-nodes/HappyHorseTextToVideoApi", - "ja/built-in-nodes/HappyHorseVideoEditApi", - "ja/built-in-nodes/Wan2ImageToVideoApi", - "ja/built-in-nodes/Wan2ReferenceVideoApi", - "ja/built-in-nodes/Wan2TextToVideoApi", - "ja/built-in-nodes/Wan2VideoContinuationApi", - "ja/built-in-nodes/Wan2VideoEditApi", - "ja/built-in-nodes/WanImageToVideoApi", - "ja/built-in-nodes/WanReferenceVideoApi", - "ja/built-in-nodes/WanTextToVideoApi" + "ja/built-in-nodes/WanImageToImageApi", + "ja/built-in-nodes/WanTextToImageApi" ] }, { "group": "Wavespeed", "pages": [ - "ja/built-in-nodes/WavespeedFlashVSRNode" + "ja/built-in-nodes/WavespeedImageUpscaleNode" ] } ] - } - ] - }, - { - "group": "Text", - "pages": [ - "ja/built-in-nodes/AddTextPrefix", - "ja/built-in-nodes/AddTextSuffix", - "ja/built-in-nodes/BuildJsonPromptIdeogram", - "ja/built-in-nodes/CaseConverter", - "ja/built-in-nodes/ConvertArrayToString", - "ja/built-in-nodes/ConvertDictionaryToString", - "ja/built-in-nodes/JsonExtractString", - "ja/built-in-nodes/MergeTextLists", - "ja/built-in-nodes/RegexExtract", - "ja/built-in-nodes/RegexMatch", - "ja/built-in-nodes/RegexReplace", - "ja/built-in-nodes/ReplaceText", - "ja/built-in-nodes/SaveText", - "ja/built-in-nodes/StringCompare", - "ja/built-in-nodes/StringConcatenate", - "ja/built-in-nodes/StringContains", - "ja/built-in-nodes/StringFormat", - "ja/built-in-nodes/StringLength", - "ja/built-in-nodes/StringReplace", - "ja/built-in-nodes/StringSubstring", - "ja/built-in-nodes/StringTrim", - "ja/built-in-nodes/StripWhitespace", - "ja/built-in-nodes/TextGenerate", - "ja/built-in-nodes/TextGenerateLTX2Prompt", - "ja/built-in-nodes/TextOverlay", - "ja/built-in-nodes/TextToLowercase", - "ja/built-in-nodes/TextToUppercase", - "ja/built-in-nodes/TruncateText" - ] - }, - { - "group": "Utilities", - "pages": [ - { - "group": "Logic", - "pages": [ - "ja/built-in-nodes/AutogrowNamesTestNode", - "ja/built-in-nodes/AutogrowPrefixTestNode", - "ja/built-in-nodes/ComboOptionTestNode", - "ja/built-in-nodes/ComfyAndNode", - "ja/built-in-nodes/ComfyNotNode", - "ja/built-in-nodes/ComfyOrNode", - "ja/built-in-nodes/ComfySoftSwitchNode", - "ja/built-in-nodes/ComfySwitchNode", - "ja/built-in-nodes/ConvertStringToComboNode", - "ja/built-in-nodes/DCTestNode", - "ja/built-in-nodes/InvertBooleanNode" - ] - }, - { - "group": "Primitive", - "pages": [ - "ja/built-in-nodes/PrimitiveBoolean", - "ja/built-in-nodes/PrimitiveBoundingBox", - "ja/built-in-nodes/PrimitiveFloat", - "ja/built-in-nodes/PrimitiveInt", - "ja/built-in-nodes/PrimitiveString", - "ja/built-in-nodes/PrimitiveStringMultiline" - ] - }, - "ja/built-in-nodes/ColorToRGBInt", - "ja/built-in-nodes/ComfyMathExpression", - "ja/built-in-nodes/ComfyNumberConvert", - "ja/built-in-nodes/CreateBoundingBoxes", - "ja/built-in-nodes/CreateList", - "ja/built-in-nodes/CurveEditor", - "ja/built-in-nodes/CustomCombo", - "ja/built-in-nodes/ImageHistogram", - "ja/built-in-nodes/PreviewAny", - "ja/built-in-nodes/ResolutionSelector", - "ja/built-in-nodes/SeedNode" - ] - }, - { - "group": "Video", - "pages": [ - { - "group": "Batch", - "pages": [ - "ja/built-in-nodes/ShuffleVideoDataset" - ] - }, - { - "group": "Preprocessors", - "pages": [ - "ja/built-in-nodes/LTXVPreprocess" - ] - }, - { - "group": "Transform", - "pages": [ - "ja/built-in-nodes/VideoRandomTemporalCrop", - "ja/built-in-nodes/VideoTemporalCrop" - ] }, - "ja/built-in-nodes/CreateVideo", - "ja/built-in-nodes/FrameInterpolate", - "ja/built-in-nodes/GetVideoComponents", - "ja/built-in-nodes/LoadVideo", - "ja/built-in-nodes/LoadVideoDataSetFromFolder", - "ja/built-in-nodes/LoadVideoTextDataSetFromFolder", - "ja/built-in-nodes/SaveVideo", - "ja/built-in-nodes/SaveWEBM", - "ja/built-in-nodes/Video Slice", - "ja/built-in-nodes/VideoFrameSample" - ] - }, - { - "group": "サンプリング", - "pages": [ { - "group": "Custom Sampling", + "group": "Text", "pages": [ { - "group": "Samplers", + "group": "Anthropic", "pages": [ - "ja/built-in-nodes/SamplerDpmpp2mSde", - "ja/built-in-nodes/SamplerDpmppSde" + "ja/built-in-nodes/ClaudeNode" ] - } - ] - } - ] - }, - { - "group": "モデルパッチ", - "pages": [ - { - "group": "Anima", - "pages": [ - "ja/built-in-nodes/AnimaLLLiteApply" - ] - } - ] - }, - { - "group": "ユーティリティ", - "pages": [ - "ja/built-in-nodes/BatchImagesMasksLatentsNode", - "ja/built-in-nodes/MarkdownNote", - "ja/built-in-nodes/Note", - "ja/built-in-nodes/Reroute", - "ja/built-in-nodes/TerminalLog", - "ja/built-in-nodes/wanBlockSwap" - ] - }, - { - "group": "ローダー", - "pages": [ - "ja/built-in-nodes/ControlNetLoader" - ] - }, - { - "group": "上級", - "pages": [ - { - "group": "Debug", - "pages": [ - "ja/built-in-nodes/EasyCache", - "ja/built-in-nodes/LazyCache", - "ja/built-in-nodes/ModelComputeDtype" - ] - }, - { - "group": "Guidance", - "pages": [ - "ja/built-in-nodes/CFGNorm", - "ja/built-in-nodes/CFGZeroStar", - "ja/built-in-nodes/LTXVModalityGuidance", - "ja/built-in-nodes/LTXVSpatioTemporalGuidance", - "ja/built-in-nodes/NAGuidance", - "ja/built-in-nodes/SkipLayerGuidanceDiT", - "ja/built-in-nodes/SkipLayerGuidanceDiTSimple", - "ja/built-in-nodes/SkipLayerGuidanceSD3", - "ja/built-in-nodes/TCFG" + }, + { + "group": "Bytedance", + "pages": [ + "ja/built-in-nodes/ByteDanceSeedNode" + ] + }, + { + "group": "Gemini", + "pages": [ + "ja/built-in-nodes/GeminiInputFiles", + "ja/built-in-nodes/GeminiNode", + "ja/built-in-nodes/GeminiNodeV2" + ] + }, + { + "group": "Openai", + "pages": [ + "ja/built-in-nodes/OpenAIChatConfig", + "ja/built-in-nodes/OpenAIChatNode", + "ja/built-in-nodes/OpenAIInputFiles" + ] + }, + { + "group": "Openrouter", + "pages": [ + "ja/built-in-nodes/OpenRouterLLMNode" + ] + } ] }, { - "group": "Hooks", + "group": "Video", "pages": [ { - "group": "Clip", + "group": "Beeble", "pages": [ - "ja/built-in-nodes/SetClipHooks" + "ja/built-in-nodes/BeebleSwitchXVideoEdit" ] }, { - "group": "Combine", + "group": "BFL", "pages": [ - "ja/built-in-nodes/CombineHooks", - "ja/built-in-nodes/CombineHooksEight", - "ja/built-in-nodes/CombineHooksFour" + "ja/built-in-nodes/Flux3ImageToVideoNode", + "ja/built-in-nodes/Flux3TextToVideoNode", + "ja/built-in-nodes/Flux3VideoContinuationNode" ] }, { - "group": "Cond Pair", + "group": "Bria", "pages": [ - "ja/built-in-nodes/PairConditioningCombine", - "ja/built-in-nodes/PairConditioningSetDefaultAndCombine", - "ja/built-in-nodes/PairConditioningSetProperties", - "ja/built-in-nodes/PairConditioningSetPropertiesAndCombine" + "ja/built-in-nodes/BriaRemoveVideoBackground", + "ja/built-in-nodes/BriaTransparentVideoBackground", + "ja/built-in-nodes/BriaVideoGreenScreen", + "ja/built-in-nodes/BriaVideoReplaceBackground" ] }, { - "group": "Cond Single", + "group": "Bytedance", "pages": [ - "ja/built-in-nodes/ConditioningSetDefaultAndCombine", - "ja/built-in-nodes/ConditioningSetProperties", - "ja/built-in-nodes/ConditioningSetPropertiesAndCombine" + "ja/built-in-nodes/ByteDance2FirstLastFrameNode", + "ja/built-in-nodes/ByteDance2ReferenceNode", + "ja/built-in-nodes/ByteDance2TextToVideoNode", + "ja/built-in-nodes/ByteDanceCreateVideoAsset", + "ja/built-in-nodes/ByteDanceFirstLastFrameNode", + "ja/built-in-nodes/ByteDanceImageReferenceNode", + "ja/built-in-nodes/ByteDanceImageToVideoNode", + "ja/built-in-nodes/ByteDanceTextToVideoNode" ] }, { - "group": "Create", + "group": "Gemini", "pages": [ - "ja/built-in-nodes/CreateHookLora", - "ja/built-in-nodes/CreateHookLoraModelOnly", - "ja/built-in-nodes/CreateHookModelAsLora", - "ja/built-in-nodes/CreateHookModelAsLoraModelOnly" + "ja/built-in-nodes/GeminiVideoOmni" ] }, { - "group": "Manual", + "group": "Grok", "pages": [ - "ja/built-in-nodes/SetModelHooksOnCond" + "ja/built-in-nodes/GrokVideoEditNode", + "ja/built-in-nodes/GrokVideoExtendNode", + "ja/built-in-nodes/GrokVideoNode", + "ja/built-in-nodes/GrokVideoReferenceNode" ] }, { - "group": "Scheduling", + "group": "Heygen", "pages": [ - "ja/built-in-nodes/CreateHookKeyframe", - "ja/built-in-nodes/CreateHookKeyframesFromFloats", - "ja/built-in-nodes/CreateHookKeyframesInterpolated", - "ja/built-in-nodes/SetHookKeyframes" + "ja/built-in-nodes/HeyGenAvatarVideoNode", + "ja/built-in-nodes/HeyGenCreateAvatarNode", + "ja/built-in-nodes/HeyGenTalkingPhotoNode", + "ja/built-in-nodes/HeyGenVideoTranslateNode" ] }, - "ja/built-in-nodes/ConditioningTimestepsRange" - ] - }, - { - "group": "Loaders", - "pages": [ - "ja/built-in-nodes/DeprecatedCheckpointLoader", - "ja/built-in-nodes/DeprecatedDiffusersLoader" - ] - }, - { - "group": "Model Merging", - "pages": [ - "ja/built-in-nodes/SaveLoRANode" - ] - }, - { - "group": "Multigpu", - "pages": [ - "ja/built-in-nodes/MultiGPU_Options", - "ja/built-in-nodes/MultiGPU_WorkUnits", - "ja/built-in-nodes/SelectCLIPDevice", - "ja/built-in-nodes/SelectModelDevice", - "ja/built-in-nodes/SelectVAEDevice" - ] - }, - "ja/built-in-nodes/IdeogramV1", - "ja/built-in-nodes/IdeogramV2", - "ja/built-in-nodes/KlingCameraControlI2VNode", - "ja/built-in-nodes/KlingCameraControls", - "ja/built-in-nodes/KlingCameraControlT2VNode", - "ja/built-in-nodes/KlingDualCharacterVideoEffectNode", - "ja/built-in-nodes/KlingSingleImageVideoEffectNode", - "ja/built-in-nodes/KlingVirtualTryOnNode", - "ja/built-in-nodes/MoonvalleyImg2VideoNode", - "ja/built-in-nodes/MoonvalleyTxt2VideoNode", - "ja/built-in-nodes/MoonvalleyVideo2VideoNode", - "ja/built-in-nodes/SeedVR2ProgressiveSampler", - "ja/built-in-nodes/StabilityAudioInpaint", - "ja/built-in-nodes/StabilityAudioToAudio", - "ja/built-in-nodes/StabilityStableImageSD_3_5Node", - "ja/built-in-nodes/StabilityStableImageUltraNode", - "ja/built-in-nodes/StabilityTextToAudio", - "ja/built-in-nodes/StabilityUpscaleConservativeNode", - "ja/built-in-nodes/StabilityUpscaleCreativeNode", - "ja/built-in-nodes/StabilityUpscaleFastNode" + { + "group": "Hitpaw", + "pages": [ + "ja/built-in-nodes/HitPawVideoEnhance" + ] + }, + { + "group": "Kling", + "pages": [ + "ja/built-in-nodes/KlingAvatarNode", + "ja/built-in-nodes/KlingFirstLastFrameNode", + "ja/built-in-nodes/KlingImage2VideoNode", + "ja/built-in-nodes/KlingImageToVideoWithAudio", + "ja/built-in-nodes/KlingLipSyncAudioToVideoNode", + "ja/built-in-nodes/KlingLipSyncTextToVideoNode", + "ja/built-in-nodes/KlingMotionControl", + "ja/built-in-nodes/KlingOmniProEditVideoNode", + "ja/built-in-nodes/KlingOmniProFirstLastFrameNode", + "ja/built-in-nodes/KlingOmniProImageToVideoNode", + "ja/built-in-nodes/KlingOmniProTextToVideoNode", + "ja/built-in-nodes/KlingOmniProVideoToVideoNode", + "ja/built-in-nodes/KlingStartEndFrameNode", + "ja/built-in-nodes/KlingTextToVideoNode", + "ja/built-in-nodes/KlingTextToVideoWithAudio", + "ja/built-in-nodes/KlingVideoExtendNode", + "ja/built-in-nodes/KlingVideoNode" + ] + }, + { + "group": "LTXV", + "pages": [ + "ja/built-in-nodes/LtxApi25AudioToVideo", + "ja/built-in-nodes/LtxApi25ImageToVideo", + "ja/built-in-nodes/LtxApi25TextToVideo", + "ja/built-in-nodes/LtxvApiImageToVideo", + "ja/built-in-nodes/LtxvApiTextToVideo" + ] + }, + { + "group": "Luma", + "pages": [ + "ja/built-in-nodes/LumaConceptsNode", + "ja/built-in-nodes/LumaImageToVideoNode", + "ja/built-in-nodes/LumaRay32ExtendVideoNode", + "ja/built-in-nodes/LumaRay32ImageToVideoNode", + "ja/built-in-nodes/LumaRay32KeyframeNode", + "ja/built-in-nodes/LumaRay32KeyframesToVideoNode", + "ja/built-in-nodes/LumaRay32TextToVideoNode", + "ja/built-in-nodes/LumaRay32VideoEditNode", + "ja/built-in-nodes/LumaRay32VideoReframeNode", + "ja/built-in-nodes/LumaVideoNode" + ] + }, + { + "group": "Minimax", + "pages": [ + "ja/built-in-nodes/MinimaxHailuo03ContextIRNode", + "ja/built-in-nodes/MinimaxHailuo03FirstLastFrameNode", + "ja/built-in-nodes/MinimaxHailuo03ReferenceNode", + "ja/built-in-nodes/MinimaxHailuo03RegenerateNode", + "ja/built-in-nodes/MinimaxHailuo03TextToVideoNode", + "ja/built-in-nodes/MinimaxHailuoVideoNode", + "ja/built-in-nodes/MinimaxImageToVideoNode", + "ja/built-in-nodes/MinimaxSubjectToVideoNode", + "ja/built-in-nodes/MinimaxTextToVideoNode" + ] + }, + { + "group": "Pixverse", + "pages": [ + "ja/built-in-nodes/PixverseImageToVideoNode", + "ja/built-in-nodes/PixverseTemplateNode", + "ja/built-in-nodes/PixverseTextToVideoNode", + "ja/built-in-nodes/PixverseTransitionVideoNode" + ] + }, + { + "group": "Runway", + "pages": [ + "ja/built-in-nodes/RunwayAleph2KeyframeNode", + "ja/built-in-nodes/RunwayAleph2PromptImageNode", + "ja/built-in-nodes/RunwayAleph2VideoToVideoNode", + "ja/built-in-nodes/RunwayFirstLastFrameNode", + "ja/built-in-nodes/RunwayImageToVideoNodeGen3a", + "ja/built-in-nodes/RunwayImageToVideoNodeGen4" + ] + }, + { + "group": "Sora", + "pages": [ + "ja/built-in-nodes/OpenAIVideoSora2" + ] + }, + { + "group": "Sync.so", + "pages": [ + "ja/built-in-nodes/SyncLipSyncNode", + "ja/built-in-nodes/SyncTalkingImageNode" + ] + }, + { + "group": "Topaz", + "pages": [ + "ja/built-in-nodes/TopazVideoEnhance", + "ja/built-in-nodes/TopazVideoEnhanceV2" + ] + }, + { + "group": "Veo", + "pages": [ + "ja/built-in-nodes/Veo3FirstLastFrameNode", + "ja/built-in-nodes/Veo3VideoGenerationNode", + "ja/built-in-nodes/VeoVideoGenerationNode" + ] + }, + { + "group": "Vidu", + "pages": [ + "ja/built-in-nodes/Vidu2ImageToVideoNode", + "ja/built-in-nodes/Vidu2ReferenceVideoNode", + "ja/built-in-nodes/Vidu2StartEndToVideoNode", + "ja/built-in-nodes/Vidu2TextToVideoNode", + "ja/built-in-nodes/Vidu3ImageToVideoNode", + "ja/built-in-nodes/Vidu3StartEndToVideoNode", + "ja/built-in-nodes/Vidu3TextToVideoNode", + "ja/built-in-nodes/ViduExtendVideoNode", + "ja/built-in-nodes/ViduImageToVideoNode", + "ja/built-in-nodes/ViduMultiFrameVideoNode", + "ja/built-in-nodes/ViduReferenceVideoNode", + "ja/built-in-nodes/ViduStartEndToVideoNode", + "ja/built-in-nodes/ViduTextToVideoNode" + ] + }, + { + "group": "Wan", + "pages": [ + "ja/built-in-nodes/HappyHorseImageToVideoApi", + "ja/built-in-nodes/HappyHorseReferenceVideoApi", + "ja/built-in-nodes/HappyHorseTextToVideoApi", + "ja/built-in-nodes/HappyHorseVideoEditApi", + "ja/built-in-nodes/Wan2ImageToVideoApi", + "ja/built-in-nodes/Wan2ReferenceVideoApi", + "ja/built-in-nodes/Wan2TextToVideoApi", + "ja/built-in-nodes/Wan2VideoContinuationApi", + "ja/built-in-nodes/Wan2VideoEditApi", + "ja/built-in-nodes/WanImageToVideoApi", + "ja/built-in-nodes/WanReferenceVideoApi", + "ja/built-in-nodes/WanTextToVideoApi" + ] + }, + { + "group": "Wavespeed", + "pages": [ + "ja/built-in-nodes/WavespeedFlashVSRNode" + ] + } + ] + } ] }, { - "group": "条件付け", + "group": "サンプリング", "pages": [ { - "group": "Video Models", + "group": "Custom Sampling", "pages": [ - "ja/built-in-nodes/conditioning/video-models/wan-vace-to-video", - "ja/built-in-nodes/LTXVDurationPredictor", - "ja/built-in-nodes/Stablezero123Conditioning", - "ja/built-in-nodes/Stablezero123ConditioningBatched", - "ja/built-in-nodes/SVD_img2vid_Conditioning", - "ja/built-in-nodes/SvdImg2vidConditioning" + { + "group": "Samplers", + "pages": [ + "ja/built-in-nodes/SamplerDpmpp2mSde", + "ja/built-in-nodes/SamplerDpmppSde" + ] + } ] - }, - "ja/built-in-nodes/ConditioningAverage", - "ja/built-in-nodes/Sd4xupscaleConditioning" + } ] }, { - "group": "潜在変数", + "group": "Text", "pages": [ - { - "group": "Video", - "pages": [ - "ja/built-in-nodes/latent/video/trim-video-latent" - ] - } + "ja/built-in-nodes/AddTextPrefix", + "ja/built-in-nodes/AddTextSuffix", + "ja/built-in-nodes/BuildJsonPromptIdeogram", + "ja/built-in-nodes/CaseConverter", + "ja/built-in-nodes/ConvertArrayToString", + "ja/built-in-nodes/ConvertDictionaryToString", + "ja/built-in-nodes/JsonExtractString", + "ja/built-in-nodes/MergeTextLists", + "ja/built-in-nodes/RegexExtract", + "ja/built-in-nodes/RegexMatch", + "ja/built-in-nodes/RegexReplace", + "ja/built-in-nodes/ReplaceText", + "ja/built-in-nodes/SaveText", + "ja/built-in-nodes/StringCompare", + "ja/built-in-nodes/StringConcatenate", + "ja/built-in-nodes/StringContains", + "ja/built-in-nodes/StringFormat", + "ja/built-in-nodes/StringLength", + "ja/built-in-nodes/StringReplace", + "ja/built-in-nodes/StringSubstring", + "ja/built-in-nodes/StringTrim", + "ja/built-in-nodes/StripWhitespace", + "ja/built-in-nodes/TextGenerate", + "ja/built-in-nodes/TextGenerateLTX2Prompt", + "ja/built-in-nodes/TextOverlay", + "ja/built-in-nodes/TextToLowercase", + "ja/built-in-nodes/TextToUppercase", + "ja/built-in-nodes/TruncateText" ] }, { - "group": "画像", + "group": "Utilities", "pages": [ { - "group": "Adjustments", + "group": "Logic", "pages": [ - "ja/built-in-nodes/AdjustBrightness", - "ja/built-in-nodes/AdjustContrast" + "ja/built-in-nodes/AutogrowNamesTestNode", + "ja/built-in-nodes/AutogrowPrefixTestNode", + "ja/built-in-nodes/ComboOptionTestNode", + "ja/built-in-nodes/ComfyAndNode", + "ja/built-in-nodes/ComfyNotNode", + "ja/built-in-nodes/ComfyOrNode", + "ja/built-in-nodes/ComfySoftSwitchNode", + "ja/built-in-nodes/ComfySwitchNode", + "ja/built-in-nodes/ConvertStringToComboNode", + "ja/built-in-nodes/DCTestNode", + "ja/built-in-nodes/InvertBooleanNode" ] }, { - "group": "Background Removal", + "group": "Primitive", "pages": [ - "ja/built-in-nodes/RemoveBackground" + "ja/built-in-nodes/PrimitiveBoolean", + "ja/built-in-nodes/PrimitiveBoundingBox", + "ja/built-in-nodes/PrimitiveFloat", + "ja/built-in-nodes/PrimitiveInt", + "ja/built-in-nodes/PrimitiveString", + "ja/built-in-nodes/PrimitiveStringMultiline" ] }, + "ja/built-in-nodes/ColorToRGBInt", + "ja/built-in-nodes/ComfyMathExpression", + "ja/built-in-nodes/ComfyNumberConvert", + "ja/built-in-nodes/CreateBoundingBoxes", + "ja/built-in-nodes/CreateList", + "ja/built-in-nodes/CurveEditor", + "ja/built-in-nodes/CustomCombo", + "ja/built-in-nodes/ImageHistogram", + "ja/built-in-nodes/PreviewAny", + "ja/built-in-nodes/ResolutionSelector", + "ja/built-in-nodes/SeedNode" + ] + }, + { + "group": "ユーティリティ", + "pages": [ + "ja/built-in-nodes/BatchImagesMasksLatentsNode", + "ja/built-in-nodes/MarkdownNote", + "ja/built-in-nodes/Note", + "ja/built-in-nodes/Reroute", + "ja/built-in-nodes/TerminalLog", + "ja/built-in-nodes/wanBlockSwap" + ] + }, + { + "group": "Video", + "pages": [ { "group": "Batch", "pages": [ - "ja/built-in-nodes/ImageDeduplication", - "ja/built-in-nodes/ImageFromBatch", - "ja/built-in-nodes/ImageGrid", - "ja/built-in-nodes/ImageMergeTileList", - "ja/built-in-nodes/MergeImageLists", - "ja/built-in-nodes/RebatchImages", - "ja/built-in-nodes/RepeatImageBatch", - "ja/built-in-nodes/ShuffleDataset", - "ja/built-in-nodes/ShuffleImageTextDataset", - "ja/built-in-nodes/SplitImageToTileList" - ] - }, - { - "group": "Color", - "pages": [ - "ja/built-in-nodes/ImageRGBToYUV", - "ja/built-in-nodes/ImageYUVToRGB", - "ja/built-in-nodes/NormalizeImages" - ] - }, - { - "group": "Compositing", - "pages": [ - "ja/built-in-nodes/ImageCompositeMasked", - "ja/built-in-nodes/JoinImageWithAlpha", - "ja/built-in-nodes/PorterDuffImageComposite", - "ja/built-in-nodes/SplitImageWithAlpha" - ] - }, - { - "group": "Detection", - "pages": [ - "ja/built-in-nodes/DrawBBoxes", - "ja/built-in-nodes/MediaPipeFaceLandmarker", - "ja/built-in-nodes/MediaPipeFaceMask", - "ja/built-in-nodes/MediaPipeFaceMeshVisualize", - "ja/built-in-nodes/RTDETR_detect", - "ja/built-in-nodes/SAM3_Detect", - "ja/built-in-nodes/SAM3_TrackPreview", - "ja/built-in-nodes/SAM3_TrackToMask", - "ja/built-in-nodes/SAM3_VideoTrack", - "ja/built-in-nodes/SDPoseDrawKeypoints", - "ja/built-in-nodes/SDPoseFaceBBoxes", - "ja/built-in-nodes/SDPoseKeypointExtractor" - ] - }, - { - "group": "Filters", - "pages": [ - "ja/built-in-nodes/Canny", - "ja/built-in-nodes/ColorTransfer", - "ja/built-in-nodes/ImageAddNoise", - "ja/built-in-nodes/ImageBlend", - "ja/built-in-nodes/ImageBlur", - "ja/built-in-nodes/ImageQuantize", - "ja/built-in-nodes/ImageSharpen", - "ja/built-in-nodes/Morphology" - ] - }, - { - "group": "Geometry Estimation", - "pages": [ - "ja/built-in-nodes/DA3GeometryToMesh", - "ja/built-in-nodes/DA3GeometryToPointCloud", - "ja/built-in-nodes/DA3Inference", - "ja/built-in-nodes/DA3Render", - "ja/built-in-nodes/MoGeInference", - "ja/built-in-nodes/MoGePanoramaInference", - "ja/built-in-nodes/MoGePointMapToMesh", - "ja/built-in-nodes/MoGeRender" - ] - }, - { - "group": "Mask", - "pages": [ - "ja/built-in-nodes/BatchMasksNode", - "ja/built-in-nodes/CropMask", - "ja/built-in-nodes/FeatherMask", - "ja/built-in-nodes/GrowMask", - "ja/built-in-nodes/ImageColorToMask", - "ja/built-in-nodes/ImageToMask", - "ja/built-in-nodes/InvertMask", - "ja/built-in-nodes/MaskComposite", - "ja/built-in-nodes/MaskPreview", - "ja/built-in-nodes/MaskToImage", - "ja/built-in-nodes/SolidMask", - "ja/built-in-nodes/ThresholdMask", - "ja/built-in-nodes/VOIDQuadmaskPreprocess" - ] - }, - { - "group": "Post Processors", - "pages": [ - "ja/built-in-nodes/SeedVR2PostProcessing" - ] - }, - { - "group": "Pre Processors", - "pages": [ - "ja/built-in-nodes/SeedVR2Preprocess" - ] - }, - { - "group": "Shader", - "pages": [ - "ja/built-in-nodes/GLSLShader" - ] - }, - { - "group": "Transform", - "pages": [ - "ja/built-in-nodes/CenterCropImages", - "ja/built-in-nodes/CropByBBoxes", - "ja/built-in-nodes/ImageCrop", - "ja/built-in-nodes/ImageCropV2", - "ja/built-in-nodes/ImageFlip", - "ja/built-in-nodes/ImagePadForOutpaint", - "ja/built-in-nodes/ImageRotate", - "ja/built-in-nodes/ImageStitch", - "ja/built-in-nodes/RandomCropImages", - "ja/built-in-nodes/ResizeAndPadImage", - "ja/built-in-nodes/ResizeImagesByLongerEdge", - "ja/built-in-nodes/ResizeImagesByShorterEdge" + "ja/built-in-nodes/ShuffleVideoDataset" ] - }, - { - "group": "Upscaling", - "pages": [ - "ja/built-in-nodes/ImageScale", - "ja/built-in-nodes/ImageScaleBy", - "ja/built-in-nodes/ImageScaleToMaxDimension", - "ja/built-in-nodes/ImageScaleToTotalPixels", - "ja/built-in-nodes/ImageUpscaleWithModel" + }, + { + "group": "Preprocessors", + "pages": [ + "ja/built-in-nodes/LTXVPreprocess" ] }, { - "group": "Video", + "group": "Transform", "pages": [ - "ja/built-in-nodes/ShuffleVideoTextDataset", - "ja/built-in-nodes/WanDancerPadKeyframes", - "ja/built-in-nodes/WanDancerPadKeyframesList" + "ja/built-in-nodes/VideoRandomTemporalCrop", + "ja/built-in-nodes/VideoTemporalCrop" ] }, - "ja/built-in-nodes/AddLayer", - "ja/built-in-nodes/BatchImagesNode", - "ja/built-in-nodes/ConditioningCombine", - "ja/built-in-nodes/EmptyImage", - "ja/built-in-nodes/GetImageSize", - "ja/built-in-nodes/ImageBatch", - "ja/built-in-nodes/ImageCompare", - "ja/built-in-nodes/ImageCompositor", - "ja/built-in-nodes/ImageInvert", - "ja/built-in-nodes/LayersFromBoundingBoxes", - "ja/built-in-nodes/LoadImage", - "ja/built-in-nodes/LoadImageDataSetFromFolder", - "ja/built-in-nodes/LoadImageMask", - "ja/built-in-nodes/LoadImageOutput", - "ja/built-in-nodes/LoadImageSetFromFolderNode", - "ja/built-in-nodes/LoadImageSetNode", - "ja/built-in-nodes/LoadImageTextDataSetFromFolder", - "ja/built-in-nodes/LoadImageTextSetFromFolderNode", - "ja/built-in-nodes/LoraLoader", - "ja/built-in-nodes/LoraLoaderModelOnly", - "ja/built-in-nodes/Painter", - "ja/built-in-nodes/PreviewImage", - "ja/built-in-nodes/ResizeImageMaskNode", - "ja/built-in-nodes/SaveAnimatedPNG", - "ja/built-in-nodes/SaveAnimatedWEBP", - "ja/built-in-nodes/SaveImage", - "ja/built-in-nodes/SaveImageAdvanced", - "ja/built-in-nodes/SaveImageDataSetToFolder", - "ja/built-in-nodes/SaveImageTextDataSetToFolder", - "ja/built-in-nodes/SaveSVGNode", - "ja/built-in-nodes/WebcamCapture" + "ja/built-in-nodes/CreateVideo", + "ja/built-in-nodes/FrameInterpolate", + "ja/built-in-nodes/GetVideoComponents", + "ja/built-in-nodes/LoadVideo", + "ja/built-in-nodes/LoadVideoDataSetFromFolder", + "ja/built-in-nodes/LoadVideoTextDataSetFromFolder", + "ja/built-in-nodes/SaveVideo", + "ja/built-in-nodes/SaveWEBM", + "ja/built-in-nodes/Video Slice", + "ja/built-in-nodes/VideoFrameSample" ] } ] @@ -8695,24 +8667,12 @@ ] }, { - "tab": "開発", + "tab": "API 開発", "pages": [ - "ja/development/overview", { - "group": "ワークフローの実行", + "group": "Comfy で開発する", "pages": [ - "ja/development/api-development/overview", - "ja/development/api-development/getting-an-api-key", - "ja/development/api-development/sdks", - "ja/api-reference/v2/overview", - { - "group": "Comfy API v2リファレンス", - "openapi": { - "source": "openapi-v2.yaml", - "directory": "ja/api-reference/v2" - } - }, - "ja/development/api-development/sdks-design", + "ja/development/overview", { "group": "Comfy Cloud", "pages": [ @@ -8730,17 +8690,62 @@ "ja/development/comfyui-server/comms_messages", "ja/development/comfyui-server/startup-flags" ] + } + ] + }, + { + "group": "ワークフローの実行", + "pages": [ + "ja/development/api-development/sdks", + "ja/development/api-development/getting-an-api-key", + "ja/development/api-development/overview", + "ja/api-reference/v2/overview", + { + "group": "Comfy API v2リファレンス", + "openapi": { + "source": "openapi-v2.yaml", + "directory": "ja/api-reference/v2" + } }, + "ja/development/api-development/sdks-design", + "ja/development/api-development/workflow-api-format", + "ja/development/api-development/workflow-metadata", + "ja/development/comfyui-server/api-key-integration" + ] + }, + { + "group": "Comfy CLI", + "pages": [ + "ja/comfy-cli/getting-started", + "ja/comfy-cli/reference", + "ja/comfy-cli/troubleshooting" + ] + }, + { + "group": "仕様", + "pages": [ { - "group": "ワークフロー形式", + "group": "Workflow JSON", "pages": [ - "ja/development/api-development/workflow-api-format", - "ja/development/api-development/workflow-metadata" + "ja/specs/workflow_json", + "ja/specs/workflow_json_0.4" ] }, - "ja/development/comfyui-server/api-key-integration" + { + "group": "ノード定義", + "pages": [ + "ja/specs/nodedef_json", + "ja/specs/nodedef_json_1_0" + ] + } ] - }, + } + ] + }, + { + "tab": "カスタムノード", + "pages": [ + "ja/custom-nodes/intro", { "group": "カスタムノードの構築", "pages": [ @@ -8806,33 +8811,6 @@ "ja/registry/specifications", "ja/registry/api-reference/overview" ] - }, - { - "group": "Comfy CLI", - "pages": [ - "ja/comfy-cli/getting-started", - "ja/comfy-cli/reference", - "ja/comfy-cli/troubleshooting" - ] - }, - { - "group": "仕様", - "pages": [ - { - "group": "Workflow JSON", - "pages": [ - "ja/specs/workflow_json", - "ja/specs/workflow_json_0.4" - ] - }, - { - "group": "ノード定義", - "pages": [ - "ja/specs/nodedef_json", - "ja/specs/nodedef_json_1_0" - ] - } - ] } ] }, @@ -9297,6 +9275,7 @@ "group": "Wan2.1", "pages": [ "ko/tutorials/video/wan/wan-video", + "ko/tutorials/video/wan/wan-causal-forcing", "ko/tutorials/video/wan/vace", "ko/tutorials/video/wan/wan-move", "ko/tutorials/video/wan/wan-alpha", @@ -9659,6 +9638,137 @@ "ko/built-in-nodes/VoxelToMeshBasic" ] }, + { + "group": "고급", + "pages": [ + { + "group": "Debug", + "pages": [ + "ko/built-in-nodes/EasyCache", + "ko/built-in-nodes/LazyCache", + "ko/built-in-nodes/ModelComputeDtype" + ] + }, + { + "group": "Guidance", + "pages": [ + "ko/built-in-nodes/CFGNorm", + "ko/built-in-nodes/CFGZeroStar", + "ko/built-in-nodes/LTXVModalityGuidance", + "ko/built-in-nodes/LTXVSpatioTemporalGuidance", + "ko/built-in-nodes/NAGuidance", + "ko/built-in-nodes/SkipLayerGuidanceDiT", + "ko/built-in-nodes/SkipLayerGuidanceDiTSimple", + "ko/built-in-nodes/SkipLayerGuidanceSD3", + "ko/built-in-nodes/TCFG" + ] + }, + { + "group": "Hooks", + "pages": [ + { + "group": "Clip", + "pages": [ + "ko/built-in-nodes/SetClipHooks" + ] + }, + { + "group": "Combine", + "pages": [ + "ko/built-in-nodes/CombineHooks", + "ko/built-in-nodes/CombineHooksEight", + "ko/built-in-nodes/CombineHooksFour" + ] + }, + { + "group": "Cond Pair", + "pages": [ + "ko/built-in-nodes/PairConditioningCombine", + "ko/built-in-nodes/PairConditioningSetDefaultAndCombine", + "ko/built-in-nodes/PairConditioningSetProperties", + "ko/built-in-nodes/PairConditioningSetPropertiesAndCombine" + ] + }, + { + "group": "Cond Single", + "pages": [ + "ko/built-in-nodes/ConditioningSetDefaultAndCombine", + "ko/built-in-nodes/ConditioningSetProperties", + "ko/built-in-nodes/ConditioningSetPropertiesAndCombine" + ] + }, + { + "group": "Create", + "pages": [ + "ko/built-in-nodes/CreateHookLora", + "ko/built-in-nodes/CreateHookLoraModelOnly", + "ko/built-in-nodes/CreateHookModelAsLora", + "ko/built-in-nodes/CreateHookModelAsLoraModelOnly" + ] + }, + { + "group": "Manual", + "pages": [ + "ko/built-in-nodes/SetModelHooksOnCond" + ] + }, + { + "group": "Scheduling", + "pages": [ + "ko/built-in-nodes/CreateHookKeyframe", + "ko/built-in-nodes/CreateHookKeyframesFromFloats", + "ko/built-in-nodes/CreateHookKeyframesInterpolated", + "ko/built-in-nodes/SetHookKeyframes" + ] + }, + "ko/built-in-nodes/ConditioningTimestepsRange" + ] + }, + { + "group": "Loaders", + "pages": [ + "ko/built-in-nodes/DeprecatedCheckpointLoader", + "ko/built-in-nodes/DeprecatedDiffusersLoader" + ] + }, + { + "group": "Model Merging", + "pages": [ + "ko/built-in-nodes/SaveLoRANode" + ] + }, + { + "group": "Multigpu", + "pages": [ + "ko/built-in-nodes/MultiGPU_Options", + "ko/built-in-nodes/MultiGPU_WorkUnits", + "ko/built-in-nodes/SelectCLIPDevice", + "ko/built-in-nodes/SelectModelDevice", + "ko/built-in-nodes/SelectVAEDevice" + ] + }, + "ko/built-in-nodes/IdeogramV1", + "ko/built-in-nodes/IdeogramV2", + "ko/built-in-nodes/KlingCameraControlI2VNode", + "ko/built-in-nodes/KlingCameraControls", + "ko/built-in-nodes/KlingCameraControlT2VNode", + "ko/built-in-nodes/KlingDualCharacterVideoEffectNode", + "ko/built-in-nodes/KlingSingleImageVideoEffectNode", + "ko/built-in-nodes/KlingVirtualTryOnNode", + "ko/built-in-nodes/MoonvalleyImg2VideoNode", + "ko/built-in-nodes/MoonvalleyTxt2VideoNode", + "ko/built-in-nodes/MoonvalleyVideo2VideoNode", + "ko/built-in-nodes/SeedVR2ProgressiveSampler", + "ko/built-in-nodes/StabilityAudioInpaint", + "ko/built-in-nodes/StabilityAudioToAudio", + "ko/built-in-nodes/StabilityStableImageSD_3_5Node", + "ko/built-in-nodes/StabilityStableImageUltraNode", + "ko/built-in-nodes/StabilityTextToAudio", + "ko/built-in-nodes/StabilityUpscaleConservativeNode", + "ko/built-in-nodes/StabilityUpscaleCreativeNode", + "ko/built-in-nodes/StabilityUpscaleFastNode" + ] + }, { "group": "API Node", "pages": [ @@ -9721,34 +9831,252 @@ ] }, { - "group": "Experimental", + "group": "컨디셔닝", + "pages": [ + { + "group": "Video Models", + "pages": [ + "ko/built-in-nodes/LTXVDurationPredictor", + "ko/built-in-nodes/Stablezero123Conditioning", + "ko/built-in-nodes/Stablezero123ConditioningBatched", + "ko/built-in-nodes/SVD_img2vid_Conditioning", + "ko/built-in-nodes/SvdImg2vidConditioning" + ] + }, + "ko/built-in-nodes/ConditioningAverage", + "ko/built-in-nodes/Sd4xupscaleConditioning" + ] + }, + { + "group": "Experimental", + "pages": [ + { + "group": "Attention Experiments", + "pages": [ + "ko/built-in-nodes/ClipAttentionMultiply", + "ko/built-in-nodes/UNetCrossAttentionMultiply", + "ko/built-in-nodes/UNetSelfAttentionMultiply", + "ko/built-in-nodes/UNetTemporalAttentionMultiply" + ] + }, + { + "group": "Stable Cascade", + "pages": [ + "ko/built-in-nodes/StableCascade_SuperResolutionControlnet" + ] + }, + "ko/built-in-nodes/DifferentialDiffusion", + "ko/built-in-nodes/FluxKVCache", + "ko/built-in-nodes/FreSca", + "ko/built-in-nodes/LatentBlend", + "ko/built-in-nodes/LoraSave", + "ko/built-in-nodes/Mahiro", + "ko/built-in-nodes/PerpNeg", + "ko/built-in-nodes/PerpNegGuider", + "ko/built-in-nodes/SamplerEulerCFGpp", + "ko/built-in-nodes/SelfAttentionGuidance", + "ko/built-in-nodes/TorchCompileModel" + ] + }, + { + "group": "이미지", + "pages": [ + { + "group": "Adjustments", + "pages": [ + "ko/built-in-nodes/AdjustBrightness", + "ko/built-in-nodes/AdjustContrast" + ] + }, + { + "group": "Background Removal", + "pages": [ + "ko/built-in-nodes/RemoveBackground" + ] + }, + { + "group": "Batch", + "pages": [ + "ko/built-in-nodes/ImageDeduplication", + "ko/built-in-nodes/ImageFromBatch", + "ko/built-in-nodes/ImageGrid", + "ko/built-in-nodes/ImageMergeTileList", + "ko/built-in-nodes/MergeImageLists", + "ko/built-in-nodes/RebatchImages", + "ko/built-in-nodes/RepeatImageBatch", + "ko/built-in-nodes/ShuffleDataset", + "ko/built-in-nodes/ShuffleImageTextDataset", + "ko/built-in-nodes/SplitImageToTileList" + ] + }, + { + "group": "Color", + "pages": [ + "ko/built-in-nodes/ImageRGBToYUV", + "ko/built-in-nodes/ImageYUVToRGB", + "ko/built-in-nodes/NormalizeImages" + ] + }, + { + "group": "Compositing", + "pages": [ + "ko/built-in-nodes/ImageCompositeMasked", + "ko/built-in-nodes/JoinImageWithAlpha", + "ko/built-in-nodes/PorterDuffImageComposite", + "ko/built-in-nodes/SplitImageWithAlpha" + ] + }, + { + "group": "Detection", + "pages": [ + "ko/built-in-nodes/DrawBBoxes", + "ko/built-in-nodes/MediaPipeFaceLandmarker", + "ko/built-in-nodes/MediaPipeFaceMask", + "ko/built-in-nodes/MediaPipeFaceMeshVisualize", + "ko/built-in-nodes/RTDETR_detect", + "ko/built-in-nodes/SAM3_Detect", + "ko/built-in-nodes/SAM3_TrackPreview", + "ko/built-in-nodes/SAM3_TrackToMask", + "ko/built-in-nodes/SAM3_VideoTrack", + "ko/built-in-nodes/SDPoseDrawKeypoints", + "ko/built-in-nodes/SDPoseFaceBBoxes", + "ko/built-in-nodes/SDPoseKeypointExtractor" + ] + }, + { + "group": "Filters", + "pages": [ + "ko/built-in-nodes/Canny", + "ko/built-in-nodes/ColorTransfer", + "ko/built-in-nodes/ImageAddNoise", + "ko/built-in-nodes/ImageBlend", + "ko/built-in-nodes/ImageBlur", + "ko/built-in-nodes/ImageQuantize", + "ko/built-in-nodes/ImageSharpen", + "ko/built-in-nodes/Morphology" + ] + }, + { + "group": "Geometry Estimation", + "pages": [ + "ko/built-in-nodes/DA3GeometryToMesh", + "ko/built-in-nodes/DA3GeometryToPointCloud", + "ko/built-in-nodes/DA3Inference", + "ko/built-in-nodes/DA3Render", + "ko/built-in-nodes/MoGeInference", + "ko/built-in-nodes/MoGePanoramaInference", + "ko/built-in-nodes/MoGePointMapToMesh", + "ko/built-in-nodes/MoGeRender" + ] + }, + { + "group": "Mask", + "pages": [ + "ko/built-in-nodes/BatchMasksNode", + "ko/built-in-nodes/CropMask", + "ko/built-in-nodes/FeatherMask", + "ko/built-in-nodes/GrowMask", + "ko/built-in-nodes/ImageColorToMask", + "ko/built-in-nodes/ImageToMask", + "ko/built-in-nodes/InvertMask", + "ko/built-in-nodes/MaskComposite", + "ko/built-in-nodes/MaskPreview", + "ko/built-in-nodes/MaskToImage", + "ko/built-in-nodes/SolidMask", + "ko/built-in-nodes/ThresholdMask", + "ko/built-in-nodes/VOIDQuadmaskPreprocess" + ] + }, + { + "group": "Post Processors", + "pages": [ + "ko/built-in-nodes/SeedVR2PostProcessing" + ] + }, + { + "group": "Pre Processors", + "pages": [ + "ko/built-in-nodes/SeedVR2Preprocess" + ] + }, + { + "group": "Shader", + "pages": [ + "ko/built-in-nodes/GLSLShader" + ] + }, + { + "group": "Transform", + "pages": [ + "ko/built-in-nodes/CenterCropImages", + "ko/built-in-nodes/CropByBBoxes", + "ko/built-in-nodes/ImageCrop", + "ko/built-in-nodes/ImageCropV2", + "ko/built-in-nodes/ImageFlip", + "ko/built-in-nodes/ImagePadForOutpaint", + "ko/built-in-nodes/ImageRotate", + "ko/built-in-nodes/ImageStitch", + "ko/built-in-nodes/RandomCropImages", + "ko/built-in-nodes/ResizeAndPadImage", + "ko/built-in-nodes/ResizeImagesByLongerEdge", + "ko/built-in-nodes/ResizeImagesByShorterEdge" + ] + }, + { + "group": "Upscaling", + "pages": [ + "ko/built-in-nodes/ImageScale", + "ko/built-in-nodes/ImageScaleBy", + "ko/built-in-nodes/ImageScaleToMaxDimension", + "ko/built-in-nodes/ImageScaleToTotalPixels", + "ko/built-in-nodes/ImageUpscaleWithModel" + ] + }, + { + "group": "Video", + "pages": [ + "ko/built-in-nodes/ShuffleVideoTextDataset", + "ko/built-in-nodes/WanDancerPadKeyframes", + "ko/built-in-nodes/WanDancerPadKeyframesList" + ] + }, + "ko/built-in-nodes/AddLayer", + "ko/built-in-nodes/BatchImagesNode", + "ko/built-in-nodes/ConditioningCombine", + "ko/built-in-nodes/EmptyImage", + "ko/built-in-nodes/GetImageSize", + "ko/built-in-nodes/ImageBatch", + "ko/built-in-nodes/ImageCompare", + "ko/built-in-nodes/ImageCompositor", + "ko/built-in-nodes/ImageInvert", + "ko/built-in-nodes/LayersFromBoundingBoxes", + "ko/built-in-nodes/LoadImage", + "ko/built-in-nodes/LoadImageDataSetFromFolder", + "ko/built-in-nodes/LoadImageMask", + "ko/built-in-nodes/LoadImageOutput", + "ko/built-in-nodes/LoadImageSetFromFolderNode", + "ko/built-in-nodes/LoadImageSetNode", + "ko/built-in-nodes/LoadImageTextDataSetFromFolder", + "ko/built-in-nodes/LoadImageTextSetFromFolderNode", + "ko/built-in-nodes/LoraLoader", + "ko/built-in-nodes/LoraLoaderModelOnly", + "ko/built-in-nodes/Painter", + "ko/built-in-nodes/PreviewImage", + "ko/built-in-nodes/ResizeImageMaskNode", + "ko/built-in-nodes/SaveAnimatedPNG", + "ko/built-in-nodes/SaveAnimatedWEBP", + "ko/built-in-nodes/SaveImage", + "ko/built-in-nodes/SaveImageAdvanced", + "ko/built-in-nodes/SaveImageDataSetToFolder", + "ko/built-in-nodes/SaveImageTextDataSetToFolder", + "ko/built-in-nodes/SaveSVGNode", + "ko/built-in-nodes/WebcamCapture" + ] + }, + { + "group": "로더", "pages": [ - { - "group": "Attention Experiments", - "pages": [ - "ko/built-in-nodes/ClipAttentionMultiply", - "ko/built-in-nodes/UNetCrossAttentionMultiply", - "ko/built-in-nodes/UNetSelfAttentionMultiply", - "ko/built-in-nodes/UNetTemporalAttentionMultiply" - ] - }, - { - "group": "Stable Cascade", - "pages": [ - "ko/built-in-nodes/StableCascade_SuperResolutionControlnet" - ] - }, - "ko/built-in-nodes/DifferentialDiffusion", - "ko/built-in-nodes/FluxKVCache", - "ko/built-in-nodes/FreSca", - "ko/built-in-nodes/LatentBlend", - "ko/built-in-nodes/LoraSave", - "ko/built-in-nodes/Mahiro", - "ko/built-in-nodes/PerpNeg", - "ko/built-in-nodes/PerpNegGuider", - "ko/built-in-nodes/SamplerEulerCFGpp", - "ko/built-in-nodes/SelfAttentionGuidance", - "ko/built-in-nodes/TorchCompileModel" + "ko/built-in-nodes/ControlNetLoader" ] }, { @@ -10572,6 +10900,17 @@ } ] }, + { + "group": "모델 패치", + "pages": [ + { + "group": "Anima", + "pages": [ + "ko/built-in-nodes/AnimaLLLiteApply" + ] + } + ] + }, { "group": "Partner", "pages": [ @@ -11048,332 +11387,74 @@ ] }, { - "group": "Sora", - "pages": [ - "ko/built-in-nodes/OpenAIVideoSora2" - ] - }, - { - "group": "Sync.so", - "pages": [ - "ko/built-in-nodes/SyncLipSyncNode", - "ko/built-in-nodes/SyncTalkingImageNode" - ] - }, - { - "group": "Topaz", - "pages": [ - "ko/built-in-nodes/TopazVideoEnhance", - "ko/built-in-nodes/TopazVideoEnhanceV2" - ] - }, - { - "group": "Veo", - "pages": [ - "ko/built-in-nodes/Veo3FirstLastFrameNode", - "ko/built-in-nodes/Veo3VideoGenerationNode", - "ko/built-in-nodes/VeoVideoGenerationNode" - ] - }, - { - "group": "Vidu", - "pages": [ - "ko/built-in-nodes/Vidu2ImageToVideoNode", - "ko/built-in-nodes/Vidu2ReferenceVideoNode", - "ko/built-in-nodes/Vidu2StartEndToVideoNode", - "ko/built-in-nodes/Vidu2TextToVideoNode", - "ko/built-in-nodes/Vidu3ImageToVideoNode", - "ko/built-in-nodes/Vidu3StartEndToVideoNode", - "ko/built-in-nodes/Vidu3TextToVideoNode", - "ko/built-in-nodes/ViduExtendVideoNode", - "ko/built-in-nodes/ViduImageToVideoNode", - "ko/built-in-nodes/ViduMultiFrameVideoNode", - "ko/built-in-nodes/ViduReferenceVideoNode", - "ko/built-in-nodes/ViduStartEndToVideoNode", - "ko/built-in-nodes/ViduTextToVideoNode" - ] - }, - { - "group": "Wan", - "pages": [ - "ko/built-in-nodes/HappyHorseImageToVideoApi", - "ko/built-in-nodes/HappyHorseReferenceVideoApi", - "ko/built-in-nodes/HappyHorseTextToVideoApi", - "ko/built-in-nodes/HappyHorseVideoEditApi", - "ko/built-in-nodes/Wan2ImageToVideoApi", - "ko/built-in-nodes/Wan2ReferenceVideoApi", - "ko/built-in-nodes/Wan2TextToVideoApi", - "ko/built-in-nodes/Wan2VideoContinuationApi", - "ko/built-in-nodes/Wan2VideoEditApi", - "ko/built-in-nodes/WanImageToVideoApi", - "ko/built-in-nodes/WanReferenceVideoApi", - "ko/built-in-nodes/WanTextToVideoApi" - ] - }, - { - "group": "Wavespeed", - "pages": [ - "ko/built-in-nodes/WavespeedFlashVSRNode" - ] - } - ] - } - ] - }, - { - "group": "Text", - "pages": [ - "ko/built-in-nodes/AddTextPrefix", - "ko/built-in-nodes/AddTextSuffix", - "ko/built-in-nodes/BuildJsonPromptIdeogram", - "ko/built-in-nodes/CaseConverter", - "ko/built-in-nodes/ConvertArrayToString", - "ko/built-in-nodes/ConvertDictionaryToString", - "ko/built-in-nodes/JsonExtractString", - "ko/built-in-nodes/MergeTextLists", - "ko/built-in-nodes/RegexExtract", - "ko/built-in-nodes/RegexMatch", - "ko/built-in-nodes/RegexReplace", - "ko/built-in-nodes/ReplaceText", - "ko/built-in-nodes/SaveText", - "ko/built-in-nodes/StringCompare", - "ko/built-in-nodes/StringConcatenate", - "ko/built-in-nodes/StringContains", - "ko/built-in-nodes/StringFormat", - "ko/built-in-nodes/StringLength", - "ko/built-in-nodes/StringReplace", - "ko/built-in-nodes/StringSubstring", - "ko/built-in-nodes/StringTrim", - "ko/built-in-nodes/StripWhitespace", - "ko/built-in-nodes/TextGenerate", - "ko/built-in-nodes/TextGenerateLTX2Prompt", - "ko/built-in-nodes/TextOverlay", - "ko/built-in-nodes/TextToLowercase", - "ko/built-in-nodes/TextToUppercase", - "ko/built-in-nodes/TruncateText" - ] - }, - { - "group": "Utilities", - "pages": [ - { - "group": "Logic", - "pages": [ - "ko/built-in-nodes/AutogrowNamesTestNode", - "ko/built-in-nodes/AutogrowPrefixTestNode", - "ko/built-in-nodes/ComboOptionTestNode", - "ko/built-in-nodes/ComfyAndNode", - "ko/built-in-nodes/ComfyNotNode", - "ko/built-in-nodes/ComfyOrNode", - "ko/built-in-nodes/ComfySoftSwitchNode", - "ko/built-in-nodes/ComfySwitchNode", - "ko/built-in-nodes/ConvertStringToComboNode", - "ko/built-in-nodes/DCTestNode", - "ko/built-in-nodes/InvertBooleanNode" - ] - }, - { - "group": "Primitive", - "pages": [ - "ko/built-in-nodes/PrimitiveBoolean", - "ko/built-in-nodes/PrimitiveBoundingBox", - "ko/built-in-nodes/PrimitiveFloat", - "ko/built-in-nodes/PrimitiveInt", - "ko/built-in-nodes/PrimitiveString", - "ko/built-in-nodes/PrimitiveStringMultiline" - ] - }, - "ko/built-in-nodes/ColorToRGBInt", - "ko/built-in-nodes/ComfyMathExpression", - "ko/built-in-nodes/ComfyNumberConvert", - "ko/built-in-nodes/CreateBoundingBoxes", - "ko/built-in-nodes/CreateList", - "ko/built-in-nodes/CurveEditor", - "ko/built-in-nodes/CustomCombo", - "ko/built-in-nodes/ImageHistogram", - "ko/built-in-nodes/PreviewAny", - "ko/built-in-nodes/ResolutionSelector", - "ko/built-in-nodes/SeedNode" - ] - }, - { - "group": "Video", - "pages": [ - { - "group": "Batch", - "pages": [ - "ko/built-in-nodes/ShuffleVideoDataset" - ] - }, - { - "group": "Preprocessors", - "pages": [ - "ko/built-in-nodes/LTXVPreprocess" - ] - }, - { - "group": "Transform", - "pages": [ - "ko/built-in-nodes/VideoRandomTemporalCrop", - "ko/built-in-nodes/VideoTemporalCrop" - ] - }, - "ko/built-in-nodes/CreateVideo", - "ko/built-in-nodes/FrameInterpolate", - "ko/built-in-nodes/GetVideoComponents", - "ko/built-in-nodes/LoadVideo", - "ko/built-in-nodes/LoadVideoDataSetFromFolder", - "ko/built-in-nodes/LoadVideoTextDataSetFromFolder", - "ko/built-in-nodes/SaveVideo", - "ko/built-in-nodes/SaveWEBM", - "ko/built-in-nodes/Video Slice", - "ko/built-in-nodes/VideoFrameSample" - ] - }, - { - "group": "고급", - "pages": [ - { - "group": "Debug", - "pages": [ - "ko/built-in-nodes/EasyCache", - "ko/built-in-nodes/LazyCache", - "ko/built-in-nodes/ModelComputeDtype" - ] - }, - { - "group": "Guidance", - "pages": [ - "ko/built-in-nodes/CFGNorm", - "ko/built-in-nodes/CFGZeroStar", - "ko/built-in-nodes/LTXVModalityGuidance", - "ko/built-in-nodes/LTXVSpatioTemporalGuidance", - "ko/built-in-nodes/NAGuidance", - "ko/built-in-nodes/SkipLayerGuidanceDiT", - "ko/built-in-nodes/SkipLayerGuidanceDiTSimple", - "ko/built-in-nodes/SkipLayerGuidanceSD3", - "ko/built-in-nodes/TCFG" - ] - }, - { - "group": "Hooks", - "pages": [ - { - "group": "Clip", + "group": "Sora", "pages": [ - "ko/built-in-nodes/SetClipHooks" + "ko/built-in-nodes/OpenAIVideoSora2" ] }, { - "group": "Combine", + "group": "Sync.so", "pages": [ - "ko/built-in-nodes/CombineHooks", - "ko/built-in-nodes/CombineHooksEight", - "ko/built-in-nodes/CombineHooksFour" + "ko/built-in-nodes/SyncLipSyncNode", + "ko/built-in-nodes/SyncTalkingImageNode" ] }, { - "group": "Cond Pair", + "group": "Topaz", "pages": [ - "ko/built-in-nodes/PairConditioningCombine", - "ko/built-in-nodes/PairConditioningSetDefaultAndCombine", - "ko/built-in-nodes/PairConditioningSetProperties", - "ko/built-in-nodes/PairConditioningSetPropertiesAndCombine" + "ko/built-in-nodes/TopazVideoEnhance", + "ko/built-in-nodes/TopazVideoEnhanceV2" ] }, { - "group": "Cond Single", + "group": "Veo", "pages": [ - "ko/built-in-nodes/ConditioningSetDefaultAndCombine", - "ko/built-in-nodes/ConditioningSetProperties", - "ko/built-in-nodes/ConditioningSetPropertiesAndCombine" + "ko/built-in-nodes/Veo3FirstLastFrameNode", + "ko/built-in-nodes/Veo3VideoGenerationNode", + "ko/built-in-nodes/VeoVideoGenerationNode" ] }, { - "group": "Create", + "group": "Vidu", "pages": [ - "ko/built-in-nodes/CreateHookLora", - "ko/built-in-nodes/CreateHookLoraModelOnly", - "ko/built-in-nodes/CreateHookModelAsLora", - "ko/built-in-nodes/CreateHookModelAsLoraModelOnly" + "ko/built-in-nodes/Vidu2ImageToVideoNode", + "ko/built-in-nodes/Vidu2ReferenceVideoNode", + "ko/built-in-nodes/Vidu2StartEndToVideoNode", + "ko/built-in-nodes/Vidu2TextToVideoNode", + "ko/built-in-nodes/Vidu3ImageToVideoNode", + "ko/built-in-nodes/Vidu3StartEndToVideoNode", + "ko/built-in-nodes/Vidu3TextToVideoNode", + "ko/built-in-nodes/ViduExtendVideoNode", + "ko/built-in-nodes/ViduImageToVideoNode", + "ko/built-in-nodes/ViduMultiFrameVideoNode", + "ko/built-in-nodes/ViduReferenceVideoNode", + "ko/built-in-nodes/ViduStartEndToVideoNode", + "ko/built-in-nodes/ViduTextToVideoNode" ] }, { - "group": "Manual", + "group": "Wan", "pages": [ - "ko/built-in-nodes/SetModelHooksOnCond" + "ko/built-in-nodes/HappyHorseImageToVideoApi", + "ko/built-in-nodes/HappyHorseReferenceVideoApi", + "ko/built-in-nodes/HappyHorseTextToVideoApi", + "ko/built-in-nodes/HappyHorseVideoEditApi", + "ko/built-in-nodes/Wan2ImageToVideoApi", + "ko/built-in-nodes/Wan2ReferenceVideoApi", + "ko/built-in-nodes/Wan2TextToVideoApi", + "ko/built-in-nodes/Wan2VideoContinuationApi", + "ko/built-in-nodes/Wan2VideoEditApi", + "ko/built-in-nodes/WanImageToVideoApi", + "ko/built-in-nodes/WanReferenceVideoApi", + "ko/built-in-nodes/WanTextToVideoApi" ] }, { - "group": "Scheduling", + "group": "Wavespeed", "pages": [ - "ko/built-in-nodes/CreateHookKeyframe", - "ko/built-in-nodes/CreateHookKeyframesFromFloats", - "ko/built-in-nodes/CreateHookKeyframesInterpolated", - "ko/built-in-nodes/SetHookKeyframes" + "ko/built-in-nodes/WavespeedFlashVSRNode" ] - }, - "ko/built-in-nodes/ConditioningTimestepsRange" - ] - }, - { - "group": "Loaders", - "pages": [ - "ko/built-in-nodes/DeprecatedCheckpointLoader", - "ko/built-in-nodes/DeprecatedDiffusersLoader" - ] - }, - { - "group": "Model Merging", - "pages": [ - "ko/built-in-nodes/SaveLoRANode" - ] - }, - { - "group": "Multigpu", - "pages": [ - "ko/built-in-nodes/MultiGPU_Options", - "ko/built-in-nodes/MultiGPU_WorkUnits", - "ko/built-in-nodes/SelectCLIPDevice", - "ko/built-in-nodes/SelectModelDevice", - "ko/built-in-nodes/SelectVAEDevice" - ] - }, - "ko/built-in-nodes/IdeogramV1", - "ko/built-in-nodes/IdeogramV2", - "ko/built-in-nodes/KlingCameraControlI2VNode", - "ko/built-in-nodes/KlingCameraControls", - "ko/built-in-nodes/KlingCameraControlT2VNode", - "ko/built-in-nodes/KlingDualCharacterVideoEffectNode", - "ko/built-in-nodes/KlingSingleImageVideoEffectNode", - "ko/built-in-nodes/KlingVirtualTryOnNode", - "ko/built-in-nodes/MoonvalleyImg2VideoNode", - "ko/built-in-nodes/MoonvalleyTxt2VideoNode", - "ko/built-in-nodes/MoonvalleyVideo2VideoNode", - "ko/built-in-nodes/SeedVR2ProgressiveSampler", - "ko/built-in-nodes/StabilityAudioInpaint", - "ko/built-in-nodes/StabilityAudioToAudio", - "ko/built-in-nodes/StabilityStableImageSD_3_5Node", - "ko/built-in-nodes/StabilityStableImageUltraNode", - "ko/built-in-nodes/StabilityTextToAudio", - "ko/built-in-nodes/StabilityUpscaleConservativeNode", - "ko/built-in-nodes/StabilityUpscaleCreativeNode", - "ko/built-in-nodes/StabilityUpscaleFastNode" - ] - }, - { - "group": "로더", - "pages": [ - "ko/built-in-nodes/ControlNetLoader" - ] - }, - { - "group": "모델 패치", - "pages": [ - { - "group": "Anima", - "pages": [ - "ko/built-in-nodes/AnimaLLLiteApply" + } ] } ] @@ -11396,226 +11477,124 @@ ] }, { - "group": "유틸리티", - "pages": [ - "ko/built-in-nodes/BatchImagesMasksLatentsNode", - "ko/built-in-nodes/MarkdownNote", - "ko/built-in-nodes/Note", - "ko/built-in-nodes/Reroute", - "ko/built-in-nodes/TerminalLog", - "ko/built-in-nodes/wanBlockSwap" - ] - }, - { - "group": "이미지", + "group": "Text", + "pages": [ + "ko/built-in-nodes/AddTextPrefix", + "ko/built-in-nodes/AddTextSuffix", + "ko/built-in-nodes/BuildJsonPromptIdeogram", + "ko/built-in-nodes/CaseConverter", + "ko/built-in-nodes/ConvertArrayToString", + "ko/built-in-nodes/ConvertDictionaryToString", + "ko/built-in-nodes/JsonExtractString", + "ko/built-in-nodes/MergeTextLists", + "ko/built-in-nodes/RegexExtract", + "ko/built-in-nodes/RegexMatch", + "ko/built-in-nodes/RegexReplace", + "ko/built-in-nodes/ReplaceText", + "ko/built-in-nodes/SaveText", + "ko/built-in-nodes/StringCompare", + "ko/built-in-nodes/StringConcatenate", + "ko/built-in-nodes/StringContains", + "ko/built-in-nodes/StringFormat", + "ko/built-in-nodes/StringLength", + "ko/built-in-nodes/StringReplace", + "ko/built-in-nodes/StringSubstring", + "ko/built-in-nodes/StringTrim", + "ko/built-in-nodes/StripWhitespace", + "ko/built-in-nodes/TextGenerate", + "ko/built-in-nodes/TextGenerateLTX2Prompt", + "ko/built-in-nodes/TextOverlay", + "ko/built-in-nodes/TextToLowercase", + "ko/built-in-nodes/TextToUppercase", + "ko/built-in-nodes/TruncateText" + ] + }, + { + "group": "Utilities", "pages": [ { - "group": "Adjustments", - "pages": [ - "ko/built-in-nodes/AdjustBrightness", - "ko/built-in-nodes/AdjustContrast" - ] - }, - { - "group": "Background Removal", - "pages": [ - "ko/built-in-nodes/RemoveBackground" - ] - }, - { - "group": "Batch", - "pages": [ - "ko/built-in-nodes/ImageDeduplication", - "ko/built-in-nodes/ImageFromBatch", - "ko/built-in-nodes/ImageGrid", - "ko/built-in-nodes/ImageMergeTileList", - "ko/built-in-nodes/MergeImageLists", - "ko/built-in-nodes/RebatchImages", - "ko/built-in-nodes/RepeatImageBatch", - "ko/built-in-nodes/ShuffleDataset", - "ko/built-in-nodes/ShuffleImageTextDataset", - "ko/built-in-nodes/SplitImageToTileList" - ] - }, - { - "group": "Color", - "pages": [ - "ko/built-in-nodes/ImageRGBToYUV", - "ko/built-in-nodes/ImageYUVToRGB", - "ko/built-in-nodes/NormalizeImages" - ] - }, - { - "group": "Compositing", - "pages": [ - "ko/built-in-nodes/ImageCompositeMasked", - "ko/built-in-nodes/JoinImageWithAlpha", - "ko/built-in-nodes/PorterDuffImageComposite", - "ko/built-in-nodes/SplitImageWithAlpha" - ] - }, - { - "group": "Detection", - "pages": [ - "ko/built-in-nodes/DrawBBoxes", - "ko/built-in-nodes/MediaPipeFaceLandmarker", - "ko/built-in-nodes/MediaPipeFaceMask", - "ko/built-in-nodes/MediaPipeFaceMeshVisualize", - "ko/built-in-nodes/RTDETR_detect", - "ko/built-in-nodes/SAM3_Detect", - "ko/built-in-nodes/SAM3_TrackPreview", - "ko/built-in-nodes/SAM3_TrackToMask", - "ko/built-in-nodes/SAM3_VideoTrack", - "ko/built-in-nodes/SDPoseDrawKeypoints", - "ko/built-in-nodes/SDPoseFaceBBoxes", - "ko/built-in-nodes/SDPoseKeypointExtractor" - ] - }, - { - "group": "Filters", - "pages": [ - "ko/built-in-nodes/Canny", - "ko/built-in-nodes/ColorTransfer", - "ko/built-in-nodes/ImageAddNoise", - "ko/built-in-nodes/ImageBlend", - "ko/built-in-nodes/ImageBlur", - "ko/built-in-nodes/ImageQuantize", - "ko/built-in-nodes/ImageSharpen", - "ko/built-in-nodes/Morphology" - ] - }, - { - "group": "Geometry Estimation", - "pages": [ - "ko/built-in-nodes/DA3GeometryToMesh", - "ko/built-in-nodes/DA3GeometryToPointCloud", - "ko/built-in-nodes/DA3Inference", - "ko/built-in-nodes/DA3Render", - "ko/built-in-nodes/MoGeInference", - "ko/built-in-nodes/MoGePanoramaInference", - "ko/built-in-nodes/MoGePointMapToMesh", - "ko/built-in-nodes/MoGeRender" - ] - }, - { - "group": "Mask", + "group": "Logic", "pages": [ - "ko/built-in-nodes/BatchMasksNode", - "ko/built-in-nodes/CropMask", - "ko/built-in-nodes/FeatherMask", - "ko/built-in-nodes/GrowMask", - "ko/built-in-nodes/ImageColorToMask", - "ko/built-in-nodes/ImageToMask", - "ko/built-in-nodes/InvertMask", - "ko/built-in-nodes/MaskComposite", - "ko/built-in-nodes/MaskPreview", - "ko/built-in-nodes/MaskToImage", - "ko/built-in-nodes/SolidMask", - "ko/built-in-nodes/ThresholdMask", - "ko/built-in-nodes/VOIDQuadmaskPreprocess" + "ko/built-in-nodes/AutogrowNamesTestNode", + "ko/built-in-nodes/AutogrowPrefixTestNode", + "ko/built-in-nodes/ComboOptionTestNode", + "ko/built-in-nodes/ComfyAndNode", + "ko/built-in-nodes/ComfyNotNode", + "ko/built-in-nodes/ComfyOrNode", + "ko/built-in-nodes/ComfySoftSwitchNode", + "ko/built-in-nodes/ComfySwitchNode", + "ko/built-in-nodes/ConvertStringToComboNode", + "ko/built-in-nodes/DCTestNode", + "ko/built-in-nodes/InvertBooleanNode" ] }, { - "group": "Post Processors", + "group": "Primitive", "pages": [ - "ko/built-in-nodes/SeedVR2PostProcessing" + "ko/built-in-nodes/PrimitiveBoolean", + "ko/built-in-nodes/PrimitiveBoundingBox", + "ko/built-in-nodes/PrimitiveFloat", + "ko/built-in-nodes/PrimitiveInt", + "ko/built-in-nodes/PrimitiveString", + "ko/built-in-nodes/PrimitiveStringMultiline" ] }, + "ko/built-in-nodes/ColorToRGBInt", + "ko/built-in-nodes/ComfyMathExpression", + "ko/built-in-nodes/ComfyNumberConvert", + "ko/built-in-nodes/CreateBoundingBoxes", + "ko/built-in-nodes/CreateList", + "ko/built-in-nodes/CurveEditor", + "ko/built-in-nodes/CustomCombo", + "ko/built-in-nodes/ImageHistogram", + "ko/built-in-nodes/PreviewAny", + "ko/built-in-nodes/ResolutionSelector", + "ko/built-in-nodes/SeedNode" + ] + }, + { + "group": "유틸리티", + "pages": [ + "ko/built-in-nodes/BatchImagesMasksLatentsNode", + "ko/built-in-nodes/MarkdownNote", + "ko/built-in-nodes/Note", + "ko/built-in-nodes/Reroute", + "ko/built-in-nodes/TerminalLog", + "ko/built-in-nodes/wanBlockSwap" + ] + }, + { + "group": "Video", + "pages": [ { - "group": "Pre Processors", + "group": "Batch", "pages": [ - "ko/built-in-nodes/SeedVR2Preprocess" + "ko/built-in-nodes/ShuffleVideoDataset" ] }, { - "group": "Shader", + "group": "Preprocessors", "pages": [ - "ko/built-in-nodes/GLSLShader" + "ko/built-in-nodes/LTXVPreprocess" ] }, { "group": "Transform", "pages": [ - "ko/built-in-nodes/CenterCropImages", - "ko/built-in-nodes/CropByBBoxes", - "ko/built-in-nodes/ImageCrop", - "ko/built-in-nodes/ImageCropV2", - "ko/built-in-nodes/ImageFlip", - "ko/built-in-nodes/ImagePadForOutpaint", - "ko/built-in-nodes/ImageRotate", - "ko/built-in-nodes/ImageStitch", - "ko/built-in-nodes/RandomCropImages", - "ko/built-in-nodes/ResizeAndPadImage", - "ko/built-in-nodes/ResizeImagesByLongerEdge", - "ko/built-in-nodes/ResizeImagesByShorterEdge" - ] - }, - { - "group": "Upscaling", - "pages": [ - "ko/built-in-nodes/ImageScale", - "ko/built-in-nodes/ImageScaleBy", - "ko/built-in-nodes/ImageScaleToMaxDimension", - "ko/built-in-nodes/ImageScaleToTotalPixels", - "ko/built-in-nodes/ImageUpscaleWithModel" - ] - }, - { - "group": "Video", - "pages": [ - "ko/built-in-nodes/ShuffleVideoTextDataset", - "ko/built-in-nodes/WanDancerPadKeyframes", - "ko/built-in-nodes/WanDancerPadKeyframesList" - ] - }, - "ko/built-in-nodes/AddLayer", - "ko/built-in-nodes/BatchImagesNode", - "ko/built-in-nodes/ConditioningCombine", - "ko/built-in-nodes/EmptyImage", - "ko/built-in-nodes/GetImageSize", - "ko/built-in-nodes/ImageBatch", - "ko/built-in-nodes/ImageCompare", - "ko/built-in-nodes/ImageCompositor", - "ko/built-in-nodes/ImageInvert", - "ko/built-in-nodes/LayersFromBoundingBoxes", - "ko/built-in-nodes/LoadImage", - "ko/built-in-nodes/LoadImageDataSetFromFolder", - "ko/built-in-nodes/LoadImageMask", - "ko/built-in-nodes/LoadImageOutput", - "ko/built-in-nodes/LoadImageSetFromFolderNode", - "ko/built-in-nodes/LoadImageSetNode", - "ko/built-in-nodes/LoadImageTextDataSetFromFolder", - "ko/built-in-nodes/LoadImageTextSetFromFolderNode", - "ko/built-in-nodes/LoraLoader", - "ko/built-in-nodes/LoraLoaderModelOnly", - "ko/built-in-nodes/Painter", - "ko/built-in-nodes/PreviewImage", - "ko/built-in-nodes/ResizeImageMaskNode", - "ko/built-in-nodes/SaveAnimatedPNG", - "ko/built-in-nodes/SaveAnimatedWEBP", - "ko/built-in-nodes/SaveImage", - "ko/built-in-nodes/SaveImageAdvanced", - "ko/built-in-nodes/SaveImageDataSetToFolder", - "ko/built-in-nodes/SaveImageTextDataSetToFolder", - "ko/built-in-nodes/SaveSVGNode", - "ko/built-in-nodes/WebcamCapture" - ] - }, - { - "group": "컨디셔닝", - "pages": [ - { - "group": "Video Models", - "pages": [ - "ko/built-in-nodes/LTXVDurationPredictor", - "ko/built-in-nodes/Stablezero123Conditioning", - "ko/built-in-nodes/Stablezero123ConditioningBatched", - "ko/built-in-nodes/SVD_img2vid_Conditioning", - "ko/built-in-nodes/SvdImg2vidConditioning" + "ko/built-in-nodes/VideoRandomTemporalCrop", + "ko/built-in-nodes/VideoTemporalCrop" ] }, - "ko/built-in-nodes/ConditioningAverage", - "ko/built-in-nodes/Sd4xupscaleConditioning" + "ko/built-in-nodes/CreateVideo", + "ko/built-in-nodes/FrameInterpolate", + "ko/built-in-nodes/GetVideoComponents", + "ko/built-in-nodes/LoadVideo", + "ko/built-in-nodes/LoadVideoDataSetFromFolder", + "ko/built-in-nodes/LoadVideoTextDataSetFromFolder", + "ko/built-in-nodes/SaveVideo", + "ko/built-in-nodes/SaveWEBM", + "ko/built-in-nodes/Video Slice", + "ko/built-in-nodes/VideoFrameSample" ] } ] @@ -11623,24 +11602,12 @@ ] }, { - "tab": "개발", + "tab": "API 개발", "pages": [ - "ko/development/overview", { - "group": "워크플로 실행", + "group": "Comfy로 개발하기", "pages": [ - "ko/development/api-development/overview", - "ko/development/api-development/getting-an-api-key", - "ko/development/api-development/sdks", - "ko/api-reference/v2/overview", - { - "group": "Comfy API v2 참조", - "openapi": { - "source": "openapi-v2.yaml", - "directory": "ko/api-reference/v2" - } - }, - "ko/development/api-development/sdks-design", + "ko/development/overview", { "group": "Comfy Cloud", "pages": [ @@ -11658,17 +11625,62 @@ "ko/development/comfyui-server/comms_messages", "ko/development/comfyui-server/startup-flags" ] + } + ] + }, + { + "group": "워크플로 실행", + "pages": [ + "ko/development/api-development/sdks", + "ko/development/api-development/getting-an-api-key", + "ko/development/api-development/overview", + "ko/api-reference/v2/overview", + { + "group": "Comfy API v2 참조", + "openapi": { + "source": "openapi-v2.yaml", + "directory": "ko/api-reference/v2" + } }, + "ko/development/api-development/sdks-design", + "ko/development/api-development/workflow-api-format", + "ko/development/api-development/workflow-metadata", + "ko/development/comfyui-server/api-key-integration" + ] + }, + { + "group": "Comfy CLI", + "pages": [ + "ko/comfy-cli/getting-started", + "ko/comfy-cli/reference", + "ko/comfy-cli/troubleshooting" + ] + }, + { + "group": "스펙", + "pages": [ { - "group": "워크플로 형식", + "group": "Workflow JSON", "pages": [ - "ko/development/api-development/workflow-api-format", - "ko/development/api-development/workflow-metadata" + "ko/specs/workflow_json", + "ko/specs/workflow_json_0.4" ] }, - "ko/development/comfyui-server/api-key-integration" + { + "group": "노드 정의", + "pages": [ + "ko/specs/nodedef_json", + "ko/specs/nodedef_json_1_0" + ] + } ] - }, + } + ] + }, + { + "tab": "커스텀 노드", + "pages": [ + "ko/custom-nodes/intro", { "group": "커스텀 노드 구축", "pages": [ @@ -11734,33 +11746,6 @@ "ko/registry/specifications", "ko/registry/api-reference/overview" ] - }, - { - "group": "Comfy CLI", - "pages": [ - "ko/comfy-cli/getting-started", - "ko/comfy-cli/reference", - "ko/comfy-cli/troubleshooting" - ] - }, - { - "group": "스펙", - "pages": [ - { - "group": "Workflow JSON", - "pages": [ - "ko/specs/workflow_json", - "ko/specs/workflow_json_0.4" - ] - }, - { - "group": "노드 정의", - "pages": [ - "ko/specs/nodedef_json", - "ko/specs/nodedef_json_1_0" - ] - } - ] } ] }, diff --git a/ja/custom-nodes/intro.mdx b/ja/custom-nodes/intro.mdx new file mode 100644 index 000000000..fd29742fc --- /dev/null +++ b/ja/custom-nodes/intro.mdx @@ -0,0 +1,25 @@ +--- +title: "カスタムノード" +sidebarTitle: "概要" +description: "ComfyUI カスタムノードの構築、拡張、公開に適切なパスを選択します。" +translationSourceHash: 86b7348f +translationFrom: custom-nodes/intro.mdx +--- + +カスタムノードは、新しいサーバーサイドの動作、ユーザーインターフェイス機能、および統合機能を追加することで ComfyUI を拡張します。やろうとしていることに応じてパスを選択してください。 + + + + ノードを構築する前に、クライアント・サーバーモデル、ノードカテゴリ、Python バックエンド、JavaScript フロントエンドについて学びます。 + + + ノードパッケージを準備し、Comfy Registry に公開して、バージョンとリリースを管理します。 + + + +## 出発点を選ぶ + +- **カスタムノードが初めての場合:** [カスタムノードの概要](/ja/custom-nodes/overview) から始めます。 +- **バックエンドを構築する場合:** [Python(バックエンド)](/ja/custom-nodes/backend/server_overview) を参照してください。 +- **UI を拡張する場合:** [JavaScript(UI)](/ja/custom-nodes/js/javascript_overview) を参照してください。 +- **パッケージを公開する場合:** [Registry の概要](/ja/registry/overview) から始めます。 \ No newline at end of file diff --git a/ja/development/api-development/sdks.mdx b/ja/development/api-development/sdks.mdx index ec7bd801b..a642c8d58 100644 --- a/ja/development/api-development/sdks.mdx +++ b/ja/development/api-development/sdks.mdx @@ -1,20 +1,22 @@ --- title: "Comfy SDK" description: "独自のアプリケーションからComfyUIワークフローを実行するための公式PythonおよびTypeScript SDK" -sidebarTitle: "概要" +sidebarTitle: "SDK 概要" icon: "code" -translationSourceHash: 4b01fa84 +translationSourceHash: f64d3545 translationFrom: development/api-development/sdks.mdx translationBlockHashes: "_intro": 0df68ad9 "Install": 6bcd1ccf - "Quickstart": 47f1a4c5 - "Choosing a base URL": 46f88061 - "Watching a job run": d41efc9a - "What the SDKs cover today": 6151cc1e + "Quickstart": 02297586 + "Choosing a base URL": 13035ca9 + "Watching a job run": a1c73d9b + "Tracing an output back to its workflow": b01886a3 + "What the SDKs cover today": 3f918c7b "Reference": 5fc97b4a "Feedback": f8553211 --- + **ベータ。** SDKと、それらが呼び出すComfy API v2は`0.1.x`です。APIの形状は、確定する前にまだ変更される可能性があります。今が、間違っていることを私たちに伝えるのに最もコストのかからない時期です。[フィードバック](#フィードバック)を参照してください。 @@ -91,15 +93,39 @@ await job.getOutputs("9")[0].toFile("out.png"); `run()` はジョブを送信し、ターミナル状態に達するまで待機します。実行中に他の作業を行うには、代わりに `submit()` を使用し、[イベントストリーム](#ジョブの実行を監視する)を監視してください。 -代わりに自分の ComfyUI に対して実行するには、1行変更してキーを削除します: `Comfy("http://127.0.0.1:8189")`。以下を参照してください。 +代わりに自分の ComfyUI に対して実行するには、`COMFY_BASE_URL` を設定してキーを削除します。以下を参照してください。 ## ベースURLの選択 | 接続先 | Base URL | APIキー | |---|---|---| | **Comfy Cloud** | `https://cloud.comfy.org` (デフォルト) | 必須 | +| **サーバーレスデプロイ** | `https://.run.comfy.app` | 必須 | | **ご自身のComfyUI** | `http://127.0.0.1:8189` (ローカルプロキシ) | デフォルトでは不要。オプションの静的ベアラートークン | +ベースURLはコンストラクタ引数ではなく、`COMFY_BASE_URL`環境変数から取得されます: + +```bash +export COMFY_BASE_URL="https://.run.comfy.app" # serverless +export COMFY_BASE_URL="http://127.0.0.1:8189" # self-hosted proxy +``` + +この変数はクライアントが構築されるたびに読み取られ、`http(s)` URLである必要があります。未設定または空白の場合はComfy Cloudを意味します。したがって、クライアント自体はどこでも同じです: + + +```python Python +client = Comfy(api_key="comfyui-...") +``` + +```typescript TypeScript +const client = new Comfy({ apiKey: "comfyui-..." }); +``` + + + + 初期ビルドからアップグレードしますか? `Comfy("", "")`は、`COMFY_BASE_URL`を設定した`Comfy(api_key="")`になりました。`api_key`はキーワード専用引数なので、以前の位置引数での呼び出しは、URLをキーとして静かに読み取るのではなく、`TypeError`を発生させます。 + + ### Comfy Cloud そのまま動作します。[APIキー](/ja/development/api-development/getting-an-api-key)を作成し、クライアントに渡します。 @@ -108,6 +134,12 @@ await job.getOutputs("9")[0].toFile("out.png"); APIアクセスには有料のComfy Cloudサブスクリプションが必要です。無料プランには含まれません。同時に実行できるジョブ数はプランによって異なります。[Cloud API概要](/ja/development/cloud/overview#並列実行(同時ジョブ))をご覧ください。 +### サーバーレスデプロイ + +[開発者プラットフォーム](https://platform.comfy.org)を通じてデプロイしたワークフローには、専用のエンドポイントが割り当てられます。`COMFY_BASE_URL`をそのエンドポイントに指定し、Comfy Cloudとまったく同じようにAPIキーを使用します。このガイドのすべてが同じように機能します。 + +サーバーレスデプロイはピン留めされた1つのワークフローを実行するため、`get_workflow()`は実行されたグラフ(`format: "api"`)を返します。 + ### ご自身のComfyUI ベータ期間中、v2 APIは[comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy)によって提供されます。これは、ComfyUIと一緒に動作する小規模なオープンソースサービスです。 @@ -119,7 +151,7 @@ comfy-api-proxy デフォルトでは、`127.0.0.1:8188`のComfyUIをプロキシし、`127.0.0.1:8189`でv2 APIを提供します。いずれかを変更するには、`--comfyui`と`--port`を使用します。 -その後、SDKを`http://127.0.0.1:8189`に指定します。認証はデフォルトでは不要です。プロキシに静的ベアラートークンを設定している場合は、同じトークンを SDK の API キーとして渡します: `Comfy("http://127.0.0.1:8189", api_key="...")`。プロキシはデフォルトではループバックのみにバインドします。インストール環境にモデルファイルもアップロードしたい場合は、`--comfyui-base-dir /path/to/ComfyUI`を指定して実行してください。 +次に、`COMFY_BASE_URL="http://127.0.0.1:8189"`を設定します。認証はデフォルトでは不要です。プロキシに静的ベアラートークンを設定している場合は、そのトークンをSDKのAPIキーとして渡します: `Comfy(api_key="...")`。プロキシはデフォルトではループバックにのみバインドします。インストール環境にモデルファイルもアップロードしたい場合は、`--comfyui-base-dir /path/to/ComfyUI`を指定して実行してください。 プロキシは暫定対策です。v2 APIが安定すれば、ComfyUIコアに組み込まれ、プロキシは不要になります。 @@ -171,44 +203,96 @@ for await (const event of job.events()) { ストリームはライブフィードであり、再生可能なログではありません。進捗を表示するためのものであり、結果の取得に依存するためのものではありません。ジョブのポーリングこそが信頼できる情報源であり、`run()`、`wait()`、`result()` は自動的にポーリングにフォールバックします。理由については、[設計ノート](/ja/development/api-development/sdks-design#まずポーリング、進捗はストリームで) を参照してください。 -## 現在SDKがカバーするもの +## 出力を生成元のワークフローまで遡る + +出力には、それを生成したジョブのIDが保持されています。そのため、サイドテーブルを保持しなくても、ファイルから逆方向に遡ることができます。 + + +```python Python +output = job.outputs[0] +output.job_id # the job that produced this file +``` + +```typescript TypeScript +const output = job.outputs[0]; +output.jobId; // the job that produced this file +``` + + +同じIDは、単体で取得したアセットにも付いています。後で見つけたファイルでも、そのジョブまで遡れます。アップロードしたアセットには生成元のジョブがないため、この値は`None`(TypeScriptでは`undefined`)になります。 + +ジョブから、その背後にあるワークフローを取得できます。これは、このプロセス内で送信したものではなく、IDで再水和されたジョブでも機能します。 + + +```python Python +wf = job.get_workflow() + +if wf.format == "save": + ... # the workflow as authored, canvas layout and Note nodes intact +else: + ... # the executed API-format graph +``` + +```typescript TypeScript +const wf = await job.getWorkflow(); + +if (wf.format === "save") { + // the workflow as authored, canvas layout and Note nodes intact +} else { + // the executed API-format graph +} +``` + + +**常に`format`で分岐してください。** 返ってくる形状は、ジョブがどのように送信されたかによって決まり、リクエストごとに制御できるものではありません。 + +| `format` | 取得できるもの | ケース | +|---|---|---| +| `save` | ジョブが実行されたバージョンの作成時ワークフロー。キャンバスレイアウトとNoteなどのエディタ専用ノードを含みます | Comfy Cloudエディタから送信されたジョブ。ワークフローバージョンが固定されています | +| `api` | 実行されたグラフ。エディタ専用の構成要素は除去され、Get/Setノードは展開されています | その他すべて(今日これらのSDKを通じて送信されるすべてのジョブを含みます) | + +SDKを通じて送信したジョブは常に`api`を返します。v2送信にはバージョン固定フィールドがまだないためです。この動作は将来変更されます。判別子が用意されているのは、コード側の変更が不要になるようにするためです。 + +## SDK が現在対応している範囲 -最初のバージョンは、1つのことを適切に行います: ワークフローを実行して結果を取得することです。 +最初のバージョンは、1つのことをきちんと行います。ワークフローを実行して結果を取得することです。 -- **アセット。** ファイル、バイト、ストリーム、またはURLから入力ハンドルを作成します。ハンドルは遅延評価され、コンテンツアドレス方式であるため、同じ入力で再実行しても再アップロードされません。 -- **送信。** API形式のグラフを送信します。送信は冪等であり、キューがいっぱいの場合は、制限された予算内で自動的に再試行されます。 -- **実行。** `wait()`でポーリングするか、`events()`でライブの進行状況を追跡します。 -- **出力。** ディスクに書き込んだり、メモリにバッファリングしたり、バイト範囲を取得したり、短期間有効なダウンロードURLを取得したりできます。 -- **エラー。** 生のステータスコードではなく、`JobFailed`、`Unauthorized`、`InsufficientCredits`、`QueueFull`などの型付き例外。 -- **キャンセル。** 実行中のジョブはキャンセルできます。TypeScriptでは、任意の呼び出しで`AbortSignal`も受け入れます。 +- **アセット:** ファイル、バイト、ストリーム、または URL から入力ハンドルを作成します。ハンドルは遅延評価され、コンテンツアドレス方式のため、同じ入力で再実行しても再アップロードされません。 +- **送信:** API 形式のグラフを送信します。送信は冪等であり、キューが満杯の場合も、限られた予算内で自動的に再試行されます。 +- **実行:** `wait()` でポーリングするか、`events()` でリアルタイムの進捗を追跡します。 +- **出力:** ディスクに書き込む、メモリにバッファリングする、バイト範囲を取得する、または短期間有効なダウンロード URL を取得します。 +- **トレーサビリティ:** すべての出力には、それを生成したジョブの ID が含まれ、ジョブからその背後にあるワークフローを取得することもできます。 +- **アセットの削除:** アップロードしたアセットを、ハンドルまたは ID で削除します。 +- **エラー:** 生のステータスコードではなく、`JobFailed`、`Unauthorized`、`InsufficientCredits`、`QueueFull` などの型付き例外。 +- **キャンセル:** 実行中のジョブをキャンセルできます。TypeScript では、任意の呼び出しで `AbortSignal` も受け付けます。 -Pythonには、同じサーフェスを持つ同期`Comfy`クライアントと`AsyncComfy`クライアントの両方が用意されています。TypeScriptは非同期のみです。 +Python には、同期 `Comfy` クライアントと、同じインターフェースを持つ `AsyncComfy` クライアントの両方が用意されています。TypeScript は非同期のみです。 -このバージョンに含まれないもの: 保存済みワークフローの管理、モデルライブラリ、ノードイントロスペクション、名前付きワークフローパラメータ。[設計ノート](/ja/development/api-development/sdks-design#最初のバージョンの範囲)では、サーフェスがこれほど小さく始まる理由を説明しています。 +このバージョンには含まれないもの: 保存したワークフローの管理、モデルライブラリ、ノードのイントロスペクション、名前付きワークフローパラメータ。[設計ノート](/ja/development/api-development/sdks-design#最初のバージョンの範囲) では、なぜ API サーフェスがこのように小さく始まるのかを説明しています。 ## リファレンス -SDK の README は、認証、アセット、エラー、低レベルのエスケープハッチなど、各言語の完全なリファレンスです。 +SDK の README は、各言語の完全なリファレンスです。認証、アセット、エラー、および低レベルのエスケープハッチを含みます。 - comfy-sdk は PyPI で公開されています。同期クライアントと非同期クライアントに対応しています。 + comfy-sdk を PyPI で公開。同期・非同期クライアント。 - @comfyorg/sdk は npm で公開されています。型付けされた非同期クライアントで、低レベルクライアントも備えています。 + @comfyorg/sdk を npm で公開。型付き・非同期、低レベルクライアントを備えています。 - 両 SDK の基盤となる HTTP API です。任意の言語から直接利用できます。 + 両方のSDKの基盤となるHTTP API。任意の言語から直接使用できます。 - この API が存在する理由、既存の ComfyUI API との関連性、そして今後の展開について説明します。 + このAPIが存在する理由、既存のComfyUI APIとの関係、今後の予定。 ## フィードバック -あえて `0.1.x` にしています。メソッド名、クライアントの形、イベントカタログ、エラーの分類体系、実際のアセット処理の使用感は、まだどれも変更が容易です。今後数週間のうちにインターフェースを固定する予定です。その後は、「長期的にサポートします」というのは、もはやあなたのために修正できないという意味になり始めます。 +これは意図的に`0.1.x`です。メソッド名、クライアントの形状、イベントカタログ、エラーの分類体系、実際のアセット操作の使用感は、すべてまだ変更コストが低く、今後数週間でサーフェスを固定する予定です。その後、「長期的にサポートします」という言葉は、もはや修正できないことを意味するようになります。 -だから、使いにくい点、見つかると思っていたのに見つからなかった点、結局回避策を取らざるを得なかった点を教えてください。そのための場所は、[私たちのDiscord](https://discord.com/invite/comfyorg) の `#developer-platform` チャンネルです。 +使いにくい点、期待していたのに見つからなかったもの、回避策で対応せざるを得なかったことをお知らせください。[私たちのDiscord](https://discord.com/invite/comfyorg)の`#developer-platform`チャンネルがその場所です。 -別の言語向けのファーストパーティSDKが必要な場合は、そこでお知らせください。どちらのSDKも同じ文書化されたHTTPコントラクトに基づいているため、現在どの言語でもAPIと通信できますが、むしろ需要がどこにあるのかを知りたいのです。 +別の言語のファーストパーティSDKが必要な場合は、そこでその旨をお伝えください。両方のSDKは同じ文書化されたHTTP契約に基づいているため、今日の時点であらゆる言語がAPIと通信できますが、どこに需要があるのかを把握したいと考えています。 diff --git a/ja/development/overview.mdx b/ja/development/overview.mdx index 5cdf24ca4..80d4e6cf3 100644 --- a/ja/development/overview.mdx +++ b/ja/development/overview.mdx @@ -1,7 +1,7 @@ --- title: "概要" description: "開発者としての ComfyUI の利用" -translationSourceHash: 29b59dd3 +translationSourceHash: 6fb45989 translationFrom: development/overview.mdx translationBlockHashes: "_intro": 21d39346 @@ -10,13 +10,11 @@ translationBlockHashes: "Cloud API": 80dab2ed "Agent Tools / MCP": abe9d443 "Comfy CLI": 11578ce8 - "Develop Custom Nodes": 51cd210e - "Registry": cc46f1e1 + "Custom Nodes": ef7496d1 + "Registry": 883b9485 --- - - ComfyUI はモジュール式の GenAI 推論エンジンです。API サーバーとしてデプロイしたり、API 経由でアクセスしたり、カスタムノードで拡張したり、コマンドラインから管理したりできます。目的に合ったパスを選んでください。 ## ComfyUI 上で構築する @@ -69,39 +67,10 @@ ComfyUI のインストール、カスタムノード、ワークフローをコ 関連リンク:[CLI リファレンス](/ja/comfy-cli/reference) · [トラブルシューティング](/ja/comfy-cli/troubleshooting) -## カスタムノードの開発 - -カスタムノードを使うと、Python バックエンド、JavaScript UI ウィジェット、外部連携を介して ComfyUI を拡張できます。エコシステムに貢献する最も強力な方法のひとつです。 - - - - カスタムノード開発が初めてならここから。ノードの構成、公開方法、ベストプラクティスを学びます。 -

- 関連ページ:チュートリアル · v3 移行ガイド -
- - - カスタムノードのサーバーサイドを構築。データ型、画像とマスク処理、遅延評価、テンソル操作などをカバー。 -

- 関連ページ:データ型 · 画像とマスク · 遅延評価 · ノード拡張 -
+## カスタムノード - - カスタム UI ウィジェット、サイドバータブ、ショートカットキー、ダイアログをノードに追加。ComfyUI フロントエンドを完全にコントロール。 -

- 関連ページ:フック(Hooks) · サイドバータブ · コマンドとショートカット · コード例 -
- -
- -関連リンク:国際化(i18n) +Pythonバックエンド、JavaScript UI拡張機能、およびインテグレーションを使用してComfyUIを拡張できます。まずは[カスタムノードの概要](/ja/custom-nodes/overview)をご覧ください。 ## レジストリ(Registry) -Comfy レジストリを通じてカスタムノードを公開・管理します。レジストリはバージョン管理、セキュリティスキャン、検索機能をコミュニティに提供します。 - - - パブリッシャー登録、最初のノードの公開、既存ノードの主張、CI/CD による自動リリースまでをカバー。 - - -関連リンク:[公開チュートリアル](/ja/registry/publishing) · [標準](/ja/registry/standards) · [CI/CD](/ja/registry/cicd) · [仕様](/ja/registry/specifications) +Comfy レジストリを通じてカスタムノードをパッケージ化して公開します。まずは [レジストリ概要](/ja/registry/overview) または [公開チュートリアル](/ja/registry/publishing) から始めてください。 diff --git a/ja/registry/overview.mdx b/ja/registry/overview.mdx index a1108392d..eb691d545 100644 --- a/ja/registry/overview.mdx +++ b/ja/registry/overview.mdx @@ -1,5 +1,6 @@ --- title: "概要" +sidebarTitle: "Registry 概要" description: "Comfy Registry とは何か、ノードのバージョニングとセキュリティに使う理由、ComfyUI-Manager へカスタムノードの公開を始める方法を学べます。" translationSourceHash: 3f5d091f translationFrom: registry/overview.mdx diff --git a/ko/custom-nodes/intro.mdx b/ko/custom-nodes/intro.mdx new file mode 100644 index 000000000..a489733f4 --- /dev/null +++ b/ko/custom-nodes/intro.mdx @@ -0,0 +1,25 @@ +--- +title: "커스텀 노드" +sidebarTitle: "개요" +description: "ComfyUI 커스텀 노드를 구축, 확장, 게시하기 위한 올바른 경로를 선택하세요." +translationSourceHash: 86b7348f +translationFrom: custom-nodes/intro.mdx +--- + +커스텀 노드는 새로운 서버 측 동작, 사용자 인터페이스 기능, 통합 기능을 추가하여 ComfyUI를 확장합니다. 수행하려는 작업에 따라 경로를 선택하세요. + + + + 노드를 구축하기 이전에 클라이언트-서버 모델, 노드 카테고리, Python 백엔드, JavaScript 프론트엔드를 학습하세요. + + + 노드 패키지를 준비하고, Comfy Registry에 게시하고, 버전과 릴리스를 관리하세요. + + + +## 시작점 선택 + +- **커스텀 노드가 처음이라면:** [커스텀 노드 개요](/ko/custom-nodes/overview)부터 시작하세요. +- **백엔드를 구축하는 경우:** [Python (백엔드)](/ko/custom-nodes/backend/server_overview)를 참조하세요. +- **UI를 확장하는 경우:** [JavaScript (UI)](/ko/custom-nodes/js/javascript_overview)를 참조하세요. +- **패키지를 게시하는 경우:** [Registry 개요](/ko/registry/overview)부터 시작하세요. \ No newline at end of file diff --git a/ko/development/api-development/sdks.mdx b/ko/development/api-development/sdks.mdx index f43237a7f..88130839f 100644 --- a/ko/development/api-development/sdks.mdx +++ b/ko/development/api-development/sdks.mdx @@ -1,20 +1,22 @@ --- title: "Comfy SDKs" description: "자체 애플리케이션에서 ComfyUI 워크플로를 실행하기 위한 공식 Python 및 TypeScript SDK" -sidebarTitle: "개요" +sidebarTitle: "SDK 개요" icon: "code" -translationSourceHash: 4b01fa84 +translationSourceHash: f64d3545 translationFrom: development/api-development/sdks.mdx translationBlockHashes: "_intro": 0df68ad9 "Install": 6bcd1ccf - "Quickstart": 47f1a4c5 - "Choosing a base URL": 46f88061 - "Watching a job run": d41efc9a - "What the SDKs cover today": 6151cc1e + "Quickstart": 02297586 + "Choosing a base URL": 13035ca9 + "Watching a job run": a1c73d9b + "Tracing an output back to its workflow": b01886a3 + "What the SDKs cover today": 3f918c7b "Reference": 5fc97b4a "Feedback": f8553211 --- + **베타.** SDK 및 SDK가 호출하는 Comfy API v2는 `0.1.x` 버전입니다. API의 형태는 확정되기 전에 변경될 수 있습니다. 지금이 잘못된 점을 알리기에 가장 좋은 시기입니다. [피드백](#피드백)을 참조하세요. @@ -91,15 +93,39 @@ await job.getOutputs("9")[0].toFile("out.png"); `run()`은 작업을 제출하고 터미널 상태에 도달할 때까지 대기합니다. 실행되는 동안 다른 작업을 수행하려면 `submit()`을 대신 사용하고 [이벤트 스트림](#작업-실행-보기)을 확인하세요. -대신 자체 ComfyUI를 대상으로 실행하려면 한 줄을 변경하고 키를 제거하면 됩니다. `Comfy("http://127.0.0.1:8189")`. 아래를 참조하세요. +대신 자체 ComfyUI를 대상으로 실행하려면 `COMFY_BASE_URL`을 설정하고 키를 제거하세요. 아래를 참조하세요. ## 기본 URL 선택 | 연결 대상 | 기본 URL | API 키 | |---|---|---| | **Comfy Cloud** | `https://cloud.comfy.org` (기본값) | 필수 | +| **서버리스 배포** | `https://.run.comfy.app` | 필수 | | **자체 ComfyUI** | `http://127.0.0.1:8189` (로컬 프록시) | 기본적으로 없음. 선택적 정적 Bearer 토큰 | +기본 URL은 생성자 인자가 아닌 `COMFY_BASE_URL` 환경 변수에서 가져옵니다: + +```bash +export COMFY_BASE_URL="https://.run.comfy.app" # serverless +export COMFY_BASE_URL="http://127.0.0.1:8189" # self-hosted proxy +``` + +이 값은 클라이언트가 생성될 때마다 읽히며, `http(s)` URL이어야 합니다. 설정되지 않았거나 비어 있으면 Comfy Cloud를 의미합니다. 따라서 클라이언트 자체는 어디서나 동일합니다: + + +```python Python +client = Comfy(api_key="comfyui-...") +``` + +```typescript TypeScript +const client = new Comfy({ apiKey: "comfyui-..." }); +``` + + + + 초기 빌드에서 업그레이드하시나요? `Comfy("", "")`는 이제 `COMFY_BASE_URL`을 설정한 상태의 `Comfy(api_key="")`입니다. `api_key`는 키워드 전용이므로, 이전의 위치 기반 호출은 URL을 키로 조용히 읽어들이는 대신 `TypeError`를 발생시킵니다. + + ### Comfy Cloud 즉시 사용할 수 있습니다. [API 키](/ko/development/api-development/getting-an-api-key)를 생성하여 클라이언트에 전달하세요. @@ -108,6 +134,12 @@ await job.getOutputs("9")[0].toFile("out.png"); API 액세스에는 유료 Comfy Cloud 구독이 필요합니다. 무료 티어에는 포함되지 않습니다. 동시에 실행할 수 있는 작업 수는 티어에 따라 다릅니다. [Cloud API 개요](/ko/development/cloud/overview#병렬-실행-동시-작업)를 참조하세요. +### 서버리스 배포 + +[개발자 플랫폼](https://platform.comfy.org)을 통해 배포한 워크플로에는 자체 엔드포인트가 제공됩니다. `COMFY_BASE_URL`을 해당 엔드포인트로 지정하고 Comfy Cloud와 동일하게 API 키를 사용하세요. 이 가이드의 모든 내용이 동일하게 작동합니다. + +서버리스 배포는 고정된 하나의 워크플로를 실행하므로, `get_workflow()`는 실행된 그래프(`format: "api"`)를 반환합니다. + ### 자체 ComfyUI 베타 기간 동안 v2 API는 ComfyUI와 함께 실행되는 작은 오픈소스 서비스인 [comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy)가 제공합니다: @@ -119,7 +151,7 @@ comfy-api-proxy 기본적으로 `127.0.0.1:8188`에서 실행 중인 ComfyUI를 프록시하고 `127.0.0.1:8189`에서 v2 API를 제공합니다. 둘 중 하나를 변경하려면 `--comfyui`와 `--port`를 사용하세요. -그런 다음 SDK가 `http://127.0.0.1:8189`를 가리키게 하세요. 인증은 기본적으로 필요하지 않습니다. 프록시에 정적 Bearer 토큰을 구성한 경우, 그 토큰을 SDK API 키로 전달하세요: `Comfy("http://127.0.0.1:8189", api_key="...")`. 프록시는 기본적으로 루프백에만 바인딩됩니다. 설치된 ComfyUI에 모델 파일도 업로드하려면 `--comfyui-base-dir /path/to/ComfyUI`와 함께 실행하세요. +그런 다음 `COMFY_BASE_URL="http://127.0.0.1:8189"`로 설정하세요. 인증은 기본적으로 필요하지 않습니다. 프록시에 정적 Bearer 토큰을 구성한 경우, 그 토큰을 SDK API 키로 전달하세요: `Comfy(api_key="...")`. 프록시는 기본적으로 루프백에만 바인딩됩니다. 설치된 ComfyUI에 모델 파일도 업로드하려면 `--comfyui-base-dir /path/to/ComfyUI`와 함께 실행하세요. 프록시는 임시 방편입니다. v2 API가 안정화되면 ComfyUI 코어로 이동하므로 프록시가 더 이상 필요하지 않습니다. @@ -150,7 +182,9 @@ result = job.result() ```typescript TypeScript const job = await client.submit(wf); -for await (const event of job.events()) { +// The label is required: a bare `break` inside a switch leaves the switch, +// not the loop. +eventLoop: for await (const event of job.events()) { switch (event.kind) { case "progress": console.log(event.value); @@ -159,7 +193,7 @@ for await (const event of job.events()) { await event.output.toFile(`${event.output.name}`); break; case "statusChange": - if (event.status === "succeeded") break; + if (event.status === "succeeded") break eventLoop; } } ``` @@ -171,6 +205,56 @@ for await (const event of job.events()) { 스트림은 재생 가능한 로그가 아니라 실시간 피드입니다. 결과를 위해 의존할 수 있도록 존재하는 것이 아니라, 진행 상황을 표시하기 위해 존재합니다. 작업을 폴링하는 것이 가장 신뢰할 수 있는 정보이며, `run()`, `wait()`, `result()`는 자동으로 폴링을 사용합니다. 그 이유는 [설계 노트](/ko/development/api-development/sdks-design#폴링-우선-진행-상황은-스트리밍으로)를 참조하세요. +## 출력을 해당 워크플로까지 역추적하기 + +출력에는 해당 출력을 생성한 작업의 id가 담겨 있으므로, 별도의 보조 테이블을 유지하지 않고도 파일에서 시작해 작업까지 역추적할 수 있습니다. + + +```python Python +output = job.outputs[0] +output.job_id # the job that produced this file +``` + +```typescript TypeScript +const output = job.outputs[0]; +output.jobId; // the job that produced this file +``` + + +동일한 id는 단독으로 가져온 에셋에도 존재하므로, 나중에 찾은 파일도 여전히 해당 작업까지 거슬러 올라갈 수 있습니다. 직접 업로드한 에셋의 경우 id는 `None`(TypeScript: `undefined`)이며, 이는 해당 에셋을 생성한 작업이 없기 때문입니다. + +작업에서는 해당 작업의 기반이 된 워크플로를 요청할 수 있습니다. 이 기능은 이 프로세스에서 제출한 것이 아니라 id로 복원한 작업에서도 작동합니다: + + +```python Python +wf = job.get_workflow() + +if wf.format == "save": + ... # the workflow as authored, canvas layout and Note nodes intact +else: + ... # the executed API-format graph +``` + +```typescript TypeScript +const wf = await job.getWorkflow(); + +if (wf.format === "save") { + // the workflow as authored, canvas layout and Note nodes intact +} else { + // the executed API-format graph +} +``` + + +**항상 `format`으로 분기하세요.** 반환되는 형태는 작업이 제출된 방식에 따라 달라지며, 요청별로 제어할 수 있는 항목에 따라 달라지지 않습니다: + +| `format` | 반환되는 내용 | 적용 시기 | +|---|---|---| +| `save` | 작업이 실행된 버전의 작성용 워크플로. 캔버스 레이아웃과 Note와 같은 편집기 전용 노드가 그대로 포함됩니다 | 워크플로 버전을 고정하는 Comfy Cloud 편집기에서 제출된 작업 | +| `api` | 실행된 그래프. 편집기 전용 구성 요소는 제거되고 Get/Set 노드가 확장됩니다 | 그 외 모든 경우. 현재 이 SDK를 통해 제출되는 모든 작업을 포함합니다 | + +SDK를 통해 제출하는 작업은 항상 `api`를 반환합니다. v2 제출에는 아직 버전 고정 필드가 없기 때문입니다. 이는 변경될 예정입니다. 판별자가 있는 이유는 코드가 변경되지 않아도 되도록 하기 위해서입니다. + ## 현재 SDK가 다루는 범위 첫 번째 버전은 한 가지 작업을 제대로 수행합니다. 워크플로를 실행하고 결과를 돌려받는 것입니다. @@ -179,6 +263,8 @@ for await (const event of job.events()) { - **제출.** API 형식의 그래프를 제출합니다. 제출은 멱등적이며, 실행 대기열이 가득 찬 경우 제한된 예산 내에서 자동으로 재시도됩니다. - **실행.** `wait()`으로 폴링하거나 `events()`를 통해 실시간 진행 상황을 추적합니다. - **출력.** 디스크에 쓰거나, 메모리에 버퍼링하거나, 바이트 범위를 가져오거나, 단기 다운로드 URL을 받을 수 있습니다. +- **추적 가능성.** 모든 출력에는 해당 출력을 생성한 작업의 ID가 포함되며, 작업은 그 뒤에 있는 워크플로를 반환할 수 있습니다. +- **에셋 삭제.** 업로드한 에셋을 핸들이나 ID로 제거할 수 있습니다. - **오류.** 원시 상태 코드 대신 `JobFailed`, `Unauthorized`, `InsufficientCredits`, `QueueFull`과 같은 타입화된 예외를 제공합니다. - **취소.** 실행 중인 작업을 취소할 수 있습니다. TypeScript는 추가로 모든 호출에서 `AbortSignal`을 허용합니다. diff --git a/ko/development/overview.mdx b/ko/development/overview.mdx index d46b759df..4fbcb35be 100644 --- a/ko/development/overview.mdx +++ b/ko/development/overview.mdx @@ -1,7 +1,7 @@ --- title: "개요" description: "개발자로서 ComfyUI 사용하기" -translationSourceHash: 29b59dd3 +translationSourceHash: 6fb45989 translationFrom: development/overview.mdx translationBlockHashes: "_intro": 21d39346 @@ -10,13 +10,11 @@ translationBlockHashes: "Cloud API": 80dab2ed "Agent Tools / MCP": abe9d443 "Comfy CLI": 11578ce8 - "Develop Custom Nodes": 51cd210e - "Registry": cc46f1e1 + "Custom Nodes": ef7496d1 + "Registry": 883b9485 --- - - ComfyUI는 서버로 실행되고 API를 통해 접근 가능하며, 커스텀 노드로 확장할 수 있고 명령줄에서 관리 가능한 모듈식 GenAI 추론 엔진입니다. 아래에서 원하는 방식을 선택하세요. ## ComfyUI 기반 구축 @@ -69,39 +67,10 @@ ComfyUI는 서버로 실행되고 API를 통해 접근 가능하며, 커스텀 참고: [CLI 참조](/ko/comfy-cli/reference) · [문제 해결](/ko/comfy-cli/troubleshooting) -## 커스텀 노드 개발하기 - -커스텀 노드를 통해 자신만의 Python 백엔드, JavaScript UI 위젯 및 통합 기능으로 ComfyUI를 확장할 수 있습니다. 이는 생태계에 기여할 수 있는 가장 강력한 방법 중 하나입니다. - - - - 커스텀 노드가 처음이라면? 노드의 구조, 게시 방법 및 모범 사례를 알아보세요. -

- 주요 페이지: 워크스루 · v3 마이그레이션 가이드 -
- - - 커스텀 노드의 서버 측을 구축하세요. 데이터 유형, 이미지 및 마스크 처리, 지연 평가, 텐서 등에 대해 다룹니다. -

- 주요 페이지: 데이터 유형 · 이미지 및 마스크 · 지연 평가 · 노드 확장 -
+## 커스텀 노드 - - 노드에 맞춤형 UI 위젯, 사이드바 탭, 키 바인딩 및 대화 상자를 추가하세요. ComfyUI 프런트엔드를 완벽히 제어하세요. -

- 주요 페이지: · 사이드바 탭 · 명령 및 키 바인딩 · 예제 -
- -
- -참고: 국제화(i18n) +ComfyUI를 Python 백엔드, JavaScript UI 확장 프로그램 및 통합 기능으로 확장하세요. [커스텀 노드 개요](/ko/custom-nodes/overview)부터 시작하세요. ## 레지스트리 -Comfy 레지스트리를 통해 커스텀 노드를 게시하고 관리하세요. 레지스트리는 버전 관리, 보안 스캔 및 커뮤니티를 위한 검색 기능을 제공합니다. - - - 게시자로 등록하고 첫 번째 노드를 게시하며, 기존 노드를 인수하고 자동 릴리스를 위한 CI/CD를 설정하세요. - - -참고: [게시 튜토리얼](/ko/registry/publishing) · [표준](/ko/registry/standards) · [CI/CD](/ko/registry/cicd) · [사양](/ko/registry/specifications) +Comfy 레지스트리를 통해 커스텀 노드를 패키징하고 게시하세요. [레지스트리 개요](/ko/registry/overview) 또는 [게시 튜토리얼](/ko/registry/publishing)로 시작하세요. diff --git a/ko/registry/overview.mdx b/ko/registry/overview.mdx index c7607add5..9f803b13f 100644 --- a/ko/registry/overview.mdx +++ b/ko/registry/overview.mdx @@ -1,5 +1,6 @@ --- title: "개요" +sidebarTitle: "Registry 개요" description: "Comfy Registry가 무엇인지, 노드 버전 관리와 보안에 쓰이는 이유, ComfyUI-Manager에 커스텀 노드 게시를 시작하는 방법을 알아보세요." translationSourceHash: 3f5d091f translationFrom: registry/overview.mdx diff --git a/registry/overview.mdx b/registry/overview.mdx index c0cce7355..37e574f59 100644 --- a/registry/overview.mdx +++ b/registry/overview.mdx @@ -1,5 +1,6 @@ --- title: "Overview" +sidebarTitle: "Registry Overview" description: "Learn what the Comfy Registry is, why it's used for node versioning and security, and how to start publishing custom nodes to ComfyUI-Manager." --- diff --git a/zh/custom-nodes/intro.mdx b/zh/custom-nodes/intro.mdx new file mode 100644 index 000000000..81c921493 --- /dev/null +++ b/zh/custom-nodes/intro.mdx @@ -0,0 +1,25 @@ +--- +title: "自定义节点" +sidebarTitle: "概述" +description: "选择构建、扩展和发布 ComfyUI 自定义节点的正确路径。" +translationSourceHash: 86b7348f +translationFrom: custom-nodes/intro.mdx +--- + +自定义节点通过新的服务器端行为、用户界面功能和集成来扩展 ComfyUI。根据您想要实现的目标选择一条路径。 + + + + 在构建节点之前,了解客户端-服务器模型、节点分类、Python 后端和 JavaScript 前端。 + + + 准备节点包,将其发布到 Comfy 注册表,并管理版本和发布。 + + + +## 选择起点 + +- **自定义节点新手:** 从[自定义节点概述](/zh/custom-nodes/overview)开始。 +- **构建后端:** 参阅 [Python(后端)](/zh/custom-nodes/backend/server_overview)。 +- **扩展 UI:** 参阅 [JavaScript(UI)](/zh/custom-nodes/js/javascript_overview)。 +- **发布包:** 从[注册表概述](/zh/registry/overview)开始。 \ No newline at end of file diff --git a/zh/development/api-development/sdks.mdx b/zh/development/api-development/sdks.mdx index a96ad4ce7..b4b1e603d 100644 --- a/zh/development/api-development/sdks.mdx +++ b/zh/development/api-development/sdks.mdx @@ -1,20 +1,22 @@ --- title: "Comfy SDKs" description: "用于在您自己的应用程序中运行 ComfyUI 工作流的官方 Python 和 TypeScript SDK" -sidebarTitle: "概述" +sidebarTitle: "SDK 概述" icon: "code" -translationSourceHash: 4b01fa84 +translationSourceHash: f64d3545 translationFrom: development/api-development/sdks.mdx translationBlockHashes: "_intro": 0df68ad9 "Install": 6bcd1ccf - "Quickstart": 47f1a4c5 - "Choosing a base URL": 46f88061 - "Watching a job run": d41efc9a - "What the SDKs cover today": 6151cc1e + "Quickstart": 02297586 + "Choosing a base URL": 13035ca9 + "Watching a job run": a1c73d9b + "Tracing an output back to its workflow": b01886a3 + "What the SDKs cover today": 3f918c7b "Reference": 5fc97b4a "Feedback": f8553211 --- + **测试版。** 这些 SDK 及其调用的 Comfy API v2 目前均为 `0.1.x` 版本。在我们将其锁定之前,API 的结构仍可能发生变化。现在告诉我们哪里有问题,成本最低。参见[反馈](#反馈)。 @@ -91,14 +93,38 @@ await job.getOutputs("9")[0].toFile("out.png"); `run()` 提交任务并等待其达到终端状态。如要在其执行期间进行其他操作,请改用 `submit()`,并观察 [事件流](#查看任务运行)。 -若要改为在你自己的 ComfyUI 上运行,只需更改一行代码并去掉密钥:`Comfy("http://127.0.0.1:8189")`。请参阅下文。 +若要改为在你自己的 ComfyUI 上运行,请设置 `COMFY_BASE_URL` 并去掉密钥。请参阅下文。 ## 选择基础 URL | 使用环境 | 基础 URL | API 密钥 | |---|---|---| | **Comfy Cloud** | `https://cloud.comfy.org`(默认) | 必填 | -| **您自己的 ComfyUI** | `http://127.0.0.1:8189`(本地代理) | 默认不使用。可选静态 bearer 令牌 | +| **Serverless 部署** | `https://.run.comfy.app` | 必填 | +| **您自己的 ComfyUI** | `http://127.0.0.1:8189`(本地代理) | 默认无。可选静态 bearer 令牌 | + +基础 URL 来自 `COMFY_BASE_URL` 环境变量,而不是构造函数参数: + +```bash +export COMFY_BASE_URL="https://.run.comfy.app" # serverless +export COMFY_BASE_URL="http://127.0.0.1:8189" # self-hosted proxy +``` + +客户端每次构造时都会读取该变量,它必须是 `http(s)` URL,未设置或为空则默认为 Comfy Cloud。因此客户端本身在所有环境下都是相同的: + + +```python Python +client = Comfy(api_key="comfyui-...") +``` + +```typescript TypeScript +const client = new Comfy({ apiKey: "comfyui-..." }); +``` + + + + 从早期版本升级?`Comfy("", "")` 现在是设置 `COMFY_BASE_URL` 后的 `Comfy(api_key="")`。`api_key` 是仅限关键字参数,因此旧的位置参数调用会抛出 `TypeError`,而不会将 URL 静默当作 API 密钥读取。 + ### Comfy Cloud @@ -108,6 +134,12 @@ await job.getOutputs("9")[0].toFile("out.png"); API 访问需要付费的 Comfy Cloud 订阅。免费版不包含此权限。一次可执行的任务数取决于您的层级。请参阅 [Cloud API 概览](/zh/development/cloud/overview#并行执行(并发任务))。 +### Serverless 部署 + +通过 [开发者平台](https://platform.comfy.org) 部署的工作流会有自己的端点。将 `COMFY_BASE_URL` 指向该端点并使用您的 API 密钥,与 Comfy Cloud 完全相同。本指南中的所有内容都以相同的方式工作。 + +Serverless 部署运行一个固定工作流,因此 `get_workflow()` 返回执行后的图(`format: "api"`)。 + ### 您自己的 ComfyUI 在测试版期间,v2 API 由 [comfy-api-proxy](https://github.com/Comfy-Org/comfy-api-proxy) 提供,这是一个与您的 ComfyUI 一起运行的小型开源服务: @@ -119,7 +151,7 @@ comfy-api-proxy 默认情况下,它代理 `127.0.0.1:8188` 上的 ComfyUI,并在 `127.0.0.1:8189` 上提供 v2 API。使用 `--comfyui` 和 `--port` 可更改其中任一配置。 -然后将 SDK 指向 `http://127.0.0.1:8189`。默认不需要身份验证。如果代理配置了静态 bearer 令牌,请将该令牌作为 SDK 的 API 密钥传入:`Comfy("http://127.0.0.1:8189", api_key="...")`。默认情况下,代理仅绑定到回环地址。如果您还想将模型文件上传到您的安装中,请使用 `--comfyui-base-dir /path/to/ComfyUI` 运行它。 +然后设置 `COMFY_BASE_URL="http://127.0.0.1:8189"`。默认不需要身份验证。如果代理配置了静态 bearer 令牌,请将该令牌作为 SDK 的 API 密钥传入:`Comfy(api_key="...")`。默认情况下,代理仅绑定到回环地址。如果您还想将模型文件上传到您的安装中,请使用 `--comfyui-base-dir /path/to/ComfyUI` 运行它。 该代理只是一个权宜之计。一旦 v2 API 稳定下来,它就会移入 ComfyUI 核心,届时就不再需要代理了。 @@ -150,7 +182,9 @@ result = job.result() ```typescript TypeScript const job = await client.submit(wf); -for await (const event of job.events()) { +// The label is required: a bare `break` inside a switch leaves the switch, +// not the loop. +eventLoop: for await (const event of job.events()) { switch (event.kind) { case "progress": console.log(event.value); @@ -159,7 +193,7 @@ for await (const event of job.events()) { await event.output.toFile(`${event.output.name}`); break; case "statusChange": - if (event.status === "succeeded") break; + if (event.status === "succeeded") break eventLoop; } } ``` @@ -171,44 +205,96 @@ for await (const event of job.events()) { 该流是实时馈送,而非可重放的日志。它的存在是为了让您能够呈现进度,而不是依赖它来获取结果。轮询任务才是权威的,`run()`、`wait()` 和 `result()` 会自动回退到轮询。原因请参阅 [设计说明](/zh/development/api-development/sdks-design#先轮询再流式获取进度)。 +## 将输出回溯到其工作流 + +输出带有生成它们的任务的 ID,因此您可以以文件为起点反向追溯,而无需额外维护一张对应表。 + + +```python Python +output = job.outputs[0] +output.job_id # the job that produced this file +``` + +```typescript TypeScript +const output = job.outputs[0]; +output.jobId; // the job that produced this file +``` + + +单独获取的资源也带有相同的 ID,因此您之后找到的文件依然能回溯到生成它的任务。对于您上传的资源,该 ID 为 `None`(TypeScript 中为 `undefined`),因为上传的资源没有对应的生成任务。 + +您可以向任务查询其背后的工作流。即使该任务不是在当前进程中提交的,只要通过 ID 重新加载,同样可以做到: + + +```python Python +wf = job.get_workflow() + +if wf.format == "save": + ... # the workflow as authored, canvas layout and Note nodes intact +else: + ... # the executed API-format graph +``` + +```typescript TypeScript +const wf = await job.getWorkflow(); + +if (wf.format === "save") { + // the workflow as authored, canvas layout and Note nodes intact +} else { + // the executed API-format graph +} +``` + + +**始终根据 `format` 进行分支判断。** 返回哪种形状取决于任务的提交方式,而不是您在每次请求中能控制的任何因素: + +| `format` | 您获得的内容 | 适用情况 | +|---|---|---| +| `save` | 任务运行时所使用的版本对应的创作工作流,包含画布布局和仅编辑器可见的节点(如 Note) | 从 Comfy Cloud 编辑器提交的任务,此类任务会固定工作流版本 | +| `api` | 已执行的图。仅编辑器可见的结构已消失,Get/Set 节点已展开 | 其他所有情况,包括目前通过这些 SDK 提交的每个任务 | + +您通过 SDK 提交的任务始终返回 `api`,因为 v2 提交目前还没有版本固定字段。这种情况将来会改变;判别字段的存在就是为了让您的代码无需随之改变。 + ## SDK 目前涵盖的内容 -第一个版本只做好了一件事:运行工作流并取回结果。 +第一个版本只做好一件事:运行工作流并取回结果。 -- **资产。** 从文件、字节、流或 URL 创建输入句柄。句柄是惰性的且基于内容寻址,因此使用相同输入重新运行时不会重复上传。 -- **提交。** 提交 API 格式的图。提交是幂等的,并且完整的队列会在有限的预算内为您重试。 -- **执行。** 使用 `wait()` 轮询,或通过 `events()` 跟踪实时进度。 +- **资产。** 从文件、字节、流或 URL 创建输入句柄。句柄是惰性的,并按内容寻址,因此使用相同输入重新运行时不会再次上传。 +- **提交。** 提交 API 格式的节点图。提交是幂等的,完整的队列会在有限的预算内自动重试。 +- **执行。** 使用 `wait()` 轮询,或通过 `events()` 获取实时进度。 - **输出。** 写入磁盘、缓冲到内存、获取字节范围,或获取短期有效的下载 URL。 -- **错误。** 提供类型化的异常,例如 `JobFailed`、`Unauthorized`、`InsufficientCredits` 和 `QueueFull`,而不是原始状态码。 -- **取消。** 作业可以在运行过程中取消。此外,TypeScript 的任何调用都可以接受 `AbortSignal`。 +- **可追溯性。** 每个输出都带有生成它的任务的 ID,并且任务可以返回其背后的工作流。 +- **删除资产。** 通过句柄或 ID 移除你上传的资产。 +- **错误。** 提供类型化异常,如 `JobFailed`、`Unauthorized`、`InsufficientCredits` 和 `QueueFull`,而不是原始状态码。 +- **取消。** 任务可以在运行时取消。TypeScript 还在任何调用上接受 `AbortSignal`。 -Python 同时提供同步的 `Comfy` 客户端和具有相同接口的 `AsyncComfy` 客户端。TypeScript 仅支持异步。 +Python 同时提供同步的 `Comfy` 客户端和接口相同的 `AsyncComfy` 客户端。TypeScript 仅支持异步。 -此版本暂不包含:管理已保存的工作流、模型库、节点内省和命名工作流参数。[设计说明](/zh/development/api-development/sdks-design#首个版本的范围) 解释了为什么接口一开始就如此精简。 +此版本不包含:管理已保存的工作流、模型库、节点内省,以及命名工作流参数。[设计说明](/zh/development/api-development/sdks-design#首个版本的范围) 解释了为何接口从如此小的范围起步。 ## 参考 -SDK 的 README 是每种语言的完整参考,涵盖认证、资产、错误以及底层逃生通道。 +SDK 的 README 是每种语言的完整参考,涵盖认证、资产、错误处理以及低层逃生通道。 - comfy-sdk,位于 PyPI。提供同步与异步客户端。 + comfy-sdk 位于 PyPI。提供同步和异步客户端。 - @comfyorg/sdk,位于 npm。带类型定义、异步,并附带底层客户端。 + @comfyorg/sdk 位于 npm。带类型、异步,并提供低层客户端。 - 两个 SDK 底层的 HTTP API。可直接从任何语言使用。 + 两个 SDK 底层的 HTTP API。任何语言都可以直接使用。 - 这个 API 为何存在、它与现有 ComfyUI API 的关系,以及后续的演进方向。 + 这个 API 存在的原因、它与现有 ComfyUI API 的关系,以及未来的发展方向。 ## 反馈 -这有意保持为 `0.1.x` 版本。方法名称、客户端形状、事件目录、错误分类体系,以及资产处理在实际使用中的体验,这些目前的改动成本都还很低,我们计划在接下来几周内将这一对外接口固定下来。之后,"我们提供长期支持" 就开始意味着我们无法再为你修复这些问题了。 +这是特意采用 `0.1.x` 版本的。方法名称、客户端形状、事件目录、错误分类法,以及资产管理在实际使用中的体验,这些目前都还很容易更改。我们计划在未来几周内将接口锁定下来。之后,“长期支持”就意味着我们无法再为你修复这些问题了。 -所以,请告诉我们哪些地方用起来别扭、你期望找到却没有找到的东西,以及你最终是如何绕开这些问题的。[我们的 Discord](https://discord.com/invite/comfyorg) 中的 `#developer-platform` 频道就是反馈这些内容的地方。 +所以,请告诉我们哪些地方让你觉得别扭、你期望找到却没有找到的功能,以及你最终是如何绕行解决的。[我们的 Discord](https://discord.com/invite/comfyorg) 中的 `#developer-platform` 通道就是讨论这些的地方。 -如果你想要其他语言的第一方 SDK,也可以在那里告诉我们。两个 SDK 都建立在同一份有文档记录的 HTTP 契约之上,因此任何语言目前都可以直接与 API 通信,但我们更想知道需求在哪里。 +如果你想要其他语言的第一方 SDK,也可以在那里告诉我们。两个 SDK 都建立在相同的文档化 HTTP 契约上,所以任何语言现在都可以与 API 通信,但我们更希望知道需求在哪里。 diff --git a/zh/development/overview.mdx b/zh/development/overview.mdx index f0a3777fa..d3d4a18b3 100644 --- a/zh/development/overview.mdx +++ b/zh/development/overview.mdx @@ -1,7 +1,7 @@ --- title: "概述" description: "作为开发者使用 ComfyUI" -translationSourceHash: 29b59dd3 +translationSourceHash: 6fb45989 translationFrom: development/overview.mdx translationBlockHashes: "_intro": 21d39346 @@ -10,13 +10,11 @@ translationBlockHashes: "Cloud API": 80dab2ed "Agent Tools / MCP": abe9d443 "Comfy CLI": 11578ce8 - "Develop Custom Nodes": 51cd210e - "Registry": cc46f1e1 + "Custom Nodes": ef7496d1 + "Registry": 883b9485 --- - - ComfyUI 是一个模块化的 GenAI 推理引擎,可以部署为 API 服务器、通过接口调用、用自定义节点扩展,也能用命令行管理。根据你的需求选择下面的路径。 ## 基于 ComfyUI 构建 @@ -69,39 +67,10 @@ ComfyUI 是一个模块化的 GenAI 推理引擎,可以部署为 API 服务器 另见:[CLI 参考](/zh/comfy-cli/reference) · [故障排除](/zh/comfy-cli/troubleshooting) -## 开发自定义节点 - -自定义节点让你可以通过 Python 后端、JavaScript UI 组件和外部集成来扩展 ComfyUI。这是为 ComfyUI 生态做贡献最强大的方式之一。 - - - - 自定义节点新手?了解节点结构、发布方法和最佳实践。 -

- 关键页面:教程 · v3 迁移指南 -
- - - 构建自定义节点的服务端。涵盖数据类型、图像与遮罩处理、惰性求值、张量操作等。 -

- 关键页面:数据类型 · 图像与遮罩 · 惰性求值 · 节点扩展示例 -
+## 自定义节点 - - 为节点添加自定义 UI 组件、侧边栏标签页、快捷键和对话框,完全掌控 ComfyUI 的前端。 -

- 关键页面:钩子(Hooks) · 侧边栏标签页 · 命令与快捷键 · 示例代码 -
- -
- -另见:国际化(i18n) +通过 Python 后端、JavaScript UI 扩展和集成来扩展 ComfyUI。从[自定义节点概述](/zh/custom-nodes/overview)开始。 ## 注册表(Registry) -通过 Comfy 注册表发布和管理你的自定义节点。注册表为社区提供版本控制、安全扫描和节点发现能力。 - - - 注册为发布者、发布你的第一个节点、认领已有节点,并配置 CI/CD 实现自动化发布。 - - -另见:[发布教程](/zh/registry/publishing) · [标准](/zh/registry/standards) · [CI/CD](/zh/registry/cicd) · [规范](/zh/registry/specifications) +通过 Comfy 注册表打包和发布自定义节点。从[注册表概述](/zh/registry/overview)或[发布教程](/zh/registry/publishing)开始。 diff --git a/zh/registry/overview.mdx b/zh/registry/overview.mdx index cacf9826f..4dba79e3b 100644 --- a/zh/registry/overview.mdx +++ b/zh/registry/overview.mdx @@ -1,5 +1,6 @@ --- title: "概述" +sidebarTitle: "注册表概述" description: "了解 Comfy Registry 是什么、为何用于节点版本管理和安全,以及如何开始将自定义节点发布到 ComfyUI-Manager。" translationSourceHash: 3f5d091f translationFrom: registry/overview.mdx