Compare commits

..

1 Commits

Author SHA1 Message Date
Terry Jia
84a675de88 expose Vue 2025-04-13 08:00:37 -04:00
29 changed files with 22 additions and 443 deletions

View File

@@ -8,15 +8,6 @@ const vue3CompositionApiBestPractices = [
"Use watch and watchEffect for side effects",
"Implement lifecycle hooks with onMounted, onUpdated, etc.",
"Utilize provide/inject for dependency injection",
"Use vue 3.5 style of default prop declaration. Example:
const { nodes, showTotal = true } = defineProps<{
nodes: ApiNodeCost[]
showTotal?: boolean
}>()
",
"Organize vue component in <template> <script> <style> order",
]
// Folder structure

4
global.d.ts vendored
View File

@@ -15,3 +15,7 @@ interface Navigator {
visible: boolean
}
}
interface Window {
Vue: typeof import('vue')
}

12
package-lock.json generated
View File

@@ -1,18 +1,18 @@
{
"name": "@comfyorg/comfyui-frontend",
"version": "1.17.0",
"version": "1.16.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@comfyorg/comfyui-frontend",
"version": "1.17.0",
"version": "1.16.7",
"license": "GPL-3.0-only",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"@atlaskit/pragmatic-drag-and-drop": "^1.3.1",
"@comfyorg/comfyui-electron-types": "^0.4.31",
"@comfyorg/litegraph": "^0.13.2",
"@comfyorg/litegraph": "^0.13.1",
"@primevue/forms": "^4.2.5",
"@primevue/themes": "^4.2.5",
"@sentry/vue": "^8.48.0",
@@ -480,9 +480,9 @@
"license": "GPL-3.0-only"
},
"node_modules/@comfyorg/litegraph": {
"version": "0.13.2",
"resolved": "https://registry.npmjs.org/@comfyorg/litegraph/-/litegraph-0.13.2.tgz",
"integrity": "sha512-IzCNipladIUt+oeSwkj6Bb9kk/TwMy7WeOzPbtA2FFSnuR5EFt9S8N5scVDkJNkDJzkgUGybiXwerhjxX3jRvQ==",
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/@comfyorg/litegraph/-/litegraph-0.13.1.tgz",
"integrity": "sha512-tAlAdeBpvBch5Wj7MghoJvJkGwdeHG3825LqDMkKynYVXfiMcrTtM+LWRkH58JlbEEocD+1fdWKLMZ+lJc9m0A==",
"license": "MIT"
},
"node_modules/@cspotcode/source-map-support": {

View File

@@ -1,7 +1,7 @@
{
"name": "@comfyorg/comfyui-frontend",
"private": true,
"version": "1.17.0",
"version": "1.16.7",
"type": "module",
"repository": "https://github.com/Comfy-Org/ComfyUI_frontend",
"homepage": "https://comfy.org",
@@ -73,7 +73,7 @@
"@alloc/quick-lru": "^5.2.0",
"@atlaskit/pragmatic-drag-and-drop": "^1.3.1",
"@comfyorg/comfyui-electron-types": "^0.4.31",
"@comfyorg/litegraph": "^0.13.2",
"@comfyorg/litegraph": "^0.13.1",
"@primevue/forms": "^4.2.5",
"@primevue/themes": "^4.2.5",
"@sentry/vue": "^8.48.0",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -1,75 +0,0 @@
<template>
<div class="flex flex-col gap-3 h-full">
<div class="flex justify-between text-xs">
<div>{{ t('apiNodesCostBreakdown.title') }}</div>
<div>{{ t('apiNodesCostBreakdown.costPerRun') }}</div>
</div>
<ScrollPanel class="flex-grow h-0">
<div class="flex flex-col gap-2">
<div
v-for="node in nodes"
:key="node.name"
class="flex items-center justify-between px-3 py-2 rounded-md bg-[var(--p-content-border-color)]"
>
<div class="flex items-center gap-2">
<span class="text-base font-medium leading-tight">{{
node.name
}}</span>
</div>
<div class="flex items-center gap-1">
<Tag
severity="secondary"
icon="pi pi-dollar"
rounded
class="text-amber-400 p-1"
/>
<span class="text-base font-medium leading-tight">
{{ node.cost.toFixed(costPrecision) }}
</span>
</div>
</div>
</div>
</ScrollPanel>
<template v-if="showTotal && nodes.length > 1">
<Divider class="my-2" />
<div class="flex justify-between items-center border-t px-3">
<span class="text-sm">{{ t('apiNodesCostBreakdown.totalCost') }}</span>
<div class="flex items-center gap-1">
<Tag
severity="secondary"
icon="pi pi-dollar"
rounded
class="text-yellow-500 p-1"
/>
<span>{{ totalCost.toFixed(costPrecision) }}</span>
</div>
</div>
</template>
</div>
</template>
<script setup lang="ts">
import Divider from 'primevue/divider'
import ScrollPanel from 'primevue/scrollpanel'
import Tag from 'primevue/tag'
import { computed } from 'vue'
import { useI18n } from 'vue-i18n'
import type { ApiNodeCost } from '@/types/apiNodeTypes'
const { t } = useI18n()
const {
nodes,
showTotal = true,
costPrecision = 3
} = defineProps<{
nodes: ApiNodeCost[]
showTotal?: boolean
costPrecision?: number
}>()
const totalCost = computed(() =>
nodes.reduce((sum, node) => sum + node.cost, 0)
)
</script>

View File

@@ -1,43 +0,0 @@
<!-- Prompt user that the workflow contains API nodes that needs login to run -->
<template>
<div class="flex flex-col gap-4 max-w-96 h-110 p-2">
<div class="text-2xl font-medium mb-2">
{{ t('apiNodesSignInDialog.title') }}
</div>
<div class="text-base mb-4">
{{ t('apiNodesSignInDialog.message') }}
</div>
<ApiNodesCostBreakdown :nodes="apiNodes" :show-total="true" />
<div class="flex justify-between items-center">
<Button :label="t('g.learnMore')" link />
<div class="flex gap-2">
<Button
:label="t('g.cancel')"
outlined
severity="secondary"
@click="onCancel?.()"
/>
<Button :label="t('g.login')" @click="onLogin?.()" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
import Button from 'primevue/button'
import { useI18n } from 'vue-i18n'
import ApiNodesCostBreakdown from '@/components/common/ApiNodesCostBreakdown.vue'
import type { ApiNodeCost } from '@/types/apiNodeTypes'
const { t } = useI18n()
const { apiNodes, onLogin, onCancel } = defineProps<{
apiNodes: ApiNodeCost[]
onLogin?: () => void
onCancel?: () => void
}>()
</script>

View File

@@ -1,6 +0,0 @@
<!-- A dialog header with ComfyOrg logo -->
<template>
<div class="px-2 py-4">
<img src="/assets/images/Comfy_Logo_x32.png" alt="ComfyOrg Logo" />
</div>
</template>

View File

@@ -18,7 +18,7 @@ export const DESKTOP_MAINTENANCE_TASKS: Readonly<MaintenanceTask>[] = [
shortDescription: 'Change the application base path.',
errorDescription: 'Unable to open the base path. Please select a new one.',
description:
'The base path is the default location where ComfyUI stores data. It is the location for the python environment, and may also contain models, custom nodes, and other extensions.',
'The base path is the default location where ComfyUI stores data. It is the location fo the python environment, and may also contain models, custom nodes, and other extensions.',
isInstallationFix: true,
button: {
icon: PrimeIcons.QUESTION,

View File

@@ -18,39 +18,7 @@ import { generateUUID } from '@/utils/formatUtil'
useExtensionService().registerExtension({
name: 'Comfy.Load3D',
settings: [
{
id: 'Comfy.Load3D.ShowGrid',
category: ['3D', 'Scene', 'Initial Grid Visibility'],
name: 'Initial Grid Visibility',
tooltip:
'Controls whether the grid is visible by default when a new 3D widget is created. This default can still be toggled individually for each widget after creation.',
type: 'boolean',
defaultValue: true,
experimental: true
},
{
id: 'Comfy.Load3D.ShowPreview',
category: ['3D', 'Scene', 'Initial Preview Visibility'],
name: 'Initial Preview Visibility',
tooltip:
'Controls whether the preview screen is visible by default when a new 3D widget is created. This default can still be toggled individually for each widget after creation.',
type: 'boolean',
defaultValue: true,
experimental: true
},
{
id: 'Comfy.Load3D.CameraType',
category: ['3D', 'Camera', 'Initial Camera Type'],
name: 'Initial Camera Type',
tooltip:
'Controls whether the camera is perspective or orthographic by default when a new 3D widget is created. This default can still be toggled individually for each widget after creation.',
type: 'combo',
options: ['perspective', 'orthographic'],
defaultValue: 'perspective',
experimental: true
}
],
getCustomWidgets() {
return {
LOAD_3D(node) {

View File

@@ -3,7 +3,6 @@ import type { IWidget } from '@comfyorg/litegraph'
import Load3d from '@/extensions/core/load3d/Load3d'
import Load3dUtils from '@/extensions/core/load3d/Load3dUtils'
import { api } from '@/scripts/api'
import { useSettingStore } from '@/stores/settingStore'
class Load3DConfiguration {
constructor(private load3d: Load3d) {}
@@ -73,21 +72,15 @@ class Load3DConfiguration {
private setupDefaultProperties() {
const cameraType = this.load3d.loadNodeProperty(
'Camera Type',
useSettingStore().get('Comfy.Load3D.CameraType')
'perspective'
)
this.load3d.toggleCamera(cameraType)
const showGrid = this.load3d.loadNodeProperty(
'Show Grid',
useSettingStore().get('Comfy.Load3D.ShowGrid')
)
const showGrid = this.load3d.loadNodeProperty('Show Grid', true)
this.load3d.toggleGrid(showGrid)
const showPreview = this.load3d.loadNodeProperty(
'Show Preview',
useSettingStore().get('Comfy.Load3D.ShowPreview')
)
const showPreview = this.load3d.loadNodeProperty('Show Preview', true)
this.load3d.togglePreview(showPreview)

View File

@@ -108,9 +108,7 @@
"disabling": "Disabling",
"updating": "Updating",
"migrate": "Migrate",
"updateAvailable": "Update Available",
"login": "Login",
"learnMore": "Learn more"
"updateAvailable": "Update Available"
},
"manager": {
"title": "Custom Nodes Manager",
@@ -718,11 +716,7 @@
"CustomColorPalettes": "Custom Color Palettes",
"UV": "UV",
"ContextMenu": "Context Menu",
"Reroute": "Reroute",
"Load 3D": "Load 3D",
"Camera": "Camera",
"Scene": "Scene",
"3D": "3D"
"Reroute": "Reroute"
},
"serverConfigItems": {
"listen": {
@@ -978,15 +972,6 @@
"extensionFileHint": "This may be due to the following script",
"promptExecutionError": "Prompt execution failed"
},
"apiNodesSignInDialog": {
"title": "Sign In Required to Use API Nodes",
"message": "This workflow contains API Nodes, which require you to be signed in to your account in order to run."
},
"apiNodesCostBreakdown": {
"title": "API Node(s)",
"costPerRun": "Cost per run",
"totalCost": "Total Cost"
},
"desktopUpdate": {
"title": "Updating ComfyUI Desktop",
"description": "ComfyUI Desktop is installing new dependencies. This may take a few minutes.",

View File

@@ -108,22 +108,6 @@
"Hidden": "Hidden"
}
},
"Comfy_Load3D_CameraType": {
"name": "Initial Camera Type",
"tooltip": "Controls whether the camera is perspective or orthographic by default when a new 3D widget is created. This default can still be toggled individually for each widget after creation.",
"options": {
"perspective": "perspective",
"orthographic": "orthographic"
}
},
"Comfy_Load3D_ShowGrid": {
"name": "Initial Grid Visibility",
"tooltip": "Controls whether the grid is visible by default when a new 3D widget is created. This default can still be toggled individually for each widget after creation."
},
"Comfy_Load3D_ShowPreview": {
"name": "Initial Preview Visibility",
"tooltip": "Controls whether the preview screen is visible by default when a new 3D widget is created. This default can still be toggled individually for each widget after creation."
},
"Comfy_Locale": {
"name": "Language"
},

View File

@@ -1,13 +1,4 @@
{
"apiNodesCostBreakdown": {
"costPerRun": "Costo por ejecución",
"title": "Nodo(s) de API",
"totalCost": "Costo total"
},
"apiNodesSignInDialog": {
"message": "Este flujo de trabajo contiene nodos de API, que requieren que inicies sesión en tu cuenta para poder ejecutar.",
"title": "Se requiere iniciar sesión para usar los nodos de API"
},
"clipboard": {
"errorMessage": "Error al copiar al portapapeles",
"errorNotSupported": "API del portapapeles no soportada en su navegador",
@@ -181,11 +172,9 @@
"installing": "Instalando",
"interrupted": "Interrumpido",
"keybinding": "Combinación de teclas",
"learnMore": "Aprende más",
"loadAllFolders": "Cargar todas las carpetas",
"loadWorkflow": "Cargar flujo de trabajo",
"loading": "Cargando",
"login": "Iniciar sesión",
"logs": "Registros",
"migrate": "Migrar",
"missing": "Faltante",
@@ -823,11 +812,9 @@
"troubleshoot": "Solucionar problemas"
},
"settingsCategories": {
"3D": "3D",
"About": "Acerca de",
"Appearance": "Apariencia",
"BrushAdjustment": "Ajuste de Pincel",
"Camera": "Cámara",
"Canvas": "Lienzo",
"ColorPalette": "Paleta de Colores",
"Comfy": "Comfy",
@@ -844,7 +831,6 @@
"Link": "Enlace",
"LinkRelease": "Liberación de Enlace",
"LiteGraph": "Lite Graph",
"Load 3D": "Cargar 3D",
"Locale": "Localización",
"Mask Editor": "Editor de Máscara",
"Menu": "Menú",
@@ -859,7 +845,6 @@
"QueueButton": "Botón de Cola",
"Reroute": "Reenrutar",
"RerouteBeta": "Reroute Beta",
"Scene": "Escena",
"Server": "Servidor",
"Server-Config": "Configuración del Servidor",
"Settings": "Configuraciones",

View File

@@ -108,22 +108,6 @@
"Straight": "Recto"
}
},
"Comfy_Load3D_CameraType": {
"name": "Tipo de Cámara",
"options": {
"orthographic": "ortográfica",
"perspective": "perspectiva"
},
"tooltip": "Controla si la cámara es perspectiva u ortográfica por defecto cuando se crea un nuevo widget 3D. Este valor predeterminado aún puede ser alternado individualmente para cada widget después de su creación."
},
"Comfy_Load3D_ShowGrid": {
"name": "Mostrar Cuadrícula",
"tooltip": "Cambiar para mostrar cuadrícula por defecto"
},
"Comfy_Load3D_ShowPreview": {
"name": "Mostrar Previsualización",
"tooltip": "Cambiar para mostrar previsualización por defecto"
},
"Comfy_Locale": {
"name": "Idioma"
},

View File

@@ -1,13 +1,4 @@
{
"apiNodesCostBreakdown": {
"costPerRun": "Coût par exécution",
"title": "Nœud(s) API",
"totalCost": "Coût total"
},
"apiNodesSignInDialog": {
"message": "Ce flux de travail contient des nœuds API, qui nécessitent que vous soyez connecté à votre compte pour pouvoir fonctionner.",
"title": "Connexion requise pour utiliser les nœuds API"
},
"clipboard": {
"errorMessage": "Échec de la copie dans le presse-papiers",
"errorNotSupported": "L'API du presse-papiers n'est pas prise en charge par votre navigateur",
@@ -181,11 +172,9 @@
"installing": "Installation",
"interrupted": "Interrompu",
"keybinding": "Raccourci clavier",
"learnMore": "En savoir plus",
"loadAllFolders": "Charger tous les dossiers",
"loadWorkflow": "Charger le flux de travail",
"loading": "Chargement",
"login": "Connexion",
"logs": "Journaux",
"migrate": "Migrer",
"missing": "Manquant",
@@ -823,11 +812,9 @@
"troubleshoot": "Dépannage"
},
"settingsCategories": {
"3D": "3D",
"About": "À Propos",
"Appearance": "Apparence",
"BrushAdjustment": "Ajustement de Brosse",
"Camera": "Caméra",
"Canvas": "Toile",
"ColorPalette": "Palette de Couleurs",
"Comfy": "Confort",
@@ -844,7 +831,6 @@
"Link": "Lien",
"LinkRelease": "Libération de Lien",
"LiteGraph": "Lite Graph",
"Load 3D": "Charger 3D",
"Locale": "Locale",
"Mask Editor": "Éditeur de Masque",
"Menu": "Menu",
@@ -859,7 +845,6 @@
"QueueButton": "Bouton de File d'Attente",
"Reroute": "Réacheminement",
"RerouteBeta": "Reroute Beta",
"Scene": "Scène",
"Server": "Serveur",
"Server-Config": "Config-Serveur",
"Settings": "Paramètres",

View File

@@ -108,22 +108,6 @@
"Straight": "Droit"
}
},
"Comfy_Load3D_CameraType": {
"name": "Type de Caméra",
"options": {
"orthographic": "orthographique",
"perspective": "perspective"
},
"tooltip": "Contrôle si la caméra est en perspective ou orthographique par défaut lorsqu'un nouveau widget 3D est créé. Ce défaut peut toujours être basculé individuellement pour chaque widget après sa création."
},
"Comfy_Load3D_ShowGrid": {
"name": "Afficher la Grille",
"tooltip": "Basculer pour afficher la grille par défaut"
},
"Comfy_Load3D_ShowPreview": {
"name": "Afficher l'Aperçu",
"tooltip": "Basculer pour afficher l'aperçu par défaut"
},
"Comfy_Locale": {
"name": "Langue"
},

View File

@@ -1,13 +1,4 @@
{
"apiNodesCostBreakdown": {
"costPerRun": "実行あたりのコスト",
"title": "APIード",
"totalCost": "合計コスト"
},
"apiNodesSignInDialog": {
"message": "このワークフローにはAPIードが含まれており、実行するためにはアカウントにサインインする必要があります。",
"title": "APIードを使用するためにはサインインが必要です"
},
"clipboard": {
"errorMessage": "クリップボードへのコピーに失敗しました",
"errorNotSupported": "お使いのブラウザではクリップボードAPIがサポートされていません",
@@ -181,11 +172,9 @@
"installing": "インストール中",
"interrupted": "中断されました",
"keybinding": "キーバインディング",
"learnMore": "詳細を学ぶ",
"loadAllFolders": "すべてのフォルダーを読み込む",
"loadWorkflow": "ワークフローを読み込む",
"loading": "読み込み中",
"login": "ログイン",
"logs": "ログ",
"migrate": "移行する",
"missing": "不足している",
@@ -823,11 +812,9 @@
"troubleshoot": "トラブルシューティング"
},
"settingsCategories": {
"3D": "3D",
"About": "情報",
"Appearance": "外観",
"BrushAdjustment": "ブラシ調整",
"Camera": "カメラ",
"Canvas": "キャンバス",
"ColorPalette": "カラーパレット",
"Comfy": "Comfy",
@@ -844,7 +831,6 @@
"Link": "リンク",
"LinkRelease": "リンク解除",
"LiteGraph": "Lite Graph",
"Load 3D": "3Dを読み込む",
"Locale": "ロケール",
"Mask Editor": "マスクエディタ",
"Menu": "メニュー",
@@ -859,7 +845,6 @@
"QueueButton": "キューボタン",
"Reroute": "リルート",
"RerouteBeta": "ルート変更ベータ",
"Scene": "シーン",
"Server": "サーバー",
"Server-Config": "サーバー設定",
"Settings": "設定",

View File

@@ -108,22 +108,6 @@
"Straight": "ストレート"
}
},
"Comfy_Load3D_CameraType": {
"name": "カメラタイプ",
"options": {
"orthographic": "オルソグラフィック",
"perspective": "パースペクティブ"
},
"tooltip": "新しい3Dウィジェットが作成されたときに、デフォルトでカメラが透視投影か平行投影かを制御します。このデフォルトは、作成後に各ウィジェットごとに個別に切り替えることができます。"
},
"Comfy_Load3D_ShowGrid": {
"name": "グリッドを表示",
"tooltip": "デフォルトでグリッドを表示するには切り替えます"
},
"Comfy_Load3D_ShowPreview": {
"name": "プレビューを表示",
"tooltip": "デフォルトでプレビューを表示するには切り替えます"
},
"Comfy_Locale": {
"name": "言語"
},

View File

@@ -1,13 +1,4 @@
{
"apiNodesCostBreakdown": {
"costPerRun": "실행 당 비용",
"title": "API 노드(들)",
"totalCost": "총 비용"
},
"apiNodesSignInDialog": {
"message": "이 워크플로우에는 API 노드가 포함되어 있으며, 실행하려면 계정에 로그인해야 합니다.",
"title": "API 노드 사용에 필요한 로그인"
},
"clipboard": {
"errorMessage": "클립보드에 복사하지 못했습니다",
"errorNotSupported": "브라우저가 클립보드 API를 지원하지 않습니다.",
@@ -181,11 +172,9 @@
"installing": "설치 중",
"interrupted": "중단됨",
"keybinding": "키 바인딩",
"learnMore": "더 알아보기",
"loadAllFolders": "모든 폴더 로드",
"loadWorkflow": "워크플로 로드",
"loading": "로딩 중",
"login": "로그인",
"logs": "로그",
"migrate": "이전(migrate)",
"missing": "누락됨",
@@ -823,11 +812,9 @@
"troubleshoot": "문제 해결"
},
"settingsCategories": {
"3D": "3D",
"About": "정보",
"Appearance": "모양",
"BrushAdjustment": "브러시 조정",
"Camera": "카메라",
"Canvas": "캔버스",
"ColorPalette": "색상 팔레트",
"Comfy": "Comfy",
@@ -844,7 +831,6 @@
"Link": "링크",
"LinkRelease": "링크 해제",
"LiteGraph": "LiteGraph",
"Load 3D": "3D 불러오기",
"Locale": "언어 설정",
"Mask Editor": "마스크 편집기",
"Menu": "메뉴",
@@ -859,7 +845,6 @@
"QueueButton": "실행 큐 버튼",
"Reroute": "경유점",
"RerouteBeta": "경유점 (베타)",
"Scene": "장면",
"Server": "서버",
"Server-Config": "서버 구성",
"Settings": "설정",

View File

@@ -108,22 +108,6 @@
"Straight": "직선"
}
},
"Comfy_Load3D_CameraType": {
"name": "카메라 유형",
"options": {
"orthographic": "직교법",
"perspective": "원근법"
},
"tooltip": "새로운 3D 위젯이 생성될 때 카메라가 기본적으로 원근법 또는 직교법을 사용하는지를 제어합니다. 이 기본값은 생성 후 각 위젯별로 개별적으로 전환할 수 있습니다."
},
"Comfy_Load3D_ShowGrid": {
"name": "그리드 표시",
"tooltip": "기본적으로 그리드를 표시하도록 전환"
},
"Comfy_Load3D_ShowPreview": {
"name": "미리보기 표시",
"tooltip": "기본적으로 미리보기를 표시하도록 전환"
},
"Comfy_Locale": {
"name": "언어"
},

View File

@@ -1,13 +1,4 @@
{
"apiNodesCostBreakdown": {
"costPerRun": "Стоимость за запуск",
"title": "API Node(s)",
"totalCost": "Общая стоимость"
},
"apiNodesSignInDialog": {
"message": "Этот рабочий процесс содержит API Nodes, которые требуют входа в вашу учетную запись для выполнения.",
"title": "Требуется вход для использования API Nodes"
},
"clipboard": {
"errorMessage": "Не удалось скопировать в буфер обмена",
"errorNotSupported": "API буфера обмена не поддерживается в вашем браузере",
@@ -181,11 +172,9 @@
"installing": "Установка",
"interrupted": "Прервано",
"keybinding": "Привязка клавиш",
"learnMore": "Узнать больше",
"loadAllFolders": "Загрузить все папки",
"loadWorkflow": "Загрузить рабочий процесс",
"loading": "Загрузка",
"login": "Вход",
"logs": "Логи",
"migrate": "Мигрировать",
"missing": "Отсутствует",
@@ -823,11 +812,9 @@
"troubleshoot": "Устранение неполадок"
},
"settingsCategories": {
"3D": "3D",
"About": "О программе",
"Appearance": "Внешний вид",
"BrushAdjustment": "Настройка кисти",
"Camera": "Камера",
"Canvas": "Холст",
"ColorPalette": "Цветовая палитра",
"Comfy": "Comfy",
@@ -844,7 +831,6 @@
"Link": "Ссылка",
"LinkRelease": "Освобождение ссылки",
"LiteGraph": "Lite Graph",
"Load 3D": "Загрузить 3D",
"Locale": "Локализация",
"Mask Editor": "Редактор масок",
"Menu": "Меню",
@@ -859,7 +845,6 @@
"QueueButton": "Кнопка очереди",
"Reroute": "Перенаправление",
"RerouteBeta": "Бета-версия перенаправления",
"Scene": "Сцена",
"Server": "Сервер",
"Server-Config": "Настройки сервера",
"Settings": "Настройки",

View File

@@ -108,22 +108,6 @@
"Straight": "Прямой"
}
},
"Comfy_Load3D_CameraType": {
"name": "Тип камеры",
"options": {
"orthographic": "ортографическая",
"perspective": "перспективная"
},
"tooltip": "Управляет тем, является ли камера перспективной или ортографической по умолчанию при создании нового 3D-виджета. Это значение по умолчанию все еще может быть переключено индивидуально для каждого виджета после его создания."
},
"Comfy_Load3D_ShowGrid": {
"name": "Показать сетку",
"tooltip": "Переключиться, чтобы показывать сетку по умолчанию"
},
"Comfy_Load3D_ShowPreview": {
"name": "Показать предварительный просмотр",
"tooltip": "Переключиться, чтобы показывать предварительный просмотр по умолчанию"
},
"Comfy_Locale": {
"name": "Язык"
},

View File

@@ -1,13 +1,4 @@
{
"apiNodesCostBreakdown": {
"costPerRun": "每次运行的成本",
"title": "API节点",
"totalCost": "总成本"
},
"apiNodesSignInDialog": {
"message": "此工作流包含API节点需要您登录账户才能运行。",
"title": "使用API节点需要登录"
},
"clipboard": {
"errorMessage": "复制到剪贴板失败",
"errorNotSupported": "您的浏览器不支持剪贴板API",
@@ -181,11 +172,9 @@
"installing": "正在安装",
"interrupted": "已中断",
"keybinding": "按键绑定",
"learnMore": "了解更多",
"loadAllFolders": "加载所有文件夹",
"loadWorkflow": "加载工作流",
"loading": "加载中",
"login": "登录",
"logs": "日志",
"migrate": "迁移",
"missing": "缺失",
@@ -823,11 +812,9 @@
"troubleshoot": "故障排除"
},
"settingsCategories": {
"3D": "3D",
"About": "关于",
"Appearance": "外观",
"BrushAdjustment": "画笔调整",
"Camera": "相机",
"Canvas": "画布",
"ColorPalette": "色彩主题",
"Comfy": "Comfy",
@@ -844,7 +831,6 @@
"Link": "连线",
"LinkRelease": "释放链接",
"LiteGraph": "画面",
"Load 3D": "加载3D",
"Locale": "区域设置",
"Mask Editor": "遮罩编辑器",
"Menu": "菜单",
@@ -859,7 +845,6 @@
"QueueButton": "执行按钮",
"Reroute": "重新路由",
"RerouteBeta": "转接点 Beta",
"Scene": "场景",
"Server": "服务器",
"Server-Config": "服务器配置",
"Settings": "设置",

View File

@@ -108,22 +108,6 @@
"Straight": "直角线"
}
},
"Comfy_Load3D_CameraType": {
"name": "摄像机类型",
"options": {
"orthographic": "正交",
"perspective": "透视"
},
"tooltip": "控制创建新的3D小部件时默认的相机是透视还是正交。这个默认设置仍然可以在创建后为每个小部件单独切换。"
},
"Comfy_Load3D_ShowGrid": {
"name": "显示网格",
"tooltip": "默认显示网格开关"
},
"Comfy_Load3D_ShowPreview": {
"name": "显示预览",
"tooltip": "默认显示预览开关"
},
"Comfy_Locale": {
"name": "语言"
},

View File

@@ -9,6 +9,7 @@ import ConfirmationService from 'primevue/confirmationservice'
import ToastService from 'primevue/toastservice'
import Tooltip from 'primevue/tooltip'
import { createApp } from 'vue'
import * as Vue from 'vue'
import '@/assets/css/style.css'
import router from '@/router'
@@ -59,3 +60,5 @@ app
.use(pinia)
.use(i18n)
.mount('#vue-app')
window.Vue = Vue

View File

@@ -440,9 +440,6 @@ const zSettings = z.object({
'Comfy.MaskEditor.UseNewEditor': z.boolean(),
'Comfy.MaskEditor.BrushAdjustmentSpeed': z.number(),
'Comfy.MaskEditor.UseDominantAxis': z.boolean(),
'Comfy.Load3D.ShowGrid': z.boolean(),
'Comfy.Load3D.ShowPreview': z.boolean(),
'Comfy.Load3D.CameraType': z.enum(['perspective', 'orthographic']),
'pysssss.SnapToGrid': z.boolean(),
/** VHS setting is used for queue video preview support. */
'VHS.AdvancedPreviews': z.boolean(),

View File

@@ -1,4 +1,3 @@
import ApiNodesSignInContent from '@/components/dialog/content/ApiNodesSignInContent.vue'
import ConfirmationDialogContent from '@/components/dialog/content/ConfirmationDialogContent.vue'
import ErrorDialogContent from '@/components/dialog/content/ErrorDialogContent.vue'
import IssueReportDialogContent from '@/components/dialog/content/IssueReportDialogContent.vue'
@@ -10,7 +9,6 @@ import SettingDialogContent from '@/components/dialog/content/SettingDialogConte
import ManagerDialogContent from '@/components/dialog/content/manager/ManagerDialogContent.vue'
import ManagerHeader from '@/components/dialog/content/manager/ManagerHeader.vue'
import ManagerProgressFooter from '@/components/dialog/footer/ManagerProgressFooter.vue'
import ComfyOrgHeader from '@/components/dialog/header/ComfyOrgHeader.vue'
import ManagerProgressHeader from '@/components/dialog/header/ManagerProgressHeader.vue'
import SettingDialogHeader from '@/components/dialog/header/SettingDialogHeader.vue'
import TemplateWorkflowsContent from '@/components/templates/TemplateWorkflowsContent.vue'
@@ -18,7 +16,6 @@ import TemplateWorkflowsDialogHeader from '@/components/templates/TemplateWorkfl
import { t } from '@/i18n'
import type { ExecutionErrorWsMessage } from '@/schemas/apiSchema'
import { type ShowDialogOptions, useDialogStore } from '@/stores/dialogStore'
import { ApiNodeCost } from '@/types/apiNodeTypes'
import { ManagerTab } from '@/types/comfyManagerTypes'
export type ConfirmationDialogType =
@@ -219,34 +216,6 @@ export const useDialogService = () => {
})
}
/**
* Shows a dialog requiring sign in for API nodes
* @returns Promise that resolves to true if user clicks login, false if cancelled
*/
async function showApiNodesSignInDialog(
apiNodes: ApiNodeCost[]
): Promise<boolean> {
return new Promise<boolean>((resolve) => {
dialogStore.showDialog({
key: 'api-nodes-signin',
component: ApiNodesSignInContent,
props: {
apiNodes,
onLogin: () => resolve(true),
onCancel: () => resolve(false)
},
headerComponent: ComfyOrgHeader,
dialogComponentProps: {
closable: false,
onClose: () => resolve(false)
}
})
}).then((result) => {
dialogStore.closeDialog({ key: 'api-nodes-signin' })
return result
})
}
async function prompt({
title,
message,
@@ -331,7 +300,6 @@ export const useDialogService = () => {
showManagerDialog,
showManagerProgressDialog,
showErrorDialog,
showApiNodesSignInDialog,
prompt,
confirm
}

View File

@@ -1,4 +0,0 @@
export interface ApiNodeCost {
name: string
cost: number
}