Files
ComfyUI_frontend/src/locales/zh/main.json
Christian Byrne 006e6bd57c [feat] Vue-Based Rendering System for the ComfyUI Node Graph (#4263)
* [feat] Add core Vue widget infrastructure

- SimplifiedWidget interface for Vue-based node widgets
- widgetPropFilter utility with component-specific exclusion lists
- Removes DOM manipulation and positioning concerns
- Provides clean API for value binding and prop filtering

* [feat] Add Vue widget registry system

- Complete widget type enum with all 15 widget types
- Component mapping registry for dynamic widget rendering
- Helper function for type-safe widget component resolution

* [feat] Add Vue input widgets

- WidgetInputText: Single-line text input with InputText component
- WidgetTextarea: Multi-line text input with Textarea component
- WidgetSlider: Numeric range input with Slider component
- WidgetToggleSwitch: Boolean toggle with ToggleSwitch component

* [feat] Add Vue selection widgets

- WidgetSelect: Dropdown selection with Select component
- WidgetMultiSelect: Multiple selection with MultiSelect component
- WidgetSelectButton: Button group selection with SelectButton component
- WidgetTreeSelect: Hierarchical selection with TreeSelect component

* [feat] Add Vue visual widgets

- WidgetColorPicker: Color selection with ColorPicker component
- WidgetImage: Single image display with Image component
- WidgetImageCompare: Before/after comparison with ImageCompare component
- WidgetGalleria: Image gallery/carousel with Galleria component
- WidgetChart: Data visualization with Chart component

* [feat] Add Vue action widgets

- WidgetButton: Action button with Button component and callback handling
- WidgetFileUpload: File upload interface with FileUpload component

* [feat] TransformPane - Viewport synchronization layer for Vue nodes (#4304)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Benjamin Lu <benceruleanlu@proton.me>
Co-authored-by: github-actions <github-actions@github.com>

* Update locales [skip ci]

* Fix TransformPane pos/size (#4826)

* Update locales [skip ci]

* refactor(litegraph): decouple render-time state from models for reroutes and links\n\nIntroduce RenderedLinkSegment; compute reroute render params without mutating model; render into ephemeral segments instead of writing to Reroute/LLink.

* Revert "refactor(litegraph): decouple render-time state from models for reroutes and links\n\nIntroduce RenderedLinkSegment; compute reroute render params without mutating model; render into ephemeral segments instead of writing to Reroute/LLink."

This reverts commit d7ed1d36ed.

* test(ci): skip transformPerformance suite on CI (#4843)

* Add vue node feature flag (#4927)

* feat: Implement CRDT-based layout system for Vue nodes (#4959)

* feat: Implement CRDT-based layout system for Vue nodes

Major refactor to solve snap-back issues and create single source of truth for node positions:

- Add Yjs-based CRDT layout store for conflict-free position management
- Implement layout mutations service with clean API
- Create Vue composables for layout access and node dragging
- Add one-way sync from layout store to LiteGraph
- Disable LiteGraph dragging when Vue nodes mode is enabled
- Add z-index management with bring-to-front on node interaction
- Add comprehensive TypeScript types for layout system
- Include unit tests for layout store operations
- Update documentation to reflect CRDT architecture

This provides a solid foundation for both single-user performance and future real-time collaboration features.

Co-Authored-By: Claude <noreply@anthropic.com>

* style: Apply linter fixes to layout system

* fix: Remove unnecessary README files and revert services README

- Remove unnecessary types/README.md file
- Revert unrelated changes to services/README.md
- Keep only relevant documentation for the layout system implementation

These were issues identified during PR review that needed to be addressed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Clean up layout store and implement proper CRDT operations

- Created dedicated layoutOperations.ts with production-grade CRDT interfaces
- Integrated existing QuadTree spatial index instead of simple cache
- Split composables into separate files (useLayout, useNodeLayout, useLayoutSync)
- Cleaned up operation handlers using specific types instead of Extract
- Added proper operation interfaces with type guards and extensibility
- Updated all type references to use new operation structure

The layout store now properly uses the existing QuadTree infrastructure for
efficient spatial queries and follows CRDT best practices with well-defined
operation interfaces.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Extract services and split composables for better organization

- Created SpatialIndexManager to handle QuadTree operations separately
- Added LayoutAdapter interface for CRDT abstraction (Yjs, mock implementations)
- Split GraphNodeManager into focused composables:
  - useNodeWidgets: Widget state and callback management
  - useNodeChangeDetection: RAF-based geometry change detection
  - useNodeState: Node visibility and reactive state management
- Extracted constants for magic numbers and configuration values
- Updated layout store to use SpatialIndexManager and constants

This improves code organization, testability, and makes it easier to swap
CRDT implementations or mock services for testing.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add node slots to layout tree

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* Remove slots from layoutTypes

* Totally not scuffed renderer and adapter

* Revert "Totally not scuffed renderer and adapter"

This reverts commit 2b9d83efb8.

* Revert "Remove slots from layoutTypes"

This reverts commit 18f78ff786.

* Reapply "Add node slots to layout tree"

This reverts commit 236fecb549.

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* docs: Replace architecture docs with comprehensive ADR

- Add ADR-0002 for CRDT-based layout system decision
- Follow established ADR template with persuasive reasoning
- Include performance benefits, collaboration readiness, and architectural advantages
- Update ADR index

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>

* [chore] Extract link rendering out of LGraphCanvas (#4994)

* feat: Implement CRDT-based layout system for Vue nodes

Major refactor to solve snap-back issues and create single source of truth for node positions:

- Add Yjs-based CRDT layout store for conflict-free position management
- Implement layout mutations service with clean API
- Create Vue composables for layout access and node dragging
- Add one-way sync from layout store to LiteGraph
- Disable LiteGraph dragging when Vue nodes mode is enabled
- Add z-index management with bring-to-front on node interaction
- Add comprehensive TypeScript types for layout system
- Include unit tests for layout store operations
- Update documentation to reflect CRDT architecture

This provides a solid foundation for both single-user performance and future real-time collaboration features.

Co-Authored-By: Claude <noreply@anthropic.com>

* style: Apply linter fixes to layout system

* fix: Remove unnecessary README files and revert services README

- Remove unnecessary types/README.md file
- Revert unrelated changes to services/README.md
- Keep only relevant documentation for the layout system implementation

These were issues identified during PR review that needed to be addressed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Clean up layout store and implement proper CRDT operations

- Created dedicated layoutOperations.ts with production-grade CRDT interfaces
- Integrated existing QuadTree spatial index instead of simple cache
- Split composables into separate files (useLayout, useNodeLayout, useLayoutSync)
- Cleaned up operation handlers using specific types instead of Extract
- Added proper operation interfaces with type guards and extensibility
- Updated all type references to use new operation structure

The layout store now properly uses the existing QuadTree infrastructure for
efficient spatial queries and follows CRDT best practices with well-defined
operation interfaces.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Extract services and split composables for better organization

- Created SpatialIndexManager to handle QuadTree operations separately
- Added LayoutAdapter interface for CRDT abstraction (Yjs, mock implementations)
- Split GraphNodeManager into focused composables:
  - useNodeWidgets: Widget state and callback management
  - useNodeChangeDetection: RAF-based geometry change detection
  - useNodeState: Node visibility and reactive state management
- Extracted constants for magic numbers and configuration values
- Updated layout store to use SpatialIndexManager and constants

This improves code organization, testability, and makes it easier to swap
CRDT implementations or mock services for testing.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add node slots to layout tree

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* Remove slots from layoutTypes

* Totally not scuffed renderer and adapter

* Revert "Totally not scuffed renderer and adapter"

This reverts commit 2b9d83efb8.

* Revert "Remove slots from layoutTypes"

This reverts commit 18f78ff786.

* Reapply "Add node slots to layout tree"

This reverts commit 236fecb549.

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* docs: Replace architecture docs with comprehensive ADR

- Add ADR-0002 for CRDT-based layout system decision
- Follow established ADR template with persuasive reasoning
- Include performance benefits, collaboration readiness, and architectural advantages
- Update ADR index

* Add node slots to layout tree

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* Remove slots from layoutTypes

* Totally not scuffed renderer and adapter

* Remove unused methods in LGLA

* Extract slot position calculations to shared utility

- Create slotCalculations.ts utility for centralized slot position logic
- Update LGraphNode to delegate to helper while maintaining compatibility
- Modify LitegraphLinkAdapter to use layout tree positions when available
- Enable link rendering to use layout system coordinates instead of litegraph positions

This allows the layout tree to control link rendering positions, enabling proper
synchronization between Vue components and canvas rendering.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* [fix] Restore original link rendering behavior after refactor

This commit fixes several rendering discrepancies introduced during the link rendering refactor to ensure exact parity with the original litegraph implementation:

Path Shape Fixes:
- STRAIGHT_LINK: Now correctly applies l=10 offset to create innerA/innerB points and uses midX=(innerA.x+innerB.x)*0.5 for elbow placement, matching the original 6-segment path
- LINEAR_LINK: Restored 4-point path with l=15 directional offsets (start → innerA → innerB → end)

Arrow Rendering:
- computeConnectionPoint: Now always uses bezier math with 0.25 factor spline offsets regardless of render mode, ensuring arrow positions match original
- Arrow positions: Fixed to render at 0.25 and 0.75 positions along the path
- Arrow gating: Moved scale>=0.6 and highQuality checks to adapter layer to maintain PathRenderer purity
- Arrow shape: Restored original triangle dimensions (-5,-3) to (0,+7) to (+5,-3)

Center Marker:
- Fixed 'None' option: Center marker now correctly hidden when LinkMarkerShape.None is selected
- Center point calculation: Updated for all render modes to match original positions
- STRAIGHT_LINK center: Uses midX and average of innerA/innerB y-coordinates
- LINEAR_LINK center: Uses midpoint between innerA and innerB control points

These fixes ensure backward compatibility while maintaining the clean separation between the pure PathRenderer and litegraph-specific LitegraphLinkAdapter.

Fixes #Issue-Number

---------

Co-authored-by: bymyself <cbyrne@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>

* refactor: Reorganize layout system into new renderer architecture (#5071)

- Move layout system to renderer/core/layout/
  - Store, operations, adapters, and sync modules organized clearly
  - Merged layoutTypes.ts and layoutOperations.ts into single types.ts
- Move canvas rendering to renderer/core/canvas/
  - LiteGraph-specific code in litegraph/ subdirectory
  - PathRenderer at canvas level
- Move spatial indexing to renderer/core/spatial/
- Move Vue node composables to renderer/extensions/vue-nodes/
- Update all import paths throughout codebase
- Apply consistent naming (renderer vs rendering)

This establishes clearer separation between core rendering concerns
and optional extensions, making the architecture more maintainable.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>

* [refactor] Reorganize Vue nodes to domain-driven design architecture (#5085)

* refactor: Reorganize Vue nodes system to domain-driven design architecture

Move Vue nodes code from scattered technical layers to domain-focused structure:

- Widget system → src/renderer/extensions/vueNodes/widgets/
- LOD optimization → src/renderer/extensions/vueNodes/lod/
- Layout logic → src/renderer/extensions/vueNodes/layout/
- Node components → src/renderer/extensions/vueNodes/components/
- Test structure mirrors source organization

Benefits:
- Clear domain boundaries instead of technical layers
- Everything Vue nodes related in renderer domain (not workbench)
- camelCase naming (vueNodes vs vue-nodes)
- Tests co-located with source domains
- All imports updated to new DDD structure

* fix: Skip spatial index performance test on CI to avoid flaky timing

Performance tests are inherently flaky on CI due to variable system
performance. This test should only run locally like the other
performance tests.

* fix: Initialize Vue node manager when first node is added to empty graph (#5086)

* fix: Initialize Vue node manager when first node is added to empty graph

When Vue nodes are enabled and the graph starts empty (0 nodes), the
node manager wasn't being initialized. This caused Vue nodes to not
render until the setting was toggled off and on again.

The fix adds a one-time event handler that listens for the first node
being added to an empty graph and initializes the node manager at that
point.

Fixes the issue where Vue nodes don't render on initial page load when
the setting is enabled.

* fix: Add TODO comment for reactive graph mutations observer

Added comment to indicate that the monkey-patching approach should be
replaced with a proper reactive graph mutations observer when available.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>

* [bugfix] Fix Vue node import path after refactoring

Update LGraphNode import path from old location to new domain-driven architecture path.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove layout logging noise from console (#5101)

- Remove loglevel import and logger setup from LayoutStore
- Remove all logger.debug() calls throughout LayoutStore
- Remove localStorage debug check for layout operations
- Remove unused DEBUG_CONFIG from layout constants
- Clean up console noise while preserving error handling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>

* remove logging from vue node layouting modules (#5111)

* feat: Add slot registration and spatial indexing for hit detection

- Implement slot registration for all nodes (Vue and LiteGraph)
- Add spatial indexes for slots and reroutes to improve hit detection performance
- Register slots when nodes are drawn via new registerSlots() method
- Update LayoutStore to use spatial indexing for O(log n) queries instead of O(n)

Resolves #5125

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Revert "feat: Add slot registration and spatial indexing for hit detection"

This reverts commit 70fbfd0f5e.

* [bugfix] Fix link center dot hit detection when marker is disabled (#5135)

When linkMarkerShape is set to None, clicks were still being detected on the invisible center dot. This fix adds proper checks to skip hit detection when the center marker is disabled.

Fixes center dot hit detection issue

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>

* [bugfix] Hide center dot when dragging links (#5133)

The center dot/marker on links should not be visible when the user is dragging links to connect nodes. This fix ensures the center marker is hidden during link dragging operations.

🤖 Generated with Claude Code

Co-authored-by: Claude <noreply@anthropic.com>

* feat: v3 style of node body (#5169)

* feat: v3 style of node body

* Update src/renderer/extensions/vueNodes/components/LGraphNode.vue

* fix: review's issues

* fix: review's issue

* Update lockfile after rebase (#5254)

* chore: Update pnpm-lock.yaml after rebase

Add new dependencies from main branch:
- chart.js@^4.5.0
- clsx@^2.1.1
- tailwind-merge@^3.3.1
- yjs@^13.6.27

* Fix SelectionOverlay rebase issue (#5255)

* fix: Remove SelectionOverlay import accidentally re-added during rebase

During the rebase, the SelectionOverlay component import and usage was accidentally
re-introduced. This component was removed in commit 84e7102f (#5158) to fix
performance issues. The SelectionToolbox should be used directly without a wrapper.

The current main branch correctly uses:
<SelectionToolbox v-if="selectionToolboxEnabled" />

Ref: https://github.com/Comfy-Org/ComfyUI_frontend/pull/5158

* Deduplicate i18n keys from rebasing (#5257)

* fix: Add missing comma in zh locale JSON

Fixes JSON syntax error introduced during rebase.

* dedup i18n keys

* fix: Restore simplified Chinese translation for Toggle Workflows Sidebar

The previous dedup commit accidentally left a traditional Chinese
translation in the simplified Chinese locale file.

* fix: Replace remaining traditional Chinese characters in simplified Chinese locale

- Changed '檔案' to '文件' (file)
- Changed '擴充功能' to '扩展功能' (extensions)

* Fix lodash import (#5269)

* Decouple link and slot hit-testing out of Litegraph (#5134)

* [feat] TransformPane - Viewport synchronization layer for Vue nodes (#4304)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Benjamin Lu <benceruleanlu@proton.me>
Co-authored-by: github-actions <github-actions@github.com>

* Update locales [skip ci]

* Update locales [skip ci]

* Add vue node feature flag (#4927)

* feat: Implement CRDT-based layout system for Vue nodes (#4959)

* feat: Implement CRDT-based layout system for Vue nodes

Major refactor to solve snap-back issues and create single source of truth for node positions:

- Add Yjs-based CRDT layout store for conflict-free position management
- Implement layout mutations service with clean API
- Create Vue composables for layout access and node dragging
- Add one-way sync from layout store to LiteGraph
- Disable LiteGraph dragging when Vue nodes mode is enabled
- Add z-index management with bring-to-front on node interaction
- Add comprehensive TypeScript types for layout system
- Include unit tests for layout store operations
- Update documentation to reflect CRDT architecture

This provides a solid foundation for both single-user performance and future real-time collaboration features.

Co-Authored-By: Claude <noreply@anthropic.com>

* style: Apply linter fixes to layout system

* fix: Remove unnecessary README files and revert services README

- Remove unnecessary types/README.md file
- Revert unrelated changes to services/README.md
- Keep only relevant documentation for the layout system implementation

These were issues identified during PR review that needed to be addressed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Clean up layout store and implement proper CRDT operations

- Created dedicated layoutOperations.ts with production-grade CRDT interfaces
- Integrated existing QuadTree spatial index instead of simple cache
- Split composables into separate files (useLayout, useNodeLayout, useLayoutSync)
- Cleaned up operation handlers using specific types instead of Extract
- Added proper operation interfaces with type guards and extensibility
- Updated all type references to use new operation structure

The layout store now properly uses the existing QuadTree infrastructure for
efficient spatial queries and follows CRDT best practices with well-defined
operation interfaces.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Extract services and split composables for better organization

- Created SpatialIndexManager to handle QuadTree operations separately
- Added LayoutAdapter interface for CRDT abstraction (Yjs, mock implementations)
- Split GraphNodeManager into focused composables:
  - useNodeWidgets: Widget state and callback management
  - useNodeChangeDetection: RAF-based geometry change detection
  - useNodeState: Node visibility and reactive state management
- Extracted constants for magic numbers and configuration values
- Updated layout store to use SpatialIndexManager and constants

This improves code organization, testability, and makes it easier to swap
CRDT implementations or mock services for testing.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add node slots to layout tree

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* Remove slots from layoutTypes

* Totally not scuffed renderer and adapter

* Revert "Totally not scuffed renderer and adapter"

This reverts commit 2b9d83efb8.

* Revert "Remove slots from layoutTypes"

This reverts commit 18f78ff786.

* Reapply "Add node slots to layout tree"

This reverts commit 236fecb549.

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* docs: Replace architecture docs with comprehensive ADR

- Add ADR-0002 for CRDT-based layout system decision
- Follow established ADR template with persuasive reasoning
- Include performance benefits, collaboration readiness, and architectural advantages
- Update ADR index

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>

* [chore] Extract link rendering out of LGraphCanvas (#4994)

* feat: Implement CRDT-based layout system for Vue nodes

Major refactor to solve snap-back issues and create single source of truth for node positions:

- Add Yjs-based CRDT layout store for conflict-free position management
- Implement layout mutations service with clean API
- Create Vue composables for layout access and node dragging
- Add one-way sync from layout store to LiteGraph
- Disable LiteGraph dragging when Vue nodes mode is enabled
- Add z-index management with bring-to-front on node interaction
- Add comprehensive TypeScript types for layout system
- Include unit tests for layout store operations
- Update documentation to reflect CRDT architecture

This provides a solid foundation for both single-user performance and future real-time collaboration features.

Co-Authored-By: Claude <noreply@anthropic.com>

* style: Apply linter fixes to layout system

* fix: Remove unnecessary README files and revert services README

- Remove unnecessary types/README.md file
- Revert unrelated changes to services/README.md
- Keep only relevant documentation for the layout system implementation

These were issues identified during PR review that needed to be addressed.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Clean up layout store and implement proper CRDT operations

- Created dedicated layoutOperations.ts with production-grade CRDT interfaces
- Integrated existing QuadTree spatial index instead of simple cache
- Split composables into separate files (useLayout, useNodeLayout, useLayoutSync)
- Cleaned up operation handlers using specific types instead of Extract
- Added proper operation interfaces with type guards and extensibility
- Updated all type references to use new operation structure

The layout store now properly uses the existing QuadTree infrastructure for
efficient spatial queries and follows CRDT best practices with well-defined
operation interfaces.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Extract services and split composables for better organization

- Created SpatialIndexManager to handle QuadTree operations separately
- Added LayoutAdapter interface for CRDT abstraction (Yjs, mock implementations)
- Split GraphNodeManager into focused composables:
  - useNodeWidgets: Widget state and callback management
  - useNodeChangeDetection: RAF-based geometry change detection
  - useNodeState: Node visibility and reactive state management
- Extracted constants for magic numbers and configuration values
- Updated layout store to use SpatialIndexManager and constants

This improves code organization, testability, and makes it easier to swap
CRDT implementations or mock services for testing.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add node slots to layout tree

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* Remove slots from layoutTypes

* Totally not scuffed renderer and adapter

* Revert "Totally not scuffed renderer and adapter"

This reverts commit 2b9d83efb8.

* Revert "Remove slots from layoutTypes"

This reverts commit 18f78ff786.

* Reapply "Add node slots to layout tree"

This reverts commit 236fecb549.

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* docs: Replace architecture docs with comprehensive ADR

- Add ADR-0002 for CRDT-based layout system decision
- Follow established ADR template with persuasive reasoning
- Include performance benefits, collaboration readiness, and architectural advantages
- Update ADR index

* Add node slots to layout tree

* Revert "Add node slots to layout tree"

This reverts commit 460493a620.

* Remove slots from layoutTypes

* Totally not scuffed renderer and adapter

* Remove unused methods in LGLA

* Extract slot position calculations to shared utility

- Create slotCalculations.ts utility for centralized slot position logic
- Update LGraphNode to delegate to helper while maintaining compatibility
- Modify LitegraphLinkAdapter to use layout tree positions when available
- Enable link rendering to use layout system coordinates instead of litegraph positions

This allows the layout tree to control link rendering positions, enabling proper
synchronization between Vue components and canvas rendering.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* [fix] Restore original link rendering behavior after refactor

This commit fixes several rendering discrepancies introduced during the link rendering refactor to ensure exact parity with the original litegraph implementation:

Path Shape Fixes:
- STRAIGHT_LINK: Now correctly applies l=10 offset to create innerA/innerB points and uses midX=(innerA.x+innerB.x)*0.5 for elbow placement, matching the original 6-segment path
- LINEAR_LINK: Restored 4-point path with l=15 directional offsets (start → innerA → innerB → end)

Arrow Rendering:
- computeConnectionPoint: Now always uses bezier math with 0.25 factor spline offsets regardless of render mode, ensuring arrow positions match original
- Arrow positions: Fixed to render at 0.25 and 0.75 positions along the path
- Arrow gating: Moved scale>=0.6 and highQuality checks to adapter layer to maintain PathRenderer purity
- Arrow shape: Restored original triangle dimensions (-5,-3) to (0,+7) to (+5,-3)

Center Marker:
- Fixed 'None' option: Center marker now correctly hidden when LinkMarkerShape.None is selected
- Center point calculation: Updated for all render modes to match original positions
- STRAIGHT_LINK center: Uses midX and average of innerA/innerB y-coordinates
- LINEAR_LINK center: Uses midpoint between innerA and innerB control points

These fixes ensure backward compatibility while maintaining the clean separation between the pure PathRenderer and litegraph-specific LitegraphLinkAdapter.

Fixes #Issue-Number

---------

Co-authored-by: bymyself <cbyrne@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>

* feat: Add slot registration and spatial indexing for hit detection

- Implement slot registration for all nodes (Vue and LiteGraph)
- Add spatial indexes for slots and reroutes to improve hit detection performance
- Register slots when nodes are drawn via new registerSlots() method
- Update LayoutStore to use spatial indexing for O(log n) queries instead of O(n)

Resolves #5125

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Revert "feat: Add slot registration and spatial indexing for hit detection"

This reverts commit 70fbfd0f5e.

* feat: Add slot registration and spatial indexing for hit detection

- Implement slot registration for all nodes (Vue and LiteGraph)
- Add spatial indexes for slots and reroutes to improve hit detection performance
- Register slots when nodes are drawn via new registerSlots() method
- Update LayoutStore to use spatial indexing for O(log n) queries instead of O(n)

Resolves #5125

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* relocate slot update to layoutstore

* Revert "relocate slot update to layoutstore"

This reverts commit 0b17ef148bdded35cb231bef25b8d5c77dc14c1f.

* add useSlotLayoutSync

* feat: Extend Layout Store with CRDT support for links and reroutes

Move links and reroutes to be first-class CRDT entities in the Layout Store,
eliminating per-frame registration during rendering. This provides a ~100x
reduction in spatial index operations by using event-driven updates instead
of polling.

Key changes:
- Add CRDT maps for links and reroutes with automatic observers
- Add mutation operations for link/reroute lifecycle management
- Update LiteGraph to use mutations instead of direct store calls
- Remove per-frame updateLinkLayout and updateRerouteLayout calls

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Scuffed diff, change to dirty later

* Fix reroute move desync

* Terrible reroute fixes

* Use LinkId for LinkLayout

* refactor: Remove unused duplicate layout type files

Deleted src/types/layoutTypes.ts and src/types/layoutOperations.ts
which were duplicates of src/renderer/core/layout/types.ts. These
files had zero imports and were creating confusion in the codebase.

The active types are in src/renderer/core/layout/types.ts which
is properly integrated with the current architecture.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Extract layout source strings into LayoutSource enum

Replace hardcoded 'canvas' | 'vue' | 'external' string literals with a proper TypeScript enum for better type safety and maintainability. This change provides a single source of truth for layout source types and makes future modifications easier.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: Unify CRDT layout operations under type-safe entity bases

Replace node-centric BaseOperation with a clean hierarchy:
- Add OperationMeta base containing common fields (timestamp, actor, source, type)
- Introduce entity-specific bases (NodeOpBase, LinkOpBase, RerouteOpBase)
- Each operation now extends its appropriate entity base with proper typing
- Add entity discriminator field for runtime type narrowing

Benefits:
- Eliminates duplicate meta fields across link/reroute operations
- Provides type-safe discriminated unions for each entity type
- Enables clean extension path for future operation types
- Zero breaking changes - type-only refactor with no runtime impact

Also adds helper functions:
- getAffectedNodeIds() to extract node IDs affected by any operation
- Entity-specific helper checks for operation classification

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix initial link seeding

* fix: Fix reroute hit detection and type consistency issues

- Use instanceof Reroute type guard instead of structural 'linkIds' check
- Remove unnecessary Number() conversions for reroute IDs (already numeric)
- Fix parentId truthiness bug (0 is valid parent ID)
- Pass numeric IDs directly in GraphCanvas seeding
- Add missing link/reroute methods to LayoutMutations interface
- Make hit test tolerance scale-aware using ctx.lineWidth and DPI

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add debug logs

* Add missing reroute path

* cleanup

* feat: Implement event-driven link layout sync

Remove layout store writes from render loop and update link geometry only on
actual changes (node move/resize, link/reroute operations, collapse toggles).

Key improvements:
- No layout writes during canvas render (decoupled from draw cycle)
- Link layouts update only on causal events via useLinkLayoutSync
- Hit testing remains precise using stored Path2D objects
- Optimized adapter: calculations only when enableLayoutStoreWrites=true
- Store-level deduplication prevents spatial index churn

Performance impact:
- Render path: Zero layout work, no equality checks, no store writes
- Event path: Direct writes with cheap store-level dedup
- Significant CPU savings per frame on complex graphs

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: Implement DOM-based slot registration with unified position system

- Add centralized getSlotPosition() function in SlotCalculations
- Create SlotIdentifier utilities for consistent slot key generation
- Implement DOM-based slot registration composable with performance optimizations:
  - Cache slot offsets to avoid DOM reads during drag operations
  - Batch measurements via requestAnimationFrame
  - Skip redundant updates when bounds unchanged
- Update Vue slot components to register DOM positions
- Fix widget-to-input index mapping in NodeWidgets
- Prevent double registration when Vue nodes enabled

This improves slot hit-detection accuracy by using actual DOM positions
while maintaining performance through intelligent caching and batching.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove unused files

* Remove duplicated markdown file

* Remove duplicated files and address knip concerns

* Remove outdated test

* warning comment

* Update test snapshots

---------

Co-authored-by: Christian Byrne <cbyrne@comfy.org>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions <github-actions@github.com>

* chore: Empty commit to trigger CI checks

* [refactor] Remove unused legacy mutation types from layout system (#5262)

- Remove LayoutMutationType, LayoutMutation, and related interfaces
- Remove AnyLayoutMutation union type and specific mutation interfaces
- Clean up duplicate legacy types from both layoutTypes.ts and layout/types.ts
- Fix JSON syntax error in Chinese locale file (missing comma)
- Replace lodash with es-toolkit in useFloatWidget (per project standards)
- Reduces codebase by ~120 lines of unused type definitions
- CRDT operations (LayoutOperation) remain unchanged and functional

The legacy mutation types were designed for backward compatibility
but have never been used since this code hasn't been merged to main.
Only the CRDT operation types are actually used in the implementation.

* feat: localization fields (#5318)

* fix: remove clipping by removing unnecessary css contain (#5327)

* [bugfix] Remove placeholder IMAGE widget to restore previous functionality (#5349)

* Remove IMAGE widget

* Remove IMAGE widget test expectations

* - Convert class-based LayoutMutations to useLayoutMutations() composable (#5346)

- Remove unnecessary useLayout wrapper that added boilerplate
- Use LayoutMutations interface directly in LGraph instead of redefining types
- Update all components to use composable pattern consistently

* feat: widget styles for V3 UI (#5320)

* feat: widget input text style

* feat: widget select button style

* feat: the selection style of LGraphNode

* feat(V3 UI style): color picker + file upload + input text + multi select + select + select button + slider + textarea + tree select

* feat: placeholder

* fix: filter multi select options

* fix: direct binding, no transform for select button widget

* refactor: v3 ui slots connection dots (#5316)

* refactor: v3 ui slots connection dots

* fix: use the new useTemplateRef

* fix: slot dark-theme border and hover styles

---------

Co-authored-by: Christian Byrne <cbyrne@comfy.org>

* add explicit typing on component IDs (#5352)

* Remove IMAGE widget cont. (#5355)

* Removes node's dependency on LGraph for access to layout mutations composable (#5356)

* remove DI

* remove layoutMutations property on LGraph

* remove layout mutations property from LGraph snapshot

* [fix] Disable link markers on dragged connections (#5358)

Set linkMarkerShape to None for links being actively dragged by the mouse to prevent visual artifacts.

* [bugfix] Fix NodeHeader test workflow path (#5359)

The test was using an incorrect path for the workflow file. Updated to use the correct path under the nodes/ subdirectory.

Fixes test failure: ENOENT error for single_save_image_node.json

* [Vue Nodes] Fix Node Header Tests (#5360)

* Enable VueNodes

* Use KSampler not save image

* Update test expectations [skip ci]

* remove crdt ADR (moved to separate PR)

* update adr README

* removed unused IMAGE widget enum value

* remove all unused (knip pass)

* remove debug overlay panel

* simplify unit tests

* change name "transformPaneEnabled" => "isVueNodesEnabled"

* remove debug viewport visualizer

* remove debug viewport visualizer prop

* remove outdated README

* skip all vue node operations if feature is turned off

* remove debug logging and setting

* remove event forwarding hack. todo: add link moving in vue

* cleanup comments

* cleanup comments

* add missing translations

* use camelCase for all non-component files

* remove debug viewport test

* - Fix memory leaks in node deletion (#5345)

- Fix TypeScript types in Yjs observers with proper YEventChange type
- Refactor nested observer logic into focused single-responsibility methods
- Consolidate duplicated link segment cleanup logic into reusable methods
- Extract findLinksConnectedToNode method for better readability
- Add explanatory comments for spatial index update ordering
- Extract REROUTE_RADIUS constant instead of magic numbers
- Maintain consistent parameter naming conventions

* remove redundant comment

* use camelcase for layoutStore filename

* removed unused type guards

* simplify widget registration

* move back test that was mistakenly moved

* remove unused typeguards

* removed unused node def type guards

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Benjamin Lu <benceruleanlu@proton.me>
Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Benjamin Lu <benjaminlu1107@gmail.com>
Co-authored-by: Rizumu Ayaka <rizumu@ayaka.moe>
Co-authored-by: Simula_r <18093452+simula-r@users.noreply.github.com>
2025-09-04 21:31:59 -07:00

1700 lines
70 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"apiNodesCostBreakdown": {
"costPerRun": "每次运行的成本",
"title": "API节点",
"totalCost": "总成本"
},
"apiNodesSignInDialog": {
"message": "此工作流包含API节点需要您登录账户才能运行。",
"title": "使用API节点需要登录"
},
"auth": {
"apiKey": {
"cleared": "API 密钥已清除",
"clearedDetail": "您的 API 密钥已成功清除",
"description": "使用您的 Comfy API 密钥以启用 API 节点",
"error": "无效的 API 密钥",
"generateKey": "在这里获取",
"helpText": "需要 API 密钥?",
"invalid": "无效的 API 密钥",
"invalidDetail": "请输入有效的 API 密钥",
"label": "API 密钥",
"placeholder": "请输入您的 API 密钥",
"storageFailed": "API 密钥存储失败",
"storageFailedDetail": "请重试。",
"stored": "API 密钥已存储",
"storedDetail": "您的 API 密钥已成功存储",
"title": "API 密钥",
"whitelistInfo": "关于非白名单网站"
},
"deleteAccount": {
"cancel": "取消",
"confirm": "删除账户",
"confirmMessage": "您确定要删除您的账户吗?此操作无法撤销,并且会永久删除您的所有数据。",
"confirmTitle": "删除账户",
"deleteAccount": "删除账户",
"success": "账户已删除",
"successDetail": "您的账户已成功删除。"
},
"login": {
"andText": "和",
"confirmPasswordLabel": "确认密码",
"confirmPasswordPlaceholder": "再次输入相同的密码",
"emailLabel": "电子邮件",
"emailPlaceholder": "输入您的电子邮件",
"failed": "登录失败",
"forgotPassword": "忘记密码?",
"forgotPasswordError": "发送重置密码邮件失败",
"insecureContextWarning": "此连接不安全HTTP—如果继续登录您的凭据可能会被攻击者拦截。",
"loginButton": "登录",
"loginWithGithub": "使用Github登录",
"loginWithGoogle": "使用Google登录",
"newUser": "新来的?",
"noAssociatedUser": "所提供的 API 密钥未关联任何 Comfy 用户",
"orContinueWith": "或者继续使用",
"passwordLabel": "密码",
"passwordPlaceholder": "输入您的密码",
"passwordResetSent": "重置密码邮件已发送",
"passwordResetSentDetail": "请查收您的电子邮件,点击链接重置密码。",
"privacyLink": "隐私政策",
"questionsContactPrefix": "有疑问?请联系我们:",
"signInOrSignUp": "登录 / 注册",
"signUp": "注册",
"success": "登录成功",
"termsLink": "使用条款",
"termsText": "点击“下一步”或“注册”即表示您同意我们的",
"title": "登录您的账户",
"useApiKey": "Comfy API 密钥",
"userAvatar": "用户头像"
},
"passwordUpdate": {
"success": "密码已更新",
"successDetail": "您的密码已成功更新"
},
"signOut": {
"signOut": "退出登录",
"success": "成功退出登录",
"successDetail": "您已成功退出账户。"
},
"signup": {
"alreadyHaveAccount": "已经有账户了?",
"emailLabel": "电子邮件",
"emailPlaceholder": "输入您的电子邮件",
"passwordLabel": "密码",
"passwordPlaceholder": "输入新密码",
"personalDataConsentLabel": "我同意处理我的个人数据。",
"regionRestrictionChina": "根据当地法规要求,我们暂时无法为中国地区的用户提供服务。",
"signIn": "登录",
"signUpButton": "注册",
"signUpWithGithub": "使用Github注册",
"signUpWithGoogle": "使用Google注册",
"title": "创建一个账户"
}
},
"breadcrumbsMenu": {
"clearWorkflow": "清除工作流程",
"deleteWorkflow": "删除工作流程",
"duplicate": "复制",
"enterNewName": "输入新名称"
},
"chatHistory": {
"cancelEdit": "取消",
"cancelEditTooltip": "取消编辑",
"copiedTooltip": "已复制",
"copyTooltip": "复制消息到剪贴板",
"editTooltip": "编辑消息"
},
"clipboard": {
"errorMessage": "复制到剪贴板失败",
"errorNotSupported": "您的浏览器不支持剪贴板API",
"successMessage": "已复制到剪贴板"
},
"color": {
"black": "黑色",
"blue": "蓝色",
"brown": "棕色",
"custom": "自定义",
"cyan": "青色",
"default": "默认",
"green": "绿色",
"noColor": "无色",
"pale_blue": "淡蓝色",
"pink": "粉色",
"purple": "紫色",
"red": "红色",
"yellow": "黄色"
},
"contextMenu": {
"Add Group": "添加组",
"Add Group For Selected Nodes": "为选定节点添加组",
"Add Node": "添加节点",
"Bypass": "绕过",
"Clone": "克隆",
"Collapse": "折叠",
"Colors": "颜色",
"Convert to Group Node": "转换为组节点",
"Copy (Clipspace)": "复制 (Clipspace)",
"Expand": "展开",
"Inputs": "输入",
"Manage": "管理",
"Manage Group Nodes": "管理组节点",
"Mode": "模式",
"Node Templates": "节点模板",
"Outputs": "输出",
"Pin": "固定",
"Properties": "属性",
"Properties Panel": "属性面板",
"Remove": "删除",
"Resize": "调整大小",
"Save Selected as Template": "将选定节点另存为模板",
"Search": "搜索",
"Shapes": "形状",
"Title": "标题",
"Unpin": "取消固定"
},
"credits": {
"accountInitialized": "账户已初始化",
"activity": "活动",
"added": "已添加",
"additionalInfo": "附加信息",
"apiPricing": "API 价格",
"credits": "积分",
"details": "详情",
"eventType": "事件类型",
"faqs": "常见问题",
"invoiceHistory": "发票历史",
"lastUpdated": "最近更新",
"messageSupport": "联系客服",
"model": "模型",
"purchaseCredits": "购买积分",
"time": "时间",
"topUp": {
"buyNow": "立即购买",
"insufficientMessage": "您的积分不足,无法运行此工作流。",
"insufficientTitle": "积分不足",
"maxAmount": "(最高 $1,000 美元)",
"quickPurchase": "快速购买",
"seeDetails": "查看详情",
"topUp": "充值"
},
"yourCreditBalance": "您的积分余额"
},
"dataTypes": {
"*": "*",
"AUDIO": "音频",
"BOOLEAN": "布尔",
"CAMERA_CONTROL": "相机控制",
"CLIP": "CLIP",
"CLIP_VISION": "CLIP视觉",
"CLIP_VISION_OUTPUT": "CLIP视觉输出",
"COMBO": "组合",
"CONDITIONING": "条件",
"CONTROL_NET": "ControlNet",
"FLOAT": "浮点",
"FLOATS": "浮点组",
"GLIGEN": "GLIGEN",
"GUIDER": "引导器",
"HOOKS": "约束",
"HOOK_KEYFRAMES": "约束关键帧",
"IMAGE": "图像",
"INT": "整数",
"LATENT": "Latent",
"LATENT_OPERATION": "Latent操作",
"LOAD3D_CAMERA": "加载3D相机",
"LOAD_3D": "加载3D",
"LOAD_3D_ANIMATION": "加载3D动画",
"LUMA_CONCEPTS": "Luma 概念",
"LUMA_REF": "Luma 参考",
"MASK": "遮罩",
"MESH": "网格",
"MODEL": "模型",
"NOISE": "噪波",
"PHOTOMAKER": "PhotoMaker",
"PIXVERSE_TEMPLATE": "Pixverse 模板",
"RECRAFT_COLOR": "Recraft 颜色",
"RECRAFT_CONTROLS": "Recraft 控件",
"RECRAFT_V3_STYLE": "Recraft V3 风格",
"SAMPLER": "采样器",
"SIGMAS": "Sigmas",
"STRING": "字符串",
"STYLE_MODEL": "风格模型",
"SVG": "SVG",
"TIMESTEPS_RANGE": "时间间隔范围",
"UPSCALE_MODEL": "放大模型",
"VAE": "VAE",
"VIDEO": "视频",
"VOXEL": "体素",
"WEBCAM": "摄像头"
},
"desktopMenu": {
"confirmQuit": "有未保存的工作流程开启;任何未保存的更改都将丢失。忽略此警告并退出?",
"confirmReinstall": "这将清除您的 extra_models_config.yaml 文件,并重新开始安装。您确定吗?",
"quit": "退出",
"reinstall": "重新安装"
},
"desktopUpdate": {
"description": "ComfyUI桌面正在安装新的依赖项。这可能需要几分钟的时间。",
"errorCheckingUpdate": "检查更新时出错",
"errorInstallingUpdate": "安装更新时出错",
"noUpdateFound": "未发现更新",
"terminalDefaultMessage": "更新过程中的任何控制台输出都将在这里显示。",
"title": "正在更新ComfyUI桌面",
"updateAvailableMessage": "有可用的更新。您现在要重启并更新吗?",
"updateFoundTitle": "找到更新 (v{version})"
},
"downloadGit": {
"gitWebsite": "下载 git",
"instructions": "请下载并安装适合您操作系统的最新版本。下面的下载 git 按钮将打开 git-scm.com 下载页面。",
"message": "无法找到 git。正常操作需要一个可用的 git 副本。",
"skip": "跳过",
"title": "下载 git",
"warning": "如果您确定不需要安装 git或者已经安装了 git您可以点击跳过以绕过此检查。当前不支持在没有可用 git 副本的情况下运行 ComfyUI。"
},
"electronFileDownload": {
"cancel": "取消下载",
"cancelled": "已取消",
"inProgress": "进行中",
"pause": "暂停下载",
"paused": "已暂停",
"resume": "恢复下载"
},
"errorDialog": {
"defaultTitle": "发生错误",
"extensionFileHint": "这可能是由于以下脚本",
"loadWorkflowTitle": "由于重新加载工作流数据出错,加载被中止",
"noStackTrace": "无可用堆栈跟踪",
"promptExecutionError": "提示执行失败"
},
"g": {
"about": "关于",
"add": "添加",
"addNodeFilterCondition": "添加节点筛选条件",
"all": "全部",
"amount": "数量",
"apply": "应用",
"architecture": "架构",
"audioFailedToLoad": "音频加载失败",
"author": "作者",
"back": "返回",
"cancel": "取消",
"capture": "捕获",
"category": "类别",
"choose_file_to_upload": "选择要上传的文件",
"clear": "清除",
"clearAll": "全部清除",
"clearFilters": "清除筛选",
"close": "关闭",
"color": "颜色",
"comingSoon": "即将推出",
"command": "指令",
"community": "社区",
"completed": "已完成",
"confirm": "确认",
"confirmed": "已确认",
"continue": "继续",
"control_after_generate": "生成后控制",
"control_before_generate": "生成前控制",
"copy": "复制",
"copyToClipboard": "复制到剪贴板",
"copyURL": "复制链接",
"currentUser": "当前用户",
"customBackground": "自定义背景",
"customize": "自定义",
"customizeFolder": "自定义文件夹",
"delete": "删除",
"deprecated": "已弃用",
"description": "描述",
"devices": "设备",
"disableAll": "禁用全部",
"disabling": "禁用中",
"dismiss": "关闭",
"download": "下载",
"dropYourFileOr": "拖放您的文件或",
"duplicate": "复制",
"edit": "编辑",
"empty": "空",
"enableAll": "启用全部",
"enabled": "已启用",
"enabling": "启用中",
"error": "错误",
"experimental": "测试版",
"export": "导出",
"extensionName": "扩展名称",
"feedback": "反馈",
"filter": "过滤",
"findIssues": "查找问题",
"frontendNewer": "前端版本 {frontendVersion} 可能与后端版本 {backendVersion} 不相容。",
"frontendOutdated": "前端版本 {frontendVersion} 已过时。后端需要 {requiredVersion} 或更高版本。",
"goToNode": "转到节点",
"help": "帮助",
"icon": "图标",
"imageFailedToLoad": "图像加载失败",
"imageUrl": "图片网址",
"import": "导入",
"inProgress": "进行中",
"insert": "插入",
"install": "安装",
"installed": "已安装",
"installing": "正在安装",
"interrupted": "已中断",
"itemSelected": "已选择 {selectedCount} 项",
"itemsSelected": "已选择 {selectedCount} 项",
"keybinding": "按键绑定",
"keybindingAlreadyExists": "快捷键已存在",
"learnMore": "了解更多",
"loadAllFolders": "加载所有文件夹",
"loadWorkflow": "加载工作流",
"loading": "加载中",
"loadingPanel": "正在加载{panel}面板...",
"login": "登录",
"logs": "日志",
"micPermissionDenied": "麦克风权限被拒绝",
"migrate": "迁移",
"missing": "缺失",
"moreWorkflows": "更多工作流",
"name": "名称",
"newFolder": "新文件夹",
"next": "下一个",
"no": "否",
"noAudioRecorded": "未录制音频",
"noResultsFound": "未找到结果",
"noTasksFound": "未找到任务",
"noTasksFoundMessage": "队列中没有任务。",
"noWorkflowsFound": "未找到工作流。",
"nodes": "节点",
"nodesRunning": "节点正在运行",
"ok": "确定",
"openNewIssue": "打开新问题",
"overwrite": "覆盖",
"preview": "预览",
"progressCountOf": "共",
"reconnected": "已重新连接",
"reconnecting": "重新连接中",
"refresh": "刷新",
"releaseTitle": "{package} {version} 发布",
"reloadToApplyChanges": "重新加载以应用更改",
"rename": "重命名",
"reportIssue": "发送报告",
"reportIssueTooltip": "向 Comfy Org 提交错误报告",
"reportSent": "报告已提交",
"reset": "重置",
"resetAll": "重置所有",
"resetAllKeybindingsTooltip": "将所有键绑定重置为默认",
"restart": "重新启动",
"resultsCount": "找到 {count} 个结果",
"save": "保存",
"saving": "正在保存",
"searchExtensions": "搜索扩展",
"searchFailedMessage": "我们找不到任何与您的搜索匹配的设置。请尝试调整您的搜索词。",
"searchKeybindings": "搜索快捷键",
"searchModels": "搜索模型",
"searchNodes": "搜索节点",
"searchSettings": "搜索设置",
"searchWorkflows": "搜索工作流",
"setAsBackground": "设为背景",
"settings": "设置",
"showReport": "显示报告",
"sort": "排序",
"source": "来源",
"startRecording": "开始录音",
"status": "状态",
"stopRecording": "停止录音",
"success": "成功",
"systemInfo": "系统信息",
"terminal": "终端",
"title": "标题",
"triggerPhrase": "触发短语",
"unknownError": "未知错误",
"update": "更新",
"updateAvailable": "有更新可用",
"updateFrontend": "更新前端",
"updated": "已更新",
"updating": "更新中",
"upload": "上传",
"usageHint": "使用提示",
"user": "用户",
"versionMismatchWarning": "版本相容性警告",
"versionMismatchWarningMessage": "{warning}{detail} 请参阅 https://docs.comfy.org/installation/update_comfyui#common-update-issues 以取得更新说明。",
"videoFailedToLoad": "视频加载失败",
"workflow": "工作流"
},
"graphCanvasMenu": {
"fitView": "适应视图",
"focusMode": "专注模式",
"hand": "拖拽",
"hideLinks": "隐藏链接",
"panMode": "平移模式",
"resetView": "重置视图",
"select": "选择",
"selectMode": "选择模式",
"showLinks": "显示链接",
"toggleMinimap": "切换小地图",
"zoomIn": "放大",
"zoomOptions": "缩放选项",
"zoomOut": "缩小"
},
"groupNode": {
"create": "创建组节点",
"enterName": "输入名称"
},
"helpCenter": {
"clickToLearnMore": "点击了解更多 →",
"desktopUserGuide": "桌面端用户指南",
"docs": "文档",
"github": "Github",
"helpFeedback": "帮助与反馈",
"loadingReleases": "加载发布信息...",
"more": "更多...",
"noRecentReleases": "没有最近的发布",
"openDevTools": "打开开发者工具",
"reinstall": "重新安装",
"updateAvailable": "更新",
"whatsNew": "新功能?"
},
"icon": {
"bookmark": "书签",
"box": "盒子",
"briefcase": "公文包",
"exclamation-triangle": "警告",
"file": "文件",
"folder": "文件夹",
"heart": "心",
"inbox": "收件箱",
"star": "星星"
},
"install": {
"appDataLocationTooltip": "ComfyUI 的应用数据目录。存储:\n- 日志\n- 服务器配置",
"appPathLocationTooltip": "ComfyUI 的应用资产目录。存储 ComfyUI 代码和资产",
"cannotWrite": "无法写入所选路径。",
"chooseInstallationLocation": "选择安装位置",
"customNodes": "自定义节点",
"customNodesDescription": "引用现有 ComfyUI 安装的自定义节点文件并安装其依赖项。",
"desktopAppSettings": "桌面应用设置",
"desktopAppSettingsDescription": "配置 ComfyUI 在桌面上的行为。您可以稍后更改这些设置。",
"desktopSettings": "桌面设置",
"failedToSelectDirectory": "选择目录失败",
"gpu": "GPU",
"gpuSelection": {
"cpuMode": "CPU 模式",
"cpuModeDescription": "CPU 模式仅适用于开发者和极少数特殊情况。",
"cpuModeDescription2": "如果你不完全确定你需要这个,忽略该选项并在上面选择你的 GPU。",
"customComfyNeedsPython": "在 python 完成设置前ComfyUI 将无法工作",
"customInstallRequirements": "安装所有需求和依赖项(例如:自定义 torch",
"customManualVenv": "手动配置 python 虚拟环境",
"customMayNotWork": "完全不支持,可能无法工作",
"customSkipsPython": "此选项跳过正常的 python 设置。",
"enableCpuMode": "启用 CPU 模式",
"mpsDescription": "Apple Metal Performance Shaders 使用 pytorch nightly 支持。",
"nvidiaDescription": "NVIDIA 设备直接支持使用 pytorch CUDA 构建。",
"selectGpu": "选择 GPU",
"selectGpuDescription": "选择你拥有的 GPU 类型"
},
"helpImprove": "请帮助我们改进ComfyUI",
"installLocation": "安装位置",
"installLocationDescription": "选择 ComfyUI 用户数据的存放目录。将安装一个 Python 环境到所选位置。请确保所选磁盘有足够的空间(约 15GB。",
"installLocationTooltip": "ComfyUI 的用户数据目录。存储:\n- Python 环境\n- 模型\n- 自定义节点\n",
"insufficientFreeSpace": "空间不足 - 最小可用空间",
"isOneDrive": "在OneDrive中安装可能会导致问题。强烈建议在非OneDrive位置安装。",
"manualConfiguration": {
"createVenv": "您需要在以下目录中创建虚拟环境",
"requirements": "依赖项",
"restartWhenFinished": "配置虚拟环境完成后请重新启动ComfyUI。",
"title": "手动配置",
"virtualEnvironmentPath": "虚拟环境路径"
},
"metricsDisabled": "禁用度量",
"metricsEnabled": "启用度量",
"migrateFromExistingInstallation": "从现有安装迁移",
"migration": "迁移",
"migrationOptional": "迁移是可选的。如果您之前没有安装过 ComfyUI可以跳过此步骤。",
"migrationSourcePathDescription": "如果您已有现有的ComfyUI安装我们可以复制/链接您现有的用户文件和模型到新的安装。您现有的ComfyUI安装将不会受到影响。",
"moreInfo": "有关更多信息,请阅读我们的",
"nonDefaultDrive": "请在您的系统驱动器上安装ComfyUI例如C:\\)。具有不同文件系统的驱动器可能会导致不可预测的问题。安装后,模型和其他文件可以存储在其他驱动器上。",
"parentMissing": "路径不存在 - 请先创建包含该路径的目录",
"pathExists": "目录已存在 - 请确保您已备份全部数据",
"pathValidationFailed": "路径验证失败",
"privacyPolicy": "隐私政策",
"selectItemsToMigrate": "选择要迁移的项目",
"settings": {
"allowMetrics": "使用情况指标",
"allowMetricsDescription": "通过发送匿名使用情况指标来帮助改进ComfyUI。不会收集任何个人信息或工作流内容。",
"autoUpdate": "自动更新",
"autoUpdateDescription": "更新可用时自动更新。您将在安装更新之前收到通知。",
"checkingMirrors": "正在检查到Python镜像的网络访问...",
"dataCollectionDialog": {
"collect": {
"errorReports": "错误报告和堆栈跟踪",
"systemInfo": "硬件,操作系统类型和应用版本",
"userJourneyEvents": "用户旅程事件"
},
"doNotCollect": {
"customNodeConfigurations": "自定义节点配置",
"fileSystemInformation": "文件系统信息",
"personalInformation": "个人信息",
"workflowContents": "工作流内容"
},
"title": "关于数据收集",
"viewFullPolicy": "查看完整政策",
"whatWeCollect": "我们收集的内容:",
"whatWeDoNotCollect": "我们不收集的内容:"
},
"errorUpdatingConsent": "更新同意错误",
"errorUpdatingConsentDetail": "无法更新度量同意设置",
"learnMoreAboutData": "了解更多关于数据收集的信息",
"mirrorSettings": "镜像设置",
"mirrorsReachable": "到Python镜像的网络访问良好",
"mirrorsUnreachable": "对某些python镜像的网络访问不佳",
"pypiMirrorPlaceholder": "输入PyPI镜像URL",
"pythonMirrorPlaceholder": "输入Python镜像URL"
},
"systemLocations": "系统位置",
"unhandledError": "未知错误",
"updateConsent": "您之前选择了报告崩溃。我们现在正在跟踪基于事件的度量,以帮助识别错误并改进应用程序。我们不收集任何个人可识别信息。"
},
"issueReport": {
"helpFix": "帮助修复这个"
},
"load3d": {
"applyingTexture": "应用纹理中...",
"backgroundColor": "背景颜色",
"camera": "摄影机",
"cameraType": {
"orthographic": "正交",
"perspective": "透视"
},
"clearRecording": "清除录制",
"edgeThreshold": "边缘阈值",
"export": "导出",
"exportModel": "导出模型",
"exportRecording": "导出录制",
"exportingModel": "正在导出模型...",
"fov": "视场",
"light": "灯光",
"lightIntensity": "光照强度",
"loadingBackgroundImage": "正在加载背景图像",
"loadingModel": "正在加载3D模型...",
"materialMode": "材质模式",
"materialModes": {
"depth": "深度",
"lineart": "线稿",
"normal": "法线",
"original": "原始",
"wireframe": "线框"
},
"model": "模型",
"openIn3DViewer": "在 3D 查看器中打开",
"previewOutput": "预览输出",
"removeBackgroundImage": "移除背景图片",
"resizeNodeMatchOutput": "调整节点以匹配输出",
"scene": "场景",
"showGrid": "显示网格",
"startRecording": "开始录制",
"stopRecording": "停止录制",
"switchCamera": "切换摄影机类型",
"switchingMaterialMode": "切换材质模式中...",
"upDirection": "上方向",
"upDirections": {
"original": "原始"
},
"uploadBackgroundImage": "上传背景图片",
"uploadTexture": "上传纹理",
"viewer": {
"apply": "应用",
"cameraSettings": "相机设置",
"cameraType": "相机类型",
"cancel": "取消",
"exportSettings": "导出设置",
"lightSettings": "灯光设置",
"modelSettings": "模型设置",
"sceneSettings": "场景设置",
"title": "3D 查看器(测试版)"
}
},
"loadWorkflowWarning": {
"coreNodesFromVersion": "需要 ComfyUI {version}",
"outdatedVersion": "某些节点需要更高版本的 ComfyUI当前版本{version})。请更新以使用所有节点。",
"outdatedVersionGeneric": "某些节点需要更高版本的 ComfyUI。请更新以使用所有节点。"
},
"maintenance": {
"None": "无",
"OK": "确定",
"Skipped": "跳过",
"allOk": "未检测到任何问题。",
"confirmTitle": "你确定吗?",
"consoleLogs": "控制台日志",
"detected": "检测到",
"error": {
"cannotContinue": "无法继续 - 仍有错误",
"defaultDescription": "运行维护任务时发生错误。",
"taskFailed": "任务运行失败。",
"toastTitle": "任务错误"
},
"refreshing": "刷新中",
"showManual": "显示维护任务",
"status": "状态",
"terminalDefaultMessage": "当你运行一个故障排除命令时,任何输出都会在这里显示。",
"title": "维护"
},
"manager": {
"changingVersion": "将版本从 {from} 更改为 {to}",
"createdBy": "创建者",
"dependencies": "依赖关系",
"discoverCommunityContent": "发现社区制作的节点包,扩展等等...",
"downloads": "下载",
"errorConnecting": "连接到Comfy节点注册表时出错。",
"failed": "失败 ({count})",
"filter": {
"disabled": "已禁用",
"enabled": "已启用",
"nodePack": "节点包"
},
"inWorkflow": "在工作流中",
"infoPanelEmpty": "点击一个项目查看信息",
"installAllMissingNodes": "安装所有缺失节点",
"installSelected": "安装选定",
"installationQueue": "安装队列",
"lastUpdated": "最后更新",
"latestVersion": "最新",
"license": "许可证",
"loadingVersions": "正在加载版本...",
"nightlyVersion": "每夜",
"noDescription": "无可用描述",
"noNodesFound": "未找到节点",
"noNodesFoundDescription": "无法解析包的节点,或者该包仅为前端扩展,没有任何节点。",
"noResultsFound": "未找到符合您搜索的结果。",
"nodePack": "节点包",
"packsSelected": "选定的包",
"repository": "仓库",
"restartToApplyChanges": "要应用更改请重新启动ComfyUI",
"searchPlaceholder": "搜索",
"selectVersion": "选择版本",
"sort": {
"created": "最新",
"downloads": "最受欢迎",
"publisher": "出版商",
"updated": "最近更新"
},
"status": {
"active": "活跃",
"banned": "已禁止",
"deleted": "已删除",
"flagged": "已标记",
"pending": "待定",
"unknown": "未知"
},
"title": "自定义节点管理器",
"totalNodes": "节点总数",
"tryAgainLater": "请稍后再试。",
"tryDifferentSearch": "请尝试不同的搜索查询。",
"uninstall": "卸载",
"uninstallSelected": "卸载所选",
"uninstalling": "正在卸载",
"update": "更新",
"updatingAllPacks": "更新所有包",
"version": "版本"
},
"maskEditor": {
"Apply to Whole Image": "应用到整个图像",
"Brush Settings": "笔刷设置",
"Brush Shape": "笔刷形状",
"Clear": "清空",
"Color Select Settings": "颜色选择设置",
"Fill Opacity": "填充不透明度",
"Hardness": "硬度",
"Image Layer": "图像图层",
"Invert": "反转",
"Layers": "图层",
"Live Preview": "实时预览",
"Mask Layer": "遮罩图层",
"Mask Opacity": "遮罩不透明度",
"Mask Tolerance": "遮罩容差",
"Method": "方法",
"Opacity": "不透明度",
"Paint Bucket Settings": "油漆桶设置",
"Reset to Default": "恢复默认",
"Selection Opacity": "选区不透明度",
"Smoothing Precision": "平滑精度",
"Stop at mask": "在遮罩处停止",
"Thickness": "粗细",
"Tolerance": "容差"
},
"menu": {
"autoQueue": "自动执行",
"batchCount": "批次数量",
"batchCountTooltip": "工作流生成次数",
"clear": "清空工作流",
"clipspace": "打开剪贴板",
"dark": "深色",
"disabled": "禁用",
"disabledTooltip": "工作流将不会自动执行",
"execute": "执行",
"help": "说明",
"hideMenu": "隐藏菜单",
"instant": "实时",
"instantTooltip": "工作流将会在生成完成后立即执行",
"interrupt": "取消当前任务",
"light": "淺色",
"manageExtensions": "管理扩展功能",
"onChange": "更改时",
"onChangeTooltip": "一旦进行更改,工作流将添加到执行队列",
"queue": "队列面板",
"refresh": "刷新节点",
"resetView": "重置视图",
"run": "运行",
"runWorkflow": "运行工作流程Shift排在前面",
"runWorkflowFront": "运行工作流程(排在前面)",
"settings": "设定",
"showMenu": "显示菜单",
"theme": "主题",
"toggleBottomPanel": "底部面板"
},
"menuLabels": {
"About ComfyUI": "关于ComfyUI",
"Bottom Panel": "底部面板",
"Browse Templates": "浏览模板",
"Bypass/Unbypass Selected Nodes": "忽略/取消忽略选定节点",
"Canvas Performance": "画布性能",
"Canvas Toggle Lock": "切换视图锁定",
"Check for Updates": "检查更新",
"Clear Pending Tasks": "清除待处理任务",
"Clear Workflow": "清除工作流",
"Clipspace": "剪贴空间",
"Close Current Workflow": "关闭当前工作流",
"Collapse/Expand Selected Nodes": "折叠/展开选定节点",
"Comfy-Org Discord": "Comfy-Org Discord",
"ComfyUI Docs": "ComfyUI 文档",
"ComfyUI Forum": "ComfyUI 论坛",
"ComfyUI Issues": "ComfyUI 问题",
"Contact Support": "联系支持",
"Convert Selection to Subgraph": "将选中内容转换为子图",
"Convert selected nodes to group node": "将选中节点转换为组节点",
"Decrease Brush Size in MaskEditor": "在 MaskEditor 中减小笔刷大小",
"Delete Selected Items": "删除选定的项目",
"Desktop User Guide": "桌面端用户指南",
"Duplicate Current Workflow": "复制当前工作流",
"Edit": "编辑",
"Exit Subgraph": "退出子图",
"Export": "导出",
"Export (API)": "导出 (API)",
"File": "文件",
"Fit Group To Contents": "适应组内容",
"Focus Mode": "专注模式",
"Give Feedback": "提供反馈",
"Group Selected Nodes": "将选中节点转换为组节点",
"Help": "帮助",
"Help Center": "帮助中心",
"Increase Brush Size in MaskEditor": "在 MaskEditor 中增大笔刷大小",
"Interrupt": "中断",
"Load Default Workflow": "加载默认工作流",
"Lock Canvas": "锁定画布",
"Manage group nodes": "管理组节点",
"Manager": "管理器",
"Minimap": "小地图",
"Model Library": "模型库",
"Move Selected Nodes Down": "下移所选节点",
"Move Selected Nodes Left": "左移所选节点",
"Move Selected Nodes Right": "右移所选节点",
"Move Selected Nodes Up": "上移所选节点",
"Mute/Unmute Selected Nodes": "静音/取消静音选定节点",
"New": "新建",
"Next Opened Workflow": "下一个打开的工作流",
"Node Library": "节点库",
"Node Links": "节点连接",
"Open": "打开",
"Open 3D Viewer (Beta) for Selected Node": "为选中节点打开3D查看器测试版",
"Open Custom Nodes Folder": "打开自定义节点文件夹",
"Open DevTools": "打开开发者工具",
"Open Inputs Folder": "打开输入文件夹",
"Open Logs Folder": "打开日志文件夹",
"Open Mask Editor for Selected Node": "为选中节点打开 Mask 编辑器",
"Open Models Folder": "打开模型文件夹",
"Open Outputs Folder": "打开输出文件夹",
"Open Sign In Dialog": "打开登录对话框",
"Open extra_model_paths_yaml": "打开 extra_model_paths.yaml",
"Pin/Unpin Selected Items": "固定/取消固定选定项目",
"Pin/Unpin Selected Nodes": "固定/取消固定选定节点",
"Previous Opened Workflow": "上一个打开的工作流",
"Queue Panel": "队列面板",
"Queue Prompt": "执行提示词",
"Queue Prompt (Front)": "执行提示词 (优先执行)",
"Queue Selected Output Nodes": "将所选输出节点加入队列",
"Quit": "退出",
"Redo": "重做",
"Refresh Node Definitions": "刷新节点定义",
"Reinstall": "重新安装",
"Reset View": "重置视图",
"Resize Selected Nodes": "调整选定节点的大小",
"Restart": "重启",
"Save": "保存",
"Save As": "另存为",
"Show Keybindings Dialog": "显示快捷键对话框",
"Show Model Selector (Dev)": "显示模型选择器(开发用)",
"Show Settings Dialog": "显示设置对话框",
"Sign Out": "退出登录",
"Toggle Essential Bottom Panel": "切换基础底部面板",
"Toggle Bottom Panel": "切换底部面板",
"Toggle Focus Mode": "切换专注模式",
"Toggle Logs Bottom Panel": "切换日志底部面板",
"Toggle Search Box": "切换搜索框",
"Toggle Terminal Bottom Panel": "切换终端底部面板",
"Toggle Theme (Dark/Light)": "切换主题(暗/亮)",
"Toggle View Controls Bottom Panel": "切换视图控制底部面板",
"Toggle Workflows Sidebar": "切换工作流侧边栏",
"Toggle the Custom Nodes Manager": "切换自定义节点管理器",
"Toggle the Custom Nodes Manager Progress Bar": "切换自定义节点管理器进度条",
"Undo": "撤销",
"Ungroup selected group nodes": "解散选中组节点",
"Unlock Canvas": "解除锁定画布",
"Unpack the selected Subgraph": "解包选中子图",
"Workflows": "工作流",
"Zoom In": "放大画面",
"Zoom Out": "缩小画面",
"Zoom to fit": "缩放以适应"
},
"minimap": {
"nodeColors": "节点颜色",
"renderBypassState": "渲染绕过状态",
"renderErrorState": "渲染错误状态",
"showGroups": "显示框架/分组",
"showLinks": "显示连接",
"sideToolbar_modelLibrary": "侧边工具栏.模型库",
"sideToolbar_nodeLibrary": "侧边工具栏.节点库",
"sideToolbar_queue": "侧边工具栏.队列",
"sideToolbar_workflows": "侧边工具栏.工作流"
},
"missingModelsDialog": {
"doNotAskAgain": "不再显示此消息",
"missingModels": "缺少模型",
"missingModelsMessage": "加载图表时,未找到以下模型"
},
"nodeCategories": {
"3d": "3d",
"3d_models": "3D模型",
"BFL": "BFL",
"Ideogram": "Ideogram",
"Kling": "Kling",
"Luma": "Luma",
"MiniMax": "MiniMax",
"OpenAI": "OpenAI",
"Pika": "Pika",
"PixVerse": "PixVerse",
"Recraft": "Recraft",
"Stability AI": "Stability AI",
"Veo": "Veo",
"_for_testing": "_用于测试",
"advanced": "高级",
"animation": "动画",
"api": "API",
"api node": "api 节点",
"attention_experiments": "注意力实验",
"audio": "音频",
"batch": "批处理",
"clip": "CLIP",
"combine": "组合",
"compositing": "合成",
"cond pair": "条件对",
"cond single": "条件单",
"conditioning": "条件",
"controlnet": "ControlNet",
"create": "创建",
"custom_sampling": "自定义采样",
"debug": "调试",
"deprecated": "已弃用",
"flux": "Flux",
"gligen": "GLIGEN",
"guidance": "引导",
"guiders": "引导器",
"hooks": "约束",
"image": "图像",
"inpaint": "局部重绘",
"instructpix2pix": "InstructPix2Pix",
"latent": "Latent",
"loaders": "加载器",
"lotus": "lotus",
"ltxv": "LTXV",
"mask": "遮罩",
"model": "模型",
"model_merging": "模型合并",
"model_patches": "模型微调",
"model_specific": "模型特定",
"noise": "噪波",
"operations": "操作",
"photomaker": "PhotoMaker",
"postprocessing": "后处理",
"preprocessors": "预处理器",
"primitive": "基础",
"samplers": "采样器",
"sampling": "采样",
"schedulers": "调度器",
"scheduling": "调度",
"sd": "sd",
"sd3": "SD3",
"sigmas": "Sigmas",
"stable_cascade": "StableCascade",
"style_model": "风格模型",
"transform": "变换",
"unet": "U-Net",
"upscale_diffusion": "放大扩散",
"upscaling": "放大",
"utils": "工具",
"v1": "v1",
"v2": "v2",
"v3": "v3",
"video": "视频",
"video_models": "视频模型"
},
"nodeHelpPage": {
"documentationPage": "文档页面",
"inputs": "输入",
"loadError": "加载帮助失败:{error}",
"moreHelp": "如需更多帮助,请访问",
"outputs": "输出",
"type": "类型"
},
"nodeTemplates": {
"enterName": "输入名称",
"saveAsTemplate": "另存为模板"
},
"notSupported": {
"continue": "继续",
"continueTooltip": "我确定我的设备是受支持的",
"learnMore": "了解更多",
"message": "仅支持以下设备:",
"reportIssue": "报告问题",
"supportedDevices": {
"macos": "MacOS (M1 或更高版本)",
"windows": "Windows (支持 CUDA 的 Nvidia GPU)"
},
"title": "您的设备不受支持"
},
"releaseToast": {
"newVersionAvailable": "新版本可用!",
"skip": "跳过",
"update": "更新",
"whatsNew": "新功能?"
},
"selectionToolbox": {
"executeButton": {
"disabledTooltip": "未选择输出节点",
"tooltip": "执行到选定的输出节点(用橙色边框高亮显示)"
}
},
"serverConfig": {
"modifiedConfigs": "您已修改以下服务器配置。重启以应用更改。",
"restart": "重启",
"revertChanges": "撤销更改"
},
"serverConfigCategories": {
"Attention": "注意力",
"CUDA": "CUDA",
"Cache": "缓存",
"Directories": "目录",
"General": "常规",
"Inference": "推理",
"Memory": "内存",
"Network": "网络",
"Preview": "预览"
},
"serverConfigItems": {
"cache-classic": {
"name": "使用经典缓存系统"
},
"cache-lru": {
"name": "使用 LRU 缓存,最多缓存 N 个节点结果。",
"tooltip": "可能会使用更多的 RAM/VRAM。"
},
"cpu-vae": {
"name": "在 CPU 上运行 VAE"
},
"cross-attention-method": {
"name": "交叉注意力方法"
},
"cuda-device": {
"name": "要使用的 CUDA 设备索引"
},
"cuda-malloc": {
"name": "使用 CUDA malloc 进行内存分配"
},
"default-hashing-function": {
"name": "模型文件的默认哈希函数"
},
"deterministic": {
"name": "使 pytorch 在可以时使用较慢的确定性算法。",
"tooltip": "请注意,这可能不会在所有情况下使图像具有确定性。"
},
"directml": {
"name": "DirectML 设备索引"
},
"disable-all-custom-nodes": {
"name": "禁用加载所有自定义节点。"
},
"disable-ipex-optimize": {
"name": "禁用 IPEX 优化"
},
"disable-metadata": {
"name": "禁用在文件中保存提示元数据。"
},
"disable-smart-memory": {
"name": "禁用智能内存管理",
"tooltip": "强制 ComfyUI 在可以时将模型从 VRAM 移出到常规 RAM。"
},
"disable-xformers": {
"name": "禁用 xFormers 优化"
},
"dont-print-server": {
"name": "不将服务器输出打印到控制台。"
},
"dont-upcast-attention": {
"name": "不使用 upcast-attention"
},
"enable-cors-header": {
"name": "启用 CORS header使用 \"*\" 代表所有来源或指定域名"
},
"fast": {
"name": "启用一些未经测试且可能降低质量的优化。"
},
"force-channels-last": {
"name": "强制使用 channels-last 内存格式"
},
"force-upcast-attention": {
"name": "强制 upcast-attention"
},
"global-precision": {
"name": "全局浮点精度",
"tooltip": "全局浮点精度"
},
"input-directory": {
"name": "输入目录"
},
"listen": {
"name": "主机要监听的IP地址"
},
"log-level": {
"name": "日志详细级别"
},
"max-upload-size": {
"name": "最大上传大小 (MB)"
},
"output-directory": {
"name": "输出目录"
},
"port": {
"name": "端口:要监听的端口"
},
"preview-method": {
"name": "用于潜空间预览的方法"
},
"preview-size": {
"name": "预览图像的大小"
},
"reserve-vram": {
"name": "保留 VRAM (GB)",
"tooltip": "设置您希望为操作系统/其他软件保留的 VRAM GB。默认会根据系统类型保留一定数量。"
},
"text-encoder-precision": {
"name": "文本编码器精度",
"tooltip": "文本编码器精度"
},
"tls-certfile": {
"name": "TLS 证书文件HTTPS 的 TLS 证书文件路径"
},
"tls-keyfile": {
"name": "TLS 密钥文件HTTPS 的 TLS 密钥文件路径"
},
"unet-precision": {
"name": "UNET 精度",
"tooltip": "UNET 精度"
},
"vae-precision": {
"name": "VAE 精度",
"tooltip": "VAE 精度"
},
"vram-management": {
"name": "VRAM 管理模式"
}
},
"serverStart": {
"openLogs": "打开日志",
"process": {
"error": "无法启动 ComfyUI 桌面版",
"initial-state": "加载中...",
"python-setup": "正在设置 Python 环境...",
"ready": "完成中...",
"starting-server": "正在启动 ComfyUI 服务器..."
},
"reportIssue": "报告问题",
"showTerminal": "显示终端",
"troubleshoot": "故障排除"
},
"settingsCategories": {
"3D": "3D",
"3DViewer": "3D查看器",
"API Nodes": "API 节点",
"About": "关于",
"Appearance": "外观",
"BrushAdjustment": "画笔调整",
"Camera": "相机",
"Canvas": "画布",
"ColorPalette": "色彩主题",
"Comfy": "Comfy",
"Comfy-Desktop": "Comfy桌面版",
"ContextMenu": "上下文菜单",
"Credits": "积分",
"CustomColorPalettes": "自定义色彩主题",
"DevMode": "开发模式",
"EditTokenWeight": "编辑令牌权重",
"Extension": "扩展",
"General": "常规",
"Graph": "画面",
"Group": "组",
"Keybinding": "快捷键",
"Light": "光照",
"Link": "连线",
"LinkRelease": "释放链接",
"LiteGraph": "画面",
"Load 3D": "加载3D",
"Locale": "区域设置",
"Mask Editor": "遮罩编辑器",
"Menu": "菜单",
"ModelLibrary": "模型库",
"NewEditor": "新编辑器",
"Node": "节点",
"Node Search Box": "节点搜索框",
"Node Widget": "节点组件",
"NodeLibrary": "节点库",
"Notification Preferences": "通知偏好",
"Pointer": "指针",
"Queue": "队列",
"QueueButton": "执行按钮",
"Reroute": "重新路由",
"RerouteBeta": "转接点 Beta",
"Scene": "场景",
"Server": "服务器",
"Server-Config": "服务器配置",
"Settings": "设置",
"Sidebar": "侧边栏",
"Tree Explorer": "树形浏览器",
"UV": "UV",
"User": "用户",
"Validation": "验证",
"Vue Nodes": "Vue 节点",
"Window": "窗口",
"Workflow": "工作流"
},
"shortcuts": {
"essentials": "常用",
"keyboardShortcuts": "键盘快捷键",
"manageShortcuts": "管理快捷键",
"noKeybinding": "无快捷键",
"subcategories": {
"node": "节点",
"panelControls": "面板控制",
"queue": "队列",
"view": "视图",
"workflow": "工作流"
},
"viewControls": "视图控制"
},
"sideToolbar": {
"browseTemplates": "浏览示例模板",
"downloads": "下载",
"helpCenter": "帮助中心",
"labels": {
"models": "模型",
"nodes": "节点",
"queue": "队列",
"templates": "模板",
"workflows": "工作流"
},
"logout": "登出",
"modelLibrary": "模型库",
"newBlankWorkflow": "创建空白工作流",
"nodeLibrary": "节点库",
"nodeLibraryTab": {
"groupBy": "分组方式",
"groupStrategies": {
"category": "类别",
"categoryDesc": "按节点类别分组",
"module": "模块",
"moduleDesc": "按模块来源分组",
"source": "来源",
"sourceDesc": "按来源类型分组核心自定义API"
},
"resetView": "重置视图为默认",
"sortBy": {
"alphabetical": "字母顺序",
"alphabeticalDesc": "在分组内按字母顺序排序",
"original": "原始顺序",
"originalDesc": "保持原始顺序"
},
"sortMode": "排序模式"
},
"openWorkflow": "在本地文件系统中打开工作流",
"queue": "队列",
"queueTab": {
"backToAllTasks": "返回",
"clearPendingTasks": "清除待处理任务",
"containImagePreview": "填充图像预览",
"coverImagePreview": "适应图像预览",
"filter": "过滤输出",
"filters": {
"hideCached": "隐藏缓存",
"hideCanceled": "隐藏已取消"
},
"showFlatList": "平铺结果"
},
"templates": "模板",
"workflowTab": {
"confirmDelete": "您确定要删除此工作流吗?",
"confirmDeleteTitle": "删除工作流?",
"confirmOverwrite": "下面的文件已经存在。您想要覆盖它吗?",
"confirmOverwriteTitle": "覆盖现有文件?",
"deleteFailed": "尝试删除工作流失败。",
"deleteFailedTitle": "删除失败",
"deleted": "工作流已删除",
"dirtyClose": "以下文件已被更改。您想在关闭之前保存它们吗?",
"dirtyCloseHint": "按住 Shift 关闭而不提示",
"dirtyCloseTitle": "保存更改?",
"workflowTreeType": {
"bookmarks": "书签",
"browse": "浏览",
"open": "打开"
}
},
"workflows": "工作流"
},
"tabMenu": {
"addToBookmarks": "添加到书签",
"closeOtherTabs": "关闭其他标签",
"closeTab": "关闭标签",
"closeTabsToLeft": "关闭左侧标签",
"closeTabsToRight": "关闭右侧标签",
"duplicateTab": "复制标签",
"removeFromBookmarks": "从书签中移除"
},
"templateWorkflows": {
"category": {
"3D": "3D",
"All": "所有模板",
"Area Composition": "区域合成",
"Audio": "音频生成",
"Basics": "基础",
"ComfyUI Examples": "ComfyUI示例",
"ControlNet": "ControlNet",
"Custom Nodes": "自定义节点",
"Flux": "Flux",
"Image": "图像生成",
"Image API": "图像 API",
"LLM API": "LLM API",
"Upscaling": "图像放大",
"Video": "视频生成",
"Video API": "视频 API"
},
"loadingMore": "正在加载更多模板...",
"searchPlaceholder": "搜索模板...",
"template": {
"3D": {
"3d_hunyuan3d_image_to_model": "混元3D 2.0 图生模型",
"3d_hunyuan3d_multiview_to_model": "混元3D 2.0 多视图模型生成",
"3d_hunyuan3d_multiview_to_model_turbo": "混元3D 2.0 多视图模型生成 Turbo",
"stable_zero123_example": "Stable Zero123"
},
"3D API": {
"api_rodin_image_to_model": "Rodin图生模型",
"api_rodin_multiview_to_model": "Rodin多视图模型生成",
"api_tripo_image_to_model": "Tripo图生模型",
"api_tripo_multiview_to_model": "Tripo多视图模型生成",
"api_tripo_text_to_model": "Tripo文生模型"
},
"Area Composition": {
"area_composition": "区域条件控制",
"area_composition_square_area_for_subject": "区域件控制生成"
},
"Audio": {
"audio_ace_step_1_m2m_editing": "ACE Step v1 歌曲风格/歌词编辑",
"audio_ace_step_1_t2a_instrumentals": "ACE-Step v1 文生器乐",
"audio_ace_step_1_t2a_song": "ACE Step v1 文生歌曲",
"audio_stable_audio_example": "Stable Audio"
},
"Basics": {
"default": "文生图(默认)",
"embedding_example": "文本嵌入模型",
"gligen_textbox_example": "Gligen文本框",
"image2image": "图生图",
"inpaint_example": "局部重绘",
"inpaint_model_outpainting": "图像外扩",
"lora": "LoRA",
"lora_multiple": "多重LoRA"
},
"ControlNet": {
"2_pass_pose_worship": "姿态 ControlNet 二次采样",
"controlnet_example": "涂鸦 ControlNet",
"depth_controlnet": "深度 ControlNet",
"depth_t2i_adapter": "深度 T2I 适配器",
"mixing_controlnets": "混合 ControlNet"
},
"Flux": {
"flux_canny_model_example": "Flux Canny Model",
"flux_depth_lora_example": "Flux Depth LoRA",
"flux_dev_checkpoint_example": "Flux Dev fp8 文生图",
"flux_dev_full_text_to_image": "Flux Dev 全量文生图",
"flux_fill_inpaint_example": "Flux 局部重绘",
"flux_fill_outpaint_example": "Flux 扩图",
"flux_kontext_dev_basic": "Flux Kontext Dev基础",
"flux_kontext_dev_grouped": "Flux Kontext Dev",
"flux_redux_model_example": "Flux Redux Model",
"flux_schnell": "Flux Schnell fp8 文生图",
"flux_schnell_full_text_to_image": "Flux Schnell 全量文生图"
},
"Image": {
"hidream_e1_full": "HiDream E1 Full",
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Fast",
"hidream_i1_full": "HiDream I1 Full",
"image_chroma_text_to_image": "Chroma 文生图",
"image_cosmos_predict2_2B_t2i": "Cosmos Predict2 2B 文生图",
"image_lotus_depth_v1_1": "Lotus Depth",
"image_omnigen2_image_edit": "OmniGen2 图像编辑",
"image_omnigen2_t2i": "OmniGen2 文生图",
"sd3_5_large_blur": "SD3.5 Large 模糊",
"sd3_5_large_canny_controlnet_example": "SD3.5 Large Canny 控制网",
"sd3_5_large_depth": "SD3.5 Large 深度",
"sd3_5_simple_example": "SD3.5 简单版本",
"sdxl_refiner_prompt_example": "SDXL Refiner提示",
"sdxl_revision_text_prompts": "SDXL修订文本提示",
"sdxl_revision_zero_positive": "SDXL修订零正",
"sdxl_simple_example": "SDXL简单版本",
"sdxlturbo_example": "SDXL Turbo"
},
"Image API": {
"api_bfl_flux_1_kontext_max_image": "BFL Flux.1 Kontext Max",
"api_bfl_flux_1_kontext_multiple_images_input": "BFL Flux.1 Kontext 多图输入",
"api_bfl_flux_1_kontext_pro_image": "BFL Flux.1 Kontext Pro",
"api_bfl_flux_pro_t2i": "BFL Flux[Pro]:文生图",
"api_ideogram_v3_t2i": "Ideogram V3文生图",
"api_luma_photon_i2i": "Luma Photon图生图",
"api_luma_photon_style_ref": "Luma Photon风格参考",
"api_openai_dall_e_2_inpaint": "OpenAIDall-E 2 局部修复",
"api_openai_dall_e_2_t2i": "OpenAIDall-E 2 文生图",
"api_openai_dall_e_3_t2i": "OpenAIDall-E 3 文生图",
"api_openai_image_1_i2i": "OpenAIGPT-Image-1 图生图",
"api_openai_image_1_inpaint": "OpenAIGPT-Image-1 局部重绘",
"api_openai_image_1_multi_inputs": "OpenAIGPT-Image-1 多输入",
"api_openai_image_1_t2i": "OpenAIGPT-Image-1 文生图",
"api_recraft_image_gen_with_color_control": "Recraft颜色控制图像生成",
"api_recraft_image_gen_with_style_control": "Recraft风格控制图像生成",
"api_recraft_vector_gen": "Recraft矢量生成",
"api_runway_reference_to_image": "Runway参考图到图像",
"api_runway_text_to_image": "Runway文生图",
"api_stability_ai_i2i": "Stability AI图生图",
"api_stability_ai_sd3_5_i2i": "Stability AISD3.5 图生图",
"api_stability_ai_sd3_5_t2i": "Stability AISD3.5 文生图",
"api_stability_ai_stable_image_ultra_t2i": "Stability AIStable Image Ultra 文生图"
},
"LLM API": {
"api_google_gemini": "Google Gemini对话",
"api_openai_chat": "OpenAI对话"
},
"Upscaling": {
"esrgan_example": "ESRGAN",
"hiresfix_esrgan_workflow": "HiresFix ESRGAN放大",
"hiresfix_latent_workflow": "HiresFix 潜空间放大",
"latent_upscale_different_prompt_model": "潜空间放大二次采样"
},
"Video": {
"hunyuan_video_text_to_video": "混元视频文生视频",
"image_to_video": "图生视频",
"image_to_video_wan": "Wan 2.1 图生视频",
"ltxv_image_to_video": "LTXV图生视频",
"ltxv_text_to_video": "LTXV文生视频",
"mochi_text_to_video_example": "Mochi文生视频",
"text_to_video_wan": "Wan 2.1 文生视频",
"txt_to_image_to_video": "文生图转视频",
"video_cosmos_predict2_2B_video2world_480p_16fps": "Cosmos Predict2 2B Video2World 480p 16fps",
"video_wan2_1_fun_camera_v1_1_14B": "Wan 2.1 Fun Camera 14B",
"video_wan2_1_fun_camera_v1_1_1_3B": "Wan 2.1 Fun Camera 1.3B",
"video_wan_vace_14B_ref2v": "Wan VACE 参考视频生成",
"video_wan_vace_14B_t2v": "Wan VACE 文生视频",
"video_wan_vace_14B_v2v": "Wan VACE 控制视频",
"video_wan_vace_flf2v": "Wan VACE 首尾帧",
"video_wan_vace_inpainting": "Wan VACE Inpainting",
"video_wan_vace_outpainting": "Wan VACE 视频外扩",
"wan2_1_flf2v_720_f16": "Wan 2.1 FLF2V 720p F16",
"wan2_1_fun_control": "Wan 2.1 ControlNet",
"wan2_1_fun_inp": "Wan 2.1 局部重绘"
},
"Video API": {
"api_hailuo_minimax_i2v": "MiniMax图生视频",
"api_hailuo_minimax_t2v": "MiniMax文生视频",
"api_kling_effects": "Kling视频特效",
"api_kling_flf": "Kling首尾帧",
"api_kling_i2v": "Kling图生视频",
"api_luma_i2v": "Luma图生视频",
"api_luma_t2v": "Luma文生视频",
"api_moonvalley_image_to_video": "Moonvalley图生视频",
"api_moonvalley_text_to_video": "Moonvalley文生视频",
"api_pika_i2v": "Pika图生视频",
"api_pika_scene": "Pika 场景:多图视频生成",
"api_pixverse_i2v": "PixVerse图生视频",
"api_pixverse_t2v": "PixVerse文本到视频",
"api_pixverse_template_i2v": "PixVerse特效图生视频",
"api_runway_first_last_frame": "Runway首尾帧视频sheng c",
"api_runway_gen3a_turbo_image_to_video": "RunwayGen3a Turbo 图生视频",
"api_runway_gen4_turo_image_to_video": "RunwayGen4 Turbo 图生视频",
"api_veo2_i2v": "Veo2图生视频"
}
},
"templateDescription": {
"3D": {
"3d_hunyuan3d_image_to_model": "使用 Hunyuan3D 2.0 单图生成 3D 模型。",
"3d_hunyuan3d_multiview_to_model": "使用 Hunyuan3D 2.0 MV 多视角生成 3D 模型。",
"3d_hunyuan3d_multiview_to_model_turbo": "使用 Hunyuan3D 2.0 MV Turbo 多视角生成 3D 模型。",
"stable_zero123_example": "通过单张图像生成 3D 视图。"
},
"3D API": {
"api_rodin_image_to_model": "Rodin AI 单张照片生成高细节 3D 资产。",
"api_rodin_multiview_to_model": "Rodin 多视图重建完整 3D 资产。",
"api_tripo_image_to_model": "Tripo 2D 图像生成专业的 3D 资产。",
"api_tripo_multiview_to_model": "Tripo 多视角生成 3D 资产。",
"api_tripo_text_to_model": "Tripo 文本描述生成 3D 物体。"
},
"Area Composition": {
"area_composition": "通过区域控制图像构图。",
"area_composition_square_area_for_subject": "通过区域构成实现主体位置一致性。"
},
"Audio": {
"audio_ace_step_1_m2m_editing": "使用 ACE-Step v1 M2M 编辑现有歌曲风格和歌词。",
"audio_ace_step_1_t2a_instrumentals": "使用 ACE-Step v1 根据文本生成器乐音乐。",
"audio_ace_step_1_t2a_song": "使用 ACE-Step v1 根据文本生成带人声的歌曲,支持多语言和风格定制。",
"audio_stable_audio_example": "根据文本描述生成音频。"
},
"Basics": {
"default": "根据文本描述生成图像。",
"embedding_example": "使用文本反演模型实现风格一致性。",
"gligen_textbox_example": "通过文本框精确控制物体位置生成图像。",
"image2image": "使用文本提示转换现有图像。",
"inpaint_example": "无缝编辑图像的特定部分。",
"inpaint_model_outpainting": "将图像扩展到原始边界之外。",
"lora": "应用 LoRA 模型以实现特定风格或主题。",
"lora_multiple": "组合多个 LoRA 模型以获得独特效果。"
},
"ControlNet": {
"2_pass_pose_worship": "通过姿态参考生成图像。",
"controlnet_example": "通过涂鸦参考图像引导生成。",
"depth_controlnet": "通过深度信息引导生成图像。",
"depth_t2i_adapter": "使用 T2I 适配器快速生成深度感知图像。",
"mixing_controlnets": "组合多个 ControlNet 模型生成图像。"
},
"Flux": {
"flux_canny_model_example": "通过边缘检测引导 Flux 生成图像。",
"flux_depth_lora_example": "通过深度信息引导 Flux LoRA 生成图像。",
"flux_dev_checkpoint_example": "使用 Flux Dev fp8 量化版生成图像,适合显存有限设备,仅需一个模型文件,画质略低于完整版。",
"flux_dev_full_text_to_image": "使用 Flux Dev 完整版生成高质量图像,需要更大显存和多个模型文件,提示遵循性和画质最佳。",
"flux_fill_inpaint_example": "使用 Flux 修复图像缺失区域。",
"flux_fill_outpaint_example": "使用 Flux 将图像外扩生成更大尺寸的图片",
"flux_kontext_dev_basic": "使用 Flux Kontext基础版编辑图像适合了解节点组合",
"flux_kontext_dev_grouped": "使用 Flux Kontext 组节点版本,简洁封装版适合快速复用",
"flux_redux_model_example": "通过参考图像风格迁移,使用 Flux Redux 生成新图像。",
"flux_schnell": "使用 Flux Schnell fp8 量化版快速生成图像适合低端硬件仅需4步即可生成。",
"flux_schnell_full_text_to_image": "使用 Flux Schnell 完整版快速生成图像Apache2.0 许可仅需4步兼顾速度和画质。"
},
"Image": {
"hidream_e1_full": "HiDream E1 - 专业级自然语言图像编辑模型。",
"hidream_i1_dev": "HiDream I1 Dev - 28 步推理,适合中端硬件,平衡速度与质量。",
"hidream_i1_fast": "HiDream I1 Fast - 16 步推理,适合低端硬件快速预览。",
"hidream_i1_full": "HiDream I1 Full - 50 步推理,画质最佳。",
"image_chroma_text_to_image": "Chroma 基于 Flux 改进,架构有所变化。",
"image_cosmos_predict2_2B_t2i": "使用 Cosmos-Predict2 2B T2I 生成物理真实、高保真、细节丰富的图像。",
"image_lotus_depth_v1_1": "在 ComfyUI 中运行 Lotus Depth实现高效、细节丰富的单目深度估计。",
"image_omnigen2_image_edit": "使用 OmniGen2 高级图像编辑和文本渲染能力,通过自然语言指令编辑图片。",
"image_omnigen2_t2i": "使用 OmniGen2 统一 7B 多模态模型和双路径架构,根据文本生成高质量图像。",
"sd3_5_large_blur": "使用 SD 3.5 通过模糊参考图像引导生成图像。",
"sd3_5_large_canny_controlnet_example": "使用 SD 3.5 Canny ControlNet 通过边缘检测引导生成图像。",
"sd3_5_large_depth": "使用 SD 3.5 通过深度信息引导生成图像。",
"sd3_5_simple_example": "使用 SD 3.5 生成图像。",
"sdxl_refiner_prompt_example": "使用 Refiner 模型提升 SDXL 图像质量。",
"sdxl_revision_text_prompts": "通过参考图像概念迁移,使用 SDXL Revision 生成图像。",
"sdxl_revision_zero_positive": "结合文本提示和参考图像,使用 SDXL Revision 生成图像。",
"sdxl_simple_example": "使用 SDXL 生成高质量图像。",
"sdxlturbo_example": "使用 SDXL Turbo 一步生成图像。"
},
"Image API": {
"api_bfl_flux_1_kontext_max_image": "使用 Flux.1 Kontext max image 编辑图像。",
"api_bfl_flux_1_kontext_multiple_images_input": "多图输入,使用 Flux.1 Kontext 编辑。",
"api_bfl_flux_1_kontext_pro_image": "使用 Flux.1 Kontext pro image 编辑图像。",
"api_bfl_flux_pro_t2i": "使用 FLUX.1 Pro 生成高质量、提示遵循性强的图像。",
"api_ideogram_v3_t2i": "Ideogram V3 高质量、提示对齐、照片级真实感和文本渲染。",
"api_luma_photon_i2i": "结合图像和提示词引导生成。",
"api_luma_photon_style_ref": "融合风格参考,精确控制,保持专业品质。",
"api_openai_dall_e_2_inpaint": "OpenAI Dall-E 2 API 局部修复。",
"api_openai_dall_e_2_t2i": "OpenAI Dall-E 2 API 文本生成图像。",
"api_openai_dall_e_3_t2i": "OpenAI Dall-E 3 API 文本生成图像。",
"api_openai_image_1_i2i": "OpenAI GPT Image 1 API 图生图。",
"api_openai_image_1_inpaint": "OpenAI GPT Image 1 API 局部修复。",
"api_openai_image_1_multi_inputs": "OpenAI GPT Image 1 API 多输入生成图像。",
"api_openai_image_1_t2i": "OpenAI GPT Image 1 API 文本生成图像。",
"api_recraft_image_gen_with_color_control": "自定义调色板,打造品牌专属视觉风格。",
"api_recraft_image_gen_with_style_control": "通过视觉示例控制风格、对齐位置、微调物体,实现品牌一致性。",
"api_recraft_vector_gen": "通过文本生成高质量矢量图像,适用于 logo、海报等。",
"api_runway_reference_to_image": "Runway AI 参考风格和构图生成新图像。",
"api_runway_text_to_image": "使用 Runway AI 文本生成高质量图像。",
"api_stability_ai_i2i": "Stability AI 高质量图生图,适合专业编辑和风格迁移。",
"api_stability_ai_sd3_5_i2i": "Stability AI SD3.5 图生图,分辨率达 1 兆像素。",
"api_stability_ai_sd3_5_t2i": "Stability AI SD3.5 文本生成高质量图像,分辨率达 1 兆像素。",
"api_stability_ai_stable_image_ultra_t2i": "生成高质量、提示遵循性极佳的图像,适合专业场景,分辨率达 1 兆像素。"
},
"LLM API": {
"api_google_gemini": "体验 Google Gemini 多模态推理能力。",
"api_openai_chat": "与 OpenAI 高级语言模型智能对话。"
},
"Upscaling": {
"esrgan_example": "使用 ESRGAN 超分模型提升图像质量。",
"hiresfix_esrgan_workflow": "在中间步骤使用 ESRGAN 超分提升图像质量。",
"hiresfix_latent_workflow": "在潜空间提升图像质量。",
"latent_upscale_different_prompt_model": "放大图像并在不同阶段更换提示词。"
},
"Video": {
"hunyuan_video_text_to_video": "Hunyuan 文本转视频。",
"image_to_video": "静态图像转视频。",
"image_to_video_wan": "Wan 2.1 图像转视频。",
"ltxv_image_to_video": "LTXV 静态图像转视频。",
"ltxv_text_to_video": "LTXV 文本转视频。",
"mochi_text_to_video_example": "Mochi 文本转视频。",
"text_to_video_wan": "Wan 2.1 文本转视频。",
"txt_to_image_to_video": "先生成图像再转为视频。",
"video_cosmos_predict2_2B_video2world_480p_16fps": "使用 Cosmos-Predict2 2B Video2World 生成物理真实、高保真、一致性强的视频。",
"video_wan2_1_fun_camera_v1_1_14B": "Wan 2.1 Fun Camera 14B支持高级镜头控制。",
"video_wan2_1_fun_camera_v1_1_1_3B": "Wan 2.1 Fun Camera 1.3B,生成动态镜头运动视频。",
"video_wan_vace_14B_ref2v": "Wan VACE 参考图风格一致性视频生成。",
"video_wan_vace_14B_t2v": "Wan VACE-14B 文本转视频,支持 480p 和 720p。",
"video_wan_vace_14B_v2v": "Wan VACE 控制输入视频和参考图生成新视频。",
"video_wan_vace_flf2v": "Wan VACE 首尾帧,支持自定义关键帧序列,实现平滑过渡。",
"video_wan_vace_inpainting": "Wan VACE 局部编辑,保留周围内容,适合物体移除或替换。",
"video_wan_vace_outpainting": "Wan VACE 外扩,扩展视频尺寸。",
"wan2_1_flf2v_720_f16": "Wan 2.1 FLF2V控制首尾帧生成 720p 视频。",
"wan2_1_fun_control": "Wan 2.1 ControlNet姿态、深度、边缘等控制视频生成。",
"wan2_1_fun_inp": "Wan 2.1 起始帧和结束帧生成视频。"
},
"Video API": {
"api_hailuo_minimax_i2v": "MiniMax 图像+文本生成精致视频,支持 CGI 效果。",
"api_hailuo_minimax_t2v": "MiniMax 文本生成高质量视频,支持 CGI 效果和多样风格。",
"api_kling_effects": "Kling 应用视觉特效生成动态视频。",
"api_kling_flf": "Kling 控制首尾帧生成视频。",
"api_kling_i2v": "Kling 高提示遵循性,支持动作、表情、镜头运动等。",
"api_luma_i2v": "Luma 静态图像一键生成高质量动画。",
"api_luma_t2v": "Luma 简单提示生成高质量视频。",
"api_moonvalley_image_to_video": "Moonvalley 图像生成 1080p 电影级视频,训练数据全部为授权内容。",
"api_moonvalley_text_to_video": "Moonvalley 文本生成 1080p 电影级视频,训练数据全部为授权内容。",
"api_pika_i2v": "Pika AI 单张图像生成流畅动画视频。",
"api_pika_scene": "Pika Scenes 多图融合生成视频。",
"api_pixverse_i2v": "PixVerse 静态图像生成动态特效视频。",
"api_pixverse_t2v": "PixVerse 高还原度、动态效果出色的视频生成。",
"api_pixverse_template_i2v": "PixVerse 静态图像生成动态特效视频。",
"api_runway_first_last_frame": "Runway 精准控制首尾帧生成平滑过渡视频。",
"api_runway_gen3a_turbo_image_to_video": "Runway Gen3a Turbo 静态图像生成电影级视频。",
"api_runway_gen4_turo_image_to_video": "Runway Gen4 Turbo 图像生成动态视频。",
"api_veo2_i2v": "Google Veo2 API 图像生成视频。"
}
},
"title": "从模板开始"
},
"toastMessages": {
"cannotCreateSubgraph": "无法创建子图",
"couldNotDetermineFileType": "无法确定文件类型",
"dropFileError": "无法处理掉落的项目:{error}",
"emptyCanvas": "画布为空",
"errorCopyImage": "复制图片出错:{error}",
"errorLoadingModel": "加载模型出错",
"errorSaveSetting": "保存设置 {id} 出错:{err}",
"failedToAccessBillingPortal": "访问账单门户失败:{error}",
"failedToApplyTexture": "应用纹理失败",
"failedToConvertToSubgraph": "无法将项目转换为子图",
"failedToCreateCustomer": "创建客户失败:{error}",
"failedToDownloadFile": "文件下载失败",
"failedToExportModel": "无法将模型导出为 {format}",
"failedToFetchBalance": "获取余额失败:{error}",
"failedToFetchLogs": "无法获取服务器日志",
"failedToInitializeLoad3dViewer": "初始化3D查看器失败",
"failedToInitiateCreditPurchase": "发起积分购买失败:{error}",
"failedToPurchaseCredits": "购买积分失败:{error}",
"fileLoadError": "无法在 {fileName} 中找到工作流",
"fileUploadFailed": "文件上传失败",
"interrupted": "执行已被中断",
"migrateToLitegraphReroute": "将来的版本中将删除重定向节点。点击以迁移到litegraph-native重定向。",
"no3dScene": "没有3D场景可以应用纹理",
"no3dSceneToExport": "没有3D场景可以导出",
"noTemplatesToExport": "没有模板可以导出",
"nodeDefinitionsUpdated": "节点定义已更新",
"nothingSelected": "未选择任何内容",
"nothingToGroup": "没有可分组的内容",
"nothingToQueue": "没有可加入队列的内容",
"pendingTasksDeleted": "待处理任务已删除",
"pleaseSelectNodesToGroup": "请选取节点(或其他组)以创建分组",
"pleaseSelectOutputNodes": "请选择输出节点",
"unableToGetModelFilePath": "无法获取模型文件路径",
"unauthorizedDomain": "您的域名 {domain} 未被授权使用此服务。请联系 {email} 将您的域名添加到白名单。",
"updateRequested": "已请求更新",
"useApiKeyTip": "提示:无法正常登录?请使用 Comfy API Key 选项。",
"userNotAuthenticated": "用户未认证"
},
"userSelect": {
"enterUsername": "输入用户名",
"existingUser": "用户已存在",
"newUser": "新用户",
"next": "下一步",
"selectUser": "选择用户"
},
"userSettings": {
"email": "电子邮件",
"name": "名称",
"notSet": "未设置",
"provider": "登录方式",
"title": "用户设置",
"updatePassword": "更新密码"
},
"validation": {
"invalidEmail": "无效的电子邮件地址",
"length": "必须为{length}个字符",
"maxLength": "不能超过{length}个字符",
"minLength": "必须至少有{length}个字符",
"password": {
"lowercase": "必须包含至少一个小写字母",
"match": "密码必须匹配",
"minLength": "必须在8到32个字符之间",
"number": "必须包含至少一个数字",
"requirements": "密码要求",
"special": "必须包含至少一个特殊字符",
"uppercase": "必须包含至少一个大写字母"
},
"personalDataConsentRequired": "您必须同意处理您的个人数据。",
"prefix": "必须以 {prefix} 开头",
"required": "必填"
},
"versionMismatchWarning": {
"dismiss": "关闭",
"frontendNewer": "前端版本 {frontendVersion} 可能与后端版本 {backendVersion} 不相容。",
"frontendOutdated": "前端版本 {frontendVersion} 已过时。后端需要 {requiredVersion} 版或更高版本。",
"title": "版本相容性警告",
"updateFrontend": "更新前端"
},
"welcome": {
"getStarted": "开始使用",
"title": "欢迎使用 ComfyUI"
},
"whatsNewPopup": {
"learnMore": "了解更多",
"noReleaseNotes": "暂无更新说明。"
},
"workflowService": {
"enterFilename": "输入文件名",
"exportWorkflow": "导出工作流",
"saveWorkflow": "保存工作流"
},
"zoomControls": {
"hideMinimap": "隐藏小地图",
"label": "缩放控制",
"showMinimap": "显示小地图",
"zoomToFit": "适合画面"
}
}