diff --git a/package.json b/package.json index 73eea1c80d..8cbee194cf 100644 --- a/package.json +++ b/package.json @@ -31,12 +31,16 @@ "knip": "knip --cache", "knip:no-cache": "knip", "locale": "lobe-i18n locale", - "collect-i18n": "npx playwright test --config=playwright.i18n.config.ts", + "prebuild:litegraph": "node scripts/prebuild-litegraph.js", + "restore:litegraph": "node scripts/restore-litegraph.js", + "collect-i18n": "pnpm prebuild:litegraph && npx playwright test --config=playwright.i18n.config.ts; pnpm restore:litegraph", "json-schema": "tsx scripts/generate-json-schema.ts", "storybook": "nx storybook -p 6006", "build-storybook": "storybook build" }, "devDependencies": { + "@babel/core": "^7.28.3", + "@babel/preset-typescript": "^7.27.1", "@eslint/js": "^9.8.0", "@executeautomation/playwright-mcp-server": "^1.0.6", "@iconify/json": "^2.2.245", diff --git a/playwright.i18n.config.ts b/playwright.i18n.config.ts index 70c3a0c81c..da8e49cbc9 100644 --- a/playwright.i18n.config.ts +++ b/playwright.i18n.config.ts @@ -8,5 +8,8 @@ export default defineConfig({ }, reporter: 'list', timeout: 60000, - testMatch: /collect-i18n-.*\.ts/ + testMatch: /collect-i18n-.*\.ts/, + // Use the same global setup as regular tests to ensure proper environment + globalSetup: './browser_tests/globalSetup.ts', + globalTeardown: './browser_tests/globalTeardown.ts' }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 904226e51b..f4b4050a3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,6 +156,12 @@ importers: specifier: ^3.3.0 version: 3.3.0(zod@3.24.1) devDependencies: + '@babel/core': + specifier: ^7.28.3 + version: 7.28.3 + '@babel/preset-typescript': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.28.3) '@eslint/js': specifier: ^9.8.0 version: 9.12.0 @@ -491,8 +497,8 @@ packages: resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.1': - resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} + '@babel/core@7.28.3': + resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} engines: {node: '>=6.9.0'} '@babel/generator@7.27.1': @@ -546,6 +552,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} @@ -586,8 +598,8 @@ packages: resolution: {integrity: sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.1': - resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} + '@babel/helpers@7.28.3': + resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} engines: {node: '>=6.9.0'} '@babel/parser@7.27.2': @@ -6928,8 +6940,8 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@antfu/install-pkg@0.5.0': dependencies: @@ -6973,14 +6985,14 @@ snapshots: '@babel/compat-data@7.28.0': {} - '@babel/core@7.27.1': + '@babel/core@7.28.3': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) - '@babel/helpers': 7.27.1 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/helpers': 7.28.3 '@babel/parser': 7.28.3 '@babel/template': 7.27.2 '@babel/traverse': 7.28.3 @@ -7021,29 +7033,29 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.27.1)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 '@babel/traverse': 7.28.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.27.1)': + '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1 @@ -7068,9 +7080,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': + '@babel/helper-module-transforms@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': + dependencies: + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.3 @@ -7083,18 +7104,18 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 '@babel/traverse': 7.28.3 @@ -7122,7 +7143,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.27.1': + '@babel/helpers@7.28.3': dependencies: '@babel/template': 7.27.2 '@babel/types': 7.28.2 @@ -7135,537 +7156,537 @@ snapshots: dependencies: '@babel/types': 7.28.2 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.27.1)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.27.1)': + '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.27.1)': + '@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.27.1)': + '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.28.3(@babel/core@7.27.1)': + '@babel/plugin-transform-classes@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.27.1)': + '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.27.1)': + '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.27.1)': + '@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.1) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.27.1)': + '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.27.1) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.27.1)': + '@babel/plugin-transform-regenerator@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.27.1)': + '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.27.1) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.27.1) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.27.1) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.3) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3) semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.27.1) + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)': + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 - '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 - '@babel/preset-env@7.28.3(@babel/core@7.27.1)': + '@babel/preset-env@7.28.3(@babel/core@7.28.3)': dependencies: '@babel/compat-data': 7.28.0 - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.27.1) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1) - '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.27.1) - '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.27.1) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.27.1) - '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.27.1) - '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.27.1) - '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.27.1) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.27.1) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.27.1) - '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.27.1) - '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.1) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1) - babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.27.1) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.27.1) - babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.27.1) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.3) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.3) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-block-scoping': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-transform-classes': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-object-rest-spread': 7.28.0(@babel/core@7.28.3) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.3) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-regenerator': 7.28.3(@babel/core@7.28.3) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.3) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.3) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.3) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.3) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.3) core-js-compat: 3.45.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.28.2 esutils: 2.0.3 - '@babel/preset-typescript@7.27.1(@babel/core@7.27.1)': + '@babel/preset-typescript@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.28.3) transitivePeerDependencies: - supports-color @@ -8587,19 +8608,19 @@ snapshots: '@nx/js@21.4.1(@babel/traverse@7.28.3)(nx@21.4.1)': dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-runtime': 7.28.3(@babel/core@7.27.1) - '@babel/preset-env': 7.28.3(@babel/core@7.27.1) - '@babel/preset-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-runtime': 7.28.3(@babel/core@7.28.3) + '@babel/preset-env': 7.28.3(@babel/core@7.28.3) + '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) '@babel/runtime': 7.27.6 '@nx/devkit': 21.4.1(nx@21.4.1) '@nx/workspace': 21.4.1 '@zkochan/js-yaml': 0.0.7 - babel-plugin-const-enum: 1.2.0(@babel/core@7.27.1) + babel-plugin-const-enum: 1.2.0(@babel/core@7.28.3) babel-plugin-macros: 3.1.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.27.1)(@babel/traverse@7.28.3) + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.28.3)(@babel/traverse@7.28.3) chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 @@ -9642,26 +9663,26 @@ snapshots: '@vue/babel-helper-vue-transform-on@1.4.0': {} - '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.27.1)': + '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.28.3)': dependencies: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.3) '@babel/template': 7.27.2 '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 '@vue/babel-helper-vue-transform-on': 1.4.0 - '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.27.1) + '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.3) '@vue/shared': 3.5.13 optionalDependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 transitivePeerDependencies: - supports-color - '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.27.1)': + '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.28.3)': dependencies: '@babel/code-frame': 7.27.1 - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/parser': 7.28.3 @@ -9684,7 +9705,7 @@ snapshots: '@vue/compiler-sfc@3.5.13': dependencies: - '@babel/parser': 7.27.2 + '@babel/parser': 7.28.3 '@vue/compiler-core': 3.5.13 '@vue/compiler-dom': 3.5.13 '@vue/compiler-ssr': 3.5.13 @@ -10034,11 +10055,11 @@ snapshots: transitivePeerDependencies: - debug - babel-plugin-const-enum@1.2.0(@babel/core@7.27.1): + babel-plugin-const-enum@1.2.0(@babel/core@7.28.3): dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.3) '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color @@ -10049,33 +10070,33 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.10 - babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.27.1): + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.3): dependencies: '@babel/compat-data': 7.28.0 - '@babel/core': 7.27.1 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.27.1): + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.3): dependencies: - '@babel/core': 7.27.1 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) core-js-compat: 3.45.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.27.1): + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.3): dependencies: - '@babel/core': 7.27.1 - '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.3) transitivePeerDependencies: - supports-color - babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.27.1)(@babel/traverse@7.28.3): + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.28.3)(@babel/traverse@7.28.3): dependencies: - '@babel/core': 7.27.1 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 optionalDependencies: '@babel/traverse': 7.28.3 @@ -13928,12 +13949,12 @@ snapshots: vite-plugin-vue-inspector@5.3.1(vite@5.4.19(@types/node@20.14.10)(terser@5.39.2)): dependencies: - '@babel/core': 7.27.1 - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1) - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1) - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.1) + '@babel/core': 7.28.3 + '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.3) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.28.3) + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.3) '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.18 diff --git a/scripts/prebuild-litegraph.js b/scripts/prebuild-litegraph.js new file mode 100644 index 0000000000..4d11d551b7 --- /dev/null +++ b/scripts/prebuild-litegraph.js @@ -0,0 +1,69 @@ +#!/usr/bin/env node +/** + * Prebuild script for litegraph to ensure compatibility with Playwright + * This script removes TypeScript 'declare' keyword that Playwright/Babel can't handle + * The files remain as TypeScript but with the problematic syntax removed + */ +import fs from 'fs-extra' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const rootDir = path.resolve(__dirname, '..') +const litegraphSrcDir = path.join(rootDir, 'src/lib/litegraph/src') + +async function prebuildLitegraph() { + console.log('Pre-processing litegraph for Playwright compatibility...') + + try { + // Find all TypeScript files that use 'declare' + const filesToProcess = [ + 'LGraphNode.ts', + 'widgets/BaseWidget.ts', + 'subgraph/SubgraphInput.ts', + 'subgraph/SubgraphNode.ts', + 'subgraph/SubgraphOutput.ts', + 'subgraph/EmptySubgraphInput.ts', + 'subgraph/EmptySubgraphOutput.ts' + ] + + let processedCount = 0 + + for (const relativePath of filesToProcess) { + const filePath = path.join(litegraphSrcDir, relativePath) + + if (await fs.pathExists(filePath)) { + const originalContent = await fs.readFile(filePath, 'utf-8') + + // Remove 'declare' keyword from class properties + // This regex matches 'declare' at the start of a line (with optional whitespace) + const modifiedContent = originalContent.replace( + /^(\s*)declare\s+/gm, + '$1// @ts-ignore\n$1' + ) + + if (originalContent !== modifiedContent) { + // Create backup + const backupPath = filePath + '.backup' + if (!(await fs.pathExists(backupPath))) { + await fs.writeFile(backupPath, originalContent) + } + + // Write modified content + await fs.writeFile(filePath, modifiedContent) + processedCount++ + console.log(` ✓ Processed ${relativePath}`) + } + } + } + + console.log(`✅ Pre-processed ${processedCount} files successfully`) + } catch (error) { + console.error('❌ Failed to pre-process litegraph:', error.message) + // eslint-disable-next-line no-undef + process.exit(1) + } +} + +// Run the prebuild +prebuildLitegraph().catch(console.error) diff --git a/scripts/restore-litegraph.js b/scripts/restore-litegraph.js new file mode 100644 index 0000000000..52fd897f7a --- /dev/null +++ b/scripts/restore-litegraph.js @@ -0,0 +1,52 @@ +#!/usr/bin/env node +/** + * Restore script for litegraph after Playwright tests + * This script restores the original TypeScript files from backups + */ +import fs from 'fs-extra' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const rootDir = path.resolve(__dirname, '..') +const litegraphSrcDir = path.join(rootDir, 'src/lib/litegraph/src') + +async function restoreLitegraph() { + console.log('Restoring original litegraph files...') + + try { + const filesToRestore = [ + 'LGraphNode.ts', + 'widgets/BaseWidget.ts', + 'subgraph/SubgraphInput.ts', + 'subgraph/SubgraphNode.ts', + 'subgraph/SubgraphOutput.ts', + 'subgraph/EmptySubgraphInput.ts', + 'subgraph/EmptySubgraphOutput.ts' + ] + + let restoredCount = 0 + + for (const relativePath of filesToRestore) { + const filePath = path.join(litegraphSrcDir, relativePath) + const backupPath = filePath + '.backup' + + if (await fs.pathExists(backupPath)) { + const backupContent = await fs.readFile(backupPath, 'utf-8') + await fs.writeFile(filePath, backupContent) + await fs.remove(backupPath) + restoredCount++ + console.log(` ✓ Restored ${relativePath}`) + } + } + + console.log(`✅ Restored ${restoredCount} files successfully`) + } catch (error) { + console.error('❌ Failed to restore litegraph:', error.message) + // eslint-disable-next-line no-undef + process.exit(1) + } +} + +// Run the restore +restoreLitegraph().catch(console.error) diff --git a/src/locales/en/commands.json b/src/locales/en/commands.json index 6cb72b8e13..1d1eedcab1 100644 --- a/src/locales/en/commands.json +++ b/src/locales/en/commands.json @@ -1,40 +1,4 @@ { - "Comfy-Desktop_CheckForUpdates": { - "label": "Check for Updates" - }, - "Comfy-Desktop_Folders_OpenCustomNodesFolder": { - "label": "Open Custom Nodes Folder" - }, - "Comfy-Desktop_Folders_OpenInputsFolder": { - "label": "Open Inputs Folder" - }, - "Comfy-Desktop_Folders_OpenLogsFolder": { - "label": "Open Logs Folder" - }, - "Comfy-Desktop_Folders_OpenModelConfig": { - "label": "Open extra_model_paths.yaml" - }, - "Comfy-Desktop_Folders_OpenModelsFolder": { - "label": "Open Models Folder" - }, - "Comfy-Desktop_Folders_OpenOutputsFolder": { - "label": "Open Outputs Folder" - }, - "Comfy-Desktop_OpenDevTools": { - "label": "Open DevTools" - }, - "Comfy-Desktop_OpenUserGuide": { - "label": "Desktop User Guide" - }, - "Comfy-Desktop_Quit": { - "label": "Quit" - }, - "Comfy-Desktop_Reinstall": { - "label": "Reinstall" - }, - "Comfy-Desktop_Restart": { - "label": "Restart" - }, "Comfy_3DViewer_Open3DViewer": { "label": "Open 3D Viewer (Beta) for Selected Node" }, @@ -173,6 +137,12 @@ "Comfy_Manager_CustomNodesManager": { "label": "Toggle the Custom Nodes Manager" }, + "Comfy_Manager_CustomNodesManager_ToggleVisibility": { + "label": "Toggle Custom Nodes Manager Visibility" + }, + "Comfy_Manager_Menu_ToggleVisibility": { + "label": "Toggle Manager Menu Visibility" + }, "Comfy_Manager_ToggleManagerProgressDialog": { "label": "Toggle the Custom Nodes Manager Progress Bar" }, @@ -257,9 +227,6 @@ "Workspace_ToggleBottomPanel_Shortcuts": { "label": "Show Keybindings Dialog" }, - "Workspace_ToggleBottomPanelTab_command-terminal": { - "label": "Toggle Terminal Bottom Panel" - }, "Workspace_ToggleBottomPanelTab_logs-terminal": { "label": "Toggle Logs Bottom Panel" }, diff --git a/src/locales/en/main.json b/src/locales/en/main.json index 51d7c30a5f..541098465a 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -958,18 +958,6 @@ "File": "File", "Edit": "Edit", "Help": "Help", - "Check for Updates": "Check for Updates", - "Open Custom Nodes Folder": "Open Custom Nodes Folder", - "Open Inputs Folder": "Open Inputs Folder", - "Open Logs Folder": "Open Logs Folder", - "Open extra_model_paths_yaml": "Open extra_model_paths.yaml", - "Open Models Folder": "Open Models Folder", - "Open Outputs Folder": "Open Outputs Folder", - "Open DevTools": "Open DevTools", - "Desktop User Guide": "Desktop User Guide", - "Quit": "Quit", - "Reinstall": "Reinstall", - "Restart": "Restart", "Open 3D Viewer (Beta) for Selected Node": "Open 3D Viewer (Beta) for Selected Node", "Browse Templates": "Browse Templates", "Delete Selected Items": "Delete Selected Items", @@ -1016,6 +1004,8 @@ "Interrupt": "Interrupt", "Load Default Workflow": "Load Default Workflow", "Toggle the Custom Nodes Manager": "Toggle the Custom Nodes Manager", + "Toggle Custom Nodes Manager Visibility": "Toggle Custom Nodes Manager Visibility", + "Toggle Manager Menu Visibility": "Toggle Manager Menu Visibility", "Toggle the Custom Nodes Manager Progress Bar": "Toggle the Custom Nodes Manager Progress Bar", "Decrease Brush Size in MaskEditor": "Decrease Brush Size in MaskEditor", "Increase Brush Size in MaskEditor": "Increase Brush Size in MaskEditor", @@ -1044,7 +1034,6 @@ "Toggle Search Box": "Toggle Search Box", "Bottom Panel": "Bottom Panel", "Show Keybindings Dialog": "Show Keybindings Dialog", - "Toggle Terminal Bottom Panel": "Toggle Terminal Bottom Panel", "Toggle Logs Bottom Panel": "Toggle Logs Bottom Panel", "Toggle Essential Bottom Panel": "Toggle Essential Bottom Panel", "Toggle View Controls Bottom Panel": "Toggle View Controls Bottom Panel", @@ -1112,7 +1101,10 @@ "Credits": "Credits", "API Nodes": "API Nodes", "Notification Preferences": "Notification Preferences", - "3DViewer": "3DViewer" + "3DViewer": "3DViewer", + "HotReload": "Hot Reload", + "config": "config", + "language": "language" }, "serverConfigItems": { "listen": { @@ -1249,19 +1241,22 @@ "noise": "noise", "sampling": "sampling", "schedulers": "schedulers", + "conditioning": "conditioning", + "loaders": "loaders", "guiders": "guiders", "image": "image", "preprocessors": "preprocessors", + "utils": "utils", + "string": "string", "advanced": "advanced", "guidance": "guidance", - "loaders": "loaders", "model_merging": "model_merging", "attention_experiments": "attention_experiments", - "conditioning": "conditioning", "flux": "flux", "hooks": "hooks", "combine": "combine", "cond single": "cond single", + "context": "context", "controlnet": "controlnet", "inpaint": "inpaint", "scheduling": "scheduling", @@ -1269,6 +1264,8 @@ "video": "video", "mask": "mask", "deprecated": "deprecated", + "debug": "debug", + "model": "model", "latent": "latent", "audio": "audio", "3d": "3d", @@ -1279,12 +1276,12 @@ "BFL": "BFL", "model_patches": "model_patches", "unet": "unet", + "Gemini": "Gemini", + "text": "text", "gligen": "gligen", + "HotReload": "HotReload", "video_models": "video_models", "Ideogram": "Ideogram", - "v1": "v1", - "v2": "v2", - "v3": "v3", "postprocessing": "postprocessing", "transform": "transform", "batch": "batch", @@ -1294,34 +1291,44 @@ "Kling": "Kling", "samplers": "samplers", "operations": "operations", + "training": "training", "lotus": "lotus", "Luma": "Luma", "MiniMax": "MiniMax", - "debug": "debug", - "model": "model", "model_specific": "model_specific", + "Moonvalley Marey": "Moonvalley Marey", "OpenAI": "OpenAI", "cond pair": "cond pair", "photomaker": "photomaker", "Pika": "Pika", "PixVerse": "PixVerse", - "utils": "utils", "primitive": "primitive", + "qwen": "qwen", "Recraft": "Recraft", + "edit_models": "edit_models", + "Rodin": "Rodin", + "Runway": "Runway", "animation": "animation", "api": "api", + "save": "save", "upscale_diffusion": "upscale_diffusion", "clip": "clip", "Stability AI": "Stability AI", "stable_cascade": "stable_cascade", "3d_models": "3d_models", "style_model": "style_model", - "sd": "sd", - "Veo": "Veo" + "Tripo": "Tripo", + "Veo": "Veo", + "processing": "processing", + "Vidu": "Vidu", + "camera": "camera" }, "dataTypes": { "*": "*", "AUDIO": "AUDIO", + "AUDIO_ENCODER": "AUDIO_ENCODER", + "AUDIO_ENCODER_OUTPUT": "AUDIO_ENCODER_OUTPUT", + "AUDIO_RECORD": "AUDIO_RECORD", "BOOLEAN": "BOOLEAN", "CAMERA_CONTROL": "CAMERA_CONTROL", "CLIP": "CLIP", @@ -1332,6 +1339,7 @@ "CONTROL_NET": "CONTROL_NET", "FLOAT": "FLOAT", "FLOATS": "FLOATS", + "GEMINI_INPUT_FILES": "GEMINI_INPUT_FILES", "GLIGEN": "GLIGEN", "GUIDER": "GUIDER", "HOOK_KEYFRAMES": "HOOK_KEYFRAMES", @@ -1343,17 +1351,25 @@ "LOAD_3D": "LOAD_3D", "LOAD_3D_ANIMATION": "LOAD_3D_ANIMATION", "LOAD3D_CAMERA": "LOAD3D_CAMERA", + "LORA_MODEL": "LORA_MODEL", + "LOSS_MAP": "LOSS_MAP", "LUMA_CONCEPTS": "LUMA_CONCEPTS", "LUMA_REF": "LUMA_REF", "MASK": "MASK", "MESH": "MESH", "MODEL": "MODEL", + "MODEL_PATCH": "MODEL_PATCH", + "MODEL_TASK_ID": "MODEL_TASK_ID", "NOISE": "NOISE", + "OPENAI_CHAT_CONFIG": "OPENAI_CHAT_CONFIG", + "OPENAI_INPUT_FILES": "OPENAI_INPUT_FILES", "PHOTOMAKER": "PHOTOMAKER", "PIXVERSE_TEMPLATE": "PIXVERSE_TEMPLATE", "RECRAFT_COLOR": "RECRAFT_COLOR", "RECRAFT_CONTROLS": "RECRAFT_CONTROLS", "RECRAFT_V3_STYLE": "RECRAFT_V3_STYLE", + "RETARGET_TASK_ID": "RETARGET_TASK_ID", + "RIG_TASK_ID": "RIG_TASK_ID", "SAMPLER": "SAMPLER", "SIGMAS": "SIGMAS", "STRING": "STRING", @@ -1364,6 +1380,7 @@ "VAE": "VAE", "VIDEO": "VIDEO", "VOXEL": "VOXEL", + "WAN_CAMERA_EMBEDDING": "WAN_CAMERA_EMBEDDING", "WEBCAM": "WEBCAM" }, "maintenance": { diff --git a/src/locales/en/nodeDefs.json b/src/locales/en/nodeDefs.json index e1cb439870..aa53254898 100644 --- a/src/locales/en/nodeDefs.json +++ b/src/locales/en/nodeDefs.json @@ -30,6 +30,50 @@ } } }, + "APG": { + "display_name": "Adaptive Projected Guidance", + "inputs": { + "model": { + "name": "model" + }, + "eta": { + "name": "eta", + "tooltip": "Controls the scale of the parallel guidance vector. Default CFG behavior at a setting of 1." + }, + "norm_threshold": { + "name": "norm_threshold", + "tooltip": "Normalize guidance vector to this value, normalization disable at a setting of 0." + }, + "momentum": { + "name": "momentum", + "tooltip": "Controls a running average of guidance during diffusion, disabled at a setting of 0." + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "AudioEncoderEncode": { + "display_name": "AudioEncoderEncode", + "inputs": { + "audio_encoder": { + "name": "audio_encoder" + }, + "audio": { + "name": "audio" + } + } + }, + "AudioEncoderLoader": { + "display_name": "AudioEncoderLoader", + "inputs": { + "audio_encoder_name": { + "name": "audio_encoder_name" + } + } + }, "BasicGuider": { "display_name": "BasicGuider", "inputs": { @@ -89,6 +133,22 @@ } } }, + "CaseConverter": { + "display_name": "Case Converter", + "inputs": { + "string": { + "name": "string" + }, + "mode": { + "name": "mode" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "CFGGuider": { "display_name": "CFGGuider", "inputs": { @@ -106,6 +166,22 @@ } } }, + "CFGNorm": { + "display_name": "CFGNorm", + "inputs": { + "model": { + "name": "model" + }, + "strength": { + "name": "strength" + } + }, + "outputs": { + "0": { + "name": "patched_model" + } + } + }, "CFGZeroStar": { "display_name": "CFGZeroStar", "inputs": { @@ -186,11 +262,16 @@ "out": { "name": "out" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "CLIPLoader": { "display_name": "Load CLIP", - "description": "[Recipes]\n\nstable_diffusion: clip-l\nstable_cascade: clip-g\nsd3: t5 xxl/ clip-g / clip-l\nstable_audio: t5 base\nmochi: t5 xxl\ncosmos: old t5 xxl\nlumina2: gemma 2 2B\nwan: umt5 xxl\n hidream: llama-3.1 (Recommend) or t5", + "description": "[Recipes]\n\nstable_diffusion: clip-l\nstable_cascade: clip-g\nsd3: t5 xxl/ clip-g / clip-l\nstable_audio: t5 base\nmochi: t5 xxl\ncosmos: old t5 xxl\nlumina2: gemma 2 2B\nwan: umt5 xxl\n hidream: llama-3.1 (Recommend) or t5\nomnigen2: qwen vl 2.5 3B", "inputs": { "clip_name": { "name": "clip_name" @@ -808,6 +889,49 @@ } } }, + "ContextWindowsManual": { + "display_name": "Context Windows (Manual)", + "description": "Manually set context windows.", + "inputs": { + "model": { + "name": "model", + "tooltip": "The model to apply context windows to during sampling." + }, + "context_length": { + "name": "context_length", + "tooltip": "The length of the context window." + }, + "context_overlap": { + "name": "context_overlap", + "tooltip": "The overlap of the context window." + }, + "context_schedule": { + "name": "context_schedule", + "tooltip": "The stride of the context window." + }, + "context_stride": { + "name": "context_stride", + "tooltip": "The stride of the context window; only applicable to uniform schedules." + }, + "closed_loop": { + "name": "closed_loop", + "tooltip": "Whether to close the context window loop; only applicable to looped schedules." + }, + "fuse_method": { + "name": "fuse_method", + "tooltip": "The method to use to fuse the context windows." + }, + "dim": { + "name": "dim", + "tooltip": "The dimension to apply the context windows to." + } + }, + "outputs": { + "0": { + "tooltip": "The model with context windows applied during sampling." + } + } + }, "ControlNetApply": { "display_name": "Apply ControlNet (OLD)", "inputs": { @@ -973,6 +1097,32 @@ } } }, + "CosmosPredict2ImageToVideoLatent": { + "display_name": "CosmosPredict2ImageToVideoLatent", + "inputs": { + "vae": { + "name": "vae" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "start_image": { + "name": "start_image" + }, + "end_image": { + "name": "end_image" + } + } + }, "CreateHookKeyframe": { "display_name": "Create Hook Keyframe", "inputs": { @@ -1128,6 +1278,11 @@ "name": "audio", "tooltip": "The audio to add to the video." } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "CropMask": { @@ -1200,6 +1355,9 @@ }, "cfg_cond2_negative": { "name": "cfg_cond2_negative" + }, + "style": { + "name": "style" } } }, @@ -1221,6 +1379,54 @@ } } }, + "EasyCache": { + "display_name": "EasyCache", + "description": "Native EasyCache implementation.", + "inputs": { + "model": { + "name": "model", + "tooltip": "The model to add EasyCache to." + }, + "reuse_threshold": { + "name": "reuse_threshold", + "tooltip": "The threshold for reusing cached steps." + }, + "start_percent": { + "name": "start_percent", + "tooltip": "The relative sampling step to begin use of EasyCache." + }, + "end_percent": { + "name": "end_percent", + "tooltip": "The relative sampling step to end use of EasyCache." + }, + "verbose": { + "name": "verbose", + "tooltip": "Whether to log verbose information." + } + }, + "outputs": { + "0": { + "tooltip": "The model with EasyCache." + } + } + }, + "EmptyAceStepLatentAudio": { + "display_name": "EmptyAceStepLatentAudio", + "inputs": { + "seconds": { + "name": "seconds" + }, + "batch_size": { + "name": "batch_size", + "tooltip": "The number of latent images in the batch." + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "EmptyCosmosLatentVideo": { "display_name": "EmptyCosmosLatentVideo", "inputs": { @@ -1273,7 +1479,7 @@ } }, "EmptyLatentAudio": { - "display_name": "EmptyLatentAudio", + "display_name": "Empty Latent Audio", "inputs": { "seconds": { "name": "seconds" @@ -1449,6 +1655,98 @@ } } }, + "FluxKontextImageScale": { + "display_name": "FluxKontextImageScale", + "description": "This node resizes the image to one that is more optimal for flux kontext.", + "inputs": { + "image": { + "name": "image" + } + } + }, + "FluxKontextMaxImageNode": { + "display_name": "Flux.1 Kontext [max] Image", + "description": "Edits images using Flux.1 Kontext [max] via api based on prompt and aspect ratio.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Prompt for the image generation - specify what and how to edit." + }, + "aspect_ratio": { + "name": "aspect_ratio", + "tooltip": "Aspect ratio of image; must be between 1:4 and 4:1." + }, + "guidance": { + "name": "guidance", + "tooltip": "Guidance strength for the image generation process" + }, + "steps": { + "name": "steps", + "tooltip": "Number of steps for the image generation process" + }, + "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)." + }, + "input_image": { + "name": "input_image" + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, + "FluxKontextMultiReferenceLatentMethod": { + "display_name": "FluxKontextMultiReferenceLatentMethod", + "inputs": { + "conditioning": { + "name": "conditioning" + }, + "reference_latents_method": { + "name": "reference_latents_method" + } + } + }, + "FluxKontextProImageNode": { + "display_name": "Flux.1 Kontext [pro] Image", + "description": "Edits images using Flux.1 Kontext [pro] via api based on prompt and aspect ratio.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Prompt for the image generation - specify what and how to edit." + }, + "aspect_ratio": { + "name": "aspect_ratio", + "tooltip": "Aspect ratio of image; must be between 1:4 and 4:1." + }, + "guidance": { + "name": "guidance", + "tooltip": "Guidance strength for the image generation process" + }, + "steps": { + "name": "steps", + "tooltip": "Number of steps for the image generation process" + }, + "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)." + }, + "input_image": { + "name": "input_image" + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, "FluxProCannyNode": { "display_name": "Flux.1 Canny Control Image", "description": "Generate image using a control image (canny).", @@ -1709,6 +2007,106 @@ } } }, + "GeminiImageNode": { + "display_name": "Google Gemini Image", + "description": "Edit images synchronously via Google API.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text prompt for generation" + }, + "model": { + "name": "model", + "tooltip": "The Gemini model to use for generating responses." + }, + "seed": { + "name": "seed", + "tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used." + }, + "images": { + "name": "images", + "tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node." + }, + "files": { + "name": "files", + "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node." + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, + "GeminiInputFiles": { + "display_name": "Gemini Input Files", + "description": "Loads and prepares input files to include as inputs for Gemini LLM nodes. The files will be read by the Gemini model when generating a response. The contents of the text file count toward the token limit. 🛈 TIP: Can be chained together with other Gemini Input File nodes.", + "inputs": { + "file": { + "name": "file", + "tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now." + }, + "GEMINI_INPUT_FILES": { + "name": "GEMINI_INPUT_FILES", + "tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files." + } + } + }, + "GeminiNode": { + "display_name": "Google Gemini", + "description": "Generate text responses with Google's Gemini AI model. You can provide multiple types of inputs (text, images, audio, video) as context for generating more relevant and meaningful responses.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text inputs to the model, used to generate a response. You can include detailed instructions, questions, or context for the model." + }, + "model": { + "name": "model", + "tooltip": "The Gemini model to use for generating responses." + }, + "seed": { + "name": "seed", + "tooltip": "When seed is fixed to a specific value, the model makes a best effort to provide the same response for repeated requests. Deterministic output isn't guaranteed. Also, changing the model or parameter settings, such as the temperature, can cause variations in the response even when you use the same seed value. By default, a random seed value is used." + }, + "images": { + "name": "images", + "tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node." + }, + "audio": { + "name": "audio", + "tooltip": "Optional audio to use as context for the model." + }, + "video": { + "name": "video", + "tooltip": "Optional video to use as context for the model." + }, + "files": { + "name": "files", + "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the Gemini Generate Content Input Files node." + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, + "GetImageSize": { + "display_name": "Get Image Size", + "description": "Returns width and height of the image, and passes it through unchanged.", + "inputs": { + "image": { + "name": "image" + } + }, + "outputs": { + "0": { + "name": "width" + }, + "1": { + "name": "height" + }, + "2": { + "name": "batch_size" + } + } + }, "GetVideoComponents": { "display_name": "Get Video Components", "description": "Extracts all components from a video: frames, audio, and framerate.", @@ -1720,13 +2118,16 @@ }, "outputs": { "0": { - "name": "images" + "name": "images", + "tooltip": null }, "1": { - "name": "audio" + "name": "audio", + "tooltip": null }, "2": { - "name": "fps" + "name": "fps", + "tooltip": null } } }, @@ -1795,6 +2196,9 @@ } } }, + "HotReload_Terminal": { + "display_name": "Terminal" + }, "Hunyuan3Dv2Conditioning": { "display_name": "Hunyuan3Dv2Conditioning", "inputs": { @@ -1909,7 +2313,7 @@ }, "IdeogramV1": { "display_name": "Ideogram V1", - "description": "Generates images synchronously using the Ideogram V1 model.\n\nImages links are available for a limited period of time; if you would like to keep the image, you must download it.", + "description": "Generates images using the Ideogram V1 model.", "inputs": { "prompt": { "name": "prompt", @@ -1940,11 +2344,16 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "IdeogramV2": { "display_name": "Ideogram V2", - "description": "Generates images synchronously using the Ideogram V2 model.\n\nImages links are available for a limited period of time; if you would like to keep the image, you must download it.", + "description": "Generates images using the Ideogram V2 model.", "inputs": { "prompt": { "name": "prompt", @@ -1983,11 +2392,16 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "IdeogramV3": { "display_name": "Ideogram V3", - "description": "Generates images synchronously using the Ideogram V3 model.\n\nSupports both regular image generation from text prompts and image editing with mask.\nImages links are available for a limited period of time; if you would like to keep the image, you must download it.", + "description": "Generates images using the Ideogram V3 model. Supports both regular image generation from text prompts and image editing with mask.", "inputs": { "prompt": { "name": "prompt", @@ -2026,6 +2440,29 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "ImageAddNoise": { + "display_name": "ImageAddNoise", + "inputs": { + "image": { + "name": "image" + }, + "seed": { + "name": "seed", + "tooltip": "The random seed used for creating the noise." + }, + "strength": { + "name": "strength" + }, + "control_after_generate": { + "name": "control after generate" + } } }, "ImageBatch": { @@ -2124,6 +2561,17 @@ } } }, + "ImageFlip": { + "display_name": "ImageFlip", + "inputs": { + "image": { + "name": "image" + }, + "flip_method": { + "name": "flip_method" + } + } + }, "ImageFromBatch": { "display_name": "ImageFromBatch", "inputs": { @@ -2227,6 +2675,17 @@ } } }, + "ImageRotate": { + "display_name": "ImageRotate", + "inputs": { + "image": { + "name": "image" + }, + "rotation": { + "name": "rotation" + } + } + }, "ImageScale": { "display_name": "Upscale Image", "inputs": { @@ -2292,6 +2751,30 @@ } } }, + "ImageStitch": { + "display_name": "Image Stitch", + "description": "\nStitches image2 to image1 in the specified direction.\nIf image2 is not provided, returns image1 unchanged.\nOptional spacing can be added between images.\n", + "inputs": { + "image1": { + "name": "image1" + }, + "direction": { + "name": "direction" + }, + "match_image_size": { + "name": "match_image_size" + }, + "spacing_width": { + "name": "spacing_width" + }, + "spacing_color": { + "name": "spacing_color" + }, + "image2": { + "name": "image2" + } + } + }, "ImageToMask": { "display_name": "Convert Image to Mask", "inputs": { @@ -2570,7 +3053,7 @@ "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." + "tooltip": "The reference image used to generate the video." }, "prompt": { "name": "prompt", @@ -2645,7 +3128,7 @@ }, "KlingLipSyncAudioToVideoNode": { "display_name": "Kling Lip Sync Video with Audio", - "description": "Kling Lip Sync Audio to Video Node. Syncs mouth movements in a video file to the audio content of an audio file.", + "description": "Kling Lip Sync Audio to Video Node. Syncs mouth movements in a video file to the audio content of an audio file. When using, ensure that the audio contains clearly distinguishable vocals and that the video contains a distinct face. The audio file should not be larger than 5MB. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "inputs": { "video": { "name": "video" @@ -2668,7 +3151,7 @@ }, "KlingLipSyncTextToVideoNode": { "display_name": "Kling Lip Sync Video with Text", - "description": "Kling Lip Sync Text to Video Node. Syncs mouth movements in a video file to a text prompt.", + "description": "Kling Lip Sync Text to Video Node. Syncs mouth movements in a video file to a text prompt. The video file should not be larger than 100MB, should have height/width between 720px and 1920px, and should be between 2s and 10s in length.", "inputs": { "video": { "name": "video" @@ -2824,7 +3307,7 @@ }, "KlingVirtualTryOnNode": { "display_name": "Kling Virtual Try On", - "description": "Kling Virtual Try On Node. Input a human image and a cloth image to try on the cloth on the human.", + "description": "Kling Virtual Try On Node. Input a human image and a cloth image to try on the cloth on the human. You can merge multiple clothing item pictures into one image with a white background.", "inputs": { "human_image": { "name": "human_image" @@ -3078,6 +3561,20 @@ } } }, + "LatentConcat": { + "display_name": "LatentConcat", + "inputs": { + "samples1": { + "name": "samples1" + }, + "samples2": { + "name": "samples2" + }, + "dim": { + "name": "dim" + } + } + }, "LatentCrop": { "display_name": "Crop Latent", "inputs": { @@ -3098,6 +3595,23 @@ } } }, + "LatentCut": { + "display_name": "LatentCut", + "inputs": { + "samples": { + "name": "samples" + }, + "dim": { + "name": "dim" + }, + "index": { + "name": "index" + }, + "amount": { + "name": "amount" + } + } + }, "LatentFlip": { "display_name": "Flip Latent", "inputs": { @@ -3226,6 +3740,37 @@ } } }, + "LazyCache": { + "display_name": "LazyCache", + "description": "A homebrew version of EasyCache - even 'easier' version of EasyCache to implement. Overall works worse than EasyCache, but better in some rare cases AND universal compatibility with everything in ComfyUI.", + "inputs": { + "model": { + "name": "model", + "tooltip": "The model to add LazyCache to." + }, + "reuse_threshold": { + "name": "reuse_threshold", + "tooltip": "The threshold for reusing cached steps." + }, + "start_percent": { + "name": "start_percent", + "tooltip": "The relative sampling step to begin use of LazyCache." + }, + "end_percent": { + "name": "end_percent", + "tooltip": "The relative sampling step to end use of LazyCache." + }, + "verbose": { + "name": "verbose", + "tooltip": "Whether to log verbose information." + } + }, + "outputs": { + "0": { + "tooltip": "The model with LazyCache." + } + } + }, "Load3D": { "display_name": "Load 3D", "inputs": { @@ -3242,7 +3787,8 @@ "name": "height" }, "clear": {}, - "upload 3d model": {} + "upload 3d model": {}, + "upload extra resources": {} }, "outputs": { "0": { @@ -3262,6 +3808,9 @@ }, "5": { "name": "camera_info" + }, + "6": { + "name": "recording_video" } } }, @@ -3281,7 +3830,8 @@ "name": "height" }, "clear": {}, - "upload 3d model": {} + "upload 3d model": {}, + "upload extra resources": {} }, "outputs": { "0": { @@ -3298,11 +3848,14 @@ }, "4": { "name": "camera_info" + }, + "5": { + "name": "recording_video" } } }, "LoadAudio": { - "display_name": "LoadAudio", + "display_name": "Load Audio", "inputs": { "audio": { "name": "audio" @@ -3347,12 +3900,51 @@ "image": { "name": "image" }, + "Auto-refresh after generation": {}, "refresh": {}, "upload": { "name": "choose file to upload" } } }, + "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": { + "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." + }, + "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." + } + } + }, "LoadLatent": { "display_name": "LoadLatent", "inputs": { @@ -3370,6 +3962,11 @@ "upload": { "name": "choose file to upload" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "LoraLoader": { @@ -3426,6 +4023,29 @@ } } }, + "LoraModelLoader": { + "display_name": "Load LoRA Model", + "description": "Load Trained LoRA weights from Train LoRA node.", + "inputs": { + "model": { + "name": "model", + "tooltip": "The diffusion model the LoRA will be applied to." + }, + "lora": { + "name": "lora", + "tooltip": "The LoRA model to apply to the diffusion model." + }, + "strength_model": { + "name": "strength_model", + "tooltip": "How strongly to modify the diffusion model. This value can be negative." + } + }, + "outputs": { + "0": { + "tooltip": "The modified diffusion model." + } + } + }, "LoraSave": { "display_name": "Extract and Save Lora", "inputs": { @@ -3451,6 +4071,18 @@ } } }, + "LossGraphNode": { + "display_name": "Plot Loss Graph", + "description": "Plots the loss graph and saves it to the output directory.", + "inputs": { + "loss": { + "name": "loss" + }, + "filename_prefix": { + "name": "filename_prefix" + } + } + }, "LotusConditioning": { "display_name": "LotusConditioning", "outputs": { @@ -3873,6 +4505,39 @@ } } }, + "MinimaxHailuoVideoNode": { + "display_name": "MiniMax Hailuo Video", + "description": "Generates videos from prompt, with optional start frame using the new MiniMax Hailuo-02 model.", + "inputs": { + "prompt_text": { + "name": "prompt_text", + "tooltip": "Text prompt to guide the video generation." + }, + "seed": { + "name": "seed", + "tooltip": "The random seed used for creating the noise." + }, + "first_frame_image": { + "name": "first_frame_image", + "tooltip": "Optional image to use as the first frame to generate a video." + }, + "prompt_optimizer": { + "name": "prompt_optimizer", + "tooltip": "Optimize prompt to improve generation quality when needed." + }, + "duration": { + "name": "duration", + "tooltip": "The length of the output video in seconds." + }, + "resolution": { + "name": "resolution", + "tooltip": "The dimensions of the video display. 1080p corresponds to 1920 x 1080 pixels, 768p corresponds to 1366 x 768 pixels." + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, "MinimaxImageToVideoNode": { "display_name": "MiniMax Image to Video", "description": "Generates videos from an image and prompts using MiniMax's API", @@ -4351,6 +5016,250 @@ } } }, + "ModelMergeCosmosPredict2_14B": { + "display_name": "ModelMergeCosmosPredict2_14B", + "inputs": { + "model1": { + "name": "model1" + }, + "model2": { + "name": "model2" + }, + "pos_embedder_": { + "name": "pos_embedder." + }, + "x_embedder_": { + "name": "x_embedder." + }, + "t_embedder_": { + "name": "t_embedder." + }, + "t_embedding_norm_": { + "name": "t_embedding_norm." + }, + "blocks_0_": { + "name": "blocks.0." + }, + "blocks_1_": { + "name": "blocks.1." + }, + "blocks_2_": { + "name": "blocks.2." + }, + "blocks_3_": { + "name": "blocks.3." + }, + "blocks_4_": { + "name": "blocks.4." + }, + "blocks_5_": { + "name": "blocks.5." + }, + "blocks_6_": { + "name": "blocks.6." + }, + "blocks_7_": { + "name": "blocks.7." + }, + "blocks_8_": { + "name": "blocks.8." + }, + "blocks_9_": { + "name": "blocks.9." + }, + "blocks_10_": { + "name": "blocks.10." + }, + "blocks_11_": { + "name": "blocks.11." + }, + "blocks_12_": { + "name": "blocks.12." + }, + "blocks_13_": { + "name": "blocks.13." + }, + "blocks_14_": { + "name": "blocks.14." + }, + "blocks_15_": { + "name": "blocks.15." + }, + "blocks_16_": { + "name": "blocks.16." + }, + "blocks_17_": { + "name": "blocks.17." + }, + "blocks_18_": { + "name": "blocks.18." + }, + "blocks_19_": { + "name": "blocks.19." + }, + "blocks_20_": { + "name": "blocks.20." + }, + "blocks_21_": { + "name": "blocks.21." + }, + "blocks_22_": { + "name": "blocks.22." + }, + "blocks_23_": { + "name": "blocks.23." + }, + "blocks_24_": { + "name": "blocks.24." + }, + "blocks_25_": { + "name": "blocks.25." + }, + "blocks_26_": { + "name": "blocks.26." + }, + "blocks_27_": { + "name": "blocks.27." + }, + "blocks_28_": { + "name": "blocks.28." + }, + "blocks_29_": { + "name": "blocks.29." + }, + "blocks_30_": { + "name": "blocks.30." + }, + "blocks_31_": { + "name": "blocks.31." + }, + "blocks_32_": { + "name": "blocks.32." + }, + "blocks_33_": { + "name": "blocks.33." + }, + "blocks_34_": { + "name": "blocks.34." + }, + "blocks_35_": { + "name": "blocks.35." + }, + "final_layer_": { + "name": "final_layer." + } + } + }, + "ModelMergeCosmosPredict2_2B": { + "display_name": "ModelMergeCosmosPredict2_2B", + "inputs": { + "model1": { + "name": "model1" + }, + "model2": { + "name": "model2" + }, + "pos_embedder_": { + "name": "pos_embedder." + }, + "x_embedder_": { + "name": "x_embedder." + }, + "t_embedder_": { + "name": "t_embedder." + }, + "t_embedding_norm_": { + "name": "t_embedding_norm." + }, + "blocks_0_": { + "name": "blocks.0." + }, + "blocks_1_": { + "name": "blocks.1." + }, + "blocks_2_": { + "name": "blocks.2." + }, + "blocks_3_": { + "name": "blocks.3." + }, + "blocks_4_": { + "name": "blocks.4." + }, + "blocks_5_": { + "name": "blocks.5." + }, + "blocks_6_": { + "name": "blocks.6." + }, + "blocks_7_": { + "name": "blocks.7." + }, + "blocks_8_": { + "name": "blocks.8." + }, + "blocks_9_": { + "name": "blocks.9." + }, + "blocks_10_": { + "name": "blocks.10." + }, + "blocks_11_": { + "name": "blocks.11." + }, + "blocks_12_": { + "name": "blocks.12." + }, + "blocks_13_": { + "name": "blocks.13." + }, + "blocks_14_": { + "name": "blocks.14." + }, + "blocks_15_": { + "name": "blocks.15." + }, + "blocks_16_": { + "name": "blocks.16." + }, + "blocks_17_": { + "name": "blocks.17." + }, + "blocks_18_": { + "name": "blocks.18." + }, + "blocks_19_": { + "name": "blocks.19." + }, + "blocks_20_": { + "name": "blocks.20." + }, + "blocks_21_": { + "name": "blocks.21." + }, + "blocks_22_": { + "name": "blocks.22." + }, + "blocks_23_": { + "name": "blocks.23." + }, + "blocks_24_": { + "name": "blocks.24." + }, + "blocks_25_": { + "name": "blocks.25." + }, + "blocks_26_": { + "name": "blocks.26." + }, + "blocks_27_": { + "name": "blocks.27." + }, + "final_layer_": { + "name": "final_layer." + } + } + }, "ModelMergeFlux1": { "display_name": "ModelMergeFlux1", "inputs": { @@ -4831,6 +5740,215 @@ } } }, + "ModelMergeQwenImage": { + "display_name": "ModelMergeQwenImage", + "inputs": { + "model1": { + "name": "model1" + }, + "model2": { + "name": "model2" + }, + "pos_embeds_": { + "name": "pos_embeds." + }, + "img_in_": { + "name": "img_in." + }, + "txt_norm_": { + "name": "txt_norm." + }, + "txt_in_": { + "name": "txt_in." + }, + "time_text_embed_": { + "name": "time_text_embed." + }, + "transformer_blocks_0_": { + "name": "transformer_blocks.0." + }, + "transformer_blocks_1_": { + "name": "transformer_blocks.1." + }, + "transformer_blocks_2_": { + "name": "transformer_blocks.2." + }, + "transformer_blocks_3_": { + "name": "transformer_blocks.3." + }, + "transformer_blocks_4_": { + "name": "transformer_blocks.4." + }, + "transformer_blocks_5_": { + "name": "transformer_blocks.5." + }, + "transformer_blocks_6_": { + "name": "transformer_blocks.6." + }, + "transformer_blocks_7_": { + "name": "transformer_blocks.7." + }, + "transformer_blocks_8_": { + "name": "transformer_blocks.8." + }, + "transformer_blocks_9_": { + "name": "transformer_blocks.9." + }, + "transformer_blocks_10_": { + "name": "transformer_blocks.10." + }, + "transformer_blocks_11_": { + "name": "transformer_blocks.11." + }, + "transformer_blocks_12_": { + "name": "transformer_blocks.12." + }, + "transformer_blocks_13_": { + "name": "transformer_blocks.13." + }, + "transformer_blocks_14_": { + "name": "transformer_blocks.14." + }, + "transformer_blocks_15_": { + "name": "transformer_blocks.15." + }, + "transformer_blocks_16_": { + "name": "transformer_blocks.16." + }, + "transformer_blocks_17_": { + "name": "transformer_blocks.17." + }, + "transformer_blocks_18_": { + "name": "transformer_blocks.18." + }, + "transformer_blocks_19_": { + "name": "transformer_blocks.19." + }, + "transformer_blocks_20_": { + "name": "transformer_blocks.20." + }, + "transformer_blocks_21_": { + "name": "transformer_blocks.21." + }, + "transformer_blocks_22_": { + "name": "transformer_blocks.22." + }, + "transformer_blocks_23_": { + "name": "transformer_blocks.23." + }, + "transformer_blocks_24_": { + "name": "transformer_blocks.24." + }, + "transformer_blocks_25_": { + "name": "transformer_blocks.25." + }, + "transformer_blocks_26_": { + "name": "transformer_blocks.26." + }, + "transformer_blocks_27_": { + "name": "transformer_blocks.27." + }, + "transformer_blocks_28_": { + "name": "transformer_blocks.28." + }, + "transformer_blocks_29_": { + "name": "transformer_blocks.29." + }, + "transformer_blocks_30_": { + "name": "transformer_blocks.30." + }, + "transformer_blocks_31_": { + "name": "transformer_blocks.31." + }, + "transformer_blocks_32_": { + "name": "transformer_blocks.32." + }, + "transformer_blocks_33_": { + "name": "transformer_blocks.33." + }, + "transformer_blocks_34_": { + "name": "transformer_blocks.34." + }, + "transformer_blocks_35_": { + "name": "transformer_blocks.35." + }, + "transformer_blocks_36_": { + "name": "transformer_blocks.36." + }, + "transformer_blocks_37_": { + "name": "transformer_blocks.37." + }, + "transformer_blocks_38_": { + "name": "transformer_blocks.38." + }, + "transformer_blocks_39_": { + "name": "transformer_blocks.39." + }, + "transformer_blocks_40_": { + "name": "transformer_blocks.40." + }, + "transformer_blocks_41_": { + "name": "transformer_blocks.41." + }, + "transformer_blocks_42_": { + "name": "transformer_blocks.42." + }, + "transformer_blocks_43_": { + "name": "transformer_blocks.43." + }, + "transformer_blocks_44_": { + "name": "transformer_blocks.44." + }, + "transformer_blocks_45_": { + "name": "transformer_blocks.45." + }, + "transformer_blocks_46_": { + "name": "transformer_blocks.46." + }, + "transformer_blocks_47_": { + "name": "transformer_blocks.47." + }, + "transformer_blocks_48_": { + "name": "transformer_blocks.48." + }, + "transformer_blocks_49_": { + "name": "transformer_blocks.49." + }, + "transformer_blocks_50_": { + "name": "transformer_blocks.50." + }, + "transformer_blocks_51_": { + "name": "transformer_blocks.51." + }, + "transformer_blocks_52_": { + "name": "transformer_blocks.52." + }, + "transformer_blocks_53_": { + "name": "transformer_blocks.53." + }, + "transformer_blocks_54_": { + "name": "transformer_blocks.54." + }, + "transformer_blocks_55_": { + "name": "transformer_blocks.55." + }, + "transformer_blocks_56_": { + "name": "transformer_blocks.56." + }, + "transformer_blocks_57_": { + "name": "transformer_blocks.57." + }, + "transformer_blocks_58_": { + "name": "transformer_blocks.58." + }, + "transformer_blocks_59_": { + "name": "transformer_blocks.59." + }, + "proj_out_": { + "name": "proj_out." + } + } + }, "ModelMergeSD1": { "display_name": "ModelMergeSD1", "inputs": { @@ -5538,6 +6656,14 @@ } } }, + "ModelPatchLoader": { + "display_name": "ModelPatchLoader", + "inputs": { + "name": { + "name": "name" + } + } + }, "ModelSamplingAuraFlow": { "display_name": "ModelSamplingAuraFlow", "inputs": { @@ -5667,6 +6793,124 @@ } } }, + "MoonvalleyImg2VideoNode": { + "display_name": "Moonvalley Marey Image to Video", + "description": "Moonvalley Marey Image to Video Node", + "inputs": { + "prompt": { + "name": "prompt" + }, + "negative_prompt": { + "name": "negative_prompt", + "tooltip": "Negative prompt text" + }, + "resolution": { + "name": "resolution", + "tooltip": "Resolution of the output video" + }, + "prompt_adherence": { + "name": "prompt_adherence", + "tooltip": "Guidance scale for generation control" + }, + "seed": { + "name": "seed", + "tooltip": "Random seed value" + }, + "steps": { + "name": "steps", + "tooltip": "Number of denoising steps" + }, + "image": { + "name": "image", + "tooltip": "The reference image used to generate the video" + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "name": "video" + } + } + }, + "MoonvalleyTxt2VideoNode": { + "display_name": "Moonvalley Marey Text to Video", + "inputs": { + "prompt": { + "name": "prompt" + }, + "negative_prompt": { + "name": "negative_prompt", + "tooltip": "Negative prompt text" + }, + "resolution": { + "name": "resolution", + "tooltip": "Resolution of the output video" + }, + "prompt_adherence": { + "name": "prompt_adherence", + "tooltip": "Guidance scale for generation control" + }, + "seed": { + "name": "seed", + "tooltip": "Random seed value" + }, + "steps": { + "name": "steps", + "tooltip": "Number of denoising steps" + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "name": "video" + } + } + }, + "MoonvalleyVideo2VideoNode": { + "display_name": "Moonvalley Marey Video to Video", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Describes the video to generate" + }, + "negative_prompt": { + "name": "negative_prompt", + "tooltip": "Negative prompt text" + }, + "seed": { + "name": "seed", + "tooltip": "Random seed value" + }, + "prompt_adherence": { + "name": "prompt_adherence", + "tooltip": "Guidance scale for generation control" + }, + "video": { + "name": "video", + "tooltip": "The reference video used to generate the output video. Must be at least 5 seconds long. Videos longer than 5s will be automatically trimmed. Only MP4 format supported." + }, + "control_type": { + "name": "control_type" + }, + "motion_intensity": { + "name": "motion_intensity", + "tooltip": "Only used if control_type is 'Motion Transfer'" + }, + "image": { + "name": "image", + "tooltip": "The reference image used to generate the video" + } + }, + "outputs": { + "0": { + "name": "video" + } + } + }, "Morphology": { "display_name": "ImageMorphology", "inputs": { @@ -5681,6 +6925,54 @@ } } }, + "OpenAIChatConfig": { + "display_name": "OpenAI ChatGPT Advanced Options", + "description": "Allows specifying advanced configuration options for the OpenAI Chat Nodes.", + "inputs": { + "truncation": { + "name": "truncation", + "tooltip": "The truncation strategy to use for the model response. auto: If the context of this response and previous ones exceeds the model's context window size, the model will truncate the response to fit the context window by dropping input items in the middle of the conversation.disabled: If a model response will exceed the context window size for a model, the request will fail with a 400 error" + }, + "max_output_tokens": { + "name": "max_output_tokens", + "tooltip": "An upper bound for the number of tokens that can be generated for a response, including visible output tokens" + }, + "instructions": { + "name": "instructions", + "tooltip": "Instructions for the model on how to generate the response" + } + } + }, + "OpenAIChatNode": { + "display_name": "OpenAI ChatGPT", + "description": "Generate text responses from an OpenAI model.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text inputs to the model, used to generate a response." + }, + "persist_context": { + "name": "persist_context", + "tooltip": "Persist chat context between calls (multi-turn conversation)" + }, + "model": { + "name": "model", + "tooltip": "The model used to generate the response" + }, + "images": { + "name": "images", + "tooltip": "Optional image(s) to use as context for the model. To include multiple images, you can use the Batch Images node." + }, + "files": { + "name": "files", + "tooltip": "Optional file(s) to use as context for the model. Accepts inputs from the OpenAI Chat Input Files node." + }, + "advanced_options": { + "name": "advanced_options", + "tooltip": "Optional configuration for the model. Accepts inputs from the OpenAI Chat Advanced Options node." + } + } + }, "OpenAIDalle2": { "display_name": "OpenAI DALL·E 2", "description": "Generates images synchronously via OpenAI's DALL·E 2 endpoint.", @@ -5784,6 +7076,20 @@ } } }, + "OpenAIInputFiles": { + "display_name": "OpenAI ChatGPT Input Files", + "description": "Loads and prepares input files (text, pdf, etc.) to include as inputs for the OpenAI Chat Node. The files will be read by the OpenAI model when generating a response. 🛈 TIP: Can be chained together with other OpenAI Input File nodes.", + "inputs": { + "file": { + "name": "file", + "tooltip": "Input files to include as context for the model. Only accepts text (.txt) and PDF (.pdf) files for now." + }, + "OPENAI_INPUT_FILES": { + "name": "OPENAI_INPUT_FILES", + "tooltip": "An optional additional file(s) to batch together with the file loaded from this node. Allows chaining of input files so that a single message can include multiple input files." + } + } + }, "OptimalStepsScheduler": { "display_name": "OptimalStepsScheduler", "inputs": { @@ -6029,7 +7335,7 @@ }, "Pikadditions": { "display_name": "Pikadditions (Video Object Insertion)", - "description": "Add any object or image into your video. Upload a video and specify what you’d like to add to create a seamlessly integrated result.", + "description": "Add any object or image into your video. Upload a video and specify what you'd like to add to create a seamlessly integrated result.", "inputs": { "video": { "name": "video", @@ -6249,7 +7555,7 @@ }, "PixverseImageToVideoNode": { "display_name": "PixVerse Image to Video", - "description": "Generates videos synchronously based on prompt and output_size.", + "description": "Generates videos based on prompt and output_size.", "inputs": { "image": { "name": "image" @@ -6299,7 +7605,7 @@ }, "PixverseTextToVideoNode": { "display_name": "PixVerse Text to Video", - "description": "Generates videos synchronously based on prompt and output_size.", + "description": "Generates videos based on prompt and output_size.", "inputs": { "prompt": { "name": "prompt", @@ -6336,7 +7642,7 @@ }, "PixverseTransitionVideoNode": { "display_name": "PixVerse Transition Video", - "description": "Generates videos synchronously based on prompt and output_size.", + "description": "Generates videos based on prompt and output_size.", "inputs": { "first_frame": { "name": "first_frame" @@ -6445,7 +7751,7 @@ } }, "PreviewAudio": { - "display_name": "PreviewAudio", + "display_name": "Preview Audio", "inputs": { "audio": { "name": "audio" @@ -6470,6 +7776,11 @@ "value": { "name": "value" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "PrimitiveFloat": { @@ -6478,6 +7789,11 @@ "value": { "name": "value" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "PrimitiveInt": { @@ -6489,6 +7805,11 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "PrimitiveString": { @@ -6497,6 +7818,11 @@ "value": { "name": "value" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "PrimitiveStringMultiline": { @@ -6505,6 +7831,11 @@ "value": { "name": "value" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "QuadrupleCLIPLoader": { @@ -6525,6 +7856,29 @@ } } }, + "QwenImageDiffsynthControlnet": { + "display_name": "QwenImageDiffsynthControlnet", + "inputs": { + "model": { + "name": "model" + }, + "model_patch": { + "name": "model_patch" + }, + "vae": { + "name": "vae" + }, + "image": { + "name": "image" + }, + "strength": { + "name": "strength" + }, + "mask": { + "name": "mask" + } + } + }, "RandomNoise": { "display_name": "RandomNoise", "inputs": { @@ -6558,6 +7912,14 @@ } } }, + "RecordAudio": { + "display_name": "Record Audio", + "inputs": { + "audio": { + "name": "audio" + } + } + }, "RecraftColorRGB": { "display_name": "Recraft Color RGB", "description": "Create Recraft Color by choosing specific RGB values.", @@ -6870,6 +8232,109 @@ } } }, + "ReferenceLatent": { + "display_name": "ReferenceLatent", + "description": "This node sets the guiding latent for an edit model. If the model supports it you can chain multiple to set multiple reference images.", + "inputs": { + "conditioning": { + "name": "conditioning" + }, + "latent": { + "name": "latent" + } + } + }, + "RegexExtract": { + "display_name": "Regex Extract", + "inputs": { + "string": { + "name": "string" + }, + "regex_pattern": { + "name": "regex_pattern" + }, + "mode": { + "name": "mode" + }, + "case_insensitive": { + "name": "case_insensitive" + }, + "multiline": { + "name": "multiline" + }, + "dotall": { + "name": "dotall" + }, + "group_index": { + "name": "group_index" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "RegexMatch": { + "display_name": "Regex Match", + "inputs": { + "string": { + "name": "string" + }, + "regex_pattern": { + "name": "regex_pattern" + }, + "case_insensitive": { + "name": "case_insensitive" + }, + "multiline": { + "name": "multiline" + }, + "dotall": { + "name": "dotall" + } + }, + "outputs": { + "0": { + "name": "matches", + "tooltip": null + } + } + }, + "RegexReplace": { + "display_name": "Regex Replace", + "description": "Find and replace text using regex patterns.", + "inputs": { + "string": { + "name": "string" + }, + "regex_pattern": { + "name": "regex_pattern" + }, + "replace": { + "name": "replace" + }, + "case_insensitive": { + "name": "case_insensitive" + }, + "multiline": { + "name": "multiline" + }, + "dotall": { + "name": "dotall", + "tooltip": "When enabled, the dot (.) character will match any character including newline characters. When disabled, dots won't match newlines." + }, + "count": { + "name": "count", + "tooltip": "Maximum number of replacements to make. Set to 0 to replace all occurrences (default). Set to 1 to replace only the first match, 2 for the first two matches, etc." + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "RenormCFG": { "display_name": "RenormCFG", "inputs": { @@ -6917,6 +8382,214 @@ } } }, + "ResizeAndPadImage": { + "display_name": "ResizeAndPadImage", + "inputs": { + "image": { + "name": "image" + }, + "target_width": { + "name": "target_width" + }, + "target_height": { + "name": "target_height" + }, + "padding_color": { + "name": "padding_color" + }, + "interpolation": { + "name": "interpolation" + } + } + }, + "Rodin3D_Detail": { + "display_name": "Rodin 3D Generate - Detail Generate", + "description": "Generate 3D Assets using Rodin API", + "inputs": { + "Images": { + "name": "Images" + }, + "Seed": { + "name": "Seed" + }, + "Material_Type": { + "name": "Material_Type" + }, + "Polygon_count": { + "name": "Polygon_count" + } + }, + "outputs": { + "0": { + "name": "3D Model Path" + } + } + }, + "Rodin3D_Regular": { + "display_name": "Rodin 3D Generate - Regular Generate", + "description": "Generate 3D Assets using Rodin API", + "inputs": { + "Images": { + "name": "Images" + }, + "Seed": { + "name": "Seed" + }, + "Material_Type": { + "name": "Material_Type" + }, + "Polygon_count": { + "name": "Polygon_count" + } + }, + "outputs": { + "0": { + "name": "3D Model Path" + } + } + }, + "Rodin3D_Sketch": { + "display_name": "Rodin 3D Generate - Sketch Generate", + "description": "Generate 3D Assets using Rodin API", + "inputs": { + "Images": { + "name": "Images" + }, + "Seed": { + "name": "Seed" + } + }, + "outputs": { + "0": { + "name": "3D Model Path" + } + } + }, + "Rodin3D_Smooth": { + "display_name": "Rodin 3D Generate - Smooth Generate", + "description": "Generate 3D Assets using Rodin API", + "inputs": { + "Images": { + "name": "Images" + }, + "Seed": { + "name": "Seed" + }, + "Material_Type": { + "name": "Material_Type" + }, + "Polygon_count": { + "name": "Polygon_count" + } + }, + "outputs": { + "0": { + "name": "3D Model Path" + } + } + }, + "RunwayFirstLastFrameNode": { + "display_name": "Runway First-Last-Frame to Video", + "description": "Upload first and last keyframes, draft a prompt, and generate a video. More complex transitions, such as cases where the Last frame is completely different from the First frame, may benefit from the longer 10s duration. This would give the generation more time to smoothly transition between the two inputs. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/34170748696595-Creating-with-Keyframes-on-Gen-3.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text prompt for the generation" + }, + "start_frame": { + "name": "start_frame", + "tooltip": "Start frame to be used for the video" + }, + "end_frame": { + "name": "end_frame", + "tooltip": "End frame to be used for the video. Supported for gen3a_turbo only." + }, + "duration": { + "name": "duration" + }, + "ratio": { + "name": "ratio" + }, + "seed": { + "name": "seed", + "tooltip": "Random seed for generation" + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, + "RunwayImageToVideoNodeGen3a": { + "display_name": "Runway Image to Video (Gen3a Turbo)", + "description": "Generate a video from a single starting frame using Gen3a Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/33927968552339-Creating-with-Act-One-on-Gen-3-Alpha-and-Turbo.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text prompt for the generation" + }, + "start_frame": { + "name": "start_frame", + "tooltip": "Start frame to be used for the video" + }, + "duration": { + "name": "duration" + }, + "ratio": { + "name": "ratio" + }, + "seed": { + "name": "seed", + "tooltip": "Random seed for generation" + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, + "RunwayImageToVideoNodeGen4": { + "display_name": "Runway Image to Video (Gen4 Turbo)", + "description": "Generate a video from a single starting frame using Gen4 Turbo model. Before diving in, review these best practices to ensure that your input selections will set your generation up for success: https://help.runwayml.com/hc/en-us/articles/37327109429011-Creating-with-Gen-4-Video.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text prompt for the generation" + }, + "start_frame": { + "name": "start_frame", + "tooltip": "Start frame to be used for the video" + }, + "duration": { + "name": "duration" + }, + "ratio": { + "name": "ratio" + }, + "seed": { + "name": "seed", + "tooltip": "Random seed for generation" + }, + "control_after_generate": { + "name": "control after generate" + } + } + }, + "RunwayTextToImageNode": { + "display_name": "Runway Text to Image", + "description": "Generate an image from a text prompt using Runway's Gen 4 model. You can also include reference images to guide the generation.", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text prompt for the image generation" + }, + "ratio": { + "name": "ratio" + }, + "reference_image": { + "name": "reference_image", + "tooltip": "Optional reference image to guide the generation" + } + } + }, "SamplerCustom": { "display_name": "SamplerCustom", "inputs": { @@ -7082,6 +8755,24 @@ } } }, + "SamplerER_SDE": { + "display_name": "SamplerER_SDE", + "inputs": { + "solver_type": { + "name": "solver_type" + }, + "max_stage": { + "name": "max_stage" + }, + "eta": { + "name": "eta", + "tooltip": "Stochastic strength of reverse-time SDE.\nWhen eta=0, it reduces to deterministic ODE. This setting doesn't apply to ER-SDE solver type." + }, + "s_noise": { + "name": "s_noise" + } + } + }, "SamplerEulerAncestral": { "display_name": "SamplerEulerAncestral", "inputs": { @@ -7110,6 +8801,11 @@ "version": { "name": "version" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerLCMUpscale": { @@ -7124,6 +8820,11 @@ "upscale_method": { "name": "upscale_method" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "SamplerLMS": { @@ -7134,6 +8835,58 @@ } } }, + "SamplerSASolver": { + "display_name": "SamplerSASolver", + "inputs": { + "model": { + "name": "model" + }, + "eta": { + "name": "eta" + }, + "sde_start_percent": { + "name": "sde_start_percent" + }, + "sde_end_percent": { + "name": "sde_end_percent" + }, + "s_noise": { + "name": "s_noise" + }, + "predictor_order": { + "name": "predictor_order" + }, + "corrector_order": { + "name": "corrector_order" + }, + "use_pece": { + "name": "use_pece" + }, + "simple_order_2": { + "name": "simple_order_2" + } + } + }, + "SamplingPercentToSigma": { + "display_name": "SamplingPercentToSigma", + "inputs": { + "model": { + "name": "model" + }, + "sampling_percent": { + "name": "sampling_percent" + }, + "return_actual_sigma": { + "name": "return_actual_sigma", + "tooltip": "Return the actual sigma value instead of the value used for interval checks.\nThis only affects results at 0.0 and 1.0." + } + }, + "outputs": { + "0": { + "name": "sigma_value" + } + } + }, "SaveAnimatedPNG": { "display_name": "SaveAnimatedPNG", "inputs": { @@ -7175,7 +8928,7 @@ } }, "SaveAudio": { - "display_name": "SaveAudio", + "display_name": "Save Audio (FLAC)", "inputs": { "audio": { "name": "audio" @@ -7188,6 +8941,40 @@ } } }, + "SaveAudioMP3": { + "display_name": "Save Audio (MP3)", + "inputs": { + "audio": { + "name": "audio" + }, + "filename_prefix": { + "name": "filename_prefix" + }, + "quality": { + "name": "quality" + }, + "audioUI": { + "name": "audioUI" + } + } + }, + "SaveAudioOpus": { + "display_name": "Save Audio (Opus)", + "inputs": { + "audio": { + "name": "audio" + }, + "filename_prefix": { + "name": "filename_prefix" + }, + "quality": { + "name": "quality" + }, + "audioUI": { + "name": "audioUI" + } + } + }, "SaveGLB": { "display_name": "SaveGLB", "inputs": { @@ -7235,8 +9022,25 @@ } } }, - "SaveSVG": { - "display_name": "Save SVG", + "SaveLoRANode": { + "display_name": "Save LoRA Weights", + "inputs": { + "lora": { + "name": "lora", + "tooltip": "The LoRA model to save. Do not use the model with LoRA layers." + }, + "prefix": { + "name": "prefix", + "tooltip": "The prefix to use for the saved LoRA file." + }, + "steps": { + "name": "steps", + "tooltip": "Optional: The number of steps to LoRA has been trained for, used to name the saved file." + } + } + }, + "SaveSVGNode": { + "display_name": "SaveSVGNode", "description": "Save SVG files on disk.", "inputs": { "svg": { @@ -7438,6 +9242,27 @@ } } }, + "SkipLayerGuidanceDiTSimple": { + "display_name": "SkipLayerGuidanceDiTSimple", + "description": "Simple version of the SkipLayerGuidanceDiT node that only modifies the uncond pass.", + "inputs": { + "model": { + "name": "model" + }, + "double_layers": { + "name": "double_layers" + }, + "single_layers": { + "name": "single_layers" + }, + "start_percent": { + "name": "start_percent" + }, + "end_percent": { + "name": "end_percent" + } + } + }, "SkipLayerGuidanceSD3": { "display_name": "SkipLayerGuidanceSD3", "description": "Generic version of SkipLayerGuidance node that can be used on every DiT model.", @@ -7560,6 +9385,11 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "StabilityStableImageUltraNode": { @@ -7568,7 +9398,7 @@ "inputs": { "prompt": { "name": "prompt", - "tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly definesWhat you wish to see in the output image. A strong, descriptive prompt that clearly defineselements, colors, and subjects will lead to better results. To control the weight of a given word use the format `(word:weight)`,where `word` is the word you'd like to control the weight of and `weight`is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)`would convey a sky that was blue and green, but more green than blue." + "tooltip": "What you wish to see in the output image. A strong, descriptive prompt that clearly defineselements, colors, and subjects will lead to better results. To control the weight of a given word use the format `(word:weight)`,where `word` is the word you'd like to control the weight of and `weight`is a value between 0 and 1. For example: `The sky was a crisp (blue:0.3) and (green:0.8)`would convey a sky that was blue and green, but more green than blue." }, "aspect_ratio": { "name": "aspect_ratio", @@ -7596,6 +9426,11 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "StabilityUpscaleConservativeNode": { @@ -7624,6 +9459,11 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "StabilityUpscaleCreativeNode": { @@ -7656,6 +9496,11 @@ "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "StabilityUpscaleFastNode": { @@ -7665,6 +9510,11 @@ "image": { "name": "image" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "StableCascade_EmptyLatentImage": { @@ -7685,10 +9535,12 @@ }, "outputs": { "0": { - "name": "stage_c" + "name": "stage_c", + "tooltip": null }, "1": { - "name": "stage_b" + "name": "stage_b", + "tooltip": null } } }, @@ -7701,6 +9553,11 @@ "stage_c": { "name": "stage_c" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "StableCascade_StageC_VAEEncode": { @@ -7718,10 +9575,12 @@ }, "outputs": { "0": { - "name": "stage_c" + "name": "stage_c", + "tooltip": null }, "1": { - "name": "stage_b" + "name": "stage_b", + "tooltip": null } } }, @@ -7737,13 +9596,16 @@ }, "outputs": { "0": { - "name": "controlnet_input" + "name": "controlnet_input", + "tooltip": null }, "1": { - "name": "stage_c" + "name": "stage_c", + "tooltip": null }, "2": { - "name": "stage_b" + "name": "stage_b", + "tooltip": null } } }, @@ -7833,6 +9695,135 @@ } } }, + "StringCompare": { + "display_name": "Compare", + "inputs": { + "string_a": { + "name": "string_a" + }, + "string_b": { + "name": "string_b" + }, + "mode": { + "name": "mode" + }, + "case_sensitive": { + "name": "case_sensitive" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "StringConcatenate": { + "display_name": "Concatenate", + "inputs": { + "string_a": { + "name": "string_a" + }, + "string_b": { + "name": "string_b" + }, + "delimiter": { + "name": "delimiter" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "StringContains": { + "display_name": "Contains", + "inputs": { + "string": { + "name": "string" + }, + "substring": { + "name": "substring" + }, + "case_sensitive": { + "name": "case_sensitive" + } + }, + "outputs": { + "0": { + "name": "contains", + "tooltip": null + } + } + }, + "StringLength": { + "display_name": "Length", + "inputs": { + "string": { + "name": "string" + } + }, + "outputs": { + "0": { + "name": "length", + "tooltip": null + } + } + }, + "StringReplace": { + "display_name": "Replace", + "inputs": { + "string": { + "name": "string" + }, + "find": { + "name": "find" + }, + "replace": { + "name": "replace" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "StringSubstring": { + "display_name": "Substring", + "inputs": { + "string": { + "name": "string" + }, + "start": { + "name": "start" + }, + "end": { + "name": "end" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "StringTrim": { + "display_name": "Trim", + "inputs": { + "string": { + "name": "string" + }, + "mode": { + "name": "mode" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "StyleModelApply": { "display_name": "Apply Style Model", "inputs": { @@ -7955,6 +9946,42 @@ } } }, + "TCFG": { + "display_name": "Tangential Damping CFG", + "description": "TCFG – Tangential Damping CFG (2503.18137)\n\nRefine the uncond (negative) to align with the cond (positive) for improving quality.", + "inputs": { + "model": { + "name": "model" + } + }, + "outputs": { + "0": { + "name": "patched_model" + } + } + }, + "TextEncodeAceStepAudio": { + "display_name": "TextEncodeAceStepAudio", + "inputs": { + "clip": { + "name": "clip" + }, + "tags": { + "name": "tags" + }, + "lyrics": { + "name": "lyrics" + }, + "lyrics_strength": { + "name": "lyrics_strength" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "TextEncodeHunyuanVideo_ImageToVideo": { "display_name": "TextEncodeHunyuanVideo_ImageToVideo", "inputs": { @@ -7973,6 +10000,23 @@ } } }, + "TextEncodeQwenImageEdit": { + "display_name": "TextEncodeQwenImageEdit", + "inputs": { + "clip": { + "name": "clip" + }, + "prompt": { + "name": "prompt" + }, + "vae": { + "name": "vae" + }, + "image": { + "name": "image" + } + } + }, "ThresholdMask": { "display_name": "ThresholdMask", "inputs": { @@ -8006,6 +10050,92 @@ } } }, + "TrainLoraNode": { + "display_name": "Train LoRA", + "inputs": { + "model": { + "name": "model", + "tooltip": "The model to train the LoRA on." + }, + "latents": { + "name": "latents", + "tooltip": "The Latents to use for training, serve as dataset/input of the model." + }, + "positive": { + "name": "positive", + "tooltip": "The positive conditioning to use for training." + }, + "batch_size": { + "name": "batch_size", + "tooltip": "The batch size to use for training." + }, + "grad_accumulation_steps": { + "name": "grad_accumulation_steps", + "tooltip": "The number of gradient accumulation steps to use for training." + }, + "steps": { + "name": "steps", + "tooltip": "The number of steps to train the LoRA for." + }, + "learning_rate": { + "name": "learning_rate", + "tooltip": "The learning rate to use for training." + }, + "rank": { + "name": "rank", + "tooltip": "The rank of the LoRA layers." + }, + "optimizer": { + "name": "optimizer", + "tooltip": "The optimizer to use for training." + }, + "loss_function": { + "name": "loss_function", + "tooltip": "The loss function to use for training." + }, + "seed": { + "name": "seed", + "tooltip": "The seed to use for training (used in generator for LoRA weight initialization and noise sampling)" + }, + "training_dtype": { + "name": "training_dtype", + "tooltip": "The dtype to use for training." + }, + "lora_dtype": { + "name": "lora_dtype", + "tooltip": "The dtype to use for lora." + }, + "algorithm": { + "name": "algorithm", + "tooltip": "The algorithm to use for training." + }, + "gradient_checkpointing": { + "name": "gradient_checkpointing", + "tooltip": "Use gradient checkpointing for training." + }, + "existing_lora": { + "name": "existing_lora", + "tooltip": "The existing LoRA to append to. Set to None for new LoRA." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "name": "model_with_lora" + }, + "1": { + "name": "lora" + }, + "2": { + "name": "loss" + }, + "3": { + "name": "steps" + } + } + }, "TrimVideoLatent": { "display_name": "TrimVideoLatent", "inputs": { @@ -8015,6 +10145,11 @@ "trim_amount": { "name": "trim_amount" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "TripleCLIPLoader": { @@ -8032,6 +10167,268 @@ } } }, + "TripoConversionNode": { + "display_name": "Tripo: Convert model", + "inputs": { + "original_model_task_id": { + "name": "original_model_task_id" + }, + "format": { + "name": "format" + }, + "quad": { + "name": "quad" + }, + "face_limit": { + "name": "face_limit" + }, + "texture_size": { + "name": "texture_size" + }, + "texture_format": { + "name": "texture_format" + } + } + }, + "TripoImageToModelNode": { + "display_name": "Tripo: Image to Model", + "inputs": { + "image": { + "name": "image" + }, + "model_version": { + "name": "model_version", + "tooltip": "The model version to use for generation" + }, + "style": { + "name": "style" + }, + "texture": { + "name": "texture" + }, + "pbr": { + "name": "pbr" + }, + "model_seed": { + "name": "model_seed" + }, + "orientation": { + "name": "orientation" + }, + "texture_seed": { + "name": "texture_seed" + }, + "texture_quality": { + "name": "texture_quality" + }, + "texture_alignment": { + "name": "texture_alignment" + }, + "face_limit": { + "name": "face_limit" + }, + "quad": { + "name": "quad" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "model task_id" + } + } + }, + "TripoMultiviewToModelNode": { + "display_name": "Tripo: Multiview to Model", + "inputs": { + "image": { + "name": "image" + }, + "image_left": { + "name": "image_left" + }, + "image_back": { + "name": "image_back" + }, + "image_right": { + "name": "image_right" + }, + "model_version": { + "name": "model_version", + "tooltip": "The model version to use for generation" + }, + "orientation": { + "name": "orientation" + }, + "texture": { + "name": "texture" + }, + "pbr": { + "name": "pbr" + }, + "model_seed": { + "name": "model_seed" + }, + "texture_seed": { + "name": "texture_seed" + }, + "texture_quality": { + "name": "texture_quality" + }, + "texture_alignment": { + "name": "texture_alignment" + }, + "face_limit": { + "name": "face_limit" + }, + "quad": { + "name": "quad" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "model task_id" + } + } + }, + "TripoRefineNode": { + "display_name": "Tripo: Refine Draft model", + "description": "Refine a draft model created by v1.4 Tripo models only.", + "inputs": { + "model_task_id": { + "name": "model_task_id", + "tooltip": "Must be a v1.4 Tripo model" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "model task_id" + } + } + }, + "TripoRetargetNode": { + "display_name": "Tripo: Retarget rigged model", + "inputs": { + "original_model_task_id": { + "name": "original_model_task_id" + }, + "animation": { + "name": "animation" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "retarget task_id" + } + } + }, + "TripoRigNode": { + "display_name": "Tripo: Rig model", + "inputs": { + "original_model_task_id": { + "name": "original_model_task_id" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "rig task_id" + } + } + }, + "TripoTextToModelNode": { + "display_name": "Tripo: Text to Model", + "inputs": { + "prompt": { + "name": "prompt" + }, + "negative_prompt": { + "name": "negative_prompt" + }, + "model_version": { + "name": "model_version" + }, + "style": { + "name": "style" + }, + "texture": { + "name": "texture" + }, + "pbr": { + "name": "pbr" + }, + "image_seed": { + "name": "image_seed" + }, + "model_seed": { + "name": "model_seed" + }, + "texture_seed": { + "name": "texture_seed" + }, + "texture_quality": { + "name": "texture_quality" + }, + "face_limit": { + "name": "face_limit" + }, + "quad": { + "name": "quad" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "model task_id" + } + } + }, + "TripoTextureNode": { + "display_name": "Tripo: Texture model", + "inputs": { + "model_task_id": { + "name": "model_task_id" + }, + "texture": { + "name": "texture" + }, + "pbr": { + "name": "pbr" + }, + "texture_seed": { + "name": "texture_seed" + }, + "texture_quality": { + "name": "texture_quality" + }, + "texture_alignment": { + "name": "texture_alignment" + } + }, + "outputs": { + "0": { + "name": "model_file" + }, + "1": { + "name": "model task_id" + } + } + }, "unCLIPCheckpointLoader": { "display_name": "unCLIPCheckpointLoader", "inputs": { @@ -8075,6 +10472,11 @@ "out": { "name": "out" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "UNETLoader": { @@ -8106,6 +10508,11 @@ "out": { "name": "out" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "UNetTemporalAttentionMultiply": { @@ -8126,6 +10533,11 @@ "cross_temporal": { "name": "cross_temporal" } + }, + "outputs": { + "0": { + "tooltip": null + } } }, "UpscaleModelLoader": { @@ -8156,7 +10568,7 @@ } }, "VAEDecodeAudio": { - "display_name": "VAEDecodeAudio", + "display_name": "VAE Decode Audio", "inputs": { "samples": { "name": "samples" @@ -8220,7 +10632,7 @@ } }, "VAEEncodeAudio": { - "display_name": "VAEEncodeAudio", + "display_name": "VAE Encode Audio", "inputs": { "audio": { "name": "audio" @@ -8291,9 +10703,63 @@ } } }, + "Veo3VideoGenerationNode": { + "display_name": "Google Veo 3 Video Generation", + "description": "Generates videos from text prompts using Google's Veo 3 API", + "inputs": { + "prompt": { + "name": "prompt", + "tooltip": "Text description of the video" + }, + "aspect_ratio": { + "name": "aspect_ratio", + "tooltip": "Aspect ratio of the output video" + }, + "negative_prompt": { + "name": "negative_prompt", + "tooltip": "Negative text prompt to guide what to avoid in the video" + }, + "duration_seconds": { + "name": "duration_seconds", + "tooltip": "Duration of the output video in seconds (Veo 3 only supports 8 seconds)" + }, + "enhance_prompt": { + "name": "enhance_prompt", + "tooltip": "Whether to enhance the prompt with AI assistance" + }, + "person_generation": { + "name": "person_generation", + "tooltip": "Whether to allow generating people in the video" + }, + "seed": { + "name": "seed", + "tooltip": "Seed for video generation (0 for random)" + }, + "image": { + "name": "image", + "tooltip": "Optional reference image to guide video generation" + }, + "model": { + "name": "model", + "tooltip": "Veo 3 model to use for video generation" + }, + "generate_audio": { + "name": "generate_audio", + "tooltip": "Generate audio for the video. Supported by all Veo 3 models." + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "VeoVideoGenerationNode": { - "display_name": "Google Veo2 Video Generation", - "description": "Generates videos from text prompts using Google's Veo API", + "display_name": "Google Veo 2 Video Generation", + "description": "Generates videos from text prompts using Google's Veo 2 API", "inputs": { "prompt": { "name": "prompt", @@ -8327,9 +10793,58 @@ "name": "image", "tooltip": "Optional reference image to guide video generation" }, + "model": { + "name": "model", + "tooltip": "Veo 2 model to use for video generation" + }, "control_after_generate": { "name": "control after generate" } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "VideoCropNode": { + "display_name": "Video Crop (FFmpeg)", + "inputs": { + "video": { + "name": "video" + }, + "x": { + "name": "x" + }, + "y": { + "name": "y" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "output_format": { + "name": "output_format" + }, + "codec": { + "name": "codec" + }, + "quality": { + "name": "quality" + }, + "fps": { + "name": "fps" + }, + "extra_ffmpeg_args": { + "name": "extra_ffmpeg_args" + } + }, + "outputs": { + "0": { + "name": "cropped_video" + } } }, "VideoLinearCFGGuidance": { @@ -8354,6 +10869,182 @@ } } }, + "ViduImageToVideoNode": { + "display_name": "Vidu Image To Video Generation", + "description": "Generate video from image and optional prompt", + "inputs": { + "model": { + "name": "model", + "tooltip": "Model name" + }, + "image": { + "name": "image", + "tooltip": "An image to be used as the start frame of the generated video" + }, + "prompt": { + "name": "prompt", + "tooltip": "A textual description for video generation" + }, + "duration": { + "name": "duration", + "tooltip": "Duration of the output video in seconds" + }, + "seed": { + "name": "seed", + "tooltip": "Seed for video generation (0 for random)" + }, + "resolution": { + "name": "resolution", + "tooltip": "Supported values may vary by model & duration" + }, + "movement_amplitude": { + "name": "movement_amplitude", + "tooltip": "The movement amplitude of objects in the frame" + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "ViduReferenceVideoNode": { + "display_name": "Vidu Reference To Video Generation", + "description": "Generate video from multiple images and prompt", + "inputs": { + "model": { + "name": "model", + "tooltip": "Model name" + }, + "images": { + "name": "images", + "tooltip": "Images to use as references to generate a video with consistent subjects (max 7 images)." + }, + "prompt": { + "name": "prompt", + "tooltip": "A textual description for video generation" + }, + "duration": { + "name": "duration", + "tooltip": "Duration of the output video in seconds" + }, + "seed": { + "name": "seed", + "tooltip": "Seed for video generation (0 for random)" + }, + "aspect_ratio": { + "name": "aspect_ratio", + "tooltip": "The aspect ratio of the output video" + }, + "resolution": { + "name": "resolution", + "tooltip": "Supported values may vary by model & duration" + }, + "movement_amplitude": { + "name": "movement_amplitude", + "tooltip": "The movement amplitude of objects in the frame" + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "ViduStartEndToVideoNode": { + "display_name": "Vidu Start End To Video Generation", + "description": "Generate a video from start and end frames and a prompt", + "inputs": { + "model": { + "name": "model", + "tooltip": "Model name" + }, + "first_frame": { + "name": "first_frame", + "tooltip": "Start frame" + }, + "end_frame": { + "name": "end_frame", + "tooltip": "End frame" + }, + "prompt": { + "name": "prompt", + "tooltip": "A textual description for video generation" + }, + "duration": { + "name": "duration", + "tooltip": "Duration of the output video in seconds" + }, + "seed": { + "name": "seed", + "tooltip": "Seed for video generation (0 for random)" + }, + "resolution": { + "name": "resolution", + "tooltip": "Supported values may vary by model & duration" + }, + "movement_amplitude": { + "name": "movement_amplitude", + "tooltip": "The movement amplitude of objects in the frame" + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "ViduTextToVideoNode": { + "display_name": "Vidu Text To Video Generation", + "description": "Generate video from text prompt", + "inputs": { + "model": { + "name": "model", + "tooltip": "Model name" + }, + "prompt": { + "name": "prompt", + "tooltip": "A textual description for video generation" + }, + "duration": { + "name": "duration", + "tooltip": "Duration of the output video in seconds" + }, + "seed": { + "name": "seed", + "tooltip": "Seed for video generation (0 for random)" + }, + "aspect_ratio": { + "name": "aspect_ratio", + "tooltip": "The aspect ratio of the output video" + }, + "resolution": { + "name": "resolution", + "tooltip": "Supported values may vary by model & duration" + }, + "movement_amplitude": { + "name": "movement_amplitude", + "tooltip": "The movement amplitude of objects in the frame" + }, + "control_after_generate": { + "name": "control after generate" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, "VoxelToMesh": { "display_name": "VoxelToMesh", "inputs": { @@ -8396,6 +11087,214 @@ } } }, + "Wan22FunControlToVideo": { + "display_name": "Wan22FunControlToVideo", + "inputs": { + "positive": { + "name": "positive" + }, + "negative": { + "name": "negative" + }, + "vae": { + "name": "vae" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "ref_image": { + "name": "ref_image" + }, + "control_video": { + "name": "control_video" + } + }, + "outputs": { + "0": { + "name": "positive", + "tooltip": null + }, + "1": { + "name": "negative", + "tooltip": null + }, + "2": { + "name": "latent", + "tooltip": null + } + } + }, + "Wan22ImageToVideoLatent": { + "display_name": "Wan22ImageToVideoLatent", + "inputs": { + "vae": { + "name": "vae" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "start_image": { + "name": "start_image" + } + }, + "outputs": { + "0": { + "tooltip": null + } + } + }, + "WanCameraEmbedding": { + "display_name": "WanCameraEmbedding", + "inputs": { + "camera_pose": { + "name": "camera_pose" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "speed": { + "name": "speed" + }, + "fx": { + "name": "fx" + }, + "fy": { + "name": "fy" + }, + "cx": { + "name": "cx" + }, + "cy": { + "name": "cy" + } + }, + "outputs": { + "0": { + "name": "camera_embedding" + }, + "1": { + "name": "width" + }, + "2": { + "name": "height" + }, + "3": { + "name": "length" + } + } + }, + "WanCameraImageToVideo": { + "display_name": "WanCameraImageToVideo", + "inputs": { + "positive": { + "name": "positive" + }, + "negative": { + "name": "negative" + }, + "vae": { + "name": "vae" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "clip_vision_output": { + "name": "clip_vision_output" + }, + "start_image": { + "name": "start_image" + }, + "camera_conditions": { + "name": "camera_conditions" + } + }, + "outputs": { + "0": { + "name": "positive", + "tooltip": null + }, + "1": { + "name": "negative", + "tooltip": null + }, + "2": { + "name": "latent", + "tooltip": null + } + } + }, + "WanContextWindowsManual": { + "display_name": "WAN Context Windows (Manual)", + "description": "Manually set context windows for WAN-like models (dim=2).", + "inputs": { + "model": { + "name": "model", + "tooltip": "The model to apply context windows to during sampling." + }, + "context_length": { + "name": "context_length", + "tooltip": "The length of the context window." + }, + "context_overlap": { + "name": "context_overlap", + "tooltip": "The overlap of the context window." + }, + "context_schedule": { + "name": "context_schedule", + "tooltip": "The stride of the context window." + }, + "context_stride": { + "name": "context_stride", + "tooltip": "The stride of the context window; only applicable to uniform schedules." + }, + "closed_loop": { + "name": "closed_loop", + "tooltip": "Whether to close the context window loop; only applicable to looped schedules." + }, + "fuse_method": { + "name": "fuse_method", + "tooltip": "The method to use to fuse the context windows." + } + }, + "outputs": { + "0": { + "tooltip": "The model with context windows applied during sampling." + } + } + }, "WanFirstLastFrameToVideo": { "display_name": "WanFirstLastFrameToVideo", "inputs": { @@ -8435,13 +11334,16 @@ }, "outputs": { "0": { - "name": "positive" + "name": "positive", + "tooltip": null }, "1": { - "name": "negative" + "name": "negative", + "tooltip": null }, "2": { - "name": "latent" + "name": "latent", + "tooltip": null } } }, @@ -8481,13 +11383,16 @@ }, "outputs": { "0": { - "name": "positive" + "name": "positive", + "tooltip": null }, "1": { - "name": "negative" + "name": "negative", + "tooltip": null }, "2": { - "name": "latent" + "name": "latent", + "tooltip": null } } }, @@ -8527,13 +11432,16 @@ }, "outputs": { "0": { - "name": "positive" + "name": "positive", + "tooltip": null }, "1": { - "name": "negative" + "name": "negative", + "tooltip": null }, "2": { - "name": "latent" + "name": "latent", + "tooltip": null } } }, @@ -8570,13 +11478,213 @@ }, "outputs": { "0": { - "name": "positive" + "name": "positive", + "tooltip": null }, "1": { - "name": "negative" + "name": "negative", + "tooltip": null }, "2": { - "name": "latent" + "name": "latent", + "tooltip": null + } + } + }, + "WanPhantomSubjectToVideo": { + "display_name": "WanPhantomSubjectToVideo", + "inputs": { + "positive": { + "name": "positive" + }, + "negative": { + "name": "negative" + }, + "vae": { + "name": "vae" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "images": { + "name": "images" + } + }, + "outputs": { + "0": { + "name": "positive", + "tooltip": null + }, + "1": { + "name": "negative_text", + "tooltip": null + }, + "2": { + "name": "negative_img_text", + "tooltip": null + }, + "3": { + "name": "latent", + "tooltip": null + } + } + }, + "WanSoundImageToVideo": { + "display_name": "WanSoundImageToVideo", + "inputs": { + "positive": { + "name": "positive" + }, + "negative": { + "name": "negative" + }, + "vae": { + "name": "vae" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "audio_encoder_output": { + "name": "audio_encoder_output" + }, + "ref_image": { + "name": "ref_image" + }, + "control_video": { + "name": "control_video" + }, + "ref_motion": { + "name": "ref_motion" + } + }, + "outputs": { + "0": { + "name": "positive", + "tooltip": null + }, + "1": { + "name": "negative", + "tooltip": null + }, + "2": { + "name": "latent", + "tooltip": null + } + } + }, + "WanSoundImageToVideoExtend": { + "display_name": "WanSoundImageToVideoExtend", + "inputs": { + "positive": { + "name": "positive" + }, + "negative": { + "name": "negative" + }, + "vae": { + "name": "vae" + }, + "length": { + "name": "length" + }, + "video_latent": { + "name": "video_latent" + }, + "audio_encoder_output": { + "name": "audio_encoder_output" + }, + "ref_image": { + "name": "ref_image" + }, + "control_video": { + "name": "control_video" + } + }, + "outputs": { + "0": { + "name": "positive", + "tooltip": null + }, + "1": { + "name": "negative", + "tooltip": null + }, + "2": { + "name": "latent", + "tooltip": null + } + } + }, + "WanTrackToVideo": { + "display_name": "WanTrackToVideo", + "inputs": { + "positive": { + "name": "positive" + }, + "negative": { + "name": "negative" + }, + "vae": { + "name": "vae" + }, + "tracks": { + "name": "tracks" + }, + "width": { + "name": "width" + }, + "height": { + "name": "height" + }, + "length": { + "name": "length" + }, + "batch_size": { + "name": "batch_size" + }, + "temperature": { + "name": "temperature" + }, + "topk": { + "name": "topk" + }, + "start_image": { + "name": "start_image" + }, + "clip_vision_output": { + "name": "clip_vision_output" + } + }, + "outputs": { + "0": { + "name": "positive", + "tooltip": null + }, + "1": { + "name": "negative", + "tooltip": null + }, + "2": { + "name": "latent", + "tooltip": null } } }, @@ -8619,16 +11727,20 @@ }, "outputs": { "0": { - "name": "positive" + "name": "positive", + "tooltip": null }, "1": { - "name": "negative" + "name": "negative", + "tooltip": null }, "2": { - "name": "latent" + "name": "latent", + "tooltip": null }, "3": { - "name": "trim_latent" + "name": "trim_latent", + "tooltip": null } } }, diff --git a/src/locales/en/settings.json b/src/locales/en/settings.json index e2c759c5c5..7773b8c805 100644 --- a/src/locales/en/settings.json +++ b/src/locales/en/settings.json @@ -1,30 +1,4 @@ { - "Comfy-Desktop_AutoUpdate": { - "name": "Automatically check for updates" - }, - "Comfy-Desktop_SendStatistics": { - "name": "Send anonymous usage metrics" - }, - "Comfy-Desktop_UV_PypiInstallMirror": { - "name": "Pypi Install Mirror", - "tooltip": "Default pip install mirror" - }, - "Comfy-Desktop_UV_PythonInstallMirror": { - "name": "Python Install Mirror", - "tooltip": "Managed Python installations are downloaded from the Astral python-build-standalone project. This variable can be set to a mirror URL to use a different source for Python installations. The provided URL will replace https://github.com/astral-sh/python-build-standalone/releases/download in, e.g., https://github.com/astral-sh/python-build-standalone/releases/download/20240713/cpython-3.12.4%2B20240713-aarch64-apple-darwin-install_only.tar.gz. Distributions can be read from a local directory by using the file:// URL scheme." - }, - "Comfy-Desktop_UV_TorchInstallMirror": { - "name": "Torch Install Mirror", - "tooltip": "Pip install mirror for pytorch" - }, - "Comfy-Desktop_WindowStyle": { - "name": "Window Style", - "tooltip": "Custom: Replace the system title bar with ComfyUI's Top menu", - "options": { - "default": "default", - "custom": "custom" - } - }, "Comfy_Canvas_BackgroundImage": { "name": "Canvas background image", "tooltip": "Image URL for the canvas background. You can right-click an image in the outputs panel and select \"Set as Background\" to use it, or upload your own image using the upload button." @@ -388,6 +362,12 @@ "Topbar (2nd-row)": "Topbar (2nd-row)" } }, + "HotReload_config": { + "name": "Hot Reload Configuration" + }, + "HotReload_language": { + "name": "Language" + }, "LiteGraph_Canvas_LowQualityRenderingZoomThreshold": { "name": "Low quality rendering zoom threshold", "tooltip": "Zoom level threshold for performance mode. Lower values (0.1) = quality at all zoom levels. Higher values (1.0) = performance mode even when zoomed in. Performance mode simplifies rendering by hiding text labels, shadows, and details."