mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-13 17:10:06 +00:00
fix: unpacking a missing node causes it to disappear (#7341)
## Summary Fixes the issue where unpacking a subgraph containing missing nodes causes those nodes to disappear. Missing nodes are now automatically restored as placeholder nodes that preserve their original data, allowing them to be recovered when the node types are installed later. ## Changes - **What**: - Modified `multiClone()` to preserve missing nodes as serialized data when creating subgraphs - Added `skipMissingNodes` option to `unpackSubgraph()` method to restore missing nodes as placeholder nodes instead of throwing errors - Updated `useSubgraphOperations.unpackSubgraph()` to automatically restore missing nodes as placeholders (removed confirmation dialog) - Replaced deprecated `LiteGraph.cloneObject()` with `structuredClone()` - Removed unused i18n keys and debugging logs ## Review Focus - **Placeholder node restoration**: Missing nodes are restored using the same mechanism as `LGraph.configure()` (creating `LGraphNode` with `last_serialization` and `has_errors` flags). This ensures compatibility with the existing missing node manager. - **Performance**: Optimized `getMissingNodeTypes()` to check `registered_node_types` first before attempting node creation, and uses Set for O(1) duplicate checking. - **Data preservation**: Missing nodes preserve their original type, title, and serialized data in `last_serialization`, allowing automatic recovery when node types are installed. - **Backward compatibility**: The `skipMissingNodes` option defaults to `false`, maintaining original behavior for other code paths. Only the UI-level `unpackSubgraph()` always uses `skipMissingNodes: true`. <!-- If this PR fixes an issue, uncomment and update the line below --> <!-- Fixes #7279 --> ## Demo Before: https://github.com/user-attachments/assets/e0327d05-802d-4a64-a9db-4d174e185d82 After: https://github.com/user-attachments/assets/37ab3140-0ada-480e-b9d5-fef8856f8b27 ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7341-fix-unpacking-a-missing-node-causes-it-to-disappear-2c66d73d36508151ac6be70a7b2bc56d) by [Unito](https://www.unito.io)
This commit is contained in:
@@ -2,6 +2,7 @@ import _ from 'es-toolkit/compat'
|
||||
|
||||
import { downloadFile } from '@/base/common/downloadUtil'
|
||||
import { useSelectedLiteGraphItems } from '@/composables/canvas/useSelectedLiteGraphItems'
|
||||
import { useSubgraphOperations } from '@/composables/graph/useSubgraphOperations'
|
||||
import { useNodeAnimatedImage } from '@/composables/node/useNodeAnimatedImage'
|
||||
import { useNodeCanvasImagePreview } from '@/composables/node/useNodeCanvasImagePreview'
|
||||
import { useNodeImage, useNodeVideo } from '@/composables/node/useNodeImage'
|
||||
@@ -661,8 +662,8 @@ export const useLitegraphService = () => {
|
||||
{
|
||||
content: 'Unpack Subgraph',
|
||||
callback: () => {
|
||||
useNodeOutputStore().revokeSubgraphPreviews(this)
|
||||
this.graph.unpackSubgraph(this)
|
||||
const { unpackSubgraph } = useSubgraphOperations()
|
||||
unpackSubgraph()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user