Conversation
📝 WalkthroughWalkthroughMulti-language localization updates across 11 locales, including adding Changes
Possibly related PRs
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. Comment |
🎭 Playwright Tests:
|
🎨 Storybook Build Status✅ Build completed successfully! ⏰ Completed at: 01/11/2026, 11:14:43 AM UTC 🔗 Links🎉 Your Storybook is ready for review! |
Bundle Size ReportSummary
Category Glance Per-category breakdownApp Entry Points — 3.32 MB (baseline 3.32 MB) • ⚪ 0 BMain entry bundles and manifests
Status: 3 added / 3 removed Graph Workspace — 1.03 MB (baseline 1.03 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 6.63 kB (baseline 6.63 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 1 added / 1 removed Panels & Settings — 372 kB (baseline 337 kB) • 🔴 +34.7 kBConfiguration panels, inspectors, and settings screens
Status: 17 added / 17 removed UI Components — 199 kB (baseline 199 kB) • ⚪ 0 BReusable component library chunks
Status: 8 added / 8 removed Data & Services — 12.5 kB (baseline 12.5 kB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 2 added / 2 removed Utilities & Hooks — 1.41 kB (baseline 1.41 kB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 1 added / 1 removed Vendor & Third-Party — 9.19 MB (baseline 9.19 MB) • ⚪ 0 BExternal libraries and shared vendor chunks
Other — 5.25 MB (baseline 4.74 MB) • 🔴 +510 kBBundles that do not match a named category
Status: 37 added / 37 removed |
There was a problem hiding this comment.
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 tosrc/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, andar/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 insrc/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 Frenchname(andtooltipif applicable).
6176-6220: NewLoad3Dinputs/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 Frenchnames.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:LoadImageOutputadded 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:PreviewAnynew inputs are{}(potentially unlabeled controls).If
preview/previewModeare user-facing, consider addingnamestrings (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; editsrc/locales/en/nodeDefs.jsononly.Per the documented i18n workflow, non-English
nodeDefs.jsonfiles are auto-generated during release cycles using the OpenAI translation API. Manual edits tosrc/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, theoutputsobject 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 fieldsupload 3d modelandupload extra resourcesare empty{}, inconsistent with other nodes likeLoadAudioandUploadImagewhich 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 inSplitSigmasDenoise.The Russian locale shows
SplitSigmasDenoisewith reversed output indices (1=низкие_сигмы,0=высокие_сигмы) compared toSplitSigmas(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 inSplitSigmasDenoiseto matchSplitSigmas.src/locales/zh-TW/nodeDefs.json (2)
10098-10105: Add localized names forpreviewandpreviewModeinputs in PreviewAny node.Both
previewandpreviewModeare shown as UI widgets but lack localizednameentries in the locale file (unlikesourcewhich has "來源"). Update the{}placeholders with appropriate localized names for consistency and proper internationalization.
6281-6292: These inputs need localizednamefields 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 innodeDefs.json(empty{}). Update all locale files (en, zh-TW, zh, etc.) to include propernametranslations 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; editsrc/locales/en/nodeDefs.jsoninstead.Based on repository patterns,
src/locales/tr/nodeDefs.jsonand other non-English locale files are auto-generated during release. Manual edits to these files will be overwritten and create unnecessary churn. Editsrc/locales/en/nodeDefs.jsonwith 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
📒 Files selected for processing (32)
src/locales/ar/main.jsonsrc/locales/ar/nodeDefs.jsonsrc/locales/ar/settings.jsonsrc/locales/es/main.jsonsrc/locales/es/nodeDefs.jsonsrc/locales/es/settings.jsonsrc/locales/fa/commands.jsonsrc/locales/fa/main.jsonsrc/locales/fa/nodeDefs.jsonsrc/locales/fa/settings.jsonsrc/locales/fr/main.jsonsrc/locales/fr/nodeDefs.jsonsrc/locales/fr/settings.jsonsrc/locales/ja/main.jsonsrc/locales/ja/nodeDefs.jsonsrc/locales/ja/settings.jsonsrc/locales/ko/main.jsonsrc/locales/ko/nodeDefs.jsonsrc/locales/ko/settings.jsonsrc/locales/pt-BR/main.jsonsrc/locales/pt-BR/settings.jsonsrc/locales/ru/main.jsonsrc/locales/ru/nodeDefs.jsonsrc/locales/ru/settings.jsonsrc/locales/tr/main.jsonsrc/locales/tr/nodeDefs.jsonsrc/locales/tr/settings.jsonsrc/locales/zh-TW/main.jsonsrc/locales/zh-TW/nodeDefs.jsonsrc/locales/zh-TW/settings.jsonsrc/locales/zh/main.jsonsrc/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.jsonsrc/locales/zh-TW/settings.jsonsrc/locales/fr/settings.jsonsrc/locales/zh/main.jsonsrc/locales/zh/settings.jsonsrc/locales/zh-TW/main.jsonsrc/locales/es/settings.jsonsrc/locales/pt-BR/settings.jsonsrc/locales/ar/settings.jsonsrc/locales/fa/commands.jsonsrc/locales/tr/settings.jsonsrc/locales/fa/settings.jsonsrc/locales/ru/settings.jsonsrc/locales/ja/settings.jsonsrc/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.jsonsrc/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 localizedname.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:SamplingPercentToSigmaoutput 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 generationandrefresh: verify empty object placeholders.Confirm whether
{}is the expected placeholder for controls without user-visible labels, or if these entries should include localizednameproperties (as shown in theimageentry 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 forpreviewandpreviewModematch 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_TabBarLayoutentry is well-formed and consistent with settings schema.src/locales/pt-BR/main.json (1)
1433-1434: Verify thatmenu.helpAndFeedback(notsettings.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 undermenu. Confirm that the UI actually referencesmenu.helpAndFeedbackand 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 forsideToolbar.mediaAssetswithtitle,filter*, andsort*properties. Code usages inMediaAssetFilterMenu.vueandMediaAssetSortMenu.vuecorrectly 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 usessideToolbar.mediaAssets.src/locales/fa/commands.json (1)
1-345: The commands.json structure infais consistent with all other locales (ar, en, es, fr). The i18n layer and all consuming code explicitly access the.labelproperty (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: NewComfy_UI_TabBarLayoutentry 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_TabBarLayoutadded cleanly; enum option keys preserved.src/locales/es/settings.json (1)
460-470:Comfy_UI_TabBarLayoutaddition 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_TabBarLayoutaddition 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 themenusection, notcommands.The
helpAndFeedbackkey 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 themenusection, 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
mediaAssetsas 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 treatingmediaAssetsas 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 ofsideToolbar.mediaAssetscorrectly 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 containshelpAndFeedbackat the correct location. The code accessesmenu.helpAndFeedback(confirmed in TopMenuHelpButton.vue), notcommands.helpAndFeedback. Both English and Russian locales have this key in theirmenusections. 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.mediaAssetsshape 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-enlocale 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.mediaAssetsis 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.jsonare 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:
- Only edit
src/locales/en/main.json- 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: ValidateConditioningStableAudio.outputsindex↔meaning mapping (positivo/negativo).
Looks consistent, but please confirm output0/1match the node’s actual output order (especially after the array→object migration).
3313-3326:GetImageSize.outputsnumeric 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.outputsordering: confirm0=positivo,1=negativo.
Same caveat about numeric-key iteration order applies.
3405-3414:Hunyuan3Dv2ConditioningMultiView.outputsordering: confirm0=positivo,1=negativo.
Same caveat about numeric-key iteration order applies.
6194-6219:Load3D.outputsmigration looks consistent; verify index meanings.
Names look reasonable; please confirm indices0..5align with the node’s output contract after the structural change.
6426-6431:LoraModelLoader.outputs[0].nameaddition is good (more readable output label).
10100-10102:PreviewAny.inputs.preview/previewMode{}placeholders: confirm whether these are user-visible.
If yes, they likely need Spanishnamefields; if no,{}is fine.
11426-11435:SamplerCustom.outputs: confirm0/1semantics and that UI isn’t relying on object iteration order.
11456-11465:SamplerCustomAdvanced.outputs: confirm0/1semantics and that UI isn’t relying on object iteration order.
11763-11768:SamplingPercentToSigma.outputs[0].namelooks fine; confirm output label usage.
If the UI shows thisname, “valor_sigma” is understandable; consider “valor sigma” (space) only if other nodes follow that convention.
12322-12331:SplitAudioChannels.outputslocalization looks good (izquierdo/derecho).
12359-12368:SplitSigmas.outputslocalization 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 whethersrc/locales/es/nodeDefs.jsonis 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—option0is not user-visible.
option0is an internal widget identifier used by CustomCombo to dynamically generate option input fields, not a user-facing label. The code dynamically creates widgets namedoption0,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 insrc/extensions/core/webcamCapture.tsusing a hardcoded string ('waiting for camera...') which is then replaced withbtn.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.inputsfields 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:ConditioningStableAudiooutput 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:Hunyuan3Dv2Conditioningoutputs: OK, but keep index semantics stable.You added names for outputs
0/1. Please double-check (against the source node schema) that output0is “positif” and1is “négatif” for this node.
3405-3414:Hunyuan3Dv2ConditioningMultiViewoutputs labeling looks correct.Assuming standard convention (0=positive, 1=negative), these names look good.
6426-6432:LoraModelLoaderoutput now has a French name + tooltip: good.
11763-11768:SamplingPercentToSigmaoutput label addition looks correct.
12322-12331:SplitAudioChannelsoutputs labeled gauche/droite: good.
12359-12368:SplitSigmasoutput labels: good.
12380-12389:SplitSigmasDenoiseoutput labels: good.
13451-13468:TrainLoraNodeoutputs 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: TheGetImageSizeoutput 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: VerifyConditioningStableAudio.outputsindex→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.outputsordering changed—verify port labels.Ensure
"0" = positiveand"1" = negativematches the runtime node definition; otherwise the UI will misrepresent connections.
3405-3415:Hunyuan3Dv2ConditioningMultiView.outputsordering changed—verify port labels.Same concern: confirm
"0" = positiveand"1" = negativealigns with the node’s actual outputs.
6284-6289:LoadImageOutput.inputsadds 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 besigma_value(vs localized).
12322-12332:SplitAudioChannels.outputsnow 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.outputsrenamed—verify high/low mapping.Ensure
"0" = high_sigmasand"1" = low_sigmasmatches 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, output1=low_sigmas. The JSON key order in the Korean file differs only in presentation and has no effect on runtime behavior.
13451-13469:TrainLoraNode.outputsindices 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
TrainLoraNodeimplementation 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 whennameis absent, this may be fine; if it expectsname, this could render oddly.
6284-6292:LoadImageOutputplaceholder inputs (Auto-refresh after generation,refresh) may leak English in ja UI.
If placeholders are intentionally unlabeled controls, OK; otherwise consider adding localizedname.
6426-6432:LoraModelLoader.outputsmigration to object mapping looks fine.
10100-10105:PreviewAnyplaceholder 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: whetheroutput/denoised_outputshould 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 thisnameis 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: Thewaiting 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 viat('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 forConditioningStableAudio.Adding
namefor outputs0/1should improve port labeling without affecting schema keys. (Based on learnings.)
2019-2025: VerifyCustomCombo.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: VerifyLoad3Dinput 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 forLoadImageOutputcontrols don’t regress localization.If
"Auto-refresh after generation"/"refresh"are user-visible controls,{}likely removes localizedname/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 explicitname.This should improve port clarity (“модель”) while preserving the output index.
10100-10101: ConfirmPreviewAny.inputs.preview/previewMode = {}is compatible with the consumer.If the UI expects
inputs[key]to be an object with optionalname/tooltip,{}is fine; if it expects fields to exist, it may need{ "name": ..., "tooltip": ... }(ornull) instead.
11763-11768: Good:SamplingPercentToSigmaoutput now has a readable name.
11426-11435: Double-checkSamplerCustom*output indices and labels (“выход” vs “очищенный_выход”).These nodes are commonly wired by port index; ensure
0/1labels 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:SplitAudioChannelsoutputs now have explicit left/right names.
13451-13468: Good:TrainLoraNodeoutputs 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 localeThis addition of the
Comfy_UI_TabBarLayoutsetting 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.jsonare 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 localeThe addition of the
Comfy_UI_TabBarLayoutsetting 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 addedThe addition of the
helpAndFeedbackcommand 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 structureThe refactoring of
mediaAssetsfrom 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 ChineseThe addition of
pysssss_SnapToGridandComfy_UI_TabBarLayoutsettings 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 addedThe addition of the
helpAndFeedbackcommand 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 structureThe refactoring of
mediaAssetsfrom 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.option0is 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‑enlocale 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/tooltipfields 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 havenametranslations. If these are user-facing controls, they should havenameproperties 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.jsonlocale 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 assumesObject.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 updatedoutputsobjects forConditioningStableAudio,Hunyuan3Dv2Conditioning, andHunyuan3Dv2ConditioningMultiViewappear to correctly label ports0/1aspozitif/negatif(order may differ by node, but indices are explicit).Also applies to: 3378-3388, 3405-3415
3313-3326:GetImageSize.outputskey 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 explicitnames for LoRA nodes.
Adding"name": "model"forLoraModelLoader.outputs["0"]and the explicit naming forTrainLoraNodeoutputs improves clarity/consistency.Also applies to: 13451-13469
11426-11436: Sampler outputs mapping looks correct (çıktıvsgürültüsüz_çıktı).
BothSamplerCustomandSamplerCustomAdvancedlabel output0asçıktıand output1asgü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, andSplitSigmasDenoiseoutputs 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.outputsexpansion 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).
| "outputs": { | ||
| "1": { | ||
| "name": "سلبي", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "إيجابي", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧹 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"] -> سلبي.
| "outputs": { | ||
| "2": { | ||
| "name": "حجم_الدفعة", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "1": { | ||
| "name": "ارتفاع", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "عرض", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧹 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".
| "outputs": { | ||
| "1": { | ||
| "name": "سلبي", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "إيجابي", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧹 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.
| "outputs": { | ||
| "1": { | ||
| "name": "سلبي", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "إيجابي", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧹 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".
| "outputs": { | ||
| "1": { | ||
| "name": "مخرج_منزوع_الضوضاء", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "مخرج", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧹 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.
| "outputs": { | ||
| "2": { | ||
| "name": "batch_size", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "width", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "1": { | ||
| "name": "height", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧹 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.
| }, | ||
| "Comfy_UI_TabBarLayout": { | ||
| "tooltip": "탭 바의 레이아웃을 제어합니다. \"통합\"은 도움말 및 사용자 컨트롤을 탭 바 영역으로 이동시킵니다.", | ||
| "options": { | ||
| "Default": "기본값", | ||
| "Integrated": "통합" | ||
| }, | ||
| "name": "탭 바 레이아웃" | ||
| } |
There was a problem hiding this comment.
🧩 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 -20Repository: 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 -20Repository: 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_modulesRepository: 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.
| "pysssss_SnapToGrid": { | ||
| "name": "Всегда привязываться к сетке" | ||
| }, | ||
| "Comfy_UI_TabBarLayout": { | ||
| "tooltip": "Управляет расположением панели вкладок. \"Интегрированный\" перемещает элементы управления Справкой и Пользователем в область панели вкладок.", | ||
| "options": { | ||
| "Default": "По умолчанию", | ||
| "Integrated": "Интегрированный" | ||
| }, | ||
| "name": "Макет панели вкладок" | ||
| } |
There was a problem hiding this comment.
🧩 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 -20Repository: 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)
PYRepository: 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.
| "choice": { | ||
| "name": "seçim" | ||
| }, | ||
| "option0": { | ||
| } | ||
| "option0": {} | ||
| }, |
There was a problem hiding this comment.
🧩 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.jsonRepository: 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.jsonRepository: 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.jsonRepository: 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 -50Repository: 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:
option0→seçenek 0clear→temizleupload 3d model→3D model yükleupload extra resources→ek kaynakları yükleAuto-refresh after generation→oluşturmadan sonra otomatik yenilerefresh→yenilepreview→önizlepreviewMode→önizleme moduwaiting 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.
| "outputs": { | ||
| "2": { | ||
| "name": "批次大小", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "0": { | ||
| "name": "寬度", | ||
| "tooltip": null | ||
| }, | ||
| { | ||
| "1": { | ||
| "name": "高度", | ||
| "tooltip": null | ||
| } | ||
| ] | ||
| } | ||
| }, |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Find all nodeDefs.json files to understand the structure
find . -name "nodeDefs.json" -type f | head -20Repository: 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 -100Repository: 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 -150Repository: 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 enRepository: 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.
Completed the missing translations in multiple languages
┆Issue is synchronized with this Notion page by Unito