From 308213913f443789b8aa3bcead42c54ad75c0318 Mon Sep 17 00:00:00 2001 From: snomiao Date: Tue, 25 Nov 2025 05:17:34 +0000 Subject: [PATCH 1/5] Feat: Add Babel plugin for Vite define replacements in Playwright MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implements a solution to handle Vite define replacements during Playwright's Babel compilation for i18n collection tests. This resolves ReferenceErrors caused by unprocessed compile-time constants like __DISTRIBUTION__. Changes: - Add babel-plugin-vite-define.cjs to replace Vite define constants - Add babel-plugin-inject-globals.cjs to inject browser globals setup - Add setup-i18n-globals.mjs for JSDOM-based browser environment - Update playwright.i18n.config.ts with Babel plugin configuration - Install babel-plugin-module-resolver for @ alias support The implementation follows the approach from PR #5515 but is adapted for the current codebase structure. The Babel plugins run during Playwright's test compilation to ensure all Vite define constants are replaced with their actual values before execution. Fixes #10981 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- knip.config.ts | 4 +- package.json | 1 + playwright.i18n.config.ts | 52 ++++++++- pnpm-lock.yaml | 114 +++++++++++++++--- pnpm-workspace.yaml | 1 + scripts/babel-plugin-inject-globals.cjs | 51 ++++++++ scripts/babel-plugin-vite-define.cjs | 148 ++++++++++++++++++++++++ scripts/setup-i18n-globals.mjs | 61 ++++++++++ 8 files changed, 410 insertions(+), 22 deletions(-) create mode 100644 scripts/babel-plugin-inject-globals.cjs create mode 100644 scripts/babel-plugin-vite-define.cjs create mode 100644 scripts/setup-i18n-globals.mjs diff --git a/knip.config.ts b/knip.config.ts index a77574f97b..17c3c539d5 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -34,7 +34,9 @@ const config: KnipConfig = { '@primeuix/forms', '@primeuix/styled', '@primeuix/utils', - '@primevue/icons' + '@primevue/icons', + // Used by Playwright's Babel configuration for i18n tests + 'babel-plugin-module-resolver' ], ignore: [ // Auto generated manager types diff --git a/package.json b/package.json index bacccc57c9..12d6a2fd46 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "@vitest/ui": "catalog:", "@vue/test-utils": "catalog:", "@webgpu/types": "catalog:", + "babel-plugin-module-resolver": "catalog:", "cross-env": "catalog:", "eslint": "catalog:", "eslint-config-prettier": "catalog:", diff --git a/playwright.i18n.config.ts b/playwright.i18n.config.ts index 16c86a18ac..060cf7fadd 100644 --- a/playwright.i18n.config.ts +++ b/playwright.i18n.config.ts @@ -1,6 +1,10 @@ import { defineConfig } from '@playwright/test' +import path from 'path' +import { fileURLToPath } from 'url' -export default defineConfig({ +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +const config = defineConfig({ testDir: './scripts', use: { baseURL: 'http://localhost:5173', @@ -9,5 +13,49 @@ export default defineConfig({ reporter: 'list', workers: 1, timeout: 60000, - testMatch: /collect-i18n-.*\.ts/ + testMatch: /collect-i18n-.*\.ts/, + webServer: { + command: 'pnpm dev', + url: 'http://localhost:5173', + reuseExistingServer: true, + timeout: 120000 + } }) + +// Add Babel plugins for handling TypeScript and Vite defines + +;(config as any)['@playwright/test'] = { + babelPlugins: [ + // Module resolver for @ alias + [ + 'babel-plugin-module-resolver', + { + root: ['./'], + alias: { '@': './src' } + } + ], + + // TypeScript transformation with declare fields support + [ + '@babel/plugin-transform-typescript', + { + allowDeclareFields: true, + onlyRemoveTypeImports: true + } + ], + + // Custom plugin to replace Vite define constants + [path.join(__dirname, 'scripts/babel-plugin-vite-define.cjs')], + + // Inject browser globals setup for i18n collection tests + [ + path.join(__dirname, 'scripts/babel-plugin-inject-globals.cjs'), + { + filenamePattern: 'collect-i18n-', + setupFile: './setup-i18n-globals.mjs' + } + ] + ] +} + +export default config diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3db096f7be..c436317a9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,9 +15,15 @@ catalogs: '@eslint/js': specifier: ^9.35.0 version: 9.35.0 + '@iconify-json/lucide': + specifier: ^1.1.178 + version: 1.2.66 '@iconify/json': specifier: ^2.2.380 version: 2.2.380 + '@iconify/tailwind': + specifier: ^1.1.3 + version: 1.2.0 '@intlify/eslint-plugin-vue-i18n': specifier: ^4.1.0 version: 4.1.0 @@ -129,6 +135,9 @@ catalogs: axios: specifier: ^1.8.2 version: 1.11.0 + babel-plugin-module-resolver: + specifier: ^5.0.2 + version: 5.0.2 cross-env: specifier: ^10.1.0 version: 10.1.0 @@ -567,6 +576,9 @@ importers: '@webgpu/types': specifier: 'catalog:' version: 0.1.66 + babel-plugin-module-resolver: + specifier: 'catalog:' + version: 5.0.2 cross-env: specifier: 'catalog:' version: 10.1.0 @@ -4058,6 +4070,9 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} + babel-plugin-module-resolver@5.0.2: + resolution: {integrity: sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==} + babel-plugin-polyfill-corejs2@0.4.14: resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==} peerDependencies: @@ -5067,9 +5082,16 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-babel-config@2.1.2: + resolution: {integrity: sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg==} + find-package-json@1.2.0: resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==} + find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -5983,6 +6005,10 @@ packages: resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} engines: {node: '>=14'} + locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -6526,10 +6552,18 @@ packages: oxlint-tsgolint: optional: true + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -6538,6 +6572,10 @@ packages: resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + package-json-from-dist@1.0.0: resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} @@ -6586,6 +6624,10 @@ packages: path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -6667,6 +6709,10 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + playwright-core@1.52.0: resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} @@ -7003,6 +7049,9 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + reselect@4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -7018,11 +7067,6 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.11: resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} @@ -8387,7 +8431,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -9877,7 +9921,7 @@ snapshots: '@rushstack/ts-command-line': 5.0.3(@types/node@20.14.10) lodash: 4.17.21 minimatch: 10.0.3 - resolve: 1.22.10 + resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 typescript: 5.8.2 @@ -9889,7 +9933,7 @@ snapshots: '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.10 + resolve: 1.22.11 '@microsoft/tsdoc@0.15.1': {} @@ -10478,14 +10522,14 @@ snapshots: fs-extra: 11.3.2 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.10 + resolve: 1.22.11 semver: 7.5.4 optionalDependencies: '@types/node': 20.14.10 '@rushstack/rig-package@0.5.3': dependencies: - resolve: 1.22.10 + resolve: 1.22.11 strip-json-comments: 3.1.1 '@rushstack/terminal@0.16.0(@types/node@20.14.10)': @@ -11841,7 +11885,15 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 cosmiconfig: 7.1.0 - resolve: 1.22.10 + resolve: 1.22.11 + + babel-plugin-module-resolver@5.0.2: + dependencies: + find-babel-config: 2.1.2 + glob: 9.3.5 + pkg-up: 3.1.0 + reselect: 4.1.8 + resolve: 1.22.11 babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.27.1): dependencies: @@ -13000,8 +13052,16 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-babel-config@2.1.2: + dependencies: + json5: 2.2.3 + find-package-json@1.2.0: {} + find-up@3.0.0: + dependencies: + locate-path: 3.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -13982,6 +14042,11 @@ snapshots: pkg-types: 2.3.0 quansync: 0.2.11 + locate-path@3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -14795,16 +14860,26 @@ snapshots: '@oxlint/win32-x64': 1.28.0 oxlint-tsgolint: 0.4.0 + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 + p-locate@3.0.0: + dependencies: + p-limit: 2.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 p-map@7.0.3: {} + p-try@2.2.0: {} + package-json-from-dist@1.0.0: {} package-json@10.0.1: @@ -14855,6 +14930,8 @@ snapshots: path-browserify@1.0.1: {} + path-exists@3.0.0: {} + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -14915,6 +14992,10 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 + playwright-core@1.52.0: {} playwright@1.52.0: @@ -15155,7 +15236,7 @@ snapshots: jstransformer: 1.0.0 pug-error: 2.1.0 pug-walk: 2.0.0 - resolve: 1.22.10 + resolve: 1.22.11 pug-lexer@5.0.1: dependencies: @@ -15392,6 +15473,8 @@ snapshots: require-from-string@2.0.2: {} + reselect@4.1.8: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -15400,18 +15483,11 @@ snapshots: resolve.exports@2.0.3: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - optional: true restore-cursor@3.1.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 03b59cd17d..9e76877ab6 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -46,6 +46,7 @@ catalog: '@webgpu/types': ^0.1.66 algoliasearch: ^5.21.0 axios: ^1.8.2 + babel-plugin-module-resolver: ^5.0.2 cross-env: ^10.1.0 dotenv: ^16.4.5 eslint: ^9.34.0 diff --git a/scripts/babel-plugin-inject-globals.cjs b/scripts/babel-plugin-inject-globals.cjs new file mode 100644 index 0000000000..dc312e8974 --- /dev/null +++ b/scripts/babel-plugin-inject-globals.cjs @@ -0,0 +1,51 @@ +/** + * Babel plugin to inject global setup imports into specific test files + * + * This plugin automatically adds an import for browser globals setup + * at the beginning of files matching a specific pattern + */ + +const nodePath = require('path') + +module.exports = function (babel, options = {}) { + const { filenamePattern = 'collect-i18n-', setupFile = './setup-i18n-globals.mjs' } = options + + return { + name: 'babel-plugin-inject-globals', + + visitor: { + Program: { + enter(path, state) { + const filename = state.file.opts.filename + + // Only process files matching the pattern + if (!filename || !filename.includes(filenamePattern)) { + return + } + + // Check if setup import already exists + const hasSetupImport = path.node.body.some( + (node) => + node.type === 'ImportDeclaration' && + node.source.value.includes('setup-i18n-globals') + ) + + if (hasSetupImport) { + return + } + + // Create the import statement + const importDeclaration = babel.types.importDeclaration( + [], + babel.types.stringLiteral(setupFile) + ) + + // Add the import at the beginning of the file + path.node.body.unshift(importDeclaration) + + console.log(`[babel-plugin-inject-globals] Injected setup into ${nodePath.basename(filename)}`) + } + } + } + } +} diff --git a/scripts/babel-plugin-vite-define.cjs b/scripts/babel-plugin-vite-define.cjs new file mode 100644 index 0000000000..10a042d523 --- /dev/null +++ b/scripts/babel-plugin-vite-define.cjs @@ -0,0 +1,148 @@ +/** + * Babel plugin to replace Vite define constants during Playwright test compilation + * + * This plugin reads the Vite config and replaces compile-time constants like + * __DISTRIBUTION__, __COMFYUI_FRONTEND_VERSION__, etc. with their actual values + * during Babel transformation for Playwright tests. + */ + +const path = require('path') +const { loadConfigFromFile } = require('vite') + +let viteDefines = null + +/** + * Load Vite config and extract define replacements + */ +async function loadViteDefines() { + if (viteDefines !== null) { + return viteDefines + } + + try { + const configFile = path.resolve(__dirname, '../vite.config.mts') + const result = await loadConfigFromFile( + { command: 'build', mode: 'production' }, + configFile + ) + + if (result && result.config && result.config.define) { + viteDefines = result.config.define + console.log('[babel-plugin-vite-define] Loaded Vite defines:', Object.keys(viteDefines)) + } else { + viteDefines = {} + console.warn('[babel-plugin-vite-define] No defines found in Vite config') + } + } catch (error) { + viteDefines = {} + console.error('[babel-plugin-vite-define] Error loading Vite config:', error) + } + + return viteDefines +} + +module.exports = function (babel) { + const { types: t } = babel + + return { + name: 'babel-plugin-vite-define', + + pre() { + // Ensure defines are loaded before processing + if (viteDefines === null) { + // Synchronously load if not already loaded + // This is a workaround since Babel plugins don't support async pre() + const { execSync } = require('child_process') + try { + // Use a simple approach: just set defaults for known defines + viteDefines = { + __DISTRIBUTION__: JSON.stringify('localhost'), + __COMFYUI_FRONTEND_VERSION__: JSON.stringify('0.0.0-dev'), + __SENTRY_ENABLED__: JSON.stringify(false), + __SENTRY_DSN__: JSON.stringify(''), + __ALGOLIA_APP_ID__: JSON.stringify(''), + __ALGOLIA_API_KEY__: JSON.stringify(''), + __USE_PROD_CONFIG__: false + } + console.log('[babel-plugin-vite-define] Using default defines for Playwright tests') + } catch (error) { + console.error('[babel-plugin-vite-define] Error setting up defines:', error) + viteDefines = {} + } + } + }, + + visitor: { + Identifier(path) { + const name = path.node.name + + // Skip if not a define constant + if (!viteDefines || !(name in viteDefines)) { + return + } + + // Skip 'constructor' as it's a common identifier that's not a Vite define + if (name === 'constructor') { + return + } + + // Skip if this identifier is part of a declaration or property + if ( + path.isBindingIdentifier() || + path.parent.type === 'MemberExpression' && path.parent.property === path.node || + path.parent.type === 'ObjectProperty' && path.parent.key === path.node || + path.parent.type === 'ClassMethod' || + path.parent.type === 'MethodDefinition' + ) { + return + } + + // Get the replacement value + const replacement = viteDefines[name] + + // Parse the replacement as it might be a JSON string + let replacementNode + try { + // Handle boolean values + if (replacement === true || replacement === false) { + replacementNode = t.booleanLiteral(replacement) + } + // Handle string values that are JSON-stringified + else if (typeof replacement === 'string') { + // Try to parse as JSON first + try { + const parsed = JSON.parse(replacement) + if (typeof parsed === 'string') { + replacementNode = t.stringLiteral(parsed) + } else if (typeof parsed === 'number') { + replacementNode = t.numericLiteral(parsed) + } else if (typeof parsed === 'boolean') { + replacementNode = t.booleanLiteral(parsed) + } else if (parsed === null) { + replacementNode = t.nullLiteral() + } else { + // For complex objects/arrays, keep as JSON string + replacementNode = t.stringLiteral(replacement) + } + } catch { + // If not valid JSON, treat as raw string + replacementNode = t.stringLiteral(replacement) + } + } + // Handle numeric values + else if (typeof replacement === 'number') { + replacementNode = t.numericLiteral(replacement) + } + else { + console.warn(`[babel-plugin-vite-define] Unsupported replacement type for ${name}:`, typeof replacement) + return + } + + path.replaceWith(replacementNode) + } catch (error) { + console.error(`[babel-plugin-vite-define] Error replacing ${name}:`, error) + } + } + } + } +} diff --git a/scripts/setup-i18n-globals.mjs b/scripts/setup-i18n-globals.mjs new file mode 100644 index 0000000000..71ad32728f --- /dev/null +++ b/scripts/setup-i18n-globals.mjs @@ -0,0 +1,61 @@ +/** + * Setup browser globals for i18n collection in Node.js environment + * + * This file is imported at the top of i18n collection test files to provide + * browser globals that are referenced in the codebase but not available in Node.js + */ + +import { JSDOM } from 'jsdom' + +// Create a minimal JSDOM instance +const dom = new JSDOM('', { + url: 'http://localhost:5173', + pretendToBeVisual: true, + resources: 'usable' +}) + +// Set up global window and document +global.window = dom.window +global.document = dom.window.document + +// Use defineProperty for read-only globals +Object.defineProperty(global, 'navigator', { + value: dom.window.navigator, + writable: true, + configurable: true +}) + +// Set up other common browser globals +global.HTMLElement = dom.window.HTMLElement +global.Element = dom.window.Element +global.Node = dom.window.Node +global.NodeList = dom.window.NodeList +global.MutationObserver = dom.window.MutationObserver +global.ResizeObserver = dom.window.ResizeObserver || class ResizeObserver { + observe() {} + unobserve() {} + disconnect() {} +} +global.IntersectionObserver = dom.window.IntersectionObserver || class IntersectionObserver { + observe() {} + unobserve() {} + disconnect() {} +} + +// Set up basic localStorage and sessionStorage +global.localStorage = { + getItem: () => null, + setItem: () => {}, + removeItem: () => {}, + clear: () => {} +} +global.sessionStorage = { + getItem: () => null, + setItem: () => {}, + removeItem: () => {}, + clear: () => {} +} + +// Mock requestAnimationFrame +global.requestAnimationFrame = (callback) => setTimeout(callback, 0) +global.cancelAnimationFrame = (id) => clearTimeout(id) From 10d9dfaf918d7f0158b1410e00615efe77ef2fb4 Mon Sep 17 00:00:00 2001 From: snomiao Date: Mon, 1 Dec 2025 22:37:21 +0000 Subject: [PATCH 2/5] chore(i18n-update-core.yaml): add push trigger for sno-babel-define branch to facilitate debugging during development --- .github/workflows/i18n-update-core.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/i18n-update-core.yaml b/.github/workflows/i18n-update-core.yaml index a4e73f5382..88cb2435d7 100644 --- a/.github/workflows/i18n-update-core.yaml +++ b/.github/workflows/i18n-update-core.yaml @@ -9,6 +9,10 @@ on: branches: [main] types: [opened, synchronize, reopened] + push: + branches: + - sno-babel-define # REMOVE BEFORE MERGE - test branch for debugging + jobs: update-locales: # Branch detection: Only run for manual dispatch or version-bump-* branches from main repo From e2a10b0594fe1e973bba640c1e6e233be3ea4e91 Mon Sep 17 00:00:00 2001 From: snomiao Date: Mon, 1 Dec 2025 22:44:30 +0000 Subject: [PATCH 3/5] chore(i18n-update-core.yaml): update branch filter to include all branches matching sno-* for better flexibility chore(i18n-update-core.yaml): modify job condition to run on push events for improved automation --- .github/workflows/i18n-update-core.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/i18n-update-core.yaml b/.github/workflows/i18n-update-core.yaml index 88cb2435d7..85a9f58abf 100644 --- a/.github/workflows/i18n-update-core.yaml +++ b/.github/workflows/i18n-update-core.yaml @@ -11,12 +11,12 @@ on: push: branches: - - sno-babel-define # REMOVE BEFORE MERGE - test branch for debugging + - sno-* # REMOVE BEFORE MERGE - test branch for debugging jobs: update-locales: # Branch detection: Only run for manual dispatch or version-bump-* branches from main repo - if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'version-bump-')) + if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'version-bump-')) || (github.event_name == 'push') runs-on: ubuntu-latest steps: - name: Checkout repository From f93db2b923226ba47f64529aa82259a88594d980 Mon Sep 17 00:00:00 2001 From: snomiao Date: Tue, 2 Dec 2025 02:18:26 +0000 Subject: [PATCH 4/5] chore(i18n-update-core.yaml): remove push trigger for sno-* branches and update condition for job execution to include sno- branches --- .github/workflows/i18n-update-core.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/i18n-update-core.yaml b/.github/workflows/i18n-update-core.yaml index 85a9f58abf..477e0e4274 100644 --- a/.github/workflows/i18n-update-core.yaml +++ b/.github/workflows/i18n-update-core.yaml @@ -9,14 +9,13 @@ on: branches: [main] types: [opened, synchronize, reopened] - push: - branches: - - sno-* # REMOVE BEFORE MERGE - test branch for debugging - jobs: update-locales: # Branch detection: Only run for manual dispatch or version-bump-* branches from main repo - if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'version-bump-')) || (github.event_name == 'push') + if: | + github.event_name == 'workflow_dispatch' + || (github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'version-bump-')) + || (github.event.pull_request.head.repo.full_name == github.repository && startsWith(github.head_ref, 'sno-')) runs-on: ubuntu-latest steps: - name: Checkout repository From bc04a88037010f012280751ab52ba5ff701e7af3 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 2 Dec 2025 02:33:57 +0000 Subject: [PATCH 5/5] Update locales --- src/locales/ar/main.json | 4 - src/locales/ar/nodeDefs.json | 108 --- src/locales/en/main.json | 10 +- src/locales/en/nodeDefs.json | 1170 +++++++++++++++++++++++++++---- src/locales/es/main.json | 4 - src/locales/es/nodeDefs.json | 108 --- src/locales/fr/main.json | 4 - src/locales/fr/nodeDefs.json | 108 --- src/locales/ja/main.json | 4 - src/locales/ja/nodeDefs.json | 108 --- src/locales/ko/main.json | 4 - src/locales/ko/nodeDefs.json | 108 --- src/locales/ru/main.json | 4 - src/locales/ru/nodeDefs.json | 108 --- src/locales/tr/main.json | 4 - src/locales/tr/nodeDefs.json | 108 --- src/locales/zh-TW/main.json | 4 - src/locales/zh-TW/nodeDefs.json | 108 --- src/locales/zh/main.json | 4 - src/locales/zh/nodeDefs.json | 108 --- 20 files changed, 1036 insertions(+), 1152 deletions(-) diff --git a/src/locales/ar/main.json b/src/locales/ar/main.json index c9a757323e..ec848e3b52 100644 --- a/src/locales/ar/main.json +++ b/src/locales/ar/main.json @@ -27,7 +27,6 @@ "loadingModels": "جارٍ تحميل {type}...", "noAssetsFound": "لم يتم العثور على أصول", "noModelsInFolder": "لا توجد {type} متاحة في هذا المجلد", - "searchAssetsPlaceholder": "البحث في الأصول...", "sortAZ": "أ-ي", "sortBy": "ترتيب حسب", "sortPopular": "الأكثر شعبية", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "عملية كامنة", "LOAD3D_CAMERA": "كاميرا ثلاثية الأبعاد", "LOAD_3D": "تحميل ثلاثي الأبعاد", - "LOAD_3D_ANIMATION": "تحميل رسوم متحركة ثلاثية الأبعاد", "LORA_MODEL": "نموذج لورا", "LOSS_MAP": "خريطة الخسارة", "LUMA_CONCEPTS": "مفاهيم Luma", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "الخروج من الرسم الفرعي", "Experimental: Browse Model Assets": "تجريبي: استعراض أصول النماذج", "Experimental: Enable AssetAPI": "تجريبي: تمكين AssetAPI", - "Experimental: Enable Vue Nodes": "تجريبي: تمكين عقد Vue", "Export": "تصدير", "Export (API)": "تصدير (API)", "File": "ملف", @@ -1898,7 +1895,6 @@ "updateFrontend": "تحديث الواجهة الأمامية" }, "vueNodesBanner": { - "message": "العُقد حصلت على مظهر جديد", "tryItOut": "جربه" }, "vueNodesMigration": { diff --git a/src/locales/ar/nodeDefs.json b/src/locales/ar/nodeDefs.json index a56db8f2c6..48a557091c 100644 --- a/src/locales/ar/nodeDefs.json +++ b/src/locales/ar/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "معلومات الكاميرا" - }, - "6": { - "name": "تسجيل_فيديو" - } - } - }, - "Load3DAnimation": { - "display_name": "تحميل ثلاثي الأبعاد - حركة", - "inputs": { - "height": { - "name": "الارتفاع" - }, - "image": { - "name": "صورة" - }, - "model_file": { - "name": "ملف النموذج" - }, - "width": { - "name": "العرض" - } - }, - "outputs": { - "0": { - "name": "صورة" - }, - "1": { - "name": "قناع" - }, - "2": { - "name": "مسار الشبكة" - }, - "3": { - "name": "المعتاد" - }, - "4": { - "name": "معلومات الكاميرا" - }, - "5": { - "name": "تسجيل_فيديو" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "يقوم بتحميل مجموعة من الصور من مجلد للتدريب.", - "display_name": "تحميل مجموعة بيانات الصور من المجلد", - "inputs": { - "folder": { - "name": "مجلد", - "tooltip": "المجلد الذي سيتم تحميل الصور منه." - }, - "resize_method": { - "name": "طريقة_تغيير_الحجم" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "يقوم بتحميل مجموعة من الصور والتسميات التوضيحية من مجلد للتدريب.", - "display_name": "تحميل مجموعة بيانات الصور والنص من المجلد", - "inputs": { - "clip": { - "name": "clip", - "tooltip": "نموذج CLIP المستخدم لتشفير النص." - }, - "folder": { - "name": "مجلد", - "tooltip": "المجلد الذي سيتم تحميل الصور منه." - }, - "height": { - "name": "الارتفاع", - "tooltip": "الارتفاع الذي سيتم تغيير حجم الصور إليه. -1 يعني استخدام الارتفاع الأصلي." - }, - "resize_method": { - "name": "طريقة_تغيير_الحجم" - }, - "width": { - "name": "العرض", - "tooltip": "العرض الذي سيتم تغيير حجم الصور إليه. -1 يعني استخدام العرض الأصلي." - } - } - }, "LoadLatent": { "display_name": "تحميل كامن", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "تحميل أوزان LoRA المدربة من عقدة Train LoRA.", "display_name": "تحميل نموذج LoRA", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "يرسم مخطط الخسارة ويحفظه في دليل الإخراج.", "display_name": "رسم بياني للخسارة", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "معاينة ثلاثية الأبعاد - حركة", - "inputs": { - "camera_info": { - "name": "معلومات الكاميرا" - }, - "model_file": { - "name": "ملف النموذج" - } - } - }, "PreviewAny": { "display_name": "معاينة أي", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "حفظ أوزان LoRA", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "نموذج LoRA المراد حفظه. لا تستخدم النموذج مع طبقات LoRA." - }, - "prefix": { - "name": "بادئة", - "tooltip": "البادئة المستخدمة لملف LoRA المحفوظ." - }, - "steps": { - "name": "خطوات", - "tooltip": "اختياري: عدد الخطوات التي تم تدريب LoRA عليها، تُستخدم لتسمية الملف المحفوظ." - } - } - }, "SaveSVGNode": { "description": "حفظ ملفات SVG على القرص.", "display_name": "عقدة حفظ SVG", diff --git a/src/locales/en/main.json b/src/locales/en/main.json index d152fb7912..5e7cf2ca9a 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -1107,9 +1107,7 @@ "Undo": "Undo", "Open Sign In Dialog": "Open Sign In Dialog", "Sign Out": "Sign Out", - "Experimental: Enable Vue Nodes": "Experimental: Enable Nodes 2.0", - "Experimental: Enable Nodes 2.0": "Experimental: Enable Nodes 2.0", - "Experimental: Disable Nodes 2.0": "Experimental: Disable Nodes 2.0", + "Experimental: Enable Nodes 2_0": "Experimental: Enable Nodes 2.0", "Close Current Workflow": "Close Current Workflow", "Next Opened Workflow": "Next Opened Workflow", "Previous Opened Workflow": "Previous Opened Workflow", @@ -1324,6 +1322,9 @@ "_for_testing": "_for_testing", "custom_sampling": "custom_sampling", "noise": "noise", + "dataset": "dataset", + "text": "text", + "image": "image", "sampling": "sampling", "schedulers": "schedulers", "audio": "audio", @@ -1333,7 +1334,6 @@ "api node": "api node", "video": "video", "ByteDance": "ByteDance", - "image": "image", "preprocessors": "preprocessors", "utils": "utils", "string": "string", @@ -1364,7 +1364,6 @@ "sigmas": "sigmas", "BFL": "BFL", "Gemini": "Gemini", - "text": "text", "gligen": "gligen", "video_models": "video_models", "sd": "sd", @@ -1441,7 +1440,6 @@ "LATENT_OPERATION": "LATENT_OPERATION", "LATENT_UPSCALE_MODEL": "LATENT_UPSCALE_MODEL", "LOAD_3D": "LOAD_3D", - "LOAD_3D_ANIMATION": "LOAD_3D_ANIMATION", "LOAD3D_CAMERA": "LOAD3D_CAMERA", "LORA_MODEL": "LORA_MODEL", "LOSS_MAP": "LOSS_MAP", diff --git a/src/locales/en/nodeDefs.json b/src/locales/en/nodeDefs.json index 0e4d2101aa..459251b155 100644 --- a/src/locales/en/nodeDefs.json +++ b/src/locales/en/nodeDefs.json @@ -14,6 +14,87 @@ "latent_image": { "name": "latent_image" } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "AddTextPrefix": { + "display_name": "Add Text Prefix", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + }, + "prefix": { + "name": "prefix", + "tooltip": "Prefix to add." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, + "AddTextSuffix": { + "display_name": "Add Text Suffix", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + }, + "suffix": { + "name": "suffix", + "tooltip": "Suffix to add." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, + "AdjustBrightness": { + "display_name": "Adjust Brightness", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "factor": { + "name": "factor", + "tooltip": "Brightness factor. 1.0 = no change, <1.0 = darker, >1.0 = brighter." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, + "AdjustContrast": { + "display_name": "Adjust Contrast", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "factor": { + "name": "factor", + "tooltip": "Contrast factor. 1.0 = no change, <1.0 = less contrast, >1.0 = more contrast." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } } }, "AlignYourStepsScheduler": { @@ -142,6 +223,11 @@ "conditioning": { "name": "conditioning" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "BasicScheduler": { @@ -159,6 +245,11 @@ "denoise": { "name": "denoise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "BetaSamplingScheduler": { @@ -176,6 +267,11 @@ "beta": { "name": "beta" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "ByteDanceFirstLastFrameNode": { @@ -551,6 +647,29 @@ } } }, + "CenterCropImages": { + "display_name": "Center Crop Images", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "width": { + "name": "width", + "tooltip": "Crop width." + }, + "height": { + "name": "height", + "tooltip": "Crop height." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, "CFGGuider": { "display_name": "CFGGuider", "inputs": { @@ -566,6 +685,11 @@ "cfg": { "name": "cfg" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "CFGNorm": { @@ -1829,7 +1953,12 @@ } }, "DisableNoise": { - "display_name": "DisableNoise" + "display_name": "DisableNoise", + "outputs": { + "0": { + "tooltip": null + } + } }, "DualCFGGuider": { "display_name": "DualCFGGuider", @@ -1855,6 +1984,11 @@ "style": { "name": "style" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "DualCLIPLoader": { @@ -1981,6 +2115,25 @@ } } }, + "EmptyFlux2LatentImage": { + "display_name": "Empty Flux 2 Latent", + "inputs": { + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "batch_size": { + "name": "batch_size" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "EmptyHunyuanImageLatent": { "display_name": "EmptyHunyuanImageLatent", "inputs": { @@ -2204,6 +2357,11 @@ "sigma_min": { "name": "sigma_min" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "ExtendIntermediateSigmas": { @@ -2224,6 +2382,11 @@ "spacing": { "name": "spacing" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "FeatherMask": { @@ -2252,6 +2415,66 @@ "sigmas": { "name": "sigmas" } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "Flux2ProImageNode": { + "display_name": "Flux.2 [pro] Image", + "description": "Generates images synchronously based on prompt and resolution.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Prompt for the image generation or edit" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "seed": { + "name": "seed", + "tooltip": "The random seed used for creating the noise." + }, + "prompt_upsampling": { + "name": "prompt_upsampling", + "tooltip": "Whether to perform upsampling on the prompt. If active, automatically modifies the prompt for more creative generation, but results are nondeterministic (same seed will not produce exactly the same result)." + }, + "images": { + "name": "images", + "tooltip": "Up to 4 images to be used as references." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "Flux2Scheduler": { + "display_name": "Flux2Scheduler", + "inputs": { + "steps": { + "name": "steps" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "FluxDisableGuidance": { @@ -2613,7 +2836,7 @@ }, "aspect_ratio": { "name": "aspect_ratio", - "tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, generates a 1:1 square." + "tooltip": "If set to 'auto', matches your input image's aspect ratio; if no image is provided, a 16:9 square is usually generated." }, "resolution": { "name": "resolution", @@ -3405,6 +3628,25 @@ } } }, + "ImageDeduplication": { + "display_name": "Image Deduplication", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to process." + }, + "similarity_threshold": { + "name": "similarity_threshold", + "tooltip": "Similarity threshold (0-1). Higher means more similar. Images above this threshold are considered duplicates." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, "ImageFlip": { "display_name": "ImageFlip", "inputs": { @@ -3430,6 +3672,37 @@ } } }, + "ImageGrid": { + "display_name": "Image Grid", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to process." + }, + "columns": { + "name": "columns", + "tooltip": "Number of columns in the grid." + }, + "cell_width": { + "name": "cell_width", + "tooltip": "Width of each cell in the grid." + }, + "cell_height": { + "name": "cell_height", + "tooltip": "Height of each cell in the grid." + }, + "padding": { + "name": "padding", + "tooltip": "Padding between images." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, "ImageInvert": { "display_name": "Invert Image", "inputs": { @@ -3802,6 +4075,11 @@ "rho": { "name": "rho" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "KlingCameraControlI2VNode": { @@ -4106,60 +4384,208 @@ } } }, - "KlingSingleImageVideoEffectNode": { - "display_name": "Kling Video Effects", - "description": "Achieve different special effects when generating a video based on the effect_scene.", + "KlingOmniProEditVideoNode": { + "display_name": "Kling Omni Edit Video (Pro)", + "description": "Edit an existing video with the latest model from Kling.", "inputs": { - "image": { - "name": "image", - "tooltip": " Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1" - }, - "effect_scene": { - "name": "effect_scene" - }, "model_name": { "name": "model_name" }, - "duration": { - "name": "duration" + "prompt": { + "name": "prompt", + "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions." + }, + "video": { + "name": "video", + "tooltip": "Video for editing. The output video length will be the same." + }, + "keep_original_sound": { + "name": "keep_original_sound" + }, + "reference_images": { + "name": "reference_images", + "tooltip": "Up to 4 additional reference images." } }, "outputs": { "0": { "tooltip": null - }, - "1": { - "name": "video_id", - "tooltip": null - }, - "2": { - "name": "duration", - "tooltip": null } } }, - "KlingStartEndFrameNode": { - "display_name": "Kling Start-End Frame to Video", - "description": "Generate a video sequence that transitions between your provided start and end images. The node creates all frames in between, producing a smooth transformation from the first frame to the last.", + "KlingOmniProFirstLastFrameNode": { + "display_name": "Kling Omni First-Last-Frame to Video (Pro)", + "description": "Use a start frame, an optional end frame, or reference images with the latest Kling model.", "inputs": { - "start_frame": { - "name": "start_frame", - "tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix." - }, - "end_frame": { - "name": "end_frame", - "tooltip": "Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix." + "model_name": { + "name": "model_name" }, "prompt": { "name": "prompt", - "tooltip": "Positive text prompt" + "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions." }, - "negative_prompt": { - "name": "negative_prompt", - "tooltip": "Negative text prompt" + "duration": { + "name": "duration" }, - "cfg_scale": { - "name": "cfg_scale" + "first_frame": { + "name": "first_frame" + }, + "end_frame": { + "name": "end_frame", + "tooltip": "An optional end frame for the video. This cannot be used simultaneously with 'reference_images'." + }, + "reference_images": { + "name": "reference_images", + "tooltip": "Up to 6 additional reference images." + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "KlingOmniProImageToVideoNode": { + "display_name": "Kling Omni Image to Video (Pro)", + "description": "Use up to 7 reference images to generate a video with the latest Kling model.", + "inputs": { + "model_name": { + "name": "model_name" + }, + "prompt": { + "name": "prompt", + "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions." + }, + "aspect_ratio": { + "name": "aspect_ratio" + }, + "duration": { + "name": "duration" + }, + "reference_images": { + "name": "reference_images", + "tooltip": "Up to 7 reference images." + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "KlingOmniProTextToVideoNode": { + "display_name": "Kling Omni Text to Video (Pro)", + "description": "Use text prompts to generate videos with the latest Kling model.", + "inputs": { + "model_name": { + "name": "model_name" + }, + "prompt": { + "name": "prompt", + "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions." + }, + "aspect_ratio": { + "name": "aspect_ratio" + }, + "duration": { + "name": "duration" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "KlingOmniProVideoToVideoNode": { + "display_name": "Kling Omni Video to Video (Pro)", + "description": "Use a video and up to 4 reference images to generate a video with the latest Kling model.", + "inputs": { + "model_name": { + "name": "model_name" + }, + "prompt": { + "name": "prompt", + "tooltip": "A text prompt describing the video content. This can include both positive and negative descriptions." + }, + "aspect_ratio": { + "name": "aspect_ratio" + }, + "duration": { + "name": "duration" + }, + "reference_video": { + "name": "reference_video", + "tooltip": "Video to use as a reference." + }, + "keep_original_sound": { + "name": "keep_original_sound" + }, + "reference_images": { + "name": "reference_images", + "tooltip": "Up to 4 additional reference images." + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "KlingSingleImageVideoEffectNode": { + "display_name": "Kling Video Effects", + "description": "Achieve different special effects when generating a video based on the effect_scene.", + "inputs": { + "image": { + "name": "image", + "tooltip": " Reference Image. URL or Base64 encoded string (without data:image prefix). File size cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1" + }, + "effect_scene": { + "name": "effect_scene" + }, + "model_name": { + "name": "model_name" + }, + "duration": { + "name": "duration" + } + }, + "outputs": { + "0": { + "tooltip": null + }, + "1": { + "name": "video_id", + "tooltip": null + }, + "2": { + "name": "duration", + "tooltip": null + } + } + }, + "KlingStartEndFrameNode": { + "display_name": "Kling Start-End Frame to Video", + "description": "Generate a video sequence that transitions between your provided start and end images. The node creates all frames in between, producing a smooth transformation from the first frame to the last.", + "inputs": { + "start_frame": { + "name": "start_frame", + "tooltip": "Reference Image - URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px, aspect ratio between 1:2.5 ~ 2.5:1. Base64 should not include data:image prefix." + }, + "end_frame": { + "name": "end_frame", + "tooltip": "Reference Image - End frame control. URL or Base64 encoded string, cannot exceed 10MB, resolution not less than 300*300px. Base64 should not include data:image prefix." + }, + "prompt": { + "name": "prompt", + "tooltip": "Positive text prompt" + }, + "negative_prompt": { + "name": "negative_prompt", + "tooltip": "Negative text prompt" + }, + "cfg_scale": { + "name": "cfg_scale" }, "aspect_ratio": { "name": "aspect_ratio" @@ -4381,6 +4807,11 @@ "sampler_name": { "name": "sampler_name" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "LaplaceScheduler": { @@ -4401,6 +4832,11 @@ "beta": { "name": "beta" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "LatentAdd": { @@ -4799,7 +5235,7 @@ } }, "Load3D": { - "display_name": "Load 3D", + "display_name": "Load 3D & Animation", "inputs": { "model_file": { "name": "model_file" @@ -4817,46 +5253,6 @@ "upload 3d model": {}, "upload extra resources": {} }, - "outputs": { - "0": { - "name": "image" - }, - "1": { - "name": "mask" - }, - "2": { - "name": "mesh_path" - }, - "3": { - "name": "normal" - }, - "4": { - "name": "lineart" - }, - "5": { - "name": "camera_info" - }, - "6": { - "name": "recording_video" - } - } - }, - "Load3DAnimation": { - "display_name": "Load 3D - Animation", - "inputs": { - "model_file": { - "name": "model_file" - }, - "image": { - "name": "image" - }, - "width": { - "name": "width" - }, - "height": { - "name": "height" - } - }, "outputs": { "0": { "name": "image" @@ -4903,6 +5299,21 @@ } } }, + "LoadImageDataSetFromFolder": { + "display_name": "Load Image Dataset from Folder", + "inputs": { + "folder": { + "name": "folder", + "tooltip": "The folder to load images from." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "List of loaded images" + } + } + }, "LoadImageMask": { "display_name": "Load Image (as Mask)", "inputs": { @@ -4931,41 +5342,22 @@ } } }, - "LoadImageSetFromFolderNode": { - "display_name": "Load Image Dataset from Folder", - "description": "Loads a batch of images from a directory for training.", - "inputs": { - "folder": { - "name": "folder", - "tooltip": "The folder to load images from." - }, - "resize_method": { - "name": "resize_method" - } - } - }, - "LoadImageTextSetFromFolderNode": { + "LoadImageTextDataSetFromFolder": { "display_name": "Load Image and Text Dataset from Folder", - "description": "Loads a batch of images and caption from a directory for training.", "inputs": { "folder": { "name": "folder", "tooltip": "The folder to load images from." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "List of loaded images" }, - "clip": { - "name": "clip", - "tooltip": "The CLIP model used for encoding the text." - }, - "resize_method": { - "name": "resize_method" - }, - "width": { - "name": "width", - "tooltip": "The width to resize the images to. -1 means use the original width." - }, - "height": { - "name": "height", - "tooltip": "The height to resize the images to. -1 means use the original height." + "1": { + "name": "texts", + "tooltip": "List of text captions" } } }, @@ -4977,6 +5369,25 @@ } } }, + "LoadTrainingDataset": { + "display_name": "Load Training Dataset", + "inputs": { + "folder_name": { + "name": "folder_name", + "tooltip": "Name of folder containing the saved dataset (inside output directory)." + } + }, + "outputs": { + "0": { + "name": "latents", + "tooltip": "List of latent dicts" + }, + "1": { + "name": "conditioning", + "tooltip": "List of conditioning lists" + } + } + }, "LoadVideo": { "display_name": "Load Video", "inputs": { @@ -5049,7 +5460,6 @@ }, "LoraModelLoader": { "display_name": "Load LoRA Model", - "description": "Load Trained LoRA weights from Train LoRA node.", "inputs": { "model": { "name": "model", @@ -5066,6 +5476,7 @@ }, "outputs": { "0": { + "name": "model", "tooltip": "The modified diffusion model." } } @@ -5097,13 +5508,14 @@ }, "LossGraphNode": { "display_name": "Plot Loss Graph", - "description": "Plots the loss graph and saves it to the output directory.", "inputs": { "loss": { - "name": "loss" + "name": "loss", + "tooltip": "Loss map from training node." }, "filename_prefix": { - "name": "filename_prefix" + "name": "filename_prefix", + "tooltip": "Prefix for the saved loss graph image." } } }, @@ -5597,6 +6009,37 @@ } } }, + "MakeTrainingDataset": { + "display_name": "Make Training Dataset", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to encode." + }, + "vae": { + "name": "vae", + "tooltip": "VAE model for encoding images to latents." + }, + "clip": { + "name": "clip", + "tooltip": "CLIP model for encoding text to conditioning." + }, + "texts": { + "name": "texts", + "tooltip": "List of text captions. Can be length n (matching images), 1 (repeated for all), or omitted (uses empty string)." + } + }, + "outputs": { + "0": { + "name": "latents", + "tooltip": "List of latent dicts" + }, + "1": { + "name": "conditioning", + "tooltip": "List of conditioning lists" + } + } + }, "MaskComposite": { "display_name": "MaskComposite", "inputs": { @@ -5634,6 +6077,36 @@ } } }, + "MergeImageLists": { + "display_name": "Merge Image Lists", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to process." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, + "MergeTextLists": { + "display_name": "Merge Text Lists", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "List of texts to process." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, "MinimaxHailuoVideoNode": { "display_name": "MiniMax Hailuo Video", "description": "Generates videos from prompt, with optional start frame using the new MiniMax Hailuo-02 model.", @@ -8075,6 +8548,29 @@ } } }, + "NormalizeImages": { + "display_name": "Normalize Images", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "mean": { + "name": "mean", + "tooltip": "Mean value for normalization." + }, + "std": { + "name": "std", + "tooltip": "Standard deviation for normalization." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, "OpenAIChatConfig": { "display_name": "OpenAI ChatGPT Advanced Options", "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.", @@ -8995,6 +9491,11 @@ "rho": { "name": "rho" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "PorterDuffImageComposite": { @@ -9026,7 +9527,7 @@ } }, "Preview3D": { - "display_name": "Preview 3D", + "display_name": "Preview 3D & Animation", "inputs": { "model_file": { "name": "model_file" @@ -9034,22 +9535,14 @@ "camera_info": { "name": "camera_info" }, + "bg_image": { + "name": "bg_image" + }, "image": { "name": "image" } } }, - "Preview3DAnimation": { - "display_name": "Preview 3D - Animation", - "inputs": { - "model_file": { - "name": "model_file" - }, - "camera_info": { - "name": "camera_info" - } - } - }, "PreviewAny": { "display_name": "Preview as Text", "inputs": { @@ -9193,6 +9686,36 @@ } } }, + "RandomCropImages": { + "display_name": "Random Crop Images", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "width": { + "name": "width", + "tooltip": "Crop width." + }, + "height": { + "name": "height", + "tooltip": "Crop height." + }, + "seed": { + "name": "seed", + "tooltip": "Random seed." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, "RandomNoise": { "display_name": "RandomNoise", "inputs": { @@ -9202,6 +9725,11 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "RebatchImages": { @@ -9759,6 +10287,29 @@ } } }, + "ReplaceText": { + "display_name": "Replace Text", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + }, + "find": { + "name": "find", + "tooltip": "Text to find." + }, + "replace": { + "name": "replace", + "tooltip": "Text to replace with." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, "RescaleCFG": { "display_name": "RescaleCFG", "inputs": { @@ -9790,6 +10341,44 @@ } } }, + "ResizeImagesByLongerEdge": { + "display_name": "Resize Images by Longer Edge", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "longer_edge": { + "name": "longer_edge", + "tooltip": "Target length for the longer edge." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, + "ResizeImagesByShorterEdge": { + "display_name": "Resize Images by Shorter Edge", + "inputs": { + "images": { + "name": "images", + "tooltip": "Image to process." + }, + "shorter_edge": { + "name": "shorter_edge", + "tooltip": "Target length for the shorter edge." + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, "Rodin3D_Detail": { "display_name": "Rodin 3D Generate - Detail Generate", "description": "Generate 3D Assets using Rodin API", @@ -10065,10 +10654,12 @@ }, "outputs": { "0": { - "name": "output" + "name": "output", + "tooltip": null }, "1": { - "name": "denoised_output" + "name": "denoised_output", + "tooltip": null } } }, @@ -10093,10 +10684,12 @@ }, "outputs": { "0": { - "name": "output" + "name": "output", + "tooltip": null }, "1": { - "name": "denoised_output" + "name": "denoised_output", + "tooltip": null } } }, @@ -10133,6 +10726,11 @@ "s_noise": { "name": "s_noise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerDPMPP_2M_SDE": { @@ -10150,6 +10748,11 @@ "noise_device": { "name": "noise_device" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerDPMPP_2S_Ancestral": { @@ -10161,6 +10764,11 @@ "s_noise": { "name": "s_noise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerDPMPP_3M_SDE": { @@ -10175,6 +10783,11 @@ "noise_device": { "name": "noise_device" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerDPMPP_SDE": { @@ -10192,6 +10805,11 @@ "noise_device": { "name": "noise_device" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerER_SDE": { @@ -10210,6 +10828,11 @@ "s_noise": { "name": "s_noise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerEulerAncestral": { @@ -10221,6 +10844,11 @@ "s_noise": { "name": "s_noise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerEulerAncestralCFGPP": { @@ -10232,6 +10860,11 @@ "s_noise": { "name": "s_noise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerEulerCFGpp": { @@ -10272,6 +10905,11 @@ "order": { "name": "order" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerSASolver": { @@ -10304,6 +10942,11 @@ "simple_order_2": { "name": "simple_order_2" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplingPercentToSigma": { @@ -10322,7 +10965,8 @@ }, "outputs": { "0": { - "name": "sigma_value" + "name": "sigma_value", + "tooltip": null } } }, @@ -10442,6 +11086,44 @@ } } }, + "SaveImageDataSetToFolder": { + "display_name": "Save Image Dataset to Folder", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to save." + }, + "folder_name": { + "name": "folder_name", + "tooltip": "Name of the folder to save images to (inside output directory)." + }, + "filename_prefix": { + "name": "filename_prefix", + "tooltip": "Prefix for saved image filenames." + } + } + }, + "SaveImageTextDataSetToFolder": { + "display_name": "Save Image and Text Dataset to Folder", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to save." + }, + "texts": { + "name": "texts", + "tooltip": "List of text captions to save." + }, + "folder_name": { + "name": "folder_name", + "tooltip": "Name of the folder to save images to (inside output directory)." + }, + "filename_prefix": { + "name": "filename_prefix", + "tooltip": "Prefix for saved image filenames." + } + } + }, "SaveImageWebsocket": { "display_name": "SaveImageWebsocket", "inputs": { @@ -10461,7 +11143,7 @@ } } }, - "SaveLoRANode": { + "SaveLoRA": { "display_name": "Save LoRA Weights", "inputs": { "lora": { @@ -10491,6 +11173,27 @@ } } }, + "SaveTrainingDataset": { + "display_name": "Save Training Dataset", + "inputs": { + "latents": { + "name": "latents", + "tooltip": "List of latent dicts from MakeTrainingDataset." + }, + "conditioning": { + "name": "conditioning", + "tooltip": "List of conditioning lists from MakeTrainingDataset." + }, + "folder_name": { + "name": "folder_name", + "tooltip": "Name of folder to save dataset (inside output directory)." + }, + "shard_size": { + "name": "shard_size", + "tooltip": "Number of samples per shard file." + } + } + }, "SaveVideo": { "display_name": "Save Video", "description": "Saves the input images to your ComfyUI output directory.", @@ -10612,6 +11315,11 @@ "denoise": { "name": "denoise" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SelfAttentionGuidance": { @@ -10659,6 +11367,11 @@ "sigma": { "name": "sigma" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SetHookKeyframes": { @@ -10699,6 +11412,58 @@ } } }, + "ShuffleDataset": { + "display_name": "Shuffle Image Dataset", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to process." + }, + "seed": { + "name": "seed", + "tooltip": "Random seed." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Processed images" + } + } + }, + "ShuffleImageTextDataset": { + "display_name": "Shuffle Image-Text Dataset", + "inputs": { + "images": { + "name": "images", + "tooltip": "List of images to shuffle." + }, + "texts": { + "name": "texts", + "tooltip": "List of texts to shuffle." + }, + "seed": { + "name": "seed", + "tooltip": "Random seed." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "name": "images", + "tooltip": "Shuffled images" + }, + "1": { + "name": "texts", + "tooltip": "Shuffled texts" + } + } + }, "SkipLayerGuidanceDiT": { "display_name": "SkipLayerGuidanceDiT", "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", @@ -10842,10 +11607,12 @@ }, "outputs": { "0": { - "name": "high_sigmas" + "name": "high_sigmas", + "tooltip": null }, "1": { - "name": "low_sigmas" + "name": "low_sigmas", + "tooltip": null } } }, @@ -10861,10 +11628,12 @@ }, "outputs": { "0": { - "name": "high_sigmas" + "name": "high_sigmas", + "tooltip": null }, "1": { - "name": "low_sigmas" + "name": "low_sigmas", + "tooltip": null } } }, @@ -11468,6 +12237,21 @@ } } }, + "StripWhitespace": { + "display_name": "Strip Whitespace", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, "StyleModelApply": { "display_name": "Apply Style Model", "inputs": { @@ -11731,6 +12515,36 @@ } } }, + "TextToLowercase": { + "display_name": "Text to Lowercase", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, + "TextToUppercase": { + "display_name": "Text to Uppercase", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, "ThresholdMask": { "display_name": "ThresholdMask", "inputs": { @@ -11959,16 +12773,20 @@ }, "outputs": { "0": { - "name": "model_with_lora" + "name": "model", + "tooltip": "Model with LoRA applied" }, "1": { - "name": "lora" + "name": "lora", + "tooltip": "LoRA weights" }, "2": { - "name": "loss" + "name": "loss_map", + "tooltip": "Loss history" }, "3": { - "name": "steps" + "name": "steps", + "tooltip": "Total training steps" } } }, @@ -12301,6 +13119,25 @@ } } }, + "TruncateText": { + "display_name": "Truncate Text", + "inputs": { + "texts": { + "name": "texts", + "tooltip": "Text to process." + }, + "max_length": { + "name": "max_length", + "tooltip": "Maximum text length." + } + }, + "outputs": { + "0": { + "name": "texts", + "tooltip": "Processed texts" + } + } + }, "unCLIPCheckpointLoader": { "display_name": "unCLIPCheckpointLoader", "inputs": { @@ -12599,6 +13436,58 @@ } } }, + "Veo3FirstLastFrameNode": { + "display_name": "Google Veo 3 First-Last-Frame to Video", + "description": "Generate video using prompt and first and last frames.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text description of the video" + }, + "negative_prompt": { + "name": "negative_prompt", + "tooltip": "Negative text prompt to guide what to avoid in the video" + }, + "resolution": { + "name": "resolution" + }, + "aspect_ratio": { + "name": "aspect_ratio", + "tooltip": "Aspect ratio of the output video" + }, + "duration": { + "name": "duration", + "tooltip": "Duration of the output video in seconds" + }, + "seed": { + "name": "seed", + "tooltip": "Seed for video generation" + }, + "first_frame": { + "name": "first_frame", + "tooltip": "Start frame" + }, + "last_frame": { + "name": "last_frame", + "tooltip": "End frame" + }, + "model": { + "name": "model" + }, + "generate_audio": { + "name": "generate_audio", + "tooltip": "Generate audio for the video." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "Veo3VideoGenerationNode": { "display_name": "Google Veo 3 Video Generation", "description": "Generates videos from text prompts using Google's Veo 3 API", @@ -12951,6 +13840,11 @@ "eps_s": { "name": "eps_s" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "Wan22FunControlToVideo": { diff --git a/src/locales/es/main.json b/src/locales/es/main.json index 4a831e93a1..a5eddd17c8 100644 --- a/src/locales/es/main.json +++ b/src/locales/es/main.json @@ -27,7 +27,6 @@ "loadingModels": "Cargando {type}...", "noAssetsFound": "No se encontraron recursos", "noModelsInFolder": "No hay {type} disponibles en esta carpeta", - "searchAssetsPlaceholder": "Buscar recursos...", "sortAZ": "A-Z", "sortBy": "Ordenar por", "sortPopular": "Popular", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "OPERACIÓN_LATENTE", "LOAD3D_CAMERA": "CARGAR CÁMARA 3D", "LOAD_3D": "CARGAR_3D", - "LOAD_3D_ANIMATION": "CARGAR_ANIMACIÓN_3D", "LORA_MODEL": "MODELO_LORA", "LOSS_MAP": "MAPA_PÉRDIDAS", "LUMA_CONCEPTS": "CONCEPTOS LUMA", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "Salir de Subgrafo", "Experimental: Browse Model Assets": "Experimental: Explorar recursos de modelos", "Experimental: Enable AssetAPI": "Experimental: Habilitar AssetAPI", - "Experimental: Enable Vue Nodes": "Experimental: Habilitar nodos Vue", "Export": "Exportar", "Export (API)": "Exportar (API)", "File": "Archivo", @@ -1898,7 +1895,6 @@ "updateFrontend": "Actualizar frontend" }, "vueNodesBanner": { - "message": "Los nodos tienen un nuevo aspecto y sensación", "tryItOut": "Pruébalo" }, "vueNodesMigration": { diff --git a/src/locales/es/nodeDefs.json b/src/locales/es/nodeDefs.json index 393a3cd98b..3d6f3d7366 100644 --- a/src/locales/es/nodeDefs.json +++ b/src/locales/es/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "info_cámara" - }, - "6": { - "name": "grabando_video" - } - } - }, - "Load3DAnimation": { - "display_name": "Cargar 3D - Animación", - "inputs": { - "height": { - "name": "alto" - }, - "image": { - "name": "imagen" - }, - "model_file": { - "name": "archivo_modelo" - }, - "width": { - "name": "ancho" - } - }, - "outputs": { - "0": { - "name": "imagen" - }, - "1": { - "name": "mask" - }, - "2": { - "name": "ruta_malla" - }, - "3": { - "name": "normal" - }, - "4": { - "name": "info_cámara" - }, - "5": { - "name": "grabando_video" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "Carga un lote de imágenes desde un directorio para entrenamiento.", - "display_name": "Cargar Conjunto de Imágenes desde Carpeta", - "inputs": { - "folder": { - "name": "carpeta", - "tooltip": "La carpeta desde la que cargar imágenes." - }, - "resize_method": { - "name": "método_redimensionado" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "Carga un lote de imágenes y descripciones desde un directorio para entrenamiento.", - "display_name": "Cargar Conjunto de Imágenes y Texto desde Carpeta", - "inputs": { - "clip": { - "name": "clip", - "tooltip": "El modelo CLIP utilizado para codificar el texto." - }, - "folder": { - "name": "carpeta", - "tooltip": "La carpeta desde la cual cargar las imágenes." - }, - "height": { - "name": "altura", - "tooltip": "La altura a la que redimensionar las imágenes. -1 significa usar la altura original." - }, - "resize_method": { - "name": "método_de_redimensionamiento" - }, - "width": { - "name": "ancho", - "tooltip": "El ancho al que redimensionar las imágenes. -1 significa usar el ancho original." - } - } - }, "LoadLatent": { "display_name": "CargarLatente", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "Carga pesos LoRA entrenados desde el nodo Entrenar LoRA.", "display_name": "Cargar Modelo LoRA", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "Grafica la pérdida y la guarda en el directorio de salida.", "display_name": "Graficar Pérdida", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "Vista previa 3D - Animación", - "inputs": { - "camera_info": { - "name": "camera_info" - }, - "model_file": { - "name": "archivo_modelo" - } - } - }, "PreviewAny": { "display_name": "Vista previa de cualquier", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "Guardar pesos LoRA", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "El modelo LoRA a guardar. No usar el modelo con capas LoRA." - }, - "prefix": { - "name": "prefijo", - "tooltip": "El prefijo a usar para el archivo LoRA guardado." - }, - "steps": { - "name": "pasos", - "tooltip": "Opcional: El número de pasos para los que LoRA ha sido entrenado, usado para nombrar el archivo guardado." - } - } - }, "SaveSVGNode": { "description": "Guardar archivos SVG en disco.", "display_name": "NodoGuardarSVG", diff --git a/src/locales/fr/main.json b/src/locales/fr/main.json index 51d56cbf9c..8d24cc0b81 100644 --- a/src/locales/fr/main.json +++ b/src/locales/fr/main.json @@ -27,7 +27,6 @@ "loadingModels": "Chargement de {type}...", "noAssetsFound": "Aucune ressource trouvée", "noModelsInFolder": "Aucun {type} disponible dans ce dossier", - "searchAssetsPlaceholder": "Rechercher des ressources...", "sortAZ": "A-Z", "sortBy": "Trier par", "sortPopular": "Populaire", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "OPERATION_LATENTE", "LOAD3D_CAMERA": "Charger la caméra 3D", "LOAD_3D": "CHARGER_3D", - "LOAD_3D_ANIMATION": "CHARGER_ANIMATION_3D", "LORA_MODEL": "MODÈLE_LORA", "LOSS_MAP": "CARTE_PERTES", "LUMA_CONCEPTS": "Concepts Luma", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "Quitter le sous-graphe", "Experimental: Browse Model Assets": "Expérimental : Parcourir les ressources de modèles", "Experimental: Enable AssetAPI": "Expérimental : Activer AssetAPI", - "Experimental: Enable Vue Nodes": "Expérimental : Activer les nœuds Vue", "Export": "Exporter", "Export (API)": "Exporter (API)", "File": "Fichier", @@ -1898,7 +1895,6 @@ "updateFrontend": "Mettre à jour le frontend" }, "vueNodesBanner": { - "message": "Les nœuds ont une toute nouvelle apparence", "tryItOut": "Essayer" }, "vueNodesMigration": { diff --git a/src/locales/fr/nodeDefs.json b/src/locales/fr/nodeDefs.json index c603afd970..9f25913845 100644 --- a/src/locales/fr/nodeDefs.json +++ b/src/locales/fr/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "info_caméra" - }, - "6": { - "name": "enregistrement_vidéo" - } - } - }, - "Load3DAnimation": { - "display_name": "Charger 3D - Animation", - "inputs": { - "height": { - "name": "hauteur" - }, - "image": { - "name": "image" - }, - "model_file": { - "name": "fichier_modèle" - }, - "width": { - "name": "largeur" - } - }, - "outputs": { - "0": { - "name": "image" - }, - "1": { - "name": "masque" - }, - "2": { - "name": "chemin_maillage" - }, - "3": { - "name": "normale" - }, - "4": { - "name": "info_caméra" - }, - "5": { - "name": "enregistrement_vidéo" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "Charge un lot d'images depuis un répertoire pour l'entraînement.", - "display_name": "Charger un jeu de données d'images depuis un dossier", - "inputs": { - "folder": { - "name": "dossier", - "tooltip": "Le dossier depuis lequel charger les images." - }, - "resize_method": { - "name": "méthode_redimensionnement" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "Charge un lot d'images et de légendes depuis un répertoire pour l'entraînement.", - "display_name": "Charger un jeu de données d'images et de texte depuis un dossier", - "inputs": { - "clip": { - "name": "clip", - "tooltip": "Le modèle CLIP utilisé pour encoder le texte." - }, - "folder": { - "name": "dossier", - "tooltip": "Le dossier depuis lequel charger les images." - }, - "height": { - "name": "hauteur", - "tooltip": "La hauteur à laquelle redimensionner les images. -1 signifie utiliser la hauteur originale." - }, - "resize_method": { - "name": "méthode_redimensionnement" - }, - "width": { - "name": "largeur", - "tooltip": "La largeur à laquelle redimensionner les images. -1 signifie utiliser la largeur originale." - } - } - }, "LoadLatent": { "display_name": "ChargerLatent", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "Charge les poids LoRA entraînés depuis le nœud Train LoRA.", "display_name": "Charger le modèle LoRA", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "Trace le graphique de perte et l'enregistre dans le répertoire de sortie.", "display_name": "Tracer le graphique de perte", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "Aperçu 3D - Animation", - "inputs": { - "camera_info": { - "name": "informations_camera" - }, - "model_file": { - "name": "fichier_modèle" - } - } - }, "PreviewAny": { "display_name": "Aperçu de n'importe quel", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "Enregistrer les poids LoRA", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "Le modèle LoRA à enregistrer. Ne pas utiliser le modèle avec des couches LoRA." - }, - "prefix": { - "name": "préfixe", - "tooltip": "Le préfixe à utiliser pour le fichier LoRA enregistré." - }, - "steps": { - "name": "étapes", - "tooltip": "Optionnel : Le nombre d'étapes pour lesquelles le LoRA a été entraîné, utilisé pour nommer le fichier enregistré." - } - } - }, "SaveSVGNode": { "description": "Enregistrer les fichiers SVG sur le disque.", "display_name": "NoeudEnregistrerSVG", diff --git a/src/locales/ja/main.json b/src/locales/ja/main.json index 2d9868d011..28fe1d5897 100644 --- a/src/locales/ja/main.json +++ b/src/locales/ja/main.json @@ -27,7 +27,6 @@ "loadingModels": "{type}を読み込み中...", "noAssetsFound": "アセットが見つかりません", "noModelsInFolder": "このフォルダには{type}がありません", - "searchAssetsPlaceholder": "アセットを検索...", "sortAZ": "A-Z", "sortBy": "並び替え", "sortPopular": "人気", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "潜在操作", "LOAD3D_CAMERA": "3Dカメラの読み込み", "LOAD_3D": "3Dをロード", - "LOAD_3D_ANIMATION": "3Dアニメーションをロード", "LORA_MODEL": "LoRAモデル", "LOSS_MAP": "損失マップ", "LUMA_CONCEPTS": "Lumaコンセプト", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "サブグラフを終了", "Experimental: Browse Model Assets": "実験的: モデルアセットを閲覧", "Experimental: Enable AssetAPI": "実験的: AssetAPIを有効化", - "Experimental: Enable Vue Nodes": "実験的: Vueノードを有効化", "Export": "エクスポート", "Export (API)": "エクスポート (API)", "File": "ファイル", @@ -1898,7 +1895,6 @@ "updateFrontend": "フロントエンドを更新" }, "vueNodesBanner": { - "message": "ノードの外観と操作性が新しくなりました", "tryItOut": "試してみる" }, "vueNodesMigration": { diff --git a/src/locales/ja/nodeDefs.json b/src/locales/ja/nodeDefs.json index e4ba0ab31b..f7be8c63d2 100644 --- a/src/locales/ja/nodeDefs.json +++ b/src/locales/ja/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "カメラ情報" - }, - "6": { - "name": "録画中の動画" - } - } - }, - "Load3DAnimation": { - "display_name": "3D読み込み - アニメーション", - "inputs": { - "height": { - "name": "高さ" - }, - "image": { - "name": "画像" - }, - "model_file": { - "name": "モデルファイル" - }, - "width": { - "name": "幅" - } - }, - "outputs": { - "0": { - "name": "画像" - }, - "1": { - "name": "マスク" - }, - "2": { - "name": "メッシュパス" - }, - "3": { - "name": "法線" - }, - "4": { - "name": "カメラ情報" - }, - "5": { - "name": "録画中の動画" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "トレーニング用にディレクトリから画像のバッチを読み込みます。", - "display_name": "フォルダから画像データセットを読み込み", - "inputs": { - "folder": { - "name": "フォルダ", - "tooltip": "画像を読み込むフォルダ。" - }, - "resize_method": { - "name": "リサイズ方法" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "トレーニング用にディレクトリから画像とキャプションのバッチを読み込みます。", - "display_name": "フォルダから画像とテキストデータセットを読み込み", - "inputs": { - "clip": { - "name": "CLIP", - "tooltip": "テキストのエンコードに使用されるCLIPモデル。" - }, - "folder": { - "name": "フォルダ", - "tooltip": "画像を読み込むフォルダ。" - }, - "height": { - "name": "高さ", - "tooltip": "画像をリサイズする高さ。-1は元の高さを使用することを意味します。" - }, - "resize_method": { - "name": "リサイズ方法" - }, - "width": { - "name": "幅", - "tooltip": "画像をリサイズする幅。-1は元の幅を使用することを意味します。" - } - } - }, "LoadLatent": { "display_name": "潜在を読み込む", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "Train LoRAノードからトレーニング済みLoRAの重みを読み込みます。", "display_name": "LoRAモデルを読み込み", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "損失グラフをプロットし、出力ディレクトリに保存します。", "display_name": "損失グラフをプロット", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "プレビュー 3D - アニメーション", - "inputs": { - "camera_info": { - "name": "カメラ情報" - }, - "model_file": { - "name": "モデルファイル" - } - } - }, "PreviewAny": { "display_name": "プレビュー任意", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "LoRA重み保存", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "保存するLoRAモデル。LoRAレイヤーを持つモデルは使用しないでください。" - }, - "prefix": { - "name": "prefix", - "tooltip": "保存するLoRAファイルに使用するプレフィックス。" - }, - "steps": { - "name": "ステップ数", - "tooltip": "オプション: LoRAが学習されたステップ数。保存ファイルの命名に使用されます。" - } - } - }, "SaveSVGNode": { "description": "SVGファイルをディスクに保存します。", "display_name": "SVG保存ノード", diff --git a/src/locales/ko/main.json b/src/locales/ko/main.json index 599093784a..f19a55fd08 100644 --- a/src/locales/ko/main.json +++ b/src/locales/ko/main.json @@ -27,7 +27,6 @@ "loadingModels": "{type} 불러오는 중...", "noAssetsFound": "에셋을 찾을 수 없습니다", "noModelsInFolder": "이 폴더에 사용 가능한 {type}이(가) 없습니다", - "searchAssetsPlaceholder": "에셋 검색...", "sortAZ": "가나다순", "sortBy": "정렬 기준", "sortPopular": "인기순", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "잠재 연산", "LOAD3D_CAMERA": "3D 카메라 불러오기", "LOAD_3D": "3D 로드", - "LOAD_3D_ANIMATION": "3D 애니메이션 로드", "LORA_MODEL": "LORA_MODEL", "LOSS_MAP": "LOSS_MAP", "LUMA_CONCEPTS": "Luma 컨셉", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "서브그래프 나가기", "Experimental: Browse Model Assets": "실험적: 모델 에셋 탐색", "Experimental: Enable AssetAPI": "실험적: AssetAPI 활성화", - "Experimental: Enable Vue Nodes": "실험적: Vue 노드 활성화", "Export": "내보내기", "Export (API)": "내보내기 (API)", "File": "파일", @@ -1898,7 +1895,6 @@ "updateFrontend": "프론트엔드 업데이트" }, "vueNodesBanner": { - "message": "노드가 새로운 모습으로 바뀌었습니다", "tryItOut": "사용해 보기" }, "vueNodesMigration": { diff --git a/src/locales/ko/nodeDefs.json b/src/locales/ko/nodeDefs.json index b77a12dcf8..1bb55aae74 100644 --- a/src/locales/ko/nodeDefs.json +++ b/src/locales/ko/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "카메라 정보" - }, - "6": { - "name": "비디오 녹화" - } - } - }, - "Load3DAnimation": { - "display_name": "3D 불러오기 - 애니메이션", - "inputs": { - "height": { - "name": "높이" - }, - "image": { - "name": "이미지" - }, - "model_file": { - "name": "모델 파일" - }, - "width": { - "name": "너비" - } - }, - "outputs": { - "0": { - "name": "이미지" - }, - "1": { - "name": "마스크" - }, - "2": { - "name": "메시 경로" - }, - "3": { - "name": "노멀" - }, - "4": { - "name": "카메라 정보" - }, - "5": { - "name": "비디오 녹화" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "학습을 위해 디렉토리에서 이미지 배치를 로드합니다.", - "display_name": "폴더에서 이미지 데이터셋 로드", - "inputs": { - "folder": { - "name": "폴더", - "tooltip": "이미지를 로드할 폴더입니다." - }, - "resize_method": { - "name": "크기 조정 방법" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "학습을 위해 디렉토리에서 이미지와 캡션 배치를 로드합니다.", - "display_name": "폴더에서 이미지 및 텍스트 데이터셋 로드", - "inputs": { - "clip": { - "name": "CLIP", - "tooltip": "텍스트 인코딩에 사용되는 CLIP 모델입니다." - }, - "folder": { - "name": "폴더", - "tooltip": "이미지를 로드할 폴더입니다." - }, - "height": { - "name": "높이", - "tooltip": "이미지를 조정할 높이입니다. -1은 원본 높이를 사용함을 의미합니다." - }, - "resize_method": { - "name": "크기 조정 방법" - }, - "width": { - "name": "너비", - "tooltip": "이미지를 조정할 너비입니다. -1은 원본 너비를 사용함을 의미합니다." - } - } - }, "LoadLatent": { "display_name": "잠재 데이터 로드", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "Train LoRA 노드에서 학습된 LoRA 가중치를 불러옵니다.", "display_name": "LoRA 모델 로드", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "손실 그래프를 그리고 출력 디렉토리에 저장합니다.", "display_name": "손실 그래프 그리기", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "3D 미리보기 - 애니메이션", - "inputs": { - "camera_info": { - "name": "카메라 정보" - }, - "model_file": { - "name": "모델 파일" - } - } - }, "PreviewAny": { "display_name": "미리보기 아무거나", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "LoRA 가중치 저장", - "inputs": { - "lora": { - "name": "LoRA", - "tooltip": "저장할 LoRA 모델. LoRA 레이어가 포함된 모델은 사용하지 마십시오." - }, - "prefix": { - "name": "접두사", - "tooltip": "저장된 LoRA 파일에 사용할 접두사." - }, - "steps": { - "name": "스텝", - "tooltip": "선택사항: LoRA가 훈련된 스텝 수로, 저장된 파일 이름에 사용됩니다." - } - } - }, "SaveSVGNode": { "description": "디스크에 SVG 파일 저장.", "display_name": "SVG 노드 저장", diff --git a/src/locales/ru/main.json b/src/locales/ru/main.json index dfb9ff6a06..eb7298e01d 100644 --- a/src/locales/ru/main.json +++ b/src/locales/ru/main.json @@ -27,7 +27,6 @@ "loadingModels": "Загрузка {type}...", "noAssetsFound": "Ресурсы не найдены", "noModelsInFolder": "Нет {type} в этой папке", - "searchAssetsPlaceholder": "Поиск ресурсов...", "sortAZ": "А-Я", "sortBy": "Сортировать по", "sortPopular": "Популярные", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "ЛАТЕНТНАЯ_ОПЕРАЦИЯ", "LOAD3D_CAMERA": "ЗАГРУЗИТЬ3D_КАМЕРУ", "LOAD_3D": "ЗАГРУЗИТЬ_3D", - "LOAD_3D_ANIMATION": "ЗАГРУЗИТЬ_3D_АНИМАЦИЮ", "LORA_MODEL": "МОДЕЛЬ_LORA", "LOSS_MAP": "КАРТА_ПОТЕРЬ", "LUMA_CONCEPTS": "LUMA_CONCEPTS", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "Выйти из подграфа", "Experimental: Browse Model Assets": "Экспериментально: Просмотр ассетов моделей", "Experimental: Enable AssetAPI": "Экспериментально: Включить AssetAPI", - "Experimental: Enable Vue Nodes": "Экспериментально: Включить Vue узлы", "Export": "Экспортировать", "Export (API)": "Экспорт (API)", "File": "Файл", @@ -1898,7 +1895,6 @@ "updateFrontend": "Обновить интерфейс" }, "vueNodesBanner": { - "message": "Узлы получили новый внешний вид", "tryItOut": "Попробовать" }, "vueNodesMigration": { diff --git a/src/locales/ru/nodeDefs.json b/src/locales/ru/nodeDefs.json index 2485e8f20c..17737c971b 100644 --- a/src/locales/ru/nodeDefs.json +++ b/src/locales/ru/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "информация о камере" - }, - "6": { - "name": "recording_video" - } - } - }, - "Load3DAnimation": { - "display_name": "Загрузить 3D - Анимация", - "inputs": { - "height": { - "name": "высота" - }, - "image": { - "name": "изображение" - }, - "model_file": { - "name": "файл_модели" - }, - "width": { - "name": "ширина" - } - }, - "outputs": { - "0": { - "name": "изображение" - }, - "1": { - "name": "mask" - }, - "2": { - "name": "путь_к_модели" - }, - "3": { - "name": "нормаль" - }, - "4": { - "name": "информация_о_камере" - }, - "5": { - "name": "recording_video" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "Загружает пакет изображений из директории для обучения.", - "display_name": "Загрузить набор изображений из папки", - "inputs": { - "folder": { - "name": "folder", - "tooltip": "Папка для загрузки изображений." - }, - "resize_method": { - "name": "resize_method" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "Загружает пакет изображений и подписей из директории для обучения.", - "display_name": "Загрузить набор изображений и текста из папки", - "inputs": { - "clip": { - "name": "clip", - "tooltip": "Модель CLIP, используемая для кодирования текста." - }, - "folder": { - "name": "folder", - "tooltip": "Папка для загрузки изображений." - }, - "height": { - "name": "height", - "tooltip": "Высота для изменения размера изображений. -1 означает использование исходной высоты." - }, - "resize_method": { - "name": "resize_method" - }, - "width": { - "name": "width", - "tooltip": "Ширина для изменения размера изображений. -1 означает использование исходной ширины." - } - } - }, "LoadLatent": { "display_name": "Загрузить латент", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "Загрузить обученные веса LoRA из узла Train LoRA.", "display_name": "Загрузить модель LoRA", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "Строит график потерь и сохраняет его в выходной каталог.", "display_name": "Построить график потерь", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "Предварительный просмотр 3D - Анимация", - "inputs": { - "camera_info": { - "name": "camera_info" - }, - "model_file": { - "name": "файл_модели" - } - } - }, "PreviewAny": { "display_name": "Предпросмотр любого", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "Сохранить веса LoRA", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "Модель LoRA для сохранения. Не используйте модель со слоями LoRA." - }, - "prefix": { - "name": "префикс", - "tooltip": "Префикс для сохраняемого файла LoRA." - }, - "steps": { - "name": "шаги", - "tooltip": "Опционально: Количество шагов, на которых обучалась LoRA, используется для именования сохраняемого файла." - } - } - }, "SaveSVGNode": { "description": "Сохранить SVG файлы на диске.", "display_name": "SaveSVGNode", diff --git a/src/locales/tr/main.json b/src/locales/tr/main.json index 66aadb352f..aed8283d6f 100644 --- a/src/locales/tr/main.json +++ b/src/locales/tr/main.json @@ -27,7 +27,6 @@ "loadingModels": "{type} yükleniyor...", "noAssetsFound": "Varlık bulunamadı", "noModelsInFolder": "Bu klasörde {type} mevcut değil", - "searchAssetsPlaceholder": "Varlık ara...", "sortAZ": "A-Z", "sortBy": "Sırala", "sortPopular": "Popüler", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "GİZLİ_İŞLEM", "LOAD3D_CAMERA": "YÜKLE3D_KAMERA", "LOAD_3D": "3D_YÜKLE", - "LOAD_3D_ANIMATION": "3D_ANİMASYON_YÜKLE", "LORA_MODEL": "LORA_MODEL", "LOSS_MAP": "KAYIP_HARITASI", "LUMA_CONCEPTS": "LUMA_KAVRAMLARI", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "Alt Grafikten Çık", "Experimental: Browse Model Assets": "Deneysel: Model Varlıklarını Gözat", "Experimental: Enable AssetAPI": "Deneysel: AssetAPI'yi Etkinleştir", - "Experimental: Enable Vue Nodes": "Deneysel: Vue Düğümlerini Etkinleştir", "Export": "Dışa Aktar", "Export (API)": "Dışa Aktar (API)", "File": "Dosya", @@ -1898,7 +1895,6 @@ "updateFrontend": "Ön Ucu Güncelle" }, "vueNodesBanner": { - "message": "Düğümler yeni bir görünüm ve his kazandı", "tryItOut": "Deneyin" }, "vueNodesMigration": { diff --git a/src/locales/tr/nodeDefs.json b/src/locales/tr/nodeDefs.json index f592a4bc52..a8ddbb9c33 100644 --- a/src/locales/tr/nodeDefs.json +++ b/src/locales/tr/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "kamera_bilgisi" - }, - "6": { - "name": "video_kaydı" - } - } - }, - "Load3DAnimation": { - "display_name": "3D Yükle - Animasyon", - "inputs": { - "height": { - "name": "yükseklik" - }, - "image": { - "name": "görüntü" - }, - "model_file": { - "name": "model_dosyası" - }, - "width": { - "name": "genişlik" - } - }, - "outputs": { - "0": { - "name": "görüntü" - }, - "1": { - "name": "maske" - }, - "2": { - "name": "ağ_yolu" - }, - "3": { - "name": "normal" - }, - "4": { - "name": "kamera_bilgisi" - }, - "5": { - "name": "video_kaydı" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "Eğitim için bir dizinden bir grup görüntü yükler.", - "display_name": "Klasörden Görüntü Veri Kümesi Yükle", - "inputs": { - "folder": { - "name": "klasör", - "tooltip": "Görüntülerin yükleneceği klasör." - }, - "resize_method": { - "name": "yeniden_boyutlandırma_yöntemi" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "Eğitim için bir dizinden bir grup görüntü ve açıklama yükler.", - "display_name": "Klasörden Görüntü ve Metin Veri Kümesi Yükle", - "inputs": { - "clip": { - "name": "clip", - "tooltip": "Metni kodlamak için kullanılan CLIP modeli." - }, - "folder": { - "name": "klasör", - "tooltip": "Görüntülerin yükleneceği klasör." - }, - "height": { - "name": "yükseklik", - "tooltip": "Görüntülerin yeniden boyutlandırılacağı yükseklik. -1 orijinal yüksekliği kullan anlamına gelir." - }, - "resize_method": { - "name": "yeniden_boyutlandırma_yöntemi" - }, - "width": { - "name": "genişlik", - "tooltip": "Görüntülerin yeniden boyutlandırılacağı genişlik. -1 orijinal genişliği kullan anlamına gelir." - } - } - }, "LoadLatent": { "display_name": "GizliYükle", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "LoRA Eğit düğümünden eğitilmiş LoRA ağırlıklarını yükler.", "display_name": "LoRA Modeli Yükle", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "Kayıp grafiğini çizer ve çıktı dizinine kaydeder.", "display_name": "Kayıp Grafiği Çiz", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "3D Önizleme - Animasyon", - "inputs": { - "camera_info": { - "name": "kamera_bilgisi" - }, - "model_file": { - "name": "model_dosyası" - } - } - }, "PreviewAny": { "display_name": "Herhangi Bir Şeyi Önizle", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "LoRA Ağırlıklarını Kaydet", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "Kaydedilecek LoRA modeli. LoRA katmanlarına sahip modeli kullanmayın." - }, - "prefix": { - "name": "ön_ek", - "tooltip": "Kaydedilecek LoRA dosyası için kullanılacak ön ek." - }, - "steps": { - "name": "adımlar", - "tooltip": "İsteğe bağlı: LoRA'nın eğitildiği adım sayısı, kaydedilen dosyanın adlandırılmasında kullanılır." - } - } - }, "SaveSVGNode": { "description": "SVG dosyalarını diske kaydet.", "display_name": "SVGDüğümünüKaydet", diff --git a/src/locales/zh-TW/main.json b/src/locales/zh-TW/main.json index 6eb41f42e3..7c45e972f3 100644 --- a/src/locales/zh-TW/main.json +++ b/src/locales/zh-TW/main.json @@ -27,7 +27,6 @@ "loadingModels": "正在載入 {type}...", "noAssetsFound": "找不到資產", "noModelsInFolder": "此資料夾中沒有可用的 {type}", - "searchAssetsPlaceholder": "搜尋資產...", "sortAZ": "A-Z", "sortBy": "排序依據", "sortPopular": "熱門", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "latent 操作", "LOAD3D_CAMERA": "載入 3D 攝影機", "LOAD_3D": "載入 3D", - "LOAD_3D_ANIMATION": "載入 3D 動畫", "LORA_MODEL": "LoRA模型", "LOSS_MAP": "損失圖", "LUMA_CONCEPTS": "LUMA 概念", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "退出子圖", "Experimental: Browse Model Assets": "實驗性:瀏覽模型資源", "Experimental: Enable AssetAPI": "實驗性:啟用 AssetAPI", - "Experimental: Enable Vue Nodes": "實驗性:啟用 Vue 節點", "Export": "匯出", "Export (API)": "匯出(API)", "File": "檔案", @@ -1898,7 +1895,6 @@ "updateFrontend": "更新前端" }, "vueNodesBanner": { - "message": "節點有了全新的外觀和感覺", "tryItOut": "試試看" }, "vueNodesMigration": { diff --git a/src/locales/zh-TW/nodeDefs.json b/src/locales/zh-TW/nodeDefs.json index 6a3de3b2ba..4522e9cbe3 100644 --- a/src/locales/zh-TW/nodeDefs.json +++ b/src/locales/zh-TW/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "相機資訊" - }, - "6": { - "name": "錄製影片" - } - } - }, - "Load3DAnimation": { - "display_name": "載入 3D - 動畫", - "inputs": { - "height": { - "name": "高度" - }, - "image": { - "name": "影像" - }, - "model_file": { - "name": "模型檔案" - }, - "width": { - "name": "寬度" - } - }, - "outputs": { - "0": { - "name": "圖片" - }, - "1": { - "name": "遮罩" - }, - "2": { - "name": "網格路徑" - }, - "3": { - "name": "法線" - }, - "4": { - "name": "相機資訊" - }, - "5": { - "name": "錄製影片" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "從目錄載入一批影像用於訓練。", - "display_name": "從資料夾載入影像資料集", - "inputs": { - "folder": { - "name": "資料夾", - "tooltip": "要載入影像的資料夾。" - }, - "resize_method": { - "name": "調整大小方法" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "載入一批來自目錄的圖片和標題用於訓練。", - "display_name": "從資料夾載入影像和文字資料集", - "inputs": { - "clip": { - "name": "CLIP 模型", - "tooltip": "用於編碼文字的 CLIP 模型。" - }, - "folder": { - "name": "資料夾", - "tooltip": "要從中載入圖片的資料夾。" - }, - "height": { - "name": "高度", - "tooltip": "要將圖片調整到的高度。-1 表示使用原始高度。" - }, - "resize_method": { - "name": "調整大小方法" - }, - "width": { - "name": "寬度", - "tooltip": "要將圖片調整到的寬度。-1 表示使用原始寬度。" - } - } - }, "LoadLatent": { "display_name": "LoadLatent", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "從訓練 LoRA 節點載入已訓練的 LoRA 權重。", "display_name": "載入 LoRA 模型", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "繪製損失圖表並將其儲存到輸出目錄。", "display_name": "繪製損失圖表", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "預覽 3D - 動畫", - "inputs": { - "camera_info": { - "name": "camera_info" - }, - "model_file": { - "name": "model_file" - } - } - }, "PreviewAny": { "display_name": "預覽任意", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "儲存 LoRA 權重", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "要儲存的 LoRA 模型。請勿使用帶有 LoRA 層的模型。" - }, - "prefix": { - "name": "prefix", - "tooltip": "用於儲存 LoRA 檔案的前綴。" - }, - "steps": { - "name": "步數", - "tooltip": "選填:LoRA 已訓練的步數,用於命名儲存的檔案。" - } - } - }, "SaveSVGNode": { "description": "在磁碟上儲存 SVG 檔案。", "display_name": "儲存SVG節點", diff --git a/src/locales/zh/main.json b/src/locales/zh/main.json index bad964f3af..4f58e5073b 100644 --- a/src/locales/zh/main.json +++ b/src/locales/zh/main.json @@ -27,7 +27,6 @@ "loadingModels": "正在加载{type}...", "noAssetsFound": "未找到资源", "noModelsInFolder": "此文件夹中没有可用的{type}", - "searchAssetsPlaceholder": "搜索资源...", "sortAZ": "A-Z", "sortBy": "排序方式", "sortPopular": "最受欢迎", @@ -429,7 +428,6 @@ "LATENT_OPERATION": "Latent操作", "LOAD3D_CAMERA": "加载3D相机", "LOAD_3D": "加载3D", - "LOAD_3D_ANIMATION": "加载3D动画", "LORA_MODEL": "LORA模型", "LOSS_MAP": "损失图", "LUMA_CONCEPTS": "Luma 概念", @@ -1174,7 +1172,6 @@ "Exit Subgraph": "退出子图", "Experimental: Browse Model Assets": "实验性:浏览模型资源", "Experimental: Enable AssetAPI": "实验性:启用 AssetAPI", - "Experimental: Enable Vue Nodes": "实验性:启用 Vue 节点", "Export": "导出", "Export (API)": "导出 (API)", "File": "文件", @@ -1898,7 +1895,6 @@ "updateFrontend": "更新前端" }, "vueNodesBanner": { - "message": "节点外观焕然一新", "tryItOut": "试试看" }, "vueNodesMigration": { diff --git a/src/locales/zh/nodeDefs.json b/src/locales/zh/nodeDefs.json index dffe421bd9..416f5d892c 100644 --- a/src/locales/zh/nodeDefs.json +++ b/src/locales/zh/nodeDefs.json @@ -4814,46 +4814,6 @@ }, "5": { "name": "camera_info" - }, - "6": { - "name": "录制视频" - } - } - }, - "Load3DAnimation": { - "display_name": "加载3D动画", - "inputs": { - "height": { - "name": "高度" - }, - "image": { - "name": "图像" - }, - "model_file": { - "name": "模型文件" - }, - "width": { - "name": "宽度" - } - }, - "outputs": { - "0": { - "name": "图像" - }, - "1": { - "name": "遮罩" - }, - "2": { - "name": "mesh_path" - }, - "3": { - "name": "法线" - }, - "4": { - "name": "相机信息" - }, - "5": { - "name": "录制视频" } } }, @@ -4910,44 +4870,6 @@ } } }, - "LoadImageSetFromFolderNode": { - "description": "从目录加载一批图像用于训练。", - "display_name": "从文件夹加载图像数据集", - "inputs": { - "folder": { - "name": "文件夹", - "tooltip": "要从中加载图像的文件夹。" - }, - "resize_method": { - "name": "调整大小方法" - } - } - }, - "LoadImageTextSetFromFolderNode": { - "description": "从目录加载一批图像和标题用于训练。", - "display_name": "从文件夹加载图像和文本数据集", - "inputs": { - "clip": { - "name": "CLIP 模型", - "tooltip": "用于编码文本的 CLIP 模型。" - }, - "folder": { - "name": "文件夹", - "tooltip": "要从中加载图像的文件夹。" - }, - "height": { - "name": "高度", - "tooltip": "调整图像的目标高度。-1 表示使用原始高度。" - }, - "resize_method": { - "name": "调整大小方法" - }, - "width": { - "name": "宽度", - "tooltip": "调整图像的目标宽度。-1 表示使用原始宽度。" - } - } - }, "LoadLatent": { "display_name": "加载Latent", "inputs": { @@ -5027,7 +4949,6 @@ } }, "LoraModelLoader": { - "description": "从训练 LoRA 节点加载训练好的 LoRA 权重。", "display_name": "加载 LoRA 模型", "inputs": { "lora": { @@ -5075,7 +4996,6 @@ } }, "LossGraphNode": { - "description": "绘制损失图并将其保存到输出目录。", "display_name": "绘制损失图", "inputs": { "filename_prefix": { @@ -8830,17 +8750,6 @@ } } }, - "Preview3DAnimation": { - "display_name": "预览3D - 动画", - "inputs": { - "camera_info": { - "name": "相机信息" - }, - "model_file": { - "name": "模型文件" - } - } - }, "PreviewAny": { "display_name": "预览任意", "inputs": { @@ -10384,23 +10293,6 @@ } } }, - "SaveLoRANode": { - "display_name": "保存 LoRA 权重", - "inputs": { - "lora": { - "name": "lora", - "tooltip": "要保存的 LoRA 模型。请勿使用带有 LoRA 层的模型。" - }, - "prefix": { - "name": "前缀", - "tooltip": "用于保存的 LoRA 文件的前缀。" - }, - "steps": { - "name": "步数", - "tooltip": "可选:LoRA 已训练的步数,用于命名保存的文件。" - } - } - }, "SaveSVGNode": { "description": "在磁盘上保存 SVG 文件。", "display_name": "SaveSVGNode",