Compare commits

...

8 Commits

Author SHA1 Message Date
Chenlei Hu
f529e7a255 1.16.9 (#3506) 2025-04-18 11:47:00 -04:00
Chenlei Hu
39199e9189 [Bug] Fix uuid generation in insecure context (#3505) 2025-04-18 11:45:54 -04:00
Chenlei Hu
90899b19bf 1.16.8 (#3487) 2025-04-17 13:47:30 -04:00
Christian Byrne
bca81e4a8a Add HiDream templates translations (#3485)
Co-authored-by: github-actions <github-actions@github.com>
2025-04-17 13:46:28 -04:00
Makki Shizu
d4d785fa04 fix 2_pass_pose_worship zh translation (#3474) 2025-04-17 10:55:31 -04:00
Christian Byrne
a8f5e6a71d Remove templates build from release process (#3481) 2025-04-17 10:55:15 -04:00
filtered
7e4df6006a Log errors in generic error handler (#3482) 2025-04-17 10:55:01 -04:00
filtered
0d921e72b9 Fix corrupt workflow permanently corrupts session (#3484) 2025-04-17 10:54:54 -04:00
14 changed files with 82 additions and 77 deletions

View File

@@ -31,7 +31,6 @@ jobs:
ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
run: |
npm ci
npm run fetch-templates
npm run build
npm run zipdist
- name: Upload dist artifact

View File

@@ -10,7 +10,7 @@ module.exports = defineConfig({
entryLocale: 'en',
output: 'src/locales',
outputLocales: ['zh', 'ru', 'ja', 'ko', 'fr', 'es'],
reference: `Special names to keep untranslated: flux, photomaker, clip, vae, cfg, stable audio, stable cascade, stable zero, controlnet, lora.
reference: `Special names to keep untranslated: flux, photomaker, clip, vae, cfg, stable audio, stable cascade, stable zero, controlnet, lora, HiDream.
'latent' is the short form of 'latent space'.
'mask' is in the context of image processing.
`

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@comfyorg/comfyui-frontend",
"version": "1.16.7",
"version": "1.16.9",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@comfyorg/comfyui-frontend",
"version": "1.16.7",
"version": "1.16.9",
"license": "GPL-3.0-only",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",

View File

@@ -1,7 +1,7 @@
{
"name": "@comfyorg/comfyui-frontend",
"private": true,
"version": "1.16.7",
"version": "1.16.9",
"type": "module",
"repository": "https://github.com/Comfy-Org/ComfyUI_frontend",
"homepage": "https://comfy.org",

View File

@@ -5,6 +5,7 @@ export function useErrorHandling() {
const toast = useToastStore()
const toastErrorHandler = (error: any) => {
console.error(error)
toast.add({
severity: 'error',
summary: t('g.error'),

View File

@@ -47,7 +47,7 @@ export class PrimitiveNode extends LGraphNode {
applyToGraph(extraLinks: LLink[] = []) {
if (!this.outputs[0].links?.length) return
let links = [
const links = [
...this.outputs[0].links.map((l) => app.graph.links[l]),
...extraLinks
]
@@ -58,30 +58,35 @@ export class PrimitiveNode extends LGraphNode {
// For each output link copy our value over the original widget value
for (const linkInfo of links) {
// @ts-expect-error fixme ts strict error
const node = this.graph.getNodeById(linkInfo.target_id)
// @ts-expect-error fixme ts strict error
const input = node.inputs[linkInfo.target_slot]
let widget: IWidget | undefined
const widgetName = (input.widget as { name: string }).name
if (widgetName) {
// @ts-expect-error fixme ts strict error
widget = node.widgets.find((w) => w.name === widgetName)
const node = this.graph?.getNodeById(linkInfo.target_id)
const input = node?.inputs[linkInfo.target_slot]
if (!input) {
console.warn('Unable to resolve node or input for link', linkInfo)
continue
}
if (widget) {
widget.value = v
if (widget.callback) {
widget.callback(
widget.value,
app.canvas,
// @ts-expect-error fixme ts strict error
node,
app.canvas.graph_mouse,
{} as CanvasMouseEvent
)
}
const widgetName = input.widget?.name
if (!widgetName) {
console.warn('Invalid widget or widget name', input.widget)
continue
}
const widget = node.widgets?.find((w) => w.name === widgetName)
if (!widget) {
console.warn(
`Unable to find widget "${widgetName}" on node [${node.id}]`
)
continue
}
widget.value = v
widget.callback?.(
widget.value,
app.canvas,
node,
app.canvas.graph_mouse,
{} as CanvasMouseEvent
)
}
}

View File

@@ -461,8 +461,7 @@
"ControlNet": "ControlNet",
"Upscaling": "Upscaling",
"Video": "Video",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "Image",
"Area Composition": "Area Composition",
"3D": "3D",
"Audio": "Audio"
@@ -510,18 +509,19 @@
"mochi_text_to_video_example": "Mochi Text to Video",
"hunyuan_video_text_to_video": "Hunyuan Video Text to Video"
},
"SD3_5": {
"Image": {
"sd3_5_simple_example": "SD3.5 Simple",
"sd3_5_large_canny_controlnet_example": "SD3.5 Large Canny ControlNet",
"sd3_5_large_depth": "SD3.5 Large Depth",
"sd3_5_large_blur": "SD3.5 Large Blur"
},
"SDXL": {
"sd3_5_large_blur": "SD3.5 Large Blur",
"sdxl_simple_example": "SDXL Simple",
"sdxl_refiner_prompt_example": "SDXL Refiner Prompt",
"sdxl_revision_text_prompts": "SDXL Revision Text Prompts",
"sdxl_revision_zero_positive": "SDXL Revision Zero Positive",
"sdxlturbo_example": "SDXL Turbo"
"sdxlturbo_example": "SDXL Turbo",
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Fast",
"hidream_i1_full": "HiDream I1 Full"
},
"Area Composition": {
"area_composition": "Area Composition",

View File

@@ -918,8 +918,7 @@
"ControlNet": "ControlNet",
"Custom Nodes": "Nodos Personalizados",
"Flux": "Flux",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "Imagen",
"Upscaling": "Ampliación",
"Video": "Video"
},
@@ -964,13 +963,14 @@
"flux_redux_model_example": "Flux Redux Model",
"flux_schnell": "Flux Schnell"
},
"SD3_5": {
"Image": {
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Rápido",
"hidream_i1_full": "HiDream I1 Completo",
"sd3_5_large_blur": "SD3.5 Grande Desenfoque",
"sd3_5_large_canny_controlnet_example": "SD3.5 Grande Canny ControlNet",
"sd3_5_large_depth": "SD3.5 Grande Profundidad",
"sd3_5_simple_example": "SD3.5 Simple"
},
"SDXL": {
"sd3_5_simple_example": "SD3.5 Simple",
"sdxl_refiner_prompt_example": "SDXL Refinador de Solicitud",
"sdxl_revision_text_prompts": "SDXL Revisión de Solicitud de Texto",
"sdxl_revision_zero_positive": "SDXL Revisión Cero Positivo",

View File

@@ -918,8 +918,7 @@
"ControlNet": "ControlNet",
"Custom Nodes": "Nœuds personnalisés",
"Flux": "Flux",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "Image",
"Upscaling": "Mise à l'échelle",
"Video": "Vidéo"
},
@@ -964,13 +963,14 @@
"flux_redux_model_example": "Flux Redux Model",
"flux_schnell": "Flux Schnell"
},
"SD3_5": {
"Image": {
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Rapide",
"hidream_i1_full": "HiDream I1 Complet",
"sd3_5_large_blur": "SD3.5 Grand Flou",
"sd3_5_large_canny_controlnet_example": "SD3.5 Grand Canny ControlNet",
"sd3_5_large_depth": "SD3.5 Grande Profondeur",
"sd3_5_simple_example": "SD3.5 Simple"
},
"SDXL": {
"sd3_5_simple_example": "SD3.5 Simple",
"sdxl_refiner_prompt_example": "SDXL Refiner Prompt",
"sdxl_revision_text_prompts": "Révisions de Texte SDXL",
"sdxl_revision_zero_positive": "Révision Zéro Positive SDXL",

View File

@@ -918,8 +918,7 @@
"ControlNet": "ControlNet",
"Custom Nodes": "カスタムノード",
"Flux": "Flux",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "画像",
"Upscaling": "アップスケーリング",
"Video": "ビデオ"
},
@@ -964,13 +963,14 @@
"flux_redux_model_example": "Flux Reduxモデル",
"flux_schnell": "Flux Schnell"
},
"SD3_5": {
"Image": {
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Fast",
"hidream_i1_full": "HiDream I1 Full",
"sd3_5_large_blur": "SD3.5 ラージブラー",
"sd3_5_large_canny_controlnet_example": "SD3.5 ラージキャニーコントロールネット",
"sd3_5_large_depth": "SD3.5 ラージデプス",
"sd3_5_simple_example": "SD3.5 シンプル"
},
"SDXL": {
"sd3_5_simple_example": "SD3.5 シンプル",
"sdxl_refiner_prompt_example": "SDXL Refinerプロンプト",
"sdxl_revision_text_prompts": "SDXL Revisionテキストプロンプト",
"sdxl_revision_zero_positive": "SDXL Revisionゼロポジティブ",

View File

@@ -918,8 +918,7 @@
"ControlNet": "컨트롤넷",
"Custom Nodes": "사용자 정의 노드",
"Flux": "FLUX",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "이미지",
"Upscaling": "업스케일링",
"Video": "비디오"
},
@@ -964,13 +963,14 @@
"flux_redux_model_example": "FLUX Redux 모델 예제",
"flux_schnell": "FLUX Schnell"
},
"SD3_5": {
"Image": {
"hidream_i1_dev": "HiDream I1 개발",
"hidream_i1_fast": "HiDream I1 빠른",
"hidream_i1_full": "HiDream I1 전체",
"sd3_5_large_blur": "SD3.5 Large 블러 컨트롤넷",
"sd3_5_large_canny_controlnet_example": "SD3.5 Large 캐니 컨트롤넷",
"sd3_5_large_depth": "SD3.5 Large 깊이 컨트롤넷",
"sd3_5_simple_example": "간단한 SD3.5 예제"
},
"SDXL": {
"sd3_5_simple_example": "간단한 SD3.5 예제",
"sdxl_refiner_prompt_example": "SDXL 리파이너 프롬프트",
"sdxl_revision_text_prompts": "SDXL Revision 텍스트 프롬프트",
"sdxl_revision_zero_positive": "SDXL Revision Zero Positive",

View File

@@ -918,8 +918,7 @@
"ControlNet": "ControlNet",
"Custom Nodes": "Пользовательские узлы",
"Flux": "Flux",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "Изображение",
"Upscaling": "Увеличение разрешения",
"Video": "Видео"
},
@@ -964,17 +963,18 @@
"flux_redux_model_example": "Flux Redux Model",
"flux_schnell": "Flux Schnell"
},
"SD3_5": {
"Image": {
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Fast",
"hidream_i1_full": "HiDream I1 Full",
"sd3_5_large_blur": "SD3.5 Большое размытие",
"sd3_5_large_canny_controlnet_example": "SD3.5 Большой Canny ControlNet",
"sd3_5_large_depth": "SD3.5 Большая глубина",
"sd3_5_simple_example": "SD3.5 Простой"
},
"SDXL": {
"sdxl_refiner_prompt_example": "SDXL Refiner Prompt",
"sdxl_revision_text_prompts": "SDXL Revision Text Prompts",
"sdxl_revision_zero_positive": "SDXL Revision Zero Positive",
"sdxl_simple_example": "SDXL Simple",
"sd3_5_simple_example": "SD3.5 Простой",
"sdxl_refiner_prompt_example": "SDXL Уточняющий запрос",
"sdxl_revision_text_prompts": "SDXL Редактирование текстовых запросов",
"sdxl_revision_zero_positive": "SDXL Редактирование нулевого положительного",
"sdxl_simple_example": "SDXL Простой",
"sdxlturbo_example": "SDXL Turbo"
},
"Upscaling": {

View File

@@ -918,8 +918,7 @@
"ControlNet": "ControlNet",
"Custom Nodes": "自定义节点",
"Flux": "Flux",
"SD3_5": "SD3.5",
"SDXL": "SDXL",
"Image": "图片",
"Upscaling": "放大",
"Video": "视频"
},
@@ -949,7 +948,7 @@
"lora_multiple": "Lora多个"
},
"ControlNet": {
"2_pass_pose_worship": "2通道姿势崇拜",
"2_pass_pose_worship": "通道姿势处理",
"controlnet_example": "ControlNet",
"depth_controlnet": "深度ControlNet",
"depth_t2i_adapter": "深度T2I适配器",
@@ -964,13 +963,14 @@
"flux_redux_model_example": "Flux Redux Model",
"flux_schnell": "Flux Schnell"
},
"SD3_5": {
"Image": {
"hidream_i1_dev": "HiDream I1 Dev",
"hidream_i1_fast": "HiDream I1 Fast",
"hidream_i1_full": "HiDream I1 Full",
"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": {
"sd3_5_simple_example": "SD3.5 简易示例",
"sdxl_refiner_prompt_example": "SDXL Refiner提示",
"sdxl_revision_text_prompts": "SDXL修订文本提示",
"sdxl_revision_zero_positive": "SDXL修订零正",

View File

@@ -11,7 +11,7 @@ import { useSettingStore } from '@/stores/settingStore'
import { useToastStore } from '@/stores/toastStore'
import { ComfyWorkflow, useWorkflowStore } from '@/stores/workflowStore'
import { useWorkspaceStore } from '@/stores/workspaceStore'
import { appendJsonExt } from '@/utils/formatUtil'
import { appendJsonExt, generateUUID } from '@/utils/formatUtil'
import { useDialogService } from './dialogService'
@@ -95,7 +95,7 @@ export const useWorkflowService = () => {
await workflowStore.saveWorkflow(workflow)
} else {
// Generate new id when saving existing workflow as a new file
const id = crypto.randomUUID()
const id = generateUUID()
const state = JSON.parse(
JSON.stringify(workflow.activeState)
) as ComfyWorkflowJSON