mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-19 22:09:37 +00:00
Compare commits
4 Commits
ga4-fix
...
implement-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
892a9b6068 | ||
|
|
dfc38083fe | ||
|
|
1f055686c3 | ||
|
|
f145a89c66 |
@@ -86,6 +86,7 @@ import { useSettingStore } from '@/stores/settingStore'
|
|||||||
import { useToastStore } from '@/stores/toastStore'
|
import { useToastStore } from '@/stores/toastStore'
|
||||||
import { useColorPaletteStore } from '@/stores/workspace/colorPaletteStore'
|
import { useColorPaletteStore } from '@/stores/workspace/colorPaletteStore'
|
||||||
import { useWorkspaceStore } from '@/stores/workspaceStore'
|
import { useWorkspaceStore } from '@/stores/workspaceStore'
|
||||||
|
import { getCurrentVersion } from '@/utils/versioning'
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
ready: []
|
ready: []
|
||||||
@@ -300,6 +301,13 @@ onMounted(async () => {
|
|||||||
CORE_SETTINGS.forEach((setting) => {
|
CORE_SETTINGS.forEach((setting) => {
|
||||||
settingStore.addSetting(setting)
|
settingStore.addSetting(setting)
|
||||||
})
|
})
|
||||||
|
if (!settingStore.get('Comfy.InstalledVersion')) {
|
||||||
|
const currentVersion =
|
||||||
|
Object.keys(settingStore.settingValues).length > 0
|
||||||
|
? '0.0.1'
|
||||||
|
: getCurrentVersion()
|
||||||
|
await settingStore.set('Comfy.InstalledVersion', currentVersion)
|
||||||
|
}
|
||||||
// @ts-expect-error fixme ts strict error
|
// @ts-expect-error fixme ts strict error
|
||||||
await comfyApp.setup(canvasRef.value)
|
await comfyApp.setup(canvasRef.value)
|
||||||
canvasStore.canvas = comfyApp.canvas
|
canvasStore.canvas = comfyApp.canvas
|
||||||
|
|||||||
@@ -35,7 +35,10 @@ export const CORE_SETTINGS: SettingParams[] = [
|
|||||||
name: 'Action on link release (No modifier)',
|
name: 'Action on link release (No modifier)',
|
||||||
type: 'combo',
|
type: 'combo',
|
||||||
options: Object.values(LinkReleaseTriggerAction),
|
options: Object.values(LinkReleaseTriggerAction),
|
||||||
defaultValue: LinkReleaseTriggerAction.CONTEXT_MENU
|
defaultValue: LinkReleaseTriggerAction.CONTEXT_MENU,
|
||||||
|
defaultsByInstallVersion: {
|
||||||
|
'1.21.3': LinkReleaseTriggerAction.SEARCH_BOX
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'Comfy.LinkRelease.ActionShift',
|
id: 'Comfy.LinkRelease.ActionShift',
|
||||||
@@ -747,6 +750,13 @@ export const CORE_SETTINGS: SettingParams[] = [
|
|||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
versionAdded: '1.8.7'
|
versionAdded: '1.8.7'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'Comfy.InstalledVersion',
|
||||||
|
name: 'Installed version',
|
||||||
|
type: 'hidden',
|
||||||
|
defaultValue: null,
|
||||||
|
versionAdded: '1.22.1'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'LiteGraph.ContextMenu.Scaling',
|
id: 'LiteGraph.ContextMenu.Scaling',
|
||||||
name: 'Scale node combo widget menus (lists) when zoomed in',
|
name: 'Scale node combo widget menus (lists) when zoomed in',
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "Fit view to selected nodes"
|
"label": "Fit view to selected nodes"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "Move Selected Nodes Down"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "Move Selected Nodes Left"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "Move Selected Nodes Right"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "Move Selected Nodes Up"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "Reset View"
|
"label": "Reset View"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -794,6 +794,10 @@
|
|||||||
"Browse Templates": "Browse Templates",
|
"Browse Templates": "Browse Templates",
|
||||||
"Delete Selected Items": "Delete Selected Items",
|
"Delete Selected Items": "Delete Selected Items",
|
||||||
"Fit view to selected nodes": "Fit view to selected nodes",
|
"Fit view to selected nodes": "Fit view to selected nodes",
|
||||||
|
"Move Selected Nodes Down": "Move Selected Nodes Down",
|
||||||
|
"Move Selected Nodes Left": "Move Selected Nodes Left",
|
||||||
|
"Move Selected Nodes Right": "Move Selected Nodes Right",
|
||||||
|
"Move Selected Nodes Up": "Move Selected Nodes Up",
|
||||||
"Reset View": "Reset View",
|
"Reset View": "Reset View",
|
||||||
"Resize Selected Nodes": "Resize Selected Nodes",
|
"Resize Selected Nodes": "Resize Selected Nodes",
|
||||||
"Canvas Toggle Link Visibility": "Canvas Toggle Link Visibility",
|
"Canvas Toggle Link Visibility": "Canvas Toggle Link Visibility",
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "Ajustar vista a los nodos seleccionados"
|
"label": "Ajustar vista a los nodos seleccionados"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "Mover nodos seleccionados hacia abajo"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "Mover nodos seleccionados a la izquierda"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "Mover nodos seleccionados a la derecha"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "Mover nodos seleccionados hacia arriba"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "Restablecer vista"
|
"label": "Restablecer vista"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -709,6 +709,10 @@
|
|||||||
"Interrupt": "Interrumpir",
|
"Interrupt": "Interrumpir",
|
||||||
"Load Default Workflow": "Cargar flujo de trabajo predeterminado",
|
"Load Default Workflow": "Cargar flujo de trabajo predeterminado",
|
||||||
"Manage group nodes": "Gestionar nodos de grupo",
|
"Manage group nodes": "Gestionar nodos de grupo",
|
||||||
|
"Move Selected Nodes Down": "Mover nodos seleccionados hacia abajo",
|
||||||
|
"Move Selected Nodes Left": "Mover nodos seleccionados hacia la izquierda",
|
||||||
|
"Move Selected Nodes Right": "Mover nodos seleccionados hacia la derecha",
|
||||||
|
"Move Selected Nodes Up": "Mover nodos seleccionados hacia arriba",
|
||||||
"Mute/Unmute Selected Nodes": "Silenciar/Activar sonido de nodos seleccionados",
|
"Mute/Unmute Selected Nodes": "Silenciar/Activar sonido de nodos seleccionados",
|
||||||
"New": "Nuevo",
|
"New": "Nuevo",
|
||||||
"Next Opened Workflow": "Siguiente flujo de trabajo abierto",
|
"Next Opened Workflow": "Siguiente flujo de trabajo abierto",
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "Ajuster la vue aux nœuds sélectionnés"
|
"label": "Ajuster la vue aux nœuds sélectionnés"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "Déplacer les nœuds sélectionnés vers le bas"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "Déplacer les nœuds sélectionnés vers la gauche"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "Déplacer les nœuds sélectionnés vers la droite"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "Déplacer les nœuds sélectionnés vers le haut"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "Réinitialiser la vue"
|
"label": "Réinitialiser la vue"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -709,6 +709,10 @@
|
|||||||
"Interrupt": "Interrompre",
|
"Interrupt": "Interrompre",
|
||||||
"Load Default Workflow": "Charger le flux de travail par défaut",
|
"Load Default Workflow": "Charger le flux de travail par défaut",
|
||||||
"Manage group nodes": "Gérer les nœuds de groupe",
|
"Manage group nodes": "Gérer les nœuds de groupe",
|
||||||
|
"Move Selected Nodes Down": "Déplacer les nœuds sélectionnés vers le bas",
|
||||||
|
"Move Selected Nodes Left": "Déplacer les nœuds sélectionnés vers la gauche",
|
||||||
|
"Move Selected Nodes Right": "Déplacer les nœuds sélectionnés vers la droite",
|
||||||
|
"Move Selected Nodes Up": "Déplacer les nœuds sélectionnés vers le haut",
|
||||||
"Mute/Unmute Selected Nodes": "Mettre en sourdine/Activer le son des nœuds sélectionnés",
|
"Mute/Unmute Selected Nodes": "Mettre en sourdine/Activer le son des nœuds sélectionnés",
|
||||||
"New": "Nouveau",
|
"New": "Nouveau",
|
||||||
"Next Opened Workflow": "Prochain flux de travail ouvert",
|
"Next Opened Workflow": "Prochain flux de travail ouvert",
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "選択したノードにビューを合わせる"
|
"label": "選択したノードにビューを合わせる"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "選択したノードを下に移動"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "選択したノードを左に移動"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "選択したノードを右に移動"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "選択したノードを上に移動"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "ビューをリセット"
|
"label": "ビューをリセット"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -709,6 +709,10 @@
|
|||||||
"Interrupt": "中断",
|
"Interrupt": "中断",
|
||||||
"Load Default Workflow": "デフォルトワークフローを読み込む",
|
"Load Default Workflow": "デフォルトワークフローを読み込む",
|
||||||
"Manage group nodes": "グループノードを管理",
|
"Manage group nodes": "グループノードを管理",
|
||||||
|
"Move Selected Nodes Down": "選択したノードを下に移動",
|
||||||
|
"Move Selected Nodes Left": "選択したノードを左に移動",
|
||||||
|
"Move Selected Nodes Right": "選択したノードを右に移動",
|
||||||
|
"Move Selected Nodes Up": "選択したノードを上に移動",
|
||||||
"Mute/Unmute Selected Nodes": "選択したノードのミュート/ミュート解除",
|
"Mute/Unmute Selected Nodes": "選択したノードのミュート/ミュート解除",
|
||||||
"New": "新規",
|
"New": "新規",
|
||||||
"Next Opened Workflow": "次に開いたワークフロー",
|
"Next Opened Workflow": "次に開いたワークフロー",
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "선택한 노드에 뷰 맞추기"
|
"label": "선택한 노드에 뷰 맞추기"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "선택한 노드 아래로 이동"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "선택한 노드 왼쪽으로 이동"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "선택한 노드 오른쪽으로 이동"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "선택한 노드 위로 이동"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "뷰 재설정"
|
"label": "뷰 재설정"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -709,6 +709,10 @@
|
|||||||
"Interrupt": "중단",
|
"Interrupt": "중단",
|
||||||
"Load Default Workflow": "기본 워크플로 불러오기",
|
"Load Default Workflow": "기본 워크플로 불러오기",
|
||||||
"Manage group nodes": "그룹 노드 관리",
|
"Manage group nodes": "그룹 노드 관리",
|
||||||
|
"Move Selected Nodes Down": "선택한 노드 아래로 이동",
|
||||||
|
"Move Selected Nodes Left": "선택한 노드 왼쪽으로 이동",
|
||||||
|
"Move Selected Nodes Right": "선택한 노드 오른쪽으로 이동",
|
||||||
|
"Move Selected Nodes Up": "선택한 노드 위로 이동",
|
||||||
"Mute/Unmute Selected Nodes": "선택한 노드 활성화/비활성화",
|
"Mute/Unmute Selected Nodes": "선택한 노드 활성화/비활성화",
|
||||||
"New": "새로 만들기",
|
"New": "새로 만들기",
|
||||||
"Next Opened Workflow": "다음 열린 워크플로",
|
"Next Opened Workflow": "다음 열린 워크플로",
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "Подогнать вид к выбранным нодам"
|
"label": "Подогнать вид к выбранным нодам"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "Переместить выбранные узлы вниз"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "Переместить выбранные узлы влево"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "Переместить выбранные узлы вправо"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "Переместить выбранные узлы вверх"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "Сбросить вид"
|
"label": "Сбросить вид"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -709,6 +709,10 @@
|
|||||||
"Interrupt": "Прервать",
|
"Interrupt": "Прервать",
|
||||||
"Load Default Workflow": "Загрузить стандартный рабочий процесс",
|
"Load Default Workflow": "Загрузить стандартный рабочий процесс",
|
||||||
"Manage group nodes": "Управление групповыми нодами",
|
"Manage group nodes": "Управление групповыми нодами",
|
||||||
|
"Move Selected Nodes Down": "Переместить выбранные узлы вниз",
|
||||||
|
"Move Selected Nodes Left": "Переместить выбранные узлы влево",
|
||||||
|
"Move Selected Nodes Right": "Переместить выбранные узлы вправо",
|
||||||
|
"Move Selected Nodes Up": "Переместить выбранные узлы вверх",
|
||||||
"Mute/Unmute Selected Nodes": "Отключить/включить звук для выбранных нод",
|
"Mute/Unmute Selected Nodes": "Отключить/включить звук для выбранных нод",
|
||||||
"New": "Новый",
|
"New": "Новый",
|
||||||
"Next Opened Workflow": "Следующий открытый рабочий процесс",
|
"Next Opened Workflow": "Следующий открытый рабочий процесс",
|
||||||
|
|||||||
@@ -44,6 +44,18 @@
|
|||||||
"Comfy_Canvas_FitView": {
|
"Comfy_Canvas_FitView": {
|
||||||
"label": "适应视图到选中节点"
|
"label": "适应视图到选中节点"
|
||||||
},
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Down": {
|
||||||
|
"label": "下移所选节点"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Left": {
|
||||||
|
"label": "向左移动选中节点"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Right": {
|
||||||
|
"label": "向右移动选中节点"
|
||||||
|
},
|
||||||
|
"Comfy_Canvas_MoveSelectedNodes_Up": {
|
||||||
|
"label": "上移所选节点"
|
||||||
|
},
|
||||||
"Comfy_Canvas_ResetView": {
|
"Comfy_Canvas_ResetView": {
|
||||||
"label": "重置视图"
|
"label": "重置视图"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -709,6 +709,10 @@
|
|||||||
"Interrupt": "中断",
|
"Interrupt": "中断",
|
||||||
"Load Default Workflow": "加载默认工作流",
|
"Load Default Workflow": "加载默认工作流",
|
||||||
"Manage group nodes": "管理组节点",
|
"Manage group nodes": "管理组节点",
|
||||||
|
"Move Selected Nodes Down": "下移所选节点",
|
||||||
|
"Move Selected Nodes Left": "左移所选节点",
|
||||||
|
"Move Selected Nodes Right": "右移所选节点",
|
||||||
|
"Move Selected Nodes Up": "上移所选节点",
|
||||||
"Mute/Unmute Selected Nodes": "静音/取消静音选定节点",
|
"Mute/Unmute Selected Nodes": "静音/取消静音选定节点",
|
||||||
"New": "新建",
|
"New": "新建",
|
||||||
"Next Opened Workflow": "下一个打开的工作流",
|
"Next Opened Workflow": "下一个打开的工作流",
|
||||||
|
|||||||
@@ -448,6 +448,7 @@ const zSettings = z.object({
|
|||||||
'Comfy.Toast.DisableReconnectingToast': z.boolean(),
|
'Comfy.Toast.DisableReconnectingToast': z.boolean(),
|
||||||
'Comfy.Workflow.Persist': z.boolean(),
|
'Comfy.Workflow.Persist': z.boolean(),
|
||||||
'Comfy.TutorialCompleted': z.boolean(),
|
'Comfy.TutorialCompleted': z.boolean(),
|
||||||
|
'Comfy.InstalledVersion': z.string().nullable(),
|
||||||
'Comfy.Node.AllowImageSizeDraw': z.boolean(),
|
'Comfy.Node.AllowImageSizeDraw': z.boolean(),
|
||||||
'Comfy-Desktop.AutoUpdate': z.boolean(),
|
'Comfy-Desktop.AutoUpdate': z.boolean(),
|
||||||
'Comfy-Desktop.SendStatistics': z.boolean(),
|
'Comfy-Desktop.SendStatistics': z.boolean(),
|
||||||
@@ -471,6 +472,7 @@ const zSettings = z.object({
|
|||||||
'VHS.AdvancedPreviews': z.string(),
|
'VHS.AdvancedPreviews': z.string(),
|
||||||
/** Settings used for testing */
|
/** Settings used for testing */
|
||||||
'test.setting': z.any(),
|
'test.setting': z.any(),
|
||||||
|
'test.versionedSetting': z.any(),
|
||||||
'main.sub.setting.name': z.any(),
|
'main.sub.setting.name': z.any(),
|
||||||
'single.setting': z.any(),
|
'single.setting': z.any(),
|
||||||
'LiteGraph.Node.DefaultPadding': z.boolean(),
|
'LiteGraph.Node.DefaultPadding': z.boolean(),
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { api } from '@/scripts/api'
|
|||||||
import { app } from '@/scripts/app'
|
import { app } from '@/scripts/app'
|
||||||
import type { SettingParams } from '@/types/settingTypes'
|
import type { SettingParams } from '@/types/settingTypes'
|
||||||
import type { TreeNode } from '@/types/treeExplorerTypes'
|
import type { TreeNode } from '@/types/treeExplorerTypes'
|
||||||
|
import { compareVersions } from '@/utils/versioning'
|
||||||
|
|
||||||
export const getSettingInfo = (setting: SettingParams) => {
|
export const getSettingInfo = (setting: SettingParams) => {
|
||||||
const parts = setting.category || setting.id.split('.')
|
const parts = setting.category || setting.id.split('.')
|
||||||
@@ -83,6 +84,29 @@ export const useSettingStore = defineStore('setting', () => {
|
|||||||
*/
|
*/
|
||||||
function getDefaultValue<K extends keyof Settings>(key: K): Settings[K] {
|
function getDefaultValue<K extends keyof Settings>(key: K): Settings[K] {
|
||||||
const param = settingsById.value[key]
|
const param = settingsById.value[key]
|
||||||
|
|
||||||
|
// Check for versioned defaults based on installation version
|
||||||
|
if (param?.defaultsByInstallVersion) {
|
||||||
|
const installedVersion = get('Comfy.InstalledVersion')
|
||||||
|
|
||||||
|
if (installedVersion) {
|
||||||
|
// Find the highest version that is <= installedVersion
|
||||||
|
const sortedVersions = Object.keys(param.defaultsByInstallVersion).sort(
|
||||||
|
(a, b) => compareVersions(a, b)
|
||||||
|
)
|
||||||
|
|
||||||
|
for (const version of sortedVersions.reverse()) {
|
||||||
|
if (compareVersions(installedVersion, version) >= 0) {
|
||||||
|
const versionedDefault = param.defaultsByInstallVersion[version]
|
||||||
|
return typeof versionedDefault === 'function'
|
||||||
|
? versionedDefault()
|
||||||
|
: versionedDefault
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fall back to original defaultValue
|
||||||
return typeof param?.defaultValue === 'function'
|
return typeof param?.defaultValue === 'function'
|
||||||
? param.defaultValue()
|
? param.defaultValue()
|
||||||
: param?.defaultValue
|
: param?.defaultValue
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ export interface Setting {
|
|||||||
export interface SettingParams extends FormItem {
|
export interface SettingParams extends FormItem {
|
||||||
id: keyof Settings
|
id: keyof Settings
|
||||||
defaultValue: any | (() => any)
|
defaultValue: any | (() => any)
|
||||||
|
// Optional versioned defaults based on installation version
|
||||||
|
defaultsByInstallVersion?: Record<string, any | (() => any)>
|
||||||
onChange?: (newValue: any, oldValue?: any) => void
|
onChange?: (newValue: any, oldValue?: any) => void
|
||||||
// By default category is id.split('.'). However, changing id to assign
|
// By default category is id.split('.'). However, changing id to assign
|
||||||
// new category has poor backward compatibility. Use this field to overwrite
|
// new category has poor backward compatibility. Use this field to overwrite
|
||||||
|
|||||||
37
src/utils/versioning.ts
Normal file
37
src/utils/versioning.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import { electronAPI, isElectron } from '@/utils/envUtil'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compare two semantic version strings.
|
||||||
|
* @param a - First version string
|
||||||
|
* @param b - Second version string
|
||||||
|
* @returns 0 if equal, 1 if a > b, -1 if a < b
|
||||||
|
*/
|
||||||
|
export function compareVersions(a: string, b: string): number {
|
||||||
|
const parseVersion = (version: string) => {
|
||||||
|
return version.split('.').map((v) => parseInt(v, 10) || 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
const versionA = parseVersion(a)
|
||||||
|
const versionB = parseVersion(b)
|
||||||
|
|
||||||
|
for (let i = 0; i < Math.max(versionA.length, versionB.length); i++) {
|
||||||
|
const numA = versionA[i] || 0
|
||||||
|
const numB = versionB[i] || 0
|
||||||
|
|
||||||
|
if (numA > numB) return 1
|
||||||
|
if (numA < numB) return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current ComfyUI version for version tracking
|
||||||
|
*/
|
||||||
|
export function getCurrentVersion(): string {
|
||||||
|
if (isElectron()) {
|
||||||
|
return electronAPI().getComfyUIVersion()
|
||||||
|
}
|
||||||
|
// For web version, fallback to frontend version
|
||||||
|
return __COMFYUI_FRONTEND_VERSION__
|
||||||
|
}
|
||||||
@@ -122,6 +122,26 @@ describe('useSettingStore', () => {
|
|||||||
expect(store.get('test.setting')).toBe('default')
|
expect(store.get('test.setting')).toBe('default')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should use versioned default based on installation version', () => {
|
||||||
|
// Set up an installed version
|
||||||
|
store.settingValues['Comfy.InstalledVersion'] = '1.25.0'
|
||||||
|
|
||||||
|
const setting: SettingParams = {
|
||||||
|
id: 'test.versionedSetting',
|
||||||
|
name: 'test.versionedSetting',
|
||||||
|
type: 'text',
|
||||||
|
defaultValue: 'original',
|
||||||
|
defaultsByInstallVersion: {
|
||||||
|
'1.20.0': 'version_1_20',
|
||||||
|
'1.24.0': 'version_1_24'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
store.addSetting(setting)
|
||||||
|
|
||||||
|
// Should use the highest version <= installed version
|
||||||
|
expect(store.get('test.versionedSetting')).toBe('version_1_24')
|
||||||
|
})
|
||||||
|
|
||||||
it('should set value and trigger onChange', async () => {
|
it('should set value and trigger onChange', async () => {
|
||||||
const onChangeMock = vi.fn()
|
const onChangeMock = vi.fn()
|
||||||
const dispatchChangeMock = vi.mocked(app.ui.settings.dispatchChange)
|
const dispatchChangeMock = vi.mocked(app.ui.settings.dispatchChange)
|
||||||
|
|||||||
Reference in New Issue
Block a user