mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-01 05:49:54 +00:00
Fix duplication of persisted workflow (#2124)
Co-authored-by: github-actions <github-actions@github.com>
This commit is contained in:
@@ -396,6 +396,36 @@ test.describe('Menu', () => {
|
||||
)
|
||||
})
|
||||
|
||||
test('Can duplicate workflow', async ({ comfyPage }) => {
|
||||
const tab = comfyPage.menu.workflowsTab
|
||||
await comfyPage.menu.topbar.saveWorkflow('workflow1.json')
|
||||
|
||||
expect(await tab.getTopLevelSavedWorkflowNames()).toEqual(
|
||||
expect.arrayContaining(['workflow1.json'])
|
||||
)
|
||||
|
||||
await comfyPage.executeCommand('Comfy.DuplicateWorkflow')
|
||||
expect(await tab.getOpenedWorkflowNames()).toEqual([
|
||||
'workflow1.json',
|
||||
'*workflow1 (Copy).json'
|
||||
])
|
||||
|
||||
await comfyPage.executeCommand('Comfy.DuplicateWorkflow')
|
||||
expect(await tab.getOpenedWorkflowNames()).toEqual([
|
||||
'workflow1.json',
|
||||
'*workflow1 (Copy).json',
|
||||
'*workflow1 (Copy) (2).json'
|
||||
])
|
||||
|
||||
await comfyPage.executeCommand('Comfy.DuplicateWorkflow')
|
||||
expect(await tab.getOpenedWorkflowNames()).toEqual([
|
||||
'workflow1.json',
|
||||
'*workflow1 (Copy).json',
|
||||
'*workflow1 (Copy) (2).json',
|
||||
'*workflow1 (Copy) (3).json'
|
||||
])
|
||||
})
|
||||
|
||||
test('Can rename nested workflow from opened workflow item', async ({
|
||||
comfyPage
|
||||
}) => {
|
||||
|
||||
@@ -21,8 +21,9 @@ import { useWorkspaceStore } from '@/stores/workspaceStore'
|
||||
|
||||
export function useCoreCommands(): ComfyCommand[] {
|
||||
const workflowService = useWorkflowService()
|
||||
const workflowStore = useWorkflowStore()
|
||||
const dialogService = useDialogService()
|
||||
const getTracker = () => useWorkflowStore()?.activeWorkflow?.changeTracker
|
||||
const getTracker = () => workflowStore.activeWorkflow?.changeTracker
|
||||
|
||||
const getSelectedNodes = (): LGraphNode[] => {
|
||||
const selectedNodes = app.canvas.selected_nodes
|
||||
@@ -512,6 +513,15 @@ export function useCoreCommands(): ComfyCommand[] {
|
||||
function: () => {
|
||||
dialogService.showSettingsDialog('about')
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'Comfy.DuplicateWorkflow',
|
||||
icon: 'pi pi-clone',
|
||||
label: 'Duplicate Current Workflow',
|
||||
versionAdded: '1.6.15',
|
||||
function: () => {
|
||||
workflowService.duplicateWorkflow(workflowStore.activeWorkflow!)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"Comfy_ClearWorkflow": {
|
||||
"label": "Clear Workflow"
|
||||
},
|
||||
"Comfy_DuplicateWorkflow": {
|
||||
"label": "Duplicate Current Workflow"
|
||||
},
|
||||
"Comfy_ExportWorkflow": {
|
||||
"label": "Export Workflow"
|
||||
},
|
||||
|
||||
@@ -348,6 +348,7 @@
|
||||
"Zoom Out": "Zoom Out",
|
||||
"Clear Pending Tasks": "Clear Pending Tasks",
|
||||
"Clear Workflow": "Clear Workflow",
|
||||
"Duplicate Current Workflow": "Duplicate Current Workflow",
|
||||
"Export": "Export",
|
||||
"Export (API)": "Export (API)",
|
||||
"Fit Group To Contents": "Fit Group To Contents",
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"Comfy_ClearWorkflow": {
|
||||
"label": "Effacer le flux de travail"
|
||||
},
|
||||
"Comfy_DuplicateWorkflow": {
|
||||
"label": "Dupliquer le flux de travail actuel"
|
||||
},
|
||||
"Comfy_ExportWorkflow": {
|
||||
"label": "Exporter le flux de travail"
|
||||
},
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
"ComfyUI Issues": "Problèmes de ComfyUI",
|
||||
"Convert selected nodes to group node": "Convertir les nœuds sélectionnés en nœud de groupe",
|
||||
"Desktop User Guide": "Guide de l'utilisateur de bureau",
|
||||
"Duplicate Current Workflow": "Dupliquer le flux de travail actuel",
|
||||
"Edit": "Éditer",
|
||||
"Export": "Exporter",
|
||||
"Export (API)": "Exporter (API)",
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"Comfy_ClearWorkflow": {
|
||||
"label": "ワークフローをクリア"
|
||||
},
|
||||
"Comfy_DuplicateWorkflow": {
|
||||
"label": "現在のワークフローを複製"
|
||||
},
|
||||
"Comfy_ExportWorkflow": {
|
||||
"label": "ワークフローをエクスポート"
|
||||
},
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
"ComfyUI Issues": "ComfyUIの問題",
|
||||
"Convert selected nodes to group node": "選択したノードをグループノードに変換",
|
||||
"Desktop User Guide": "デスクトップユーザーガイド",
|
||||
"Duplicate Current Workflow": "現在のワークフローを複製",
|
||||
"Edit": "編集",
|
||||
"Export": "エクスポート",
|
||||
"Export (API)": "エクスポート (API)",
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"Comfy_ClearWorkflow": {
|
||||
"label": "워크플로 지우기"
|
||||
},
|
||||
"Comfy_DuplicateWorkflow": {
|
||||
"label": "현재 워크플로우 복제"
|
||||
},
|
||||
"Comfy_ExportWorkflow": {
|
||||
"label": "워크플로 내보내기"
|
||||
},
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
"ComfyUI Issues": "ComfyUI 이슈 페이지",
|
||||
"Convert selected nodes to group node": "선택한 노드를 그룹 노드로 변환",
|
||||
"Desktop User Guide": "데스크톱 사용자 가이드",
|
||||
"Duplicate Current Workflow": "현재 워크플로우 복제",
|
||||
"Edit": "편집",
|
||||
"Export": "내보내기",
|
||||
"Export (API)": "내보내기 (API)",
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"Comfy_ClearWorkflow": {
|
||||
"label": "Очистить рабочий процесс"
|
||||
},
|
||||
"Comfy_DuplicateWorkflow": {
|
||||
"label": "Дублировать текущий рабочий процесс"
|
||||
},
|
||||
"Comfy_ExportWorkflow": {
|
||||
"label": "Экспорт рабочего процесса"
|
||||
},
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
"ComfyUI Issues": "Проблемы ComfyUI",
|
||||
"Convert selected nodes to group node": "Преобразовать выбранные узлы в групповой узел",
|
||||
"Desktop User Guide": "Руководство пользователя для настольных ПК",
|
||||
"Duplicate Current Workflow": "Дублировать текущий рабочий процесс",
|
||||
"Edit": "Редактировать",
|
||||
"Export": "Экспортировать",
|
||||
"Export (API)": "Экспорт (API)",
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"Comfy_ClearWorkflow": {
|
||||
"label": "清除工作流"
|
||||
},
|
||||
"Comfy_DuplicateWorkflow": {
|
||||
"label": "复制当前工作流"
|
||||
},
|
||||
"Comfy_ExportWorkflow": {
|
||||
"label": "导出工作流"
|
||||
},
|
||||
|
||||
@@ -263,6 +263,7 @@
|
||||
"ComfyUI Issues": "ComfyUI 问题",
|
||||
"Convert selected nodes to group node": "将选中节点转换为组节点",
|
||||
"Desktop User Guide": "桌面端用户指南",
|
||||
"Duplicate Current Workflow": "复制当前工作流",
|
||||
"Edit": "编辑",
|
||||
"Export": "导出",
|
||||
"Export (API)": "导出 (API)",
|
||||
|
||||
@@ -357,7 +357,11 @@ export const useWorkflowService = () => {
|
||||
*/
|
||||
const duplicateWorkflow = async (workflow: ComfyWorkflow) => {
|
||||
const state = JSON.parse(JSON.stringify(workflow.activeState))
|
||||
await app.loadGraphData(state, true, true, workflow.filename)
|
||||
const suffix = workflow.isPersisted ? ' (Copy)' : ''
|
||||
// Remove the suffix `(2)` or similar
|
||||
const filename = workflow.filename.replace(/\s*\(\d+\)$/, '') + suffix
|
||||
|
||||
await app.loadGraphData(state, true, true, filename)
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user