Skip to content

Update multi-language translation.#7957

Closed
comfyui-wiki wants to merge 2 commits intomainfrom
update-translation-260111
Closed

Update multi-language translation.#7957
comfyui-wiki wants to merge 2 commits intomainfrom
update-translation-260111

Conversation

@comfyui-wiki
Copy link
Member

@comfyui-wiki comfyui-wiki commented Jan 11, 2026

Completed the missing translations in multiple languages

The translations are done by AI

┆Issue is synchronized with this Notion page by Unito

@dosubot dosubot bot added the size:XXL This PR changes 1000+ lines, ignoring generated files. label Jan 11, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 11, 2026

📝 Walkthrough

Walkthrough

Multi-language localization updates across 11 locales, including adding helpAndFeedback command, converting mediaAssets to structured objects with filtering/sorting options, introducing Comfy_UI_TabBarLayout setting, and systematically migrating node output definitions from arrays to keyed objects. Persian translations fully populated.

Changes

Cohort / File(s) Summary
Main Locale Files (helpAndFeedback & mediaAssets)
src/locales/ar/main.json, src/locales/es/main.json, src/locales/fr/main.json, src/locales/ja/main.json, src/locales/ko/main.json, src/locales/pt-BR/main.json, src/locales/ru/main.json, src/locales/tr/main.json, src/locales/zh-TW/main.json
Added helpAndFeedback command entry across all locales. Converted mediaAssets from plain string to structured object with fields: sortOldestFirst, filterAudio, sortNewestFirst, filterVideo, filterImage, sortFastestFirst, sortLongestFirst, filter3D, and title.
Chinese Main Locale
src/locales/zh/main.json
Added helpAndFeedback key and updated Locale translation from "区域设置" to "本地化设置".
Node Definition Files (Output Migration)
src/locales/ar/nodeDefs.json, src/locales/es/nodeDefs.json, src/locales/fr/nodeDefs.json, src/locales/ja/nodeDefs.json, src/locales/ko/nodeDefs.json, src/locales/ru/nodeDefs.json, src/locales/tr/nodeDefs.json, src/locales/zh-TW/nodeDefs.json
Systematically converted node outputs from array-based declarations to keyed object mappings (e.g., "outputs": { "0": {...}, "1": {...} }). Added explicit output names and expanded multi-output node definitions across numerous node types. Standardized input placeholders to explicit empty objects.
Settings Files (TabBarLayout Addition)
src/locales/ar/settings.json, src/locales/es/settings.json, src/locales/fr/settings.json, src/locales/ja/settings.json, src/locales/ko/settings.json, src/locales/pt-BR/settings.json, src/locales/ru/settings.json, src/locales/tr/settings.json, src/locales/zh-TW/settings.json, src/locales/zh/settings.json
Added new Comfy_UI_TabBarLayout setting with tooltip, name, and options (Default, Integrated) describing tab bar layout behavior.
Persian Translations
src/locales/fa/commands.json, src/locales/fa/settings.json
Populated previously empty Persian locale files with comprehensive translations for UI commands (345+ entries) and settings (471+ entries) including node badge modes, load engines, workflow controls, and 3D viewer options.

Possibly related PRs

  • #7876 — Adds Persian (fa) locale file infrastructure; this PR populates those previously empty fa locale files with translations.
  • #7787 — Modifies Chinese locale resources (zh/main.json, zh/nodeDefs.json, zh/settings.json) with similar i18n structural updates.
  • #7761 — Updates Chinese locale files (src/locales/zh/main.json, src/locales/zh/settings.json) adding localization keys like mediaAssets and helpAndFeedback.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Jan 11, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 504 passed, 0 failed, 1 flaky, 8 skipped (Total: 513)

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 492 / ❌ 0 / ⚠️ 1 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@github-actions
Copy link

github-actions bot commented Jan 11, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/11/2026, 11:14:43 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@comfyui-wiki comfyui-wiki changed the title Update multi-language support Update multi-language translation. Jan 11, 2026
@github-actions
Copy link

Bundle Size Report

Summary

  • Raw size: 19.4 MB baseline 18.8 MB — 🔴 +545 kB
  • Gzip: 3.97 MB baseline 3.85 MB — 🔴 +116 kB
  • Brotli: 3.03 MB baseline 2.94 MB — 🔴 +88 kB
  • Bundles: 98 current • 98 baseline • 70 added / 70 removed

