feat: add display name mappings for Essentials tab nodes (#9072)

## Summary

Add frontend-only display name mappings for nodes shown in the
Essentials tab, plus parse the new `essentials_category` field from the
backend.

## Changes

- **What**: Created `src/constants/essentialsDisplayNames.ts` with a
static mapping of node names to user-friendly display names (e.g.
`CLIPTextEncode` → "Text", `ImageScale` → "Resize Image"). Regular nodes
use exact name matching; blueprint nodes use prefix matching since their
filenames include model-specific suffixes. Integrated into
`NodeLibrarySidebarTab.vue`'s `renderedRoot` computed for leaf node
labels with fallback to `display_name`. Added `essentials_category`
(z.string().optional()) to the node def schema and `ComfyNodeDefImpl` to
parse the field already sent by the backend (PR #12357).

## Review Focus

Display names are resolved only in the Essentials tab tree view
(`NodeLibrarySidebarTab.vue`), not globally, to avoid side effects on
search, bookmarks, or other views. Blueprint prefix matching is ordered
longest-first so more specific prefixes (e.g. `image_inpainting_`) match
before shorter ones (e.g. `image_edit`).

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-9072-feat-add-display-name-mappings-for-Essentials-tab-nodes-30f6d73d3650817c9acdc9b0315ed0be)
by [Unito](https://www.unito.io)
This commit is contained in:
Christian Byrne
2026-02-22 01:03:15 -08:00
committed by GitHub
parent c972dca61e
commit 54f13930a4
7 changed files with 270 additions and 8 deletions

View File

@@ -3152,5 +3152,43 @@
"duplicateName": "A secret with this name already exists",
"duplicateProvider": "A secret for this provider already exists"
}
},
"essentials": {
"loadImage": "Load Image",
"saveImage": "Save Image",
"loadVideo": "Load Video",
"saveVideo": "Save Video",
"load3DModel": "Load 3D model",
"save3DModel": "Save 3D Model",
"text": "Text",
"batchImage": "Batch Image",
"cropImage": "Crop Image",
"resizeImage": "Resize Image",
"rotate": "Rotate",
"invert": "Invert",
"canny": "Canny",
"removeBackground": "Remove Background",
"imageCompare": "Image compare",
"extractFrame": "Extract frame",
"loadStyleLora": "Load style (LoRA)",
"lipsync": "Lipsync",
"textGenerationLLM": "Text generation (LLM)",
"textTo3DModel": "Text to 3D model",
"imageTo3DModel": "Image to 3D Model",
"musicGeneration": "Music generation",
"loadAudio": "Load Audio",
"saveAudio": "Save Audio",
"inpaintImage": "Inpaint image",
"outpaintImage": "Outpaint image",
"imageToImage": "Image to image",
"textToImage": "Text to image",
"poseToImage": "Pose to image",
"cannyToImage": "Canny to image",
"depthToImage": "Depth to image",
"textToVideo": "Text to video",
"imageToVideo": "Image to video",
"poseToVideo": "Pose to video",
"cannyToVideo": "Canny to video",
"depthToVideo": "Depth to video"
}
}