Category Glance
Other 🔴 +510 kB (5.25 MB) · Panels & Settings 🔴 +34.7 kB (372 kB) · Vendor & Third-Party ⚪ 0 B (9.19 MB) · App Entry Points ⚪ 0 B (3.32 MB) · Graph Workspace ⚪ 0 B (1.03 MB) · UI Components ⚪ 0 B (199 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.32 MB (baseline 3.32 MB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BfmxE8Xz.js (removed) 3.12 MB 🟢 -3.12 MB 🟢 -654 kB 🟢 -496 kB
assets/index-BGh7Okdw.js (new) 3.12 MB 🔴 +3.12 MB 🔴 +654 kB 🔴 +496 kB
assets/index-BpFxLqvZ.js (removed) 200 kB 🟢 -200 kB 🟢 -44 kB 🟢 -36.4 kB
assets/index-v1LLBbnh.js (new) 200 kB 🔴 +200 kB 🔴 +44 kB 🔴 +36.4 kB
assets/index-BnHO4QdJ.js (new) 345 B 🔴 +345 B 🔴 +246 B 🔴 +200 B
assets/index-BYtodo6L.js (removed) 345 B 🟢 -345 B 🟢 -243 B 🟢 -209 B

Status: 3 added / 3 removed

Graph Workspace — 1.03 MB (baseline 1.03 MB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-_mfAUaKD.js (new) 1.03 MB 🔴 +1.03 MB 🔴 +198 kB 🔴 +150 kB
assets/GraphView-CWpx-Wlr.js (removed) 1.03 MB 🟢 -1.03 MB 🟢 -198 kB 🟢 -150 kB

Status: 1 added / 1 removed

Views & Navigation — 6.63 kB (baseline 6.63 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-BEyW2x5s.js (removed) 6.63 kB 🟢 -6.63 kB 🟢 -2.14 kB 🟢 -1.9 kB
assets/UserSelectView-Co1HnNSU.js (new) 6.63 kB 🔴 +6.63 kB 🔴 +2.15 kB 🔴 +1.9 kB

Status: 1 added / 1 removed

Panels & Settings — 372 kB (baseline 337 kB) • 🔴 +34.7 kB

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/settings-BAg0yzZ3.js (new) 34.9 kB 🔴 +34.9 kB 🔴 +8.19 kB 🔴 +6.91 kB
assets/settings-DiVjuKQX.js (removed) 34.4 kB 🟢 -34.4 kB 🟢 -8.07 kB 🟢 -6.82 kB
assets/settings-COfRnGX2.js (new) 31.3 kB 🔴 +31.3 kB 🔴 +7.8 kB 🔴 +6.75 kB
assets/settings-NclkZU--.js (new) 28.6 kB 🔴 +28.6 kB 🔴 +6.98 kB 🔴 +5.84 kB
assets/settings-DKkx6nFR.js (removed) 28.2 kB 🟢 -28.2 kB 🟢 -6.88 kB 🟢 -5.75 kB
assets/settings-BQ9-doGI.js (new) 27.8 kB 🔴 +27.8 kB 🔴 +7.43 kB 🔴 +6.42 kB
assets/settings-y_-zNlA6.js (removed) 27.5 kB 🟢 -27.5 kB 🟢 -7.32 kB 🟢 -6.3 kB
assets/settings-CKLmZ0r6.js (new) 27 kB 🔴 +27 kB 🔴 +7.05 kB 🔴 +6.35 kB
assets/settings-pR7Ue3ei.js (removed) 26.7 kB 🟢 -26.7 kB 🟢 -6.95 kB 🟢 -6.26 kB
assets/settings-CX-LVjlP.js (new) 26.3 kB 🔴 +26.3 kB 🔴 +6.95 kB 🔴 +6.29 kB
assets/settings-CjHkHrI6.js (new) 26.2 kB 🔴 +26.2 kB 🔴 +6.8 kB 🔴 +5.97 kB
assets/settings-CtIClcWI.js (removed) 26 kB 🟢 -26 kB 🟢 -6.84 kB 🟢 -6.18 kB
assets/settings-DJiF1Y59.js (removed) 25.8 kB 🟢 -25.8 kB 🟢 -6.7 kB 🟢 -5.88 kB
assets/settings-DRA0kTSh.js (new) 25.6 kB 🔴 +25.6 kB 🔴 +6.66 kB 🔴 +5.97 kB
assets/settings-6OJAx_qL.js (new) 25.3 kB 🔴 +25.3 kB 🔴 +7.05 kB 🔴 +6.06 kB
assets/settings-BbW1wrcp.js (removed) 25.2 kB 🟢 -25.2 kB 🟢 -6.55 kB 🟢 -5.88 kB
assets/LegacyCreditsPanel-BwywzpV7.js (removed) 25.1 kB 🟢 -25.1 kB 🟢 -5.74 kB 🟢 -5 kB
assets/LegacyCreditsPanel-CvPm-1cI.js (new) 25.1 kB 🔴 +25.1 kB 🔴 +5.74 kB 🔴 +5 kB
assets/settings-DX5qVgIQ.js (removed) 24.9 kB 🟢 -24.9 kB 🟢 -6.95 kB 🟢 -5.96 kB
assets/settings-DvcrHVvi.js (new) 22.7 kB 🔴 +22.7 kB 🔴 +6.95 kB 🔴 +5.75 kB
assets/settings-D_f3uAqO.js (removed) 22.4 kB 🟢 -22.4 kB 🟢 -6.83 kB 🟢 -5.67 kB
assets/settings-AR20t3sL.js (new) 22 kB 🔴 +22 kB 🔴 +6.75 kB 🔴 +5.41 kB
assets/settings-MzsBgiwB.js (removed) 21.7 kB 🟢 -21.7 kB 🟢 -6.64 kB 🟢 -5.32 kB
assets/KeybindingPanel-Bdfq7jus.js (new) 14.8 kB 🔴 +14.8 kB 🔴 +3.57 kB 🔴 +3.12 kB
assets/KeybindingPanel-CIhTPKT1.js (removed) 14.8 kB 🟢 -14.8 kB 🟢 -3.57 kB 🟢 -3.13 kB
assets/ExtensionPanel-C5ECE8Y_.js (new) 11.1 kB 🔴 +11.1 kB 🔴 +2.62 kB 🔴 +2.3 kB
assets/ExtensionPanel-CxnzJlBo.js (removed) 11.1 kB 🟢 -11.1 kB 🟢 -2.62 kB 🟢 -2.3 kB
assets/AboutPanel-B1h6dUP5.js (removed) 9.16 kB 🟢 -9.16 kB 🟢 -2.46 kB 🟢 -2.2 kB
assets/AboutPanel-BVpdInUN.js (new) 9.16 kB 🔴 +9.16 kB 🔴 +2.46 kB 🔴 +2.2 kB
assets/ServerConfigPanel-1bd7NT5Y.js (new) 7.51 kB 🔴 +7.51 kB 🔴 +2.04 kB 🔴 +1.8 kB
assets/ServerConfigPanel-DKX2lAN8.js (removed) 7.51 kB 🟢 -7.51 kB 🟢 -2.04 kB 🟢 -1.8 kB
assets/UserPanel-CZGb5hwt.js (removed) 6.88 kB 🟢 -6.88 kB 🟢 -1.79 kB 🟢 -1.56 kB
assets/UserPanel-DllHxlPO.js (new) 6.88 kB 🔴 +6.88 kB 🔴 +1.79 kB 🔴 +1.57 kB
assets/settings-BhbWhsRg.js (removed) 101 B 🟢 -101 B 🟢 -107 B 🟢 -84 B

Status: 17 added / 17 removed

UI Components — 199 kB (baseline 199 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/LazyImage.vue_vue_type_script_setup_true_lang-BOHMmYjD.js (removed) 64.5 kB 🟢 -64.5 kB 🟢 -13.1 kB 🟢 -11.4 kB
assets/LazyImage.vue_vue_type_script_setup_true_lang-CK-pcSxS.js (new) 64.5 kB 🔴 +64.5 kB 🔴 +13.1 kB 🔴 +11.4 kB
assets/Load3D.vue_vue_type_script_setup_true_lang-_d43aJlO.js (removed) 56.4 kB 🟢 -56.4 kB 🟢 -8.78 kB 🟢 -7.54 kB
assets/Load3D.vue_vue_type_script_setup_true_lang-DADKQr08.js (new) 56.4 kB 🔴 +56.4 kB 🔴 +8.78 kB 🔴 +7.53 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-8-RU2uwH.js (new) 49 kB 🔴 +49 kB 🔴 +10.5 kB 🔴 +9.14 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-DOjaw7t8.js (removed) 49 kB 🟢 -49 kB 🟢 -10.5 kB 🟢 -9.15 kB
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-1xCJbo_Z.js (removed) 10.9 kB 🟢 -10.9 kB 🟢 -2.89 kB 🟢 -2.55 kB
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-CqUNSbxG.js (new) 10.9 kB 🔴 +10.9 kB 🔴 +2.89 kB 🔴 +2.55 kB
assets/ComfyQueueButton-BJJglRnv.js (new) 8.83 kB 🔴 +8.83 kB 🔴 +2.57 kB 🔴 +2.29 kB
assets/ComfyQueueButton-CzEGDmxI.js (removed) 8.83 kB 🟢 -8.83 kB 🟢 -2.58 kB 🟢 -2.29 kB
assets/WidgetWithControl.vue_vue_type_script_setup_true_lang-BZc-Y0A0.js (removed) 3.72 kB 🟢 -3.72 kB 🟢 -1.45 kB 🟢 -1.32 kB
assets/WidgetWithControl.vue_vue_type_script_setup_true_lang-D0ueUHdJ.js (new) 3.72 kB 🔴 +3.72 kB 🔴 +1.46 kB 🔴 +1.32 kB
assets/WidgetButton-8GzqSxsQ.js (removed) 2.21 kB 🟢 -2.21 kB 🟢 -998 B 🟢 -901 B
assets/WidgetButton-DAX-v3T7.js (new) 2.21 kB 🔴 +2.21 kB 🔴 +998 B 🔴 +894 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-B3ypWoNK.js (new) 2.14 kB 🔴 +2.14 kB 🔴 +891 B 🔴 +771 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-BB2QU9nm.js (removed) 2.14 kB 🟢 -2.14 kB 🟢 -891 B 🟢 -764 B
assets/UserAvatar.vue_vue_type_script_setup_true_lang-CmvGBeCh.js 1.34 kB 1.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

Data & Services — 12.5 kB (baseline 12.5 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-BhLzyXI9.js (removed) 7.51 kB 🟢 -7.51 kB 🟢 -1.83 kB 🟢 -1.57 kB
assets/keybindingService-Cwib9DWP.js (new) 7.51 kB 🔴 +7.51 kB 🔴 +1.83 kB 🔴 +1.58 kB
assets/audioService-B4nvZIEb.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -963 B 🟢 -823 B
assets/audioService-meB8UnJ6.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +963 B 🔴 +823 B
assets/serverConfigStore-lZrt20fn.js 2.83 kB 2.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 2 added / 2 removed

Utilities & Hooks — 1.41 kB (baseline 1.41 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioUtils-B-9Dw26H.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +652 B 🔴 +549 B
assets/audioUtils-CL-QiP9P.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -652 B 🟢 -543 B

Status: 1 added / 1 removed

Vendor & Third-Party — 9.19 MB (baseline 9.19 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-C2WamoVK.js 452 kB 452 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-Da7BzmIq.js 3.9 MB 3.9 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-CIEAfgED.js 1.95 MB 1.95 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-Ds3gPtNh.js 2.08 MB 2.08 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-WJL3cqV8.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-E9hBZNUh.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BF8peZ5_.js 420 kB 420 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 5.25 MB (baseline 4.74 MB) • 🔴 +510 kB

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/nodeDefs-C55fHvzK.js (new) 392 kB 🔴 +392 kB 🔴 +57.9 kB 🔴 +40.9 kB
assets/nodeDefs-JuuXdMpv.js (removed) 391 kB 🟢 -391 kB 🟢 -57.8 kB 🟢 -40.8 kB
assets/nodeDefs-dRTkX9Bp.js (new) 359 kB 🔴 +359 kB 🔴 +54.2 kB 🔴 +39.1 kB
assets/nodeDefs-C6xl5-mL.js (removed) 358 kB 🟢 -358 kB 🟢 -54 kB 🟢 -39 kB
assets/nodeDefs-Daj5cX9Y.js (new) 349 kB 🔴 +349 kB 🔴 +65.1 kB 🔴 +46.2 kB
assets/nodeDefs-BRpsCoS8.js (new) 330 kB 🔴 +330 kB 🔴 +52.5 kB 🔴 +37.6 kB
assets/nodeDefs-BGwoeek4.js (removed) 329 kB 🟢 -329 kB 🟢 -52.3 kB 🟢 -37.6 kB
assets/nodeDefs-clXgMyPK.js (new) 321 kB 🔴 +321 kB 🔴 +51.3 kB 🔴 +37.4 kB
assets/nodeDefs-Du8VrAwA.js (removed) 320 kB 🟢 -320 kB 🟢 -51.1 kB 🟢 -37.3 kB
assets/nodeDefs-BODrP9yX.js (new) 318 kB 🔴 +318 kB 🔴 +51.1 kB 🔴 +38.3 kB
assets/nodeDefs-DwKQ40Yw.js (new) 318 kB 🔴 +318 kB 🔴 +49.8 kB 🔴 +37.7 kB
assets/nodeDefs-jjlLVrIs.js (removed) 317 kB 🟢 -317 kB 🟢 -51 kB 🟢 -38.3 kB
assets/nodeDefs-B-XzzBeS.js (removed) 317 kB 🟢 -317 kB 🟢 -49.7 kB 🟢 -37.6 kB
assets/nodeDefs-B1uCKd69.js (new) 315 kB 🔴 +315 kB 🔴 +48.9 kB 🔴 +36.8 kB
assets/nodeDefs-l2Y20bod.js (removed) 314 kB 🟢 -314 kB 🟢 -48.8 kB 🟢 -36.7 kB
assets/nodeDefs-De2Y1wLm.js (new) 292 kB 🔴 +292 kB 🔴 +50.1 kB 🔴 +36 kB
assets/nodeDefs-JQwk1kgy.js (removed) 292 kB 🟢 -292 kB 🟢 -50 kB 🟢 -36 kB
assets/main-DwZO5Kn5.js (new) 149 kB 🔴 +149 kB 🔴 +39.6 kB 🔴 +31.8 kB
assets/main-BdD2EpUU.js (removed) 149 kB 🟢 -149 kB 🟢 -39.5 kB 🟢 -31.7 kB
assets/main-U3daK6sD.js (new) 134 kB 🔴 +134 kB 🔴 +36.7 kB 🔴 +30 kB
assets/main-hEq6yn-L.js (new) 129 kB 🔴 +129 kB 🔴 +35.7 kB 🔴 +28.9 kB
assets/main-De35cJhO.js (removed) 129 kB 🟢 -129 kB 🟢 -35.6 kB 🟢 -28.8 kB
assets/main-CB485Eqj.js (new) 123 kB 🔴 +123 kB 🔴 +35.5 kB 🔴 +28.9 kB
assets/main-CSUSXmMZ.js (removed) 123 kB 🟢 -123 kB 🟢 -35.4 kB 🟢 -28.8 kB
assets/main-DwT2eP4q.js (new) 113 kB 🔴 +113 kB 🔴 +34.3 kB 🔴 +29.3 kB
assets/main-Ic_H-Vim.js (removed) 113 kB 🟢 -113 kB 🟢 -34.2 kB 🟢 -29.2 kB
assets/main-BxZ_g5Z7.js (new) 110 kB 🔴 +110 kB 🔴 +34.1 kB 🔴 +28.2 kB
assets/main-DmGxyfV2.js (removed) 110 kB 🟢 -110 kB 🟢 -34 kB 🟢 -28.1 kB
assets/main-BtCsi1Zw.js (new) 109 kB 🔴 +109 kB 🔴 +33.5 kB 🔴 +28.4 kB
assets/main-CLN9TbD-.js (removed) 108 kB 🟢 -108 kB 🟢 -33.4 kB 🟢 -28.3 kB
assets/main-CuOuteC1.js (new) 107 kB 🔴 +107 kB 🔴 +33.7 kB 🔴 +28.8 kB
assets/main-B-yEiomY.js (removed) 106 kB 🟢 -106 kB 🟢 -33.6 kB 🟢 -28.7 kB
assets/main-C0PVqgsq.js (new) 106 kB 🔴 +106 kB 🔴 +33.1 kB 🔴 +28.4 kB
assets/main-AHzlz6Hv.js (removed) 106 kB 🟢 -106 kB 🟢 -33.1 kB 🟢 -28.4 kB
assets/main-Dy9KoaD0.js (new) 95.2 kB 🔴 +95.2 kB 🔴 +33.2 kB 🔴 +27 kB
assets/main-fjwyoOAj.js (removed) 94.9 kB 🟢 -94.9 kB 🟢 -33.1 kB 🟢 -27 kB
assets/main-Bt_cYMpj.js (new) 94.2 kB 🔴 +94.2 kB 🔴 +33.3 kB 🔴 +26.7 kB
assets/main-DqO_HJuV.js (removed) 94.1 kB 🟢 -94.1 kB 🟢 -33.2 kB 🟢 -26.7 kB
assets/SubscriptionRequiredDialogContent-CaVq9gtP.js (removed) 29.3 kB 🟢 -29.3 kB 🟢 -6.51 kB 🟢 -5.64 kB
assets/SubscriptionRequiredDialogContent-OFtDQqpo.js (new) 29.3 kB 🔴 +29.3 kB 🔴 +6.5 kB 🔴 +5.66 kB
assets/WidgetRecordAudio-BCZI239U.js (removed) 20.4 kB 🟢 -20.4 kB 🟢 -5.24 kB 🟢 -4.64 kB
assets/WidgetRecordAudio-DfnqmOqf.js (new) 20.4 kB 🔴 +20.4 kB 🔴 +5.24 kB 🔴 +4.64 kB
assets/commands-Cnfb3sQd.js (new) 17.3 kB 🔴 +17.3 kB 🔴 +3.54 kB 🔴 +3 kB
assets/AudioPreviewPlayer-B0VXo5Ec.js (removed) 13.3 kB 🟢 -13.3 kB 🟢 -3.35 kB 🟢 -3 kB
assets/AudioPreviewPlayer-Dl1Z84It.js (new) 13.3 kB 🔴 +13.3 kB 🔴 +3.35 kB 🔴 +2.99 kB
assets/ValueControlPopover-C5IhL4-v.js (removed) 5.49 kB 🟢 -5.49 kB 🟢 -1.71 kB 🟢 -1.51 kB
assets/ValueControlPopover-LpPkUtCK.js (new) 5.49 kB 🔴 +5.49 kB 🔴 +1.71 kB 🔴 +1.51 kB
assets/WidgetGalleria-AQRRei4R.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.45 kB 🟢 -1.31 kB
assets/WidgetGalleria-PyJsMoNV.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.45 kB 🔴 +1.3 kB
assets/WidgetColorPicker-Cy_0UPtF.js (removed) 3.41 kB 🟢 -3.41 kB 🟢 -1.38 kB 🟢 -1.24 kB
assets/WidgetColorPicker-Ew-zDUvI.js (new) 3.41 kB 🔴 +3.41 kB 🔴 +1.38 kB 🔴 +1.24 kB
assets/WidgetTextarea-BYSCEFA3.js (removed) 3.08 kB 🟢 -3.08 kB 🟢 -1.21 kB 🟢 -1.08 kB
assets/WidgetTextarea-D86sIU7t.js (new) 3.08 kB 🔴 +3.08 kB 🔴 +1.21 kB 🔴 +1.08 kB
assets/WidgetMarkdown-C4Uvv_Po.js (removed) 3.08 kB 🟢 -3.08 kB 🟢 -1.28 kB 🟢 -1.13 kB
assets/WidgetMarkdown-D-wGm6Ce.js (new) 3.08 kB 🔴 +3.08 kB 🔴 +1.28 kB 🔴 +1.13 kB
assets/WidgetAudioUI-BoJx3lUB.js (removed) 2.89 kB 🟢 -2.89 kB 🟢 -1.17 kB 🟢 -1.06 kB
assets/WidgetAudioUI-Dx8Ksfdp.js (new) 2.89 kB 🔴 +2.89 kB 🔴 +1.17 kB 🔴 +1.05 kB
assets/WidgetToggleSwitch-BroEbe33.js (removed) 2.66 kB 🟢 -2.66 kB 🟢 -1.13 kB 🟢 -1.03 kB
assets/WidgetToggleSwitch-Sz9rNK6j.js (new) 2.66 kB 🔴 +2.66 kB 🔴 +1.13 kB 🔴 +1.03 kB
assets/WidgetInputText-CUrmGqks.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +923 B 🔴 +861 B
assets/WidgetInputText-D-x3EXQr.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -921 B 🟢 -831 B
assets/Media3DTop-D2GrmX3L.js (removed) 1.49 kB 🟢 -1.49 kB 🟢 -766 B 🟢 -647 B
assets/Media3DTop-Dt8TpZMC.js (new) 1.49 kB 🔴 +1.49 kB 🔴 +767 B 🔴 +649 B
assets/WidgetSelect-BKA5KwyZ.js (new) 733 B 🔴 +733 B 🔴 +362 B 🔴 +339 B
assets/WidgetSelect-BwERJWg_.js (removed) 733 B 🟢 -733 B 🟢 -360 B 🟢 -304 B
assets/WidgetInputNumber-BICHULSH.js (removed) 673 B 🟢 -673 B 🟢 -348 B 🟢 -287 B
assets/WidgetInputNumber-D_oRKGbJ.js (new) 673 B 🔴 +673 B 🔴 +348 B 🔴 +288 B
assets/Load3D-D0XO5TQA.js (removed) 424 B 🟢 -424 B 🟢 -269 B 🟢 -223 B
assets/Load3D-f41tob7Z.js (new) 424 B 🔴 +424 B 🔴 +269 B 🔴 +224 B
assets/WidgetLegacy-CxG0toXF.js (new) 364 B 🔴 +364 B 🔴 +239 B 🔴 +193 B
assets/WidgetLegacy-FtpsACHs.js (removed) 364 B 🟢 -364 B 🟢 -238 B 🟢 -195 B
assets/commands-BWp4HdfU.js (removed) 101 B 🟢 -101 B 🟢 -107 B 🟢 -82 B
assets/nodeDefs-Bw_Jitw_.js (removed) 101 B 🟢 -101 B 🟢 -107 B 🟢 -92 B
assets/main-Cw9RZWRY.js (removed) 89 B 🟢 -89 B 🟢 -103 B 🟢 -81 B
assets/commands-7wafkPd1.js 15.6 kB 15.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-B3CjBnJe.js 14.6 kB 14.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Bbu2TJPy.js 18.1 kB 18.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C4khqsmz.js 15.6 kB 15.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CDQ7KnIn.js 16.4 kB 16.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CtjMsXHh.js 15.4 kB 15.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CW_l758_.js 16.1 kB 16.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DbX4HUlI.js 15.6 kB 15.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DiGLEtFT.js 16.9 kB 16.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-vRVJOWju.js 14.8 kB 14.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-DIQlZoPQ.js 1.46 kB 1.46 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-C3CvQRZ8.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-euoHxxM5.js 2.65 kB 2.65 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CRZGOJB7.js 310 kB 310 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-D8-Yzlzh.js 289 kB 289 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-DJzJLSiP.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DOYclIRS.js 3.21 kB 3.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BIbGSUAt.js 1.28 kB 1.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 37 added / 37 removed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 20

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (14)
src/locales/ar/nodeDefs.json (1)

1-2: Remove edits to src/locales/ar/nodeDefs.json—this file is auto-generated during releases.

According to the repository's locale contribution guidelines, all non-English locale files (including ar/nodeDefs.json, ar/main.json, ar/commands.json, and ar/settings.json) are automatically generated during release PRs using the English source as the base. Manual edits to non-English locale files are overwritten during the release process. Only edit files in src/locales/en/ in feature PRs; all other locales will be regenerated from the English translations during the next release.

src/locales/fr/nodeDefs.json (6)

2019-2025: Avoid {} for user-facing inputs unless fallback behavior is guaranteed.

"option0": {} will likely render as an untranslated key or blank label depending on fallback rules. If it’s user-facing, prefer providing a French name (and tooltip if applicable).


6176-6220: New Load3D inputs/outputs added, but several labels are missing / mixed-language.

"clear", "upload 3d model", and "upload extra resources" are {} so they may display poorly in FR. Also output "1" is labeled "mask" while others are localized. If these are user-facing controls/ports, consider populating consistent French names.

Proposed diff (if these are user-facing labels)
   "Load3D": {
     "display_name": "Charger 3D",
     "inputs": {
-      "clear": {},
+      "clear": { "name": "effacer" },
       "height": {
         "name": "hauteur"
       },
@@
       "model_file": {
         "name": "fichier_modèle"
       },
-      "upload 3d model": {},
-      "upload extra resources": {},
+      "upload 3d model": { "name": "téléverser un modèle 3D" },
+      "upload extra resources": { "name": "téléverser des ressources supplémentaires" },
       "width": {
         "name": "largeur"
       }
     },

6282-6292: LoadImageOutput added keys are untranslated ({}), likely user-visible.

"Auto-refresh after generation": {} and "refresh": {} look like UI actions/toggles; leaving them empty risks English/blank labels in FR.

Proposed diff
   "LoadImageOutput": {
@@
     "inputs": {
-      "Auto-refresh after generation": {},
+      "Auto-refresh after generation": { "name": "Rafraîchir automatiquement après génération" },
       "image": {
         "name": "image"
       },
-      "refresh": {},
+      "refresh": { "name": "Rafraîchir" },
       "upload": {
         "name": "choisissez le fichier à télécharger"
       }
     }
   },

10098-10105: PreviewAny new inputs are {} (potentially unlabeled controls).

If preview / previewMode are user-facing, consider adding name strings (otherwise they may show raw keys).


15878-15892: WebcamCapture.waiting for camera___ is {}; likely user-visible status text.

If this string is shown in the UI, it should have a French name (and ideally ellipsis normalization).

Proposed diff
   "WebcamCapture": {
@@
     "inputs": {
@@
-      "waiting for camera___": {},
+      "waiting for camera___": { "name": "En attente de la caméra…" },
       "width": {
         "name": "largeur"
       }
     }
   },

1-2: Remove manual edits to non-English locale files; edit src/locales/en/nodeDefs.json only.

Per the documented i18n workflow, non-English nodeDefs.json files are auto-generated during release cycles using the OpenAI translation API. Manual edits to src/locales/fr/nodeDefs.json (or other non-English locales) will be overwritten and create unnecessary churn.

For feature PRs, follow the contribution guidelines: edit only src/locales/en/nodeDefs.json; translations will be populated automatically during the next release cycle.

src/locales/ko/nodeDefs.json (1)

6178-6220: Output indices in Korean Load3D are reordered and must match the canonical English sequence.

Input keys "upload 3d model" and "upload extra resources" are correct and consistent with the English definition. However, the outputs object has indices scrambled (3, 1, 4, 2, 0, 5) instead of the canonical sequence (0, 1, 2, 3, 4, 5) where:

  • "0" → "image"
  • "1" → "mask"
  • "2" → "mesh_path"
  • "3" → "normal"
  • "4" → "camera_info"
  • "5" → "recording_video"

Reorder the output indices to match the English definition to ensure frontend-backend output mapping works correctly.

src/locales/ja/nodeDefs.json (1)

6178-6193: Load3D outputs and upload inputs missing Japanese translations.

All 6 outputs (image, mask, mesh_path, normal, camera_info, recording_video) are defined with English names only. The input fields upload 3d model and upload extra resources are empty {}, inconsistent with other nodes like LoadAudio and UploadImage which have "name": "アップロードするファイルを選択". Since the i18n system attempts to resolve output names from nodeDefs for display, these English labels will surface to Japanese users without translations.

src/locales/ru/nodeDefs.json (2)

3378-3414: Terminology consistency: “позитивный/негативный” vs “положительный/отрицательный”.

Hunyuan3Dv2Conditioning* outputs use “позитивный/негативный” while many other nodes in this file use “положительный/отрицательный”. Consider standardizing to one glossary to avoid UI inconsistency.


12359-12389: Fix reversed output indexing in SplitSigmasDenoise.

The Russian locale shows SplitSigmasDenoise with reversed output indices (1=низкие_сигмы, 0=высокие_сигмы) compared to SplitSigmas (0=высокие_сигмы, 1=низкие_сигмы). This inconsistency also appears in other non-English locales (Japanese, French, Spanish, Korean, Persian), while the English source file has both nodes with consistent ordering (0=high_sigmas, 1=low_sigmas). Correct the output index order in SplitSigmasDenoise to match SplitSigmas.

src/locales/zh-TW/nodeDefs.json (2)

10098-10105: Add localized names for preview and previewMode inputs in PreviewAny node.

Both preview and previewMode are shown as UI widgets but lack localized name entries in the locale file (unlike source which has "來源"). Update the {} placeholders with appropriate localized names for consistency and proper internationalization.


6281-6292: These inputs need localized name fields across all locale files, not just zh-TW.

"Auto-refresh after generation" and "refresh" are visible toggle and button widgets created by the code, but currently lack localized names in nodeDefs.json (empty {}). Update all locale files (en, zh-TW, zh, etc.) to include proper name translations for these inputs, for example:

"Auto-refresh after generation": {
  "name": "自動更新產生後..."
},
"refresh": {
  "name": "重新整理"
}
src/locales/tr/nodeDefs.json (1)

1-2: Do not manually edit non-English locale files; edit src/locales/en/nodeDefs.json instead.

Based on repository patterns, src/locales/tr/nodeDefs.json and other non-English locale files are auto-generated during release. Manual edits to these files will be overwritten and create unnecessary churn. Edit src/locales/en/nodeDefs.json with the English source strings, and the build/release process will automatically sync them to all locale files.

🤖 Fix all issues with AI agents
In @src/locales/ar/nodeDefs.json:
- Around line 12359-12369: The outputs block currently maps key "1" to
"سيجما_منخفضة" and key "0" to "سيجما_عالية", which may be reversed; verify
whether the numeric output index 0 should correspond to "high sigma"
(سيجما_عالية) and 1 to "low sigma" (سيجما_منخفضة), and then normalize the JSON
ordering so keys appear in numeric order ("0" then "1") within the "outputs"
object; update the labels if the mapping is incorrect and reorder the keys to
maintain consistency.
- Around line 11426-11436: The JSON object under "outputs" currently lists key
"1" before "0"; reorder the entries so key "0" comes first then key "1" for
consistent ordering and readability—specifically update the "outputs" object
containing the keys "0" (name "مخرج") and "1" (name "مخرج_منزوع_الضوضاء") to
place "0" before "1" without changing the values.
- Around line 3313-3327: The outputs object keys are out of numeric order;
reorder the entries under "outputs" so the numeric keys appear as "0", "1", "2"
(keeping their existing name values "عرض", "ارتفاع", "حجم_الدفعة") to improve
maintainability while leaving all values and tooltips unchanged; update the
"outputs" map in the nodeDefs JSON accordingly so the sequence is "0", then "1",
then "2".
- Around line 1541-1551: Reorder the numeric keys in the "outputs" object so
they appear as "0" then "1" (i.e., "0": { "name": "إيجابي", ... }, "1": {
"name": "سلبي", ... }) and verify any consumers that index by output number
(e.g., code that reads outputs["0"] or expects output index 0 to be positive)
still treat index 0 as “إيجابي” and index 1 as “سلبي”; update any tests or
lookup logic that assumed the reversed mapping to use outputs["0"] -> إيجابي and
outputs["1"] -> سلبي.
- Around line 3405-3415: The outputs object has numeric string keys out of
numeric order ("1" before "0"); reorder the keys so numeric keys are in
ascending order (put "0" then "1") within the "outputs" map to keep consistency
with the other nodeDefs entries and preserve the key names "0" and "1".
- Around line 3378-3388: The outputs object has numeric keys in reverse order
("1" then "0"); reorder the keys so "0" appears before "1" for consistent
numeric ordering and readability by editing the outputs object (keys "0" and
"1") in the nodeDefs.json entry so "0" comes first.
- Around line 12380-12390: The outputs mapping for the SplitSigmas node has
mismatched indices and key order: ensure the numeric keys map to the expected
runtime outputs (index "0" -> high sigma, index "1" -> low sigma) and that the
JSON preserves the consistent ascending key order; if currently reversed, swap
the values so "0" has "name": "سيجما_عالية" and "1" has "name": "سيجما_منخفضة"
(keep "tooltip": null), and reorder the keys in the object to ["0","1"] to match
runtime expectations.

In @src/locales/fr/settings.json:
- Around line 462-470: The change was made in a generated non-English locale
(key "Comfy_UI_TabBarLayout" in src/locales/fr/settings.json) which must not be
edited directly; revert this edit in the French file and instead apply any
translation or source-text change to the canonical English source
(src/locales/en/settings.json or src/locales/en/main.json) under the same key
("Comfy_UI_TabBarLayout") so the translation pipeline can propagate it on
release.

In @src/locales/ja/main.json:
- Around line 1433-1434: Revert the manual edits to the non-English locale keys
"toggleBottomPanel" and "helpAndFeedback" in src/locales/ja/main.json (remove
your changes so the file matches the auto-generated version) and instead make
the intended updates in src/locales/en/main.json where those keys are
maintained; non-English locale files are auto-generated on release and must not
be edited directly.

In @src/locales/ja/nodeDefs.json:
- Around line 3378-3388: The outputs for the Hunyuan3Dv2Conditioning* node(s)
currently use English names "positive"/"negative"; update the "name" values for
outputs "0" and "1" to their Japanese equivalents (e.g., "ポジティブ" for positive
and "ネガティブ" for negative) in the node definition(s) (the
Hunyuan3Dv2Conditioning* blocks shown around the outputs object), and make the
same localized change for the other occurrence mentioned (the block around lines
3405-3415) so the outputs match surrounding nodes.
- Around line 12322-12332: The outputs for SplitAudioChannels in nodeDefs.json
are using English labels "left" and "right" in the Japanese locale; update the
localized strings for the outputs object of the SplitAudioChannels node to
Japanese equivalents (e.g., "左" and "右") or appropriate localized labels,
ensuring the keys "0" and "1" remain with their "name" values replaced, and keep
"tooltip" fields intact (null or translated if needed).
- Around line 1541-1551: The outputs for ConditioningStableAudio are using
English names "positive" and "negative" instead of Japanese; update the entries
under the ConditioningStableAudio.outputs object (keys "0" and "1") to use the
localized labels consistent with the rest of the ja locale (e.g., ポジティブ and
ネガティブ) so the "name" fields for those outputs are translated and match existing
Japanese conventions.
- Around line 3313-3327: The GetImageSize node's outputs are still using English
labels; update the outputs object for GetImageSize to use the Japanese
translations by replacing the "name" values: change "width" to "幅", "height" to
"高さ", and "batch_size" to "バッチサイズ" so the outputs 0, 1, 2 read the correct
Japanese labels.
- Around line 13451-13469: Translate the TrainLoraNode output "name" values in
the ja locale to match the node's input translations: update output keys 0
("model") → "モデル", 1 ("lora") → "LoRAウェイト", 3 ("steps") → "ステップ数", and 2
("loss_map") → "損失関数" in the outputs block (preserve existing tooltip texts).

In @src/locales/ko/main.json:
- Around line 1433-1434: Remove the direct edits to src/locales/ko/main.json —
revert the changes for the keys "toggleBottomPanel" and "helpAndFeedback" so the
Korean file remains untouched (it’s auto-generated). Instead, make the intended
string changes in src/locales/en/main.json by updating the same keys
("toggleBottomPanel" and "helpAndFeedback") there; leave ko/main.json out of the
PR so translations remain generated on release.

In @src/locales/ko/nodeDefs.json:
- Around line 3313-3327: The localized outputs block for the GetImageSize node
lists outputs with numeric keys out of order; verify the node's actual output
ordering for GetImageSize (outputs: width, height, batch_size) and reorder or
rename the JSON keys under "outputs" so "0" maps to "width", "1" maps to
"height", and "2" maps to "batch_size" (or adjust to match the source node
definition if the node uses a different ordering), then run a quick UI/test to
confirm wire labels/tooltips align.

In @src/locales/ru/settings.json:
- Around line 460-470: The new localization key Comfy_UI_TabBarLayout was added
to the Russian settings file but non-English locales are generated from the
English source; remove or revert the Comfy_UI_TabBarLayout entry from the
ru/settings.json and add the key with its name, tooltip and options into the
English source file main.json (src/locales/en/main.json) so it becomes the
canonical entry — the Russian translation will be regenerated automatically from
that English source.

In @src/locales/tr/nodeDefs.json:
- Around line 2021-2025: Several localization entries (option0, clear, upload 3d
model, upload extra resources, Auto-refresh after generation, refresh, preview,
previewMode, waiting for camera___) are empty objects and will show English keys
in the Turkish UI; update each of those JSON objects to include a "name" field
with the provided Turkish translations (option0 → "seçenek 0", clear →
"temizle", upload 3d model → "3D model yükle", upload extra resources → "ek
kaynakları yükle", Auto-refresh after generation → "oluşturmadan sonra otomatik
yenile", refresh → "yenile", preview → "önizle", previewMode → "önizleme modu",
waiting for camera___ → "kamera bekleniyor...") so the UI displays the correct
localized labels for those keys.

In @src/locales/zh-TW/nodeDefs.json:
- Around line 3313-3327: The node description claims an image is "passed through
unchanged" but the outputs object only contains keys 0,1,2
(width,height,batch_size); either remove the passthrough language from the
node's "description" across all locale files (en, zh-TW, zh, pt-BR, fr, ru, es,
ar, ja, ko, tr, fa) or add the missing outputs. Fix by updating the node's
outputs mapping to include an output "3" (e.g., name: "影像" / "image" in each
locale) when the node actually returns the image, or if the node no longer
returns the image remove the passthrough claim from the description text in the
same locale JSON entries so they match the outputs.
📜 Review details

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 97ca9f4 and d7d4871.

📒 Files selected for processing (32)
  • src/locales/ar/main.json
  • src/locales/ar/nodeDefs.json
  • src/locales/ar/settings.json
  • src/locales/es/main.json
  • src/locales/es/nodeDefs.json
  • src/locales/es/settings.json
  • src/locales/fa/commands.json
  • src/locales/fa/main.json
  • src/locales/fa/nodeDefs.json
  • src/locales/fa/settings.json
  • src/locales/fr/main.json
  • src/locales/fr/nodeDefs.json
  • src/locales/fr/settings.json
  • src/locales/ja/main.json
  • src/locales/ja/nodeDefs.json
  • src/locales/ja/settings.json
  • src/locales/ko/main.json
  • src/locales/ko/nodeDefs.json
  • src/locales/ko/settings.json
  • src/locales/pt-BR/main.json
  • src/locales/pt-BR/settings.json
  • src/locales/ru/main.json
  • src/locales/ru/nodeDefs.json
  • src/locales/ru/settings.json
  • src/locales/tr/main.json
  • src/locales/tr/nodeDefs.json
  • src/locales/tr/settings.json
  • src/locales/zh-TW/main.json
  • src/locales/zh-TW/nodeDefs.json
  • src/locales/zh-TW/settings.json
  • src/locales/zh/main.json
  • src/locales/zh/settings.json
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 6300
File: src/locales/en/main.json:774-780
Timestamp: 2025-12-09T04:35:43.971Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, locale files other than `src/locales/en/main.json` are generated automatically on every release. Developers only need to add English (en) key/values in `src/locales/en/main.json` when making PRs; manual updates to other locale files (fr, ja, ko, ru, zh, zh-TW, es, ar, tr, etc.) are not required and should not be suggested in reviews.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`
Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 6300
File: src/platform/updates/components/WhatsNewPopup.vue:5-13
Timestamp: 2025-12-09T03:50:03.127Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, when avoiding PrimeVue components, prefer using the repo's common button components from src/components/button/ (IconButton.vue, TextButton.vue, IconTextButton.vue) rather than plain HTML buttons. These components wrap PrimeVue with custom design system styling.
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7177
File: src/platform/assets/components/UploadModelFooter.vue:72-78
Timestamp: 2025-12-05T06:11:09.383Z
Learning: For the ComfyUI_frontend repository, avoid suggesting comments that would be redundant when the code is already self-explanatory through descriptive naming (e.g., filenames, prop names, aria-labels). The project prefers clean code without unnecessary documentation comments.
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7649
File: tests-ui/tests/platform/cloud/subscription/components/SubscriptionPanel.test.ts:189-194
Timestamp: 2025-12-22T21:36:46.909Z
Learning: In the Comfy-Org/ComfyUI_frontend repository test files: Do not stub primitive UI components or customized primitive components (e.g., Button). Instead, import and register the real components in test setup. This ensures tests accurately reflect production behavior and component API usage.
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7537
File: pnpm-workspace.yaml:50-50
Timestamp: 2025-12-16T22:22:06.840Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, the project uses cva1.0.0-beta.4 (beta version) by deliberate choice. Do not suggest replacing it with class-variance-authority or flagging it as a beta dependency concern.
Learnt from: benceruleanlu
Repo: Comfy-Org/ComfyUI_frontend PR: 7297
File: src/components/actionbar/ComfyActionbar.vue:33-43
Timestamp: 2025-12-09T21:40:19.792Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, inline Tailwind CSS class strings, even when long, are acceptable and preferred over extracting them to computed properties when the classes are static. This is a common Tailwind pattern and doesn't need to be flagged as a readability issue.
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7649
File: src/components/graph/selectionToolbox/ColorPickerButton.vue:15-18
Timestamp: 2025-12-21T01:06:10.298Z
Learning: In Comfy-Org/ComfyUI_frontend, when filled icons are required (e.g., `pi pi-circle-fill`), it's acceptable to use PrimeIcons alongside Lucide icons, as Lucide does not easily provide filled icon variants. Mixed icon library usage is justified when one library lacks equivalent functionality.
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-16T17:41:58.464Z
Learning: Consider updates to docs.comfy.org during development workflow
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7303
File: src/components/topbar/CurrentUserPopover.test.ts:199-205
Timestamp: 2025-12-10T03:09:19.636Z
Learning: For test files in the Comfy-Org/ComfyUI_frontend repository: When writing tests, prefer selecting elements by accessible properties (text content, aria-label, role, accessible name) over data-testid attributes. This ensures tests verify actual user-facing behavior and accessibility compliance.
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7537
File: src/components/ui/button/Button.stories.ts:45-55
Timestamp: 2025-12-17T00:40:17.361Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, prefer pure function declarations (e.g., `function foo() { ... }`) over function expressions (e.g., `const foo = () => { ... }`) for pure functions, as function declarations are considered more functional than function expressions.
📚 Learning: 2025-12-09T04:35:43.971Z
Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 6300
File: src/locales/en/main.json:774-780
Timestamp: 2025-12-09T04:35:43.971Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, locale files other than `src/locales/en/main.json` are generated automatically on every release. Developers only need to add English (en) key/values in `src/locales/en/main.json` when making PRs; manual updates to other locale files (fr, ja, ko, ru, zh, zh-TW, es, ar, tr, etc.) are not required and should not be suggested in reviews.

Applied to files:

  • src/locales/ko/settings.json
  • src/locales/zh-TW/settings.json
  • src/locales/fr/settings.json
  • src/locales/zh/main.json
  • src/locales/zh/settings.json
  • src/locales/zh-TW/main.json
  • src/locales/es/settings.json
  • src/locales/pt-BR/settings.json
  • src/locales/ar/settings.json
  • src/locales/fa/commands.json
  • src/locales/tr/settings.json
  • src/locales/fa/settings.json
  • src/locales/ru/settings.json
  • src/locales/ja/settings.json
  • src/locales/ko/main.json
📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`

Applied to files:

  • src/locales/fa/commands.json
  • src/locales/fa/settings.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: setup
  • GitHub Check: test
  • GitHub Check: lint-and-format
  • GitHub Check: collect
🔇 Additional comments (112)
src/locales/ar/nodeDefs.json (10)

6426-6432: Good: output now includes a localized name.

This aligns with the outputs-as-map migration and improves UI labeling.


11456-11466: SamplerCustomAdvanced outputs mapping looks consistent.

No concerns with the structure here.


11763-11769: SamplingPercentToSigma output label added—LGTM.

Structure matches the normalized outputs map.


12322-12332: SplitAudioChannels output names added—LGTM.

Clear left/right labeling.


6284-6289: Auto-refresh after generation and refresh: verify empty object placeholders.

Confirm whether {} is the expected placeholder for controls without user-visible labels, or if these entries should include localized name properties (as shown in the image entry above them).


15889-15890: This node definition is consistently empty across all 12 locales—not an Arabic-specific issue.

The entry "waiting for camera___": {} appears identically in the English, Arabic, Chinese, Japanese, Korean, Russian, French, Spanish, Turkish, Portuguese, Persian, and Traditional Chinese locale files. The ___ suffix and empty object structure across all languages suggests this is an intentionally disabled or placeholder node rather than a missing translation. No action needed unless this is intended for user-facing functionality and the feature is being released.


6176-6220: Remove concern about English label leakage—these inputs are intentionally empty.

The {} placeholders for "upload 3d model", "upload extra resources", and "clear" are correct and consistent across all locales (including English). These are special button widgets created at runtime with labels provided by the i18n system (g.choose_file_to_upload), not from nodeDefs.json. The empty objects are by design and do not cause English fallback or label leakage.

The output key ordering suggestion can be addressed separately if readability is a priority, but it is not a functional issue.

Likely an incorrect or invalid review comment.


2021-2025: [rewritten review comment]
[classification tag]


10100-10102: No changes needed. The empty objects for preview and previewMode match the English source locale, confirming these are intentional design—likely internal/hidden parameters not exposed in the UI that don't require user-facing labels.


13451-13469: Structure is correct; underscores are intentional and consistent across all languages.

The underscores in Arabic (خريطة_الخسارة, إجمالي_خطوات_التدريب) mirror the English original ("loss_map", "steps") and are preserved consistently in all language versions (Spanish: "mapa_pérdidas", "pasos"). This is an intentional design choice in the nodeDefs.json structure, not a localization issue or Arabic-specific concern. No action needed.

Likely an incorrect or invalid review comment.

src/locales/ja/settings.json (1)

462-470: LGTM: Comfy_UI_TabBarLayout entry is well-formed and consistent with settings schema.

src/locales/pt-BR/main.json (1)

1433-1434: Verify that menu.helpAndFeedback (not settings.helpAndFeedback) is the correct key path and that the English locale includes it with the same nesting.

The AI summary references settings.helpAndFeedback, but this change places the key under menu. Confirm that the UI actually references menu.helpAndFeedback and that the English locale (src/locales/en/main.json) has the corresponding entry in the same namespace.

src/locales/es/main.json (1)

1433-1434: The locale changes are consistent and properly implemented. All language files (including English) have the same object structure for sideToolbar.mediaAssets with title, filter*, and sort* properties. Code usages in MediaAssetFilterMenu.vue and MediaAssetSortMenu.vue correctly reference these nested properties (e.g., sideToolbar.mediaAssets.filterImage, sideToolbar.mediaAssets.sortNewestFirst), indicating the schema migration is complete. No breaking changes detected.

Note: The review comment mentions menu.mediaAssets, but the actual code uses sideToolbar.mediaAssets.

src/locales/fa/commands.json (1)

1-345: The commands.json structure in fa is consistent with all other locales (ar, en, es, fr). The i18n layer and all consuming code explicitly access the .label property (e.g., t('commands.Comfy_Canvas_DeleteSelectedItems.label')), which aligns with the object structure in the files. No schema mismatch issue exists.

src/locales/ar/settings.json (1)

460-470: New Comfy_UI_TabBarLayout entry matches expected structure (name/tooltip/options).
Options use stable keys (Default, Integrated) with localized labels.

src/locales/pt-BR/settings.json (1)

460-470: Comfy_UI_TabBarLayout added cleanly; enum option keys preserved.

src/locales/es/settings.json (1)

460-470: Comfy_UI_TabBarLayout addition looks consistent with other locales (options/name/tooltip).

src/locales/fa/settings.json (1)

279-286: Comfy_UI_TabBarLayout (fa) uses correct option keys and localized labels.

src/locales/fr/settings.json (1)

463-470: Comfy_UI_TabBarLayout addition looks structurally correct.
Shape (name, tooltip, options) and option keys (Default, Integrated) look consistent for a settings enum entry.

src/locales/fr/main.json (2)

390-408: No action needed. The translation is correctly placed under the menu section, not commands.

The helpAndFeedback key is a menu item (as evidenced by TopMenuHelpButton.vue using $t('menu.helpAndFeedback')), not a command palette entry. The French locale file correctly includes "helpAndFeedback": "Aide & Retour d'information" at line 1434 in the menu section, consistent with all other locale files (en, zh, ja, ru, etc.). No missing translation exists.

Likely an incorrect or invalid review comment.


2076-2086: No breaking change detected – mediaAssets has always been an object structure.

All locale files (EN, FR, JA, etc.) consistently define mediaAssets as an object with nested properties (title, sortNewestFirst, sortOldestFirst, etc.). Every consumer in the codebase accesses these properties via i18n's $t() function with dot notation (e.g., $t('sideToolbar.mediaAssets.title')), which is the correct pattern for nested translation keys. There is no evidence of code treating mediaAssets as a string primitive, and therefore no breaking change to verify.

Likely an incorrect or invalid review comment.

src/locales/ru/main.json (2)

2076-2086: All consumers of sideToolbar.mediaAssets correctly handle the object structure. MediaAssetFilterMenu.vue, MediaAssetSortMenu.vue, and AssetsSidebarTab.vue all use proper nested translation paths (e.g., $t('sideToolbar.mediaAssets.filterImage')). The string-to-object change has been fully integrated across all locales and components with no breaking changes detected.


390-408: The review comment is incorrect. The Russian locale already contains helpAndFeedback at the correct location. The code accesses menu.helpAndFeedback (confirmed in TopMenuHelpButton.vue), not commands.helpAndFeedback. Both English and Russian locales have this key in their menu sections. The reference to "Also applies to: 1433-1435" actually shows the key is present in the Russian locale. No translation fix is needed.

Likely an incorrect or invalid review comment.

src/locales/ko/main.json (1)

2076-2086: sideToolbar.mediaAssets shape change: ensure no code still expects a string.

The new object structure looks reasonable, but it’s only safe if all usage sites and all locales were updated in lockstep.

src/locales/ja/main.json (1)

2076-2086: sideToolbar.mediaAssets: shape change from string to object is properly implemented across all consumers and locales.

Verification confirms all consumers have been correctly updated to access the nested subkeys (title, sort*/filter*) using dotted path syntax. All 12 locales consistently provide the same 9 subkeys with no missing or inconsistent keys. No remaining code treats mediaAssets as a string value.

src/locales/ar/main.json (2)

1433-1434: These Arabic locale files were auto-generated as part of the "Sync keys" process, not manually edited. Per the repository's workflow, non-en locale files are automatically generated; manual edits to them are not needed and were not made here.

Likely an incorrect or invalid review comment.


2076-2086: Shape change verified across all locales with proper runtime access.

Confirmed: sideToolbar.mediaAssets is fully implemented as an object in all five locales (ar, en, es, fa, fr) with complete parity of properties (title, sortLongestFirst, sortOldestFirst, sortFastestFirst, sortNewestFirst, filterImage, filterVideo, filterAudio, filter3D). Runtime code correctly accesses these keys through the $t() translation function with nested property lookups ($t('sideToolbar.mediaAssets.title'), etc.), and no legacy string-based access patterns exist.

src/locales/tr/main.json (1)

1433-1434: Note: Locale files are auto-generated and should not be manually edited.

Based on learnings, locale files other than src/locales/en/main.json are generated automatically on every release. Manual updates to other locale files (including Turkish) are not required.

The changes in this file appear to be part of an automated translation update. If you need to add or modify translations, please:

  1. Only edit src/locales/en/main.json
  2. Allow the automated system to generate translations for other locales on release

The JSON structure and syntax appear valid, but future translation updates should go through the English locale file.

Based on learnings, these locale files are auto-generated and shouldn't require manual PR updates.

Also applies to: 1617-1617, 1640-1640, 2076-2086

src/locales/es/nodeDefs.json (19)

1541-1550: Validate ConditioningStableAudio.outputs index↔meaning mapping (positivo/negativo).
Looks consistent, but please confirm output 0/1 match the node’s actual output order (especially after the array→object migration).


3313-3326: GetImageSize.outputs numeric keys: ensure consumers use keys, not insertion order.
JS object enumeration orders “integer-like” keys ("0", "1", "2") ascending regardless of how they appear in JSON, so any UI/logic that iterates must rely on the keys (or explicitly sort).


3378-3387: Hunyuan3Dv2Conditioning.outputs ordering: confirm 0=positivo, 1=negativo.
Same caveat about numeric-key iteration order applies.


3405-3414: Hunyuan3Dv2ConditioningMultiView.outputs ordering: confirm 0=positivo, 1=negativo.
Same caveat about numeric-key iteration order applies.


6194-6219: Load3D.outputs migration looks consistent; verify index meanings.
Names look reasonable; please confirm indices 0..5 align with the node’s output contract after the structural change.


6426-6431: LoraModelLoader.outputs[0].name addition is good (more readable output label).


10100-10102: PreviewAny.inputs.preview/previewMode {} placeholders: confirm whether these are user-visible.
If yes, they likely need Spanish name fields; if no, {} is fine.


11426-11435: SamplerCustom.outputs: confirm 0/1 semantics and that UI isn’t relying on object iteration order.


11456-11465: SamplerCustomAdvanced.outputs: confirm 0/1 semantics and that UI isn’t relying on object iteration order.


11763-11768: SamplingPercentToSigma.outputs[0].name looks fine; confirm output label usage.
If the UI shows this name, “valor_sigma” is understandable; consider “valor sigma” (space) only if other nodes follow that convention.


12322-12331: SplitAudioChannels.outputs localization looks good (izquierdo/derecho).


12359-12368: SplitSigmas.outputs localization looks good (sigmas_altos/sigmas_bajos).


12380-12389: SplitSigmasDenoise.outputs: confirm index meanings; beware numeric-key iteration order.


13451-13468: TrainLoraNode.outputs: please verify indices map correctly (0..3) post-migration.
Also note that "3"/"2" will enumerate after "0"/"1" regardless of placement in JSON.


1-15960: Meta: confirm whether src/locales/es/nodeDefs.json is expected to be edited directly.
In this repo, non-EN locale files may be generated during release; if that’s the case, changes should land in the source-of-truth translation workflow to avoid being overwritten. Based on learnings.


2024-2024: No action required—option0 is not user-visible.

option0 is an internal widget identifier used by CustomCombo to dynamically generate option input fields, not a user-facing label. The code dynamically creates widgets named option0, option1, etc., and populates the combo display from widgets with non-empty values. Since it's not displayed to users, the empty object is correct and consistent across all locales.


15889-15889: This locale entry is not actually used in the UI and requires no translation.

The "waiting for camera___" key is a stub entry in the node definitions that is never referenced in the code. The actual button label is set in src/extensions/core/webcamCapture.ts using a hardcoded string ('waiting for camera...') which is then replaced with btn.label = t('g.capture') when the video is ready. The empty {} is correct since this key serves no purpose and should remain unpopulated across all locale files.

Likely an incorrect or invalid review comment.


6284-6288: LoadImageOutput.inputs fields need translations across all locales.
Both "Auto-refresh after generation" and "refresh" are missing "name" properties in the source English definition (and consequently in all locale files). Since the node description mentions the refresh button as a user-visible element, these empty {} placeholders should be populated with localized labels. Fix the English source first, then sync across all locales.

Example fix for English source
-      "Auto-refresh after generation": {},
+      "Auto-refresh after generation": { "name": "Auto-refresh after generation" },
...
-      "refresh": {},
+      "refresh": { "name": "Refresh" },

Likely an incorrect or invalid review comment.


6178-6189: This concern is based on incorrect assumptions about the codebase.

The empty objects for "clear", "upload 3d model", and "upload extra resources" are not a Spanish-specific issue—they appear identically across ALL languages (English, Chinese, Russian, Japanese, Korean, French, Spanish, Turkish) in the Load3D node definition. This consistent pattern indicates intentional design. The localization files are auto-synced from English, and these inputs are likely either non-user-facing, handled elsewhere in the UI, or rendered without displayed labels. No translation additions are needed.

Likely an incorrect or invalid review comment.

src/locales/fr/nodeDefs.json (10)

1541-1550: ConditioningStableAudio output labels look consistent (0=positif, 1=négatif).

No issues with the added output names here assuming output indices match the node’s actual outputs.


3378-3387: Hunyuan3Dv2Conditioning outputs: OK, but keep index semantics stable.

You added names for outputs 0/1. Please double-check (against the source node schema) that output 0 is “positif” and 1 is “négatif” for this node.


3405-3414: Hunyuan3Dv2ConditioningMultiView outputs labeling looks correct.

Assuming standard convention (0=positive, 1=negative), these names look good.


6426-6432: LoraModelLoader output now has a French name + tooltip: good.


11763-11768: SamplingPercentToSigma output label addition looks correct.


12322-12331: SplitAudioChannels outputs labeled gauche/droite: good.


12359-12368: SplitSigmas output labels: good.


12380-12389: SplitSigmasDenoise output labels: good.


13451-13468: TrainLoraNode outputs now have explicit names/tooltips: good, but verify index meanings.

Please confirm output indices (0=model, 1=lora, 2=loss map, 3=steps) match the node’s actual output order/types so labels don’t drift from behavior.


3306-3326: The GetImageSize output index/name concern is incorrect. Output index "2" is correctly labeled as "batch_size" in English (and "taille_lot" in French). Both language versions align on the same semantic meaning—there is no mismatch. The original assumption that output 2 should be the passthrough image was unfounded.

Likely an incorrect or invalid review comment.

src/locales/ko/nodeDefs.json (13)

1541-1551: Verify ConditioningStableAudio.outputs index→meaning mapping (and consider ko labels).

If runtime output order is [positive, negative], this is correct; if not, the UI will mislabel ports. Also, name: "positive"/"negative" is inconsistent with many other Korean labels in this file—confirm that these are intended to remain English.


2021-2025: CustomCombo.inputs.option0: {} relies on “empty descriptor” behavior.

Confirm the consumer supports empty objects for inputs (no name/tooltip) and won’t render a blank label or crash during schema validation.


3378-3388: Hunyuan3Dv2Conditioning.outputs ordering changed—verify port labels.

Ensure "0" = positive and "1" = negative matches the runtime node definition; otherwise the UI will misrepresent connections.


3405-3415: Hunyuan3Dv2ConditioningMultiView.outputs ordering changed—verify port labels.

Same concern: confirm "0" = positive and "1" = negative aligns with the node’s actual outputs.


6284-6289: LoadImageOutput.inputs adds empty descriptors—confirm schema tolerance.

"Auto-refresh after generation": {} and "refresh": {} will only work if empty input descriptors are valid and if these exact keys are expected.


6426-6432: LoraModelLoader.outputs[0].name = "model"—verify this matches expected UI label/semantics.

If the output is meant to be localized (or match a canonical label across locales), confirm this is the right value and that the tooltip text (“수정된 diffusion 모델”) is accurate for this node.


10100-10106: PreviewAny.inputs.preview/previewMode: {} relies on implicit behavior.

Confirm these placeholders are intentionally blank (and won’t render as empty labels) and that empty objects are supported for inputs.


11763-11769: SamplingPercentToSigma.outputs[0].name = "sigma_value"—verify index and label.

Ensure this node only has a single output at index "0" and that the display name should be sigma_value (vs localized).


12322-12332: SplitAudioChannels.outputs now names channels—verify left/right mapping.

Confirm output "0" is left and "1" is right in the runtime node; otherwise channel wiring will be mislabeled.


12359-12369: SplitSigmas.outputs renamed—verify high/low mapping.

Ensure "0" = high_sigmas and "1" = low_sigmas matches runtime ordering.


15889-15894: WebcamCapture.inputs["waiting for camera___"] key is suspicious—verify it’s the expected identifier.

If this is a UI-only placeholder, confirm the exact key string is what the frontend uses; otherwise it may be dead/unreachable translation data.


12380-12390: No issue found—output ordering is correct.

Both the English and Korean versions have identical output mappings: output 0 = high_sigmas, output 1 = low_sigmas. The JSON key order in the Korean file differs only in presentation and has no effect on runtime behavior.


13451-13469: TrainLoraNode.outputs indices require backend verification.

The Korean and English locale files have identical semantic mappings (0=model, 1=lora, 2=loss_map, 3=steps), but verification against the actual backend TrainLoraNode implementation cannot be performed in this frontend repository.

src/locales/ja/nodeDefs.json (8)

2021-2025: CustomCombo.inputs.option0: {} — verify UI behavior for empty input descriptors.
If the UI falls back to showing the raw key when name is absent, this may be fine; if it expects name, this could render oddly.


6284-6292: LoadImageOutput placeholder inputs (Auto-refresh after generation, refresh) may leak English in ja UI.
If placeholders are intentionally unlabeled controls, OK; otherwise consider adding localized name.


6426-6432: LoraModelLoader.outputs migration to object mapping looks fine.


10100-10105: PreviewAny placeholder inputs (preview, previewMode) — confirm these don’t render as raw keys.


11426-11436: SamplerCustom* outputs migration to keyed-object form looks consistent.
Only thing to sanity-check: whether output / denoised_output should be localized labels or must remain stable identifiers across locales.

Also applies to: 11456-11466


11763-11769: SamplingPercentToSigma.outputs.name = "sigma_value" — decide whether to localize.
If this name is shown in the UI, consider Japanese (e.g., シグマ値) for consistency; if it’s an internal identifier, keep as-is.


12359-12369: SplitSigmas* outputs (high_sigmas/low_sigmas) — confirm localization expectations.
Same question as above: UI label vs stable identifier. If label, consider Japanese (例: 高シグマ / 低シグマ).

Also applies to: 12380-12390


15889-15893: The waiting for camera___ key in nodeDefs.json is not user-visible and requires no localization.

The button label shown to users is hardcoded in the WebcamCapture extension (line 107 of src/extensions/core/webcamCapture.ts) as 'waiting for camera...' and is subsequently replaced with a properly translated string via t('g.capture') once the camera becomes ready (line 159). The nodeDefs.json entry is unused by the implementation.

Likely an incorrect or invalid review comment.

src/locales/ru/nodeDefs.json (12)

1541-1550: Good: explicit output names added for ConditioningStableAudio.

Adding name for outputs 0/1 should improve port labeling without affecting schema keys. (Based on learnings.)


2019-2025: Verify CustomCombo.inputs.option0 = {} is intentional (placeholder vs missing translation).

An explicit empty object is fine if the UI expects the key to exist, but if this is meant to be localized, {} will likely render the raw key or fallback behavior.


6178-6219: Verify Load3D input keys with spaces and new output naming align with the canonical schema.

Keys like "upload 3d model" / "upload extra resources" and "clear" must exactly match the underlying node’s input IDs; otherwise RU labels won’t apply. Also sanity-check the output indices (0..5) against the real node output order to avoid mislabeled ports.


6284-6289: Verify {} placeholders for LoadImageOutput controls don’t regress localization.

If "Auto-refresh after generation" / "refresh" are user-visible controls, {} likely removes localized name/tooltip. If they’re meant to be “special” non-localized controls, this is fine—just confirm the intended behavior.


6426-6431: Good: LoraModelLoader.outputs[0] now has an explicit name.

This should improve port clarity (“модель”) while preserving the output index.


10100-10101: Confirm PreviewAny.inputs.preview/previewMode = {} is compatible with the consumer.

If the UI expects inputs[key] to be an object with optional name/tooltip, {} is fine; if it expects fields to exist, it may need { "name": ..., "tooltip": ... } (or null) instead.


11763-11768: Good: SamplingPercentToSigma output now has a readable name.


11426-11435: Double-check SamplerCustom* output indices and labels (“выход” vs “очищенный_выход”).

These nodes are commonly wired by port index; ensure 0/1 labels correspond to the real output order so users don’t connect the wrong port based on the label.

Also applies to: 11456-11465


12322-12331: Good: SplitAudioChannels outputs now have explicit left/right names.


13451-13468: Good: TrainLoraNode outputs are now explicitly named (model/lora/loss/steps).


15878-15892: Verify the literal key "waiting for camera___" matches the node input ID.

If this key is off by even one character, RU localization for that control won’t apply.


3313-3326: The output indices and labels are correct and match the English nodeDefs. GetImageSize outputs are consistently defined in both EN and RU as: 0=width/ширина, 1=height/высота, 2=batch_size/размер_пакета. No mismatch exists.

Likely an incorrect or invalid review comment.

src/locales/tr/settings.json (1)

462-470: LGTM - AI-generated translation for Turkish locale

This addition of the Comfy_UI_TabBarLayout setting with Turkish translations is consistent with the multi-language update described in the PR. The JSON structure is valid and follows the expected pattern.

Based on learnings, locale files other than src/locales/en/main.json are generated automatically on every release, and this appears to be part of that automated process.

src/locales/zh-TW/settings.json (1)

462-470: LGTM - AI-generated translation for Traditional Chinese locale

The addition of the Comfy_UI_TabBarLayout setting with Traditional Chinese translations is properly structured and consistent with the multi-language update.

Based on learnings, these translations in non-English locale files are generated automatically on every release.

src/locales/zh/main.json (2)

1433-1434: LGTM - New helpAndFeedback command added

The addition of the helpAndFeedback command with Simplified Chinese translation ("帮助与反馈") is consistent with the multi-language update.

Based on learnings, these translations in non-English locale files are generated automatically.


2076-2086: LGTM - mediaAssets refactored to object structure

The refactoring of mediaAssets from a simple string label to a structured object with filtering and sorting options is a good enhancement. The Simplified Chinese translations are properly structured with keys for:

  • Filter options (filterImage, filterVideo, filterAudio, filter3D)
  • Sort options (sortNewestFirst, sortOldestFirst, sortFastestFirst, sortLongestFirst)
  • Title

This change is consistent with similar updates across other locale files in this PR.

src/locales/zh/settings.json (1)

460-470: LGTM - New settings entries added for Simplified Chinese

The addition of pysssss_SnapToGrid and Comfy_UI_TabBarLayout settings with Simplified Chinese translations is properly structured and consistent with the multi-language update.

Based on learnings, these translations in non-English locale files are generated automatically on every release.

src/locales/zh-TW/main.json (2)

1433-1434: LGTM - New helpAndFeedback command added

The addition of the helpAndFeedback command with Traditional Chinese translation ("幫助與回饋") is consistent with the multi-language update.

Based on learnings, these translations in non-English locale files are generated automatically.


2076-2086: LGTM - mediaAssets refactored to object structure

The refactoring of mediaAssets from a simple string label to a structured object with filtering and sorting options enhances the UI. The Traditional Chinese translations are properly structured with all necessary keys for filters and sort options.

This change mirrors the same update in other locale files and is part of the coordinated multi-language update.

src/locales/zh-TW/nodeDefs.json (9)

1541-1550: ConditioningStableAudio.outputs: confirm output indices match runtime socket order.

Nice to see explicit names (“正向”/“負向”), but please sanity-check that output "0" is actually positive and "1" is negative in the underlying node definition.


3378-3387: Hunyuan3Dv2Conditioning* outputs: ensure "0"/"1" mapping matches positive/negative sockets.

You have both "0": 正向 and "1": 負向 in one node, and the reverse ordering in another block. Ordering in JSON won’t matter if consumers key by index, but the indices themselves must be correct.

Also applies to: 3405-3414


6426-6432: LoraModelLoader.outputs: ensure output name/tooltip align with actual output type(s).

Looks fine structurally, but please confirm this node only has a single output and that "0" is indeed the modified diffusion model (not e.g. a LoRA object).


2020-2025: This review comment is incorrect. option0 is an internal dynamic widget used by the CustomCombo extension to hold option values that populate the combo dropdown. It is not a user-visible input and therefore intentionally has no localized label. The empty {} is the correct and intended state across all locales.

Likely an incorrect or invalid review comment.


1541-1550: Verify non‑English locale edits won’t be overwritten by locale generation.

This PR directly edits src/locales/zh-TW/nodeDefs.json. If non‑en locale files are generated during release, these changes may be overwritten or rejected by the usual workflow—please confirm this file is an intended source of truth for translations in this repo. Based on learnings, other locales are typically generated automatically.

⛔ Skipped due to learnings
Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 6300
File: src/locales/en/main.json:774-780
Timestamp: 2025-12-09T04:35:43.971Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, locale files other than `src/locales/en/main.json` are generated automatically on every release. Developers only need to add English (en) key/values in `src/locales/en/main.json` when making PRs; manual updates to other locale files (fr, ja, ko, ru, zh, zh-TW, es, ar, tr, etc.) are not required and should not be suggested in reviews.
Learnt from: jtydhr88
Repo: Comfy-Org/ComfyUI_frontend PR: 7214
File: src/i18n.ts:97-98
Timestamp: 2025-12-08T01:21:41.368Z
Learning: In src/i18n.ts and related i18n code, use `Record<string, unknown>` for locale data structures (including custom nodes i18n data) to maintain consistency with existing patterns used in localeLoaders, nodeDefsLoaders, commandsLoaders, and settingsLoaders.

15884-15892: No action needed. "waiting for camera___" is a legitimate internal input for the WebcamCapture node, not a debug placeholder. The empty localization object {} is intentional and consistent across all locale files (en, zh-TW, pt-BR, fr, ru, ja, zh, tr, ko, es, ar), indicating this input is internal/hidden and doesn't require a user-facing name. The triple-underscore naming convention confirms it's meant to be non-visible to end users.

Likely an incorrect or invalid review comment.


11426-11436: Output-map migrations: confirm schema compatibility across parsing and socket mapping.

Multiple nodes switch from array-format outputs to numeric-keyed objects. This deviates from the documented ComfyUI v2 schema (which expects outputs as an array of objects). Verify that:

  • Frontend parsing normalizes both legacy array and new object-keyed formats, or confirm full migration is complete,
  • Missing or null name/tooltip fields are handled gracefully,
  • Output indices (0, 1, etc.) align with backend RETURN_TYPES socket order.

Also applies to: 11456-11466, 11763-11769, 12322-12332, 12360-12369, 12380-12390, 13451-13469


6176-6190: Load3D.inputs: "upload 3d model" and "upload extra resources" have empty-object definitions in all locales.

These three inputs ("clear", "upload 3d model", "upload extra resources") consistently have empty-object definitions across all locale files (English source included), unlike other inputs in the same node which have name translations. If these are user-facing controls, they should have name properties in every locale. If they're widget-type inputs that don't require display labels, this pattern is acceptable. Verify the intended behavior with the UI implementation or the node author.


6194-6219: Outputs structure in locale files is for i18n only; no functional impact.

The numeric-keyed object format in nodeDefs.json locale files is intentional and safe. Frontend code reads output definitions from the actual node definitions (nodeDef.outputs[]), which remain as arrays internally. Locale files serve solely as i18n translation sources—the i18n key construction uses the numeric index (e.g., outputs.0.tooltip, outputs.1.tooltip) which works correctly with the numeric-keyed object structure. The frontend never assumes Object.values() ordering or array methods on the locale structure itself.

src/locales/tr/nodeDefs.json (6)

1541-1550: Output port name mappings look consistent (positive/negative on correct indices).
The updated outputs objects for ConditioningStableAudio, Hunyuan3Dv2Conditioning, and Hunyuan3Dv2ConditioningMultiView appear to correctly label ports 0/1 as pozitif/negatif (order may differ by node, but indices are explicit).

Also applies to: 3378-3388, 3405-3415


3313-3326: GetImageSize.outputs key order is fine, but verify any UI ordering assumptions.
Using "0", "1", "2" keys is clear; if the UI enumerates numeric keys, it will typically sort them numerically anyway. Just ensure no consumer relies on insertion order for display.


6426-6432: Good: outputs now include explicit names for LoRA nodes.
Adding "name": "model" for LoraModelLoader.outputs["0"] and the explicit naming for TrainLoraNode outputs improves clarity/consistency.

Also applies to: 13451-13469


11426-11436: Sampler outputs mapping looks correct (çıktı vs gürültüsüz_çıktı).
Both SamplerCustom and SamplerCustomAdvanced label output 0 as çıktı and output 1 as gürültüsüz_çıktı, which matches typical semantics.

Also applies to: 11456-11466


11763-11769: Good: sigma/audio split outputs now have localized names.
SamplingPercentToSigma, SplitAudioChannels, SplitSigmas, and SplitSigmasDenoise outputs look correctly keyed and labeled (sigma_değeri, sol/sağ, yüksek_sigmalar/düşük_sigmalar).

Also applies to: 12322-12332, 12359-12369, 12380-12390


6178-6220: Load3D.outputs expansion looks consistent; double-check port meanings vs indices.
The output mapping now explicitly names indices (0..5), which is good. Please sanity-check that each Turkish label matches the actual port at that index (normal, maske, ağ_yolu, kamera_bilgisi, kayıt_videosu).

Comment on lines +1541 to 1551
"outputs": {
"1": {
"name": "سلبي",
"tooltip": null
},
{
"0": {
"name": "إيجابي",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Keep numeric output keys ordered and verify index semantics (positive=0, negative=1).

This looks consistent with the outputs-as-map migration, but please keep "0", "1" ordering for readability and confirm consumers still treat output 0 as “إيجابي” and 1 as “سلبي”.

🤖 Prompt for AI Agents
In @src/locales/ar/nodeDefs.json around lines 1541 - 1551, Reorder the numeric
keys in the "outputs" object so they appear as "0" then "1" (i.e., "0": {
"name": "إيجابي", ... }, "1": { "name": "سلبي", ... }) and verify any consumers
that index by output number (e.g., code that reads outputs["0"] or expects
output index 0 to be positive) still treat index 0 as “إيجابي” and index 1 as
“سلبي”; update any tests or lookup logic that assumed the reversed mapping to
use outputs["0"] -> إيجابي and outputs["1"] -> سلبي.

Comment on lines +3313 to 3327
"outputs": {
"2": {
"name": "حجم_الدفعة",
"tooltip": null
},
{
"1": {
"name": "ارتفاع",
"tooltip": null
},
{
"0": {
"name": "عرض",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Outputs map looks correct; prefer ordering "0", "1", "2" in-file.

Names align with width/height/batch size, but please keep numeric keys ordered for maintainability.

🤖 Prompt for AI Agents
In @src/locales/ar/nodeDefs.json around lines 3313 - 3327, The outputs object
keys are out of numeric order; reorder the entries under "outputs" so the
numeric keys appear as "0", "1", "2" (keeping their existing name values "عرض",
"ارتفاع", "حجم_الدفعة") to improve maintainability while leaving all values and
tooltips unchanged; update the "outputs" map in the nodeDefs JSON accordingly so
the sequence is "0", then "1", then "2".

Comment on lines +3378 to 3388
"outputs": {
"1": {
"name": "سلبي",
"tooltip": null
},
{
"0": {
"name": "إيجابي",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Outputs map migration OK; keep numeric keys ordered.

Same note: order "0" then "1" for consistency/readability.

🤖 Prompt for AI Agents
In @src/locales/ar/nodeDefs.json around lines 3378 - 3388, The outputs object
has numeric keys in reverse order ("1" then "0"); reorder the keys so "0"
appears before "1" for consistent numeric ordering and readability by editing
the outputs object (keys "0" and "1") in the nodeDefs.json entry so "0" comes
first.

Comment on lines +3405 to 3415
"outputs": {
"1": {
"name": "سلبي",
"tooltip": null
},
{
"0": {
"name": "إيجابي",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Outputs map migration OK; keep numeric keys ordered.

Same as above.

🤖 Prompt for AI Agents
In @src/locales/ar/nodeDefs.json around lines 3405 - 3415, The outputs object
has numeric string keys out of numeric order ("1" before "0"); reorder the keys
so numeric keys are in ascending order (put "0" then "1") within the "outputs"
map to keep consistency with the other nodeDefs entries and preserve the key
names "0" and "1".

Comment on lines +11426 to 11436
"outputs": {
"1": {
"name": "مخرج_منزوع_الضوضاء",
"tooltip": null
},
{
"0": {
"name": "مخرج",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

Sampler outputs mapping looks consistent.

Only suggestion: order keys "0", "1" in-file for readability.

🤖 Prompt for AI Agents
In @src/locales/ar/nodeDefs.json around lines 11426 - 11436, The JSON object
under "outputs" currently lists key "1" before "0"; reorder the entries so key
"0" comes first then key "1" for consistent ordering and
readability—specifically update the "outputs" object containing the keys "0"
(name "مخرج") and "1" (name "مخرج_منزوع_الضوضاء") to place "0" before "1"
without changing the values.

Comment on lines +3313 to 3327
"outputs": {
"2": {
"name": "batch_size",
"tooltip": null
},
{
"0": {
"name": "width",
"tooltip": null
},
{
"1": {
"name": "height",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

GetImageSize.outputs renamed—double-check output indices.

"0"→width, "1"→height, "2"→batch_size must match the node’s actual output ordering; otherwise wires/tooltips will be misleading.

Proposed small readability tweak (no behavior change)
   "outputs": {
-    "2": { "name": "batch_size", "tooltip": null },
     "0": { "name": "width", "tooltip": null },
     "1": { "name": "height", "tooltip": null },
+    "2": { "name": "batch_size", "tooltip": null }
   }
🤖 Prompt for AI Agents
In @src/locales/ko/nodeDefs.json around lines 3313 - 3327, The localized outputs
block for the GetImageSize node lists outputs with numeric keys out of order;
verify the node's actual output ordering for GetImageSize (outputs: width,
height, batch_size) and reorder or rename the JSON keys under "outputs" so "0"
maps to "width", "1" maps to "height", and "2" maps to "batch_size" (or adjust
to match the source node definition if the node uses a different ordering), then
run a quick UI/test to confirm wire labels/tooltips align.

Comment on lines +462 to 470
},
"Comfy_UI_TabBarLayout": {
"tooltip": "탭 바의 레이아웃을 제어합니다. \"통합\"은 도움말 및 사용자 컨트롤을 탭 바 영역으로 이동시킵니다.",
"options": {
"Default": "기본값",
"Integrated": "통합"
},
"name": "탭 바 레이아웃"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check for locale generation documentation and scripts
echo "=== Searching for locale generation process ==="
rg -n "generated|auto.?generat|i18n.*generat" --type json --type js --type ts --type md . 2>/dev/null | head -30

echo ""
echo "=== Checking for locale-related scripts ==="
fd -e js -e ts -e sh | xargs grep -l "locale" | grep -E "(script|build|generate)" | head -10

echo ""
echo "=== Looking for documentation about locale workflow ==="
find . -name "*.md" -type f | xargs grep -i "locale\|translation" | grep -i "process\|workflow\|auto" | head -20

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 5255


🏁 Script executed:

#!/bin/bash
# Check src/locales structure
echo "=== Locale files structure ==="
find src/locales -type f -name "*.json" | head -20

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 660


🏁 Script executed:

#!/bin/bash
# Look for any comments or instructions about locale generation
echo "=== Checking for locale-generation related files/scripts ==="
fd -path "*/scripts/*" -o -path "*/build/*" | xargs grep -l "locale" 2>/dev/null || true
find . -maxdepth 2 -name "*locale*" -o -name "*i18n*" | grep -v node_modules

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 534


Move these locale edits to src/locales/en/main.json—non-English locale files are auto-generated on release.

The Korean locale file (src/locales/ko/settings.json) is generated automatically during the release workflow. Manual edits here will be overwritten. Add the Comfy_UI_TabBarLayout entry to src/locales/en/main.json instead; translations for other languages are handled by the i18n.yaml CI workflow.

Comment on lines 460 to 470
"pysssss_SnapToGrid": {
"name": "Всегда привязываться к сетке"
},
"Comfy_UI_TabBarLayout": {
"tooltip": "Управляет расположением панели вкладок. \"Интегрированный\" перемещает элементы управления Справкой и Пользователем в область панели вкладок.",
"options": {
"Default": "По умолчанию",
"Integrated": "Интегрированный"
},
"name": "Макет панели вкладок"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1. Explore locale directory structure
echo "=== Locale directory structure ==="
find src/locales -type f -name "*.json" | head -20

echo ""
echo "=== Check if en/settings.json exists ==="
ls -la src/locales/en/ | grep -E "\.json$" || echo "No JSON files in en/"

echo ""
echo "=== Check if there's a locale generator/script ==="
find . -type f \( -name "*generat*" -o -name "*i18n*" -o -name "*translat*" \) | grep -v node_modules | head -20

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1526


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 2. Check if Comfy_UI_TabBarLayout exists in en/main.json
echo "=== Search for Comfy_UI_TabBarLayout in en/main.json ==="
grep -n "Comfy_UI_TabBarLayout" src/locales/en/main.json || echo "NOT FOUND in en/main.json"

echo ""
echo "=== Search for Comfy_UI_TabBarLayout in ru/settings.json ==="
grep -n "Comfy_UI_TabBarLayout" src/locales/ru/settings.json || echo "NOT FOUND in ru/settings.json"

echo ""
echo "=== Check if ru/settings.json exists ==="
test -f src/locales/ru/settings.json && echo "File exists" || echo "File does not exist"

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 301


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 3. Run the verification script from the original review
python - <<'PY'
import json, pathlib, sys

root = pathlib.Path("src/locales")
files = sorted(root.glob("*/settings.json"))
if not files:
    print("No src/locales/*/settings.json files found.", file=sys.stderr)
    sys.exit(1)

def load_no_dupes(p: pathlib.Path):
    raw = p.read_text(encoding="utf-8")
    dups = []
    def hook(pairs):
        seen = set()
        obj = {}
        for k, v in pairs:
            if k in seen:
                dups.append(k)
            seen.add(k)
            obj[k] = v
        return obj
    data = json.loads(raw, object_pairs_hook=hook)
    return data, dups

missing = []
bad_shape = []
has_dupes = []

for p in files:
    data, dups = load_no_dupes(p)
    if dups:
        has_dupes.append((str(p), sorted(set(dups))))
    tab = data.get("Comfy_UI_TabBarLayout")
    if tab is None:
        missing.append(str(p))
        continue
    opts = tab.get("options") if isinstance(tab, dict) else None
    if not isinstance(opts, dict) or set(opts.keys()) != {"Default", "Integrated"}:
        bad_shape.append((str(p), opts))

print(f"Checked {len(files)} files.")
if has_dupes:
    print("Duplicate JSON keys found (later value wins!):")
    for fp, keys in has_dupes:
        print(f" - {fp}: {keys}")
if missing:
    print("Missing Comfy_UI_TabBarLayout in:")
    for fp in missing:
        print(f" - {fp}")
if bad_shape:
    print("Comfy_UI_TabBarLayout.options shape mismatch in:")
    for fp, opts in bad_shape:
        print(f" - {fp}: options={opts}")

if has_dupes or bad_shape:
    sys.exit(2)
PY

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 156


Move Comfy_UI_TabBarLayout strings to src/locales/en/main.json instead of editing src/locales/ru/settings.json.

The Comfy_UI_TabBarLayout key was added to src/locales/ru/settings.json, but non-English locale files are auto-generated on every release. Add this key and its translations to src/locales/en/main.json (the source of truth); the Russian translations will be auto-generated from there. Remove or revert the changes in src/locales/ru/settings.json.

🤖 Prompt for AI Agents
In @src/locales/ru/settings.json around lines 460 - 470, The new localization
key Comfy_UI_TabBarLayout was added to the Russian settings file but non-English
locales are generated from the English source; remove or revert the
Comfy_UI_TabBarLayout entry from the ru/settings.json and add the key with its
name, tooltip and options into the English source file main.json
(src/locales/en/main.json) so it becomes the canonical entry — the Russian
translation will be regenerated automatically from that English source.

Comment on lines 2021 to 2025
"choice": {
"name": "seçim"
},
"option0": {
}
"option0": {}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, check if the file exists and get its size
wc -l src/locales/tr/nodeDefs.json
stat src/locales/tr/nodeDefs.json

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 166


🏁 Script executed:

# Read the file at the specified line ranges
sed -n '2020,2026p' src/locales/tr/nodeDefs.json

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 180


🏁 Script executed:

# Also check the other mentioned line ranges
echo "=== Range 6176-6191 ==="
sed -n '6176,6191p' src/locales/tr/nodeDefs.json
echo "=== Range 6281-6292 ==="
sed -n '6281,6292p' src/locales/tr/nodeDefs.json
echo "=== Range 10099-10106 ==="
sed -n '10099,10106p' src/locales/tr/nodeDefs.json
echo "=== Range 15884-15893 ==="
sed -n '15884,15893p' src/locales/tr/nodeDefs.json

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 1297


🏁 Script executed:

# Check the structure of entries with names to understand the pattern
echo "=== Checking similar entries with names ==="
rg '"name"' src/locales/tr/nodeDefs.json -B 1 -A 0 | head -50

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 925


New input entries with {} are missing localized names and will display as raw English keys in the Turkish UI.

The localization file is inconsistent: several new inputs (option0, clear, upload 3d model, Auto-refresh after generation, refresh, preview, previewMode, waiting for camera___) are defined as empty objects while all other inputs in the same file include "name" fields with Turkish translations. Since these are functional UI elements (buttons, options, modes), they will display as untranslated keys to Turkish users.

Add "name" translations for these entries:

  • option0seçenek 0
  • cleartemizle
  • upload 3d model3D model yükle
  • upload extra resourcesek kaynakları yükle
  • Auto-refresh after generationoluşturmadan sonra otomatik yenile
  • refreshyenile
  • previewönizle
  • previewModeönizleme modu
  • waiting for camera___kamera bekleniyor...

(Locations: 2021-2025, 6176-6191, 6281-6292, 10099-10106, 15884-15893)

🤖 Prompt for AI Agents
In @src/locales/tr/nodeDefs.json around lines 2021 - 2025, Several localization
entries (option0, clear, upload 3d model, upload extra resources, Auto-refresh
after generation, refresh, preview, previewMode, waiting for camera___) are
empty objects and will show English keys in the Turkish UI; update each of those
JSON objects to include a "name" field with the provided Turkish translations
(option0 → "seçenek 0", clear → "temizle", upload 3d model → "3D model yükle",
upload extra resources → "ek kaynakları yükle", Auto-refresh after generation →
"oluşturmadan sonra otomatik yenile", refresh → "yenile", preview → "önizle",
previewMode → "önizleme modu", waiting for camera___ → "kamera bekleniyor...")
so the UI displays the correct localized labels for those keys.

Comment on lines +3313 to 3327
"outputs": {
"2": {
"name": "批次大小",
"tooltip": null
},
{
"0": {
"name": "寬度",
"tooltip": null
},
{
"1": {
"name": "高度",
"tooltip": null
}
]
}
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# Find all nodeDefs.json files to understand the structure
find . -name "nodeDefs.json" -type f | head -20

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 196


🏁 Script executed:

# Look for GetImageSize node definition in the zh-TW locale file
rg -A 30 '"GetImageSize"' src/locales/zh-TW/nodeDefs.json | head -100

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 196


🏁 Script executed:

# Check if there are other locale files (English) for comparison
rg -A 30 '"GetImageSize"' src/locales/ --type json | head -150

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 7730


🏁 Script executed:

# Look for English locale nodeDefs.json
find src/locales -name "*.json" -type f | grep -i en

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 181


🏁 Script executed:

# Search for GetImageSize in en.json if it exists
rg -A 20 '"GetImageSize"' src/locales/en.json 2>/dev/null || rg -A 20 '"GetImageSize"' src/locales/

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 12735


Update descriptions to remove passthrough claim, or add missing output for image passthrough.

The description "passes it through unchanged" is inconsistent with the outputs. Outputs show only { width, height, batch_size } with no slot for the image passthrough. This mismatch is consistent across all locale files (en, zh-TW, zh, pt-BR, fr, ru, es, ar, ja, ko, tr, fa). Either the node behavior changed and descriptions need updating, or output 3 should contain the image.

🤖 Prompt for AI Agents
In @src/locales/zh-TW/nodeDefs.json around lines 3313 - 3327, The node
description claims an image is "passed through unchanged" but the outputs object
only contains keys 0,1,2 (width,height,batch_size); either remove the
passthrough language from the node's "description" across all locale files (en,
zh-TW, zh, pt-BR, fr, ru, es, ar, ja, ko, tr, fa) or add the missing outputs.
Fix by updating the node's outputs mapping to include an output "3" (e.g., name:
"影像" / "image" in each locale) when the node actually returns the image, or if
the node no longer returns the image remove the passthrough claim from the
description text in the same locale JSON entries so they match the outputs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL This PR changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant