diff --git a/src/components/common/ListExplorer.vue b/src/components/common/ListExplorer.vue new file mode 100644 index 000000000..6bdb007cd --- /dev/null +++ b/src/components/common/ListExplorer.vue @@ -0,0 +1,204 @@ + + + + + + {{ $t(`g.${item.key}`) }} + + + + + + + + + + + + + {{ row._display[item.key] }} + + + + + + + + + + + diff --git a/src/components/common/VirtualScroll.vue b/src/components/common/VirtualScroll.vue new file mode 100644 index 000000000..358058d60 --- /dev/null +++ b/src/components/common/VirtualScroll.vue @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + diff --git a/src/components/sidebar/tabs/OutputExplorerSidebarTab.vue b/src/components/sidebar/tabs/OutputExplorerSidebarTab.vue new file mode 100644 index 000000000..c40dbb665 --- /dev/null +++ b/src/components/sidebar/tabs/OutputExplorerSidebarTab.vue @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + {{ $t('g.itemsCount', [itemsCount]) }} + + + + + + + + + + + + + + + + + {{ currentItem?.name }} + + + + + + + + + + + + + + + + + diff --git a/src/composables/sidebarTabs/outputExplorerSidebarTab.ts b/src/composables/sidebarTabs/outputExplorerSidebarTab.ts new file mode 100644 index 000000000..c1c4113e8 --- /dev/null +++ b/src/composables/sidebarTabs/outputExplorerSidebarTab.ts @@ -0,0 +1,18 @@ +import { markRaw } from 'vue' +import { useI18n } from 'vue-i18n' + +import OutputExplorerSidebarTab from '@/components/sidebar/tabs/OutputExplorerSidebarTab.vue' +import type { SidebarTabExtension } from '@/types/extensionTypes' + +export const useOutputExplorerSidebarTab = (): SidebarTabExtension => { + const { t } = useI18n() + + return { + id: 'output-explorer', + icon: 'pi pi-image', + title: t('sideToolbar.outputExplorer'), + tooltip: t('sideToolbar.outputExplorer'), + component: markRaw(OutputExplorerSidebarTab), + type: 'vue' + } +} diff --git a/src/constants/coreKeybindings.ts b/src/constants/coreKeybindings.ts index 3e6ade8da..518b5e5f3 100644 --- a/src/constants/coreKeybindings.ts +++ b/src/constants/coreKeybindings.ts @@ -54,6 +54,12 @@ export const CORE_KEYBINDINGS: Keybinding[] = [ }, commandId: 'Workspace.ToggleSidebarTab.model-library' }, + { + combo: { + key: 'e' + }, + commandId: 'Workspace.ToggleSidebarTab.output-explorer' + }, { combo: { key: 's', diff --git a/src/locales/en/main.json b/src/locales/en/main.json index b4c253708..b20ce3801 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -1,6 +1,5 @@ { "g": { - "user": "User", "currentUser": "Current user", "empty": "Empty", "noWorkflowsFound": "No workflows found.", @@ -13,7 +12,6 @@ "terminal": "Terminal", "logs": "Logs", "videoFailedToLoad": "Video failed to load", - "audioFailedToLoad": "Audio failed to load", "extensionName": "Extension Name", "reloadToApplyChanges": "Reload to apply changes", "insert": "Insert", @@ -22,24 +20,13 @@ "about": "About", "add": "Add", "confirm": "Confirm", - "confirmed": "Confirmed", "reset": "Reset", - "resetAll": "Reset All", - "clearFilters": "Clear Filters", - "resetAllKeybindingsTooltip": "Reset all keybindings to default", + "resetKeybindingsTooltip": "Reset keybindings to default", "customizeFolder": "Customize Folder", "icon": "Icon", "color": "Color", "error": "Error", - "help": "Help", "loading": "Loading", - "loadingPanel": "Loading {panel} panel...", - "preview": "PREVIEW", - "addNodeFilterCondition": "Add node filter condition", - "architecture": "Architecture", - "author": "Author", - "usageHint": "Usage hint", - "triggerPhrase": "Trigger phrase", "findIssues": "Find Issues", "reportIssue": "Send Report", "reportIssueTooltip": "Submit the error report to Comfy Org", @@ -53,22 +40,18 @@ "delete": "Delete", "rename": "Rename", "save": "Save", - "saving": "Saving", "no": "No", "cancel": "Cancel", "close": "Close", "back": "Back", "next": "Next", "install": "Install", - "installing": "Installing", "overwrite": "Overwrite", "customize": "Customize", "experimental": "BETA", "deprecated": "DEPR", "loadWorkflow": "Load Workflow", "goToNode": "Go to Node", - "setAsBackground": "Set as Background", - "customBackground": "Custom Background", "settings": "Settings", "searchWorkflows": "Search Workflows", "searchSettings": "Search Settings", @@ -91,125 +74,21 @@ "success": "Success", "ok": "OK", "feedback": "Feedback", - "continue": "Continue", - "control_after_generate": "control after generate", - "control_before_generate": "control before generate", - "choose_file_to_upload": "choose file to upload", - "capture": "capture", - "nodes": "Nodes", - "community": "Community", - "all": "All", - "versionMismatchWarning": "Version Compatibility Warning", - "versionMismatchWarningMessage": "{warning}: {detail} Visit https://docs.comfy.org/installation/update_comfyui#common-update-issues for update instructions.", - "frontendOutdated": "Frontend version {frontendVersion} is outdated. Backend requires {requiredVersion} or higher.", - "frontendNewer": "Frontend version {frontendVersion} may not be compatible with backend version {backendVersion}.", - "updateFrontend": "Update Frontend", - "dismiss": "Dismiss", - "update": "Update", - "updated": "Updated", - "resultsCount": "Found {count} Results", - "status": "Status", - "description": "Description", + "audio": "Audio", + "folder": "Folder", + "image": "Image", + "itemsCount": "{0} Items", + "modifyTime": "Modify Time", "name": "Name", - "category": "Category", - "sort": "Sort", - "source": "Source", - "filter": "Filter", - "apply": "Apply", - "enabled": "Enabled", - "installed": "Installed", - "restart": "Restart", - "missing": "Missing", - "inProgress": "In progress", - "completed": "Completed", - "interrupted": "Interrupted", - "enabling": "Enabling", - "disabling": "Disabling", - "updating": "Updating", - "migrate": "Migrate", - "updateAvailable": "Update Available", - "login": "Login", - "learnMore": "Learn more", - "amount": "Amount", - "unknownError": "Unknown error", - "title": "Title", - "edit": "Edit", - "copy": "Copy", - "imageUrl": "Image URL", - "clear": "Clear", - "copyURL": "Copy URL", - "releaseTitle": "{package} {version} Release", - "progressCountOf": "of", - "keybindingAlreadyExists": "Keybinding already exists on", - "startRecording": "Start Recording", - "stopRecording": "Stop Recording", - "micPermissionDenied": "Microphone permission denied", - "noAudioRecorded": "No audio recorded", - "nodesRunning": "nodes running", - "duplicate": "Duplicate" - }, - "manager": { - "title": "Custom Nodes Manager", - "failed": "Failed ({count})", - "noNodesFound": "No nodes found", - "noNodesFoundDescription": "The pack's nodes either could not be parsed, or the pack is a frontend extension only and doesn't have any nodes.", - "installationQueue": "Installation Queue", - "changingVersion": "Changing version from {from} to {to}", - "dependencies": "Dependencies", - "inWorkflow": "In Workflow", - "infoPanelEmpty": "Click an item to see the info", - "restartToApplyChanges": "To apply changes, please restart ComfyUI", - "loadingVersions": "Loading versions...", - "selectVersion": "Select Version", - "downloads": "Downloads", - "repository": "Repository", - "uninstall": "Uninstall", - "uninstalling": "Uninstalling", - "update": "Update", - "uninstallSelected": "Uninstall Selected", - "updatingAllPacks": "Updating all packages", - "license": "License", - "nightlyVersion": "Nightly", - "latestVersion": "Latest", - "createdBy": "Created By", - "totalNodes": "Total Nodes", - "discoverCommunityContent": "Discover community-made Node Packs, Extensions, and more...", - "errorConnecting": "Error connecting to the Comfy Node Registry.", - "noResultsFound": "No results found matching your search.", - "tryDifferentSearch": "Please try a different search query.", - "tryAgainLater": "Please try again later.", - "nodePack": "Node Pack", - "searchPlaceholder": "Search", - "version": "Version", - "lastUpdated": "Last Updated", - "noDescription": "No description available", - "installSelected": "Install Selected", - "installAllMissingNodes": "Install All Missing Nodes", - "packsSelected": "Packs Selected", - "status": { - "active": "Active", - "pending": "Pending", - "flagged": "Flagged", - "deleted": "Deleted", - "banned": "Banned", - "unknown": "Unknown" - }, - "sort": { - "downloads": "Most Popular", - "publisher": "Publisher", - "created": "Newest", - "updated": "Updated Recently" - }, - "filter": { - "nodePack": "Node Pack", - "enabled": "Enabled", - "disabled": "Disabled" - } + "searchIn": "Search in {0}", + "size": "Size", + "type": "Type", + "video": "Video" }, "issueReport": { "submitErrorReport": "Submit Error Report (Optional)", "provideEmail": "Give us your email (optional)", - "provideAdditionalDetails": "Provide additional details", + "provideAdditionalDetails": "Provide additional details (optional)", "stackTrace": "Stack Trace", "systemStats": "System Stats", "contactFollowUp": "Contact me for follow up", @@ -217,71 +96,20 @@ "helpFix": "Help Fix This", "rating": "Rating", "feedbackTitle": "Help us improve ComfyUI by providing feedback", - "contactSupportTitle": "Contact Support", - "contactSupportDescription": "Please fill in the form below with your report", - "selectIssue": "Select the issue", - "whatDoYouNeedHelpWith": "What do you need help with?", - "whatCanWeInclude": "Specify what to include in the report", - "describeTheProblem": "Describe the problem", - "email": "Email", - "helpTypes": { - "billingPayments": "Billing / Payments", - "loginAccessIssues": "Login / Access Issues", - "giveFeedback": "Give Feedback", - "bugReport": "Bug Report", - "somethingElse": "Something Else" - }, "validation": { "maxLength": "Message too long", - "invalidEmail": "Please enter a valid email address", - "selectIssueType": "Please select an issue type", - "descriptionRequired": "Description is required", - "helpTypeRequired": "Help type is required" + "invalidEmail": "Please enter a valid email address" } }, "color": { - "noColor": "No Color", "default": "Default", "blue": "Blue", "green": "Green", "red": "Red", "pink": "Pink", "yellow": "Yellow", - "brown": "Brown", - "pale_blue": "Pale Blue", - "cyan": "Cyan", - "purple": "Purple", - "black": "Black", "custom": "Custom" }, - "contextMenu": { - "Inputs": "Inputs", - "Outputs": "Outputs", - "Properties": "Properties", - "Properties Panel": "Properties Panel", - "Title": "Title", - "Mode": "Mode", - "Resize": "Resize", - "Collapse": "Collapse", - "Expand": "Expand", - "Pin": "Pin", - "Unpin": "Unpin", - "Clone": "Clone", - "Remove": "Remove", - "Colors": "Colors", - "Shapes": "Shapes", - "Bypass": "Bypass", - "Copy (Clipspace)": "Copy (Clipspace)", - "Add Node": "Add Node", - "Add Group": "Add Group", - "Convert to Group Node": "Convert to Group Node", - "Manage Group Nodes": "Manage Group Nodes", - "Add Group For Selected Nodes": "Add Group For Selected Nodes", - "Save Selected as Template": "Save Selected as Template", - "Node Templates": "Node Templates", - "Manage": "Manage", - "Search": "Search" - }, "icon": { "bookmark": "Bookmark", "folder": "Folder", @@ -335,11 +163,9 @@ "pathExists": "Directory already exists - please ensure you have backed up all data", "cannotWrite": "Unable to write to the selected path", "insufficientFreeSpace": "Insufficient space - minimum free space", - "isOneDrive": "OneDrive is not supported. Please install ComfyUI in another location.", - "nonDefaultDrive": "Please install ComfyUI on your system drive (eg. C:\\). Drives with different file systems may cause unpredicable issues. Models and other files can be stored on other drives after installation.", "parentMissing": "Path does not exist - create the containing directory first", "unhandledError": "Unknown error", - "installLocationDescription": "Select the directory for ComfyUI's user data. A python environment will be installed to the selected location.", + "installLocationDescription": "Select the directory for ComfyUI's user data. A python environment will be installed to the selected location. Please make sure the selected disk has enough space (~15GB) left.", "installLocationTooltip": "ComfyUI's user data directory. Stores:\n- Python Environment\n- Models\n- Custom nodes\n", "appDataLocationTooltip": "ComfyUI's app data directory. Stores:\n- Logs\n- Server configs", "appPathLocationTooltip": "ComfyUI's app asset directory. Stores the ComfyUI code and assets", @@ -396,13 +222,7 @@ "customNodeConfigurations": "Custom node configurations" }, "viewFullPolicy": "View full policy" - }, - "pythonMirrorPlaceholder": "Enter Python mirror URL", - "pypiMirrorPlaceholder": "Enter PyPI mirror URL", - "checkingMirrors": "Checking network access to python mirrors...", - "mirrorsReachable": "Network access to python mirrors is good", - "mirrorsUnreachable": "Network access to some python mirrors is bad", - "mirrorSettings": "Mirror Settings" + } }, "customNodes": "Custom Nodes", "customNodesDescription": "Reinstall custom nodes from existing ComfyUI installations.", @@ -414,7 +234,7 @@ "updateConsent": "You previously opted in to reporting crashes. We are now tracking event-based metrics to help identify bugs and improve the app. No personal identifiable information is collected." }, "serverStart": { - "troubleshoot": "Troubleshoot", + "reinstall": "Reinstall", "reportIssue": "Report Issue", "openLogs": "Open Logs", "showTerminal": "Show Terminal", @@ -432,42 +252,19 @@ "restart": "Restart" }, "sideToolbar": { - "helpCenter": "Help Center", + "themeToggle": "Toggle Theme", "logout": "Logout", "queue": "Queue", "nodeLibrary": "Node Library", "workflows": "Workflows", - "templates": "Templates", - "labels": { - "queue": "Queue", - "nodes": "Nodes", - "models": "Models", - "workflows": "Workflows", - "templates": "Templates" - }, "browseTemplates": "Browse example templates", "openWorkflow": "Open workflow in local file system", "newBlankWorkflow": "Create a new blank workflow", "nodeLibraryTab": { - "groupBy": "Group By", - "sortMode": "Sort Mode", - "resetView": "Reset View to Default", - "groupStrategies": { - "category": "Category", - "categoryDesc": "Group by node category", - "module": "Module", - "moduleDesc": "Group by module source", - "source": "Source", - "sourceDesc": "Group by source type (Core, Custom, API)" - }, - "sortBy": { - "original": "Original", - "originalDesc": "Keep original order", - "alphabetical": "Alphabetical", - "alphabeticalDesc": "Sort alphabetically within groups" - } + "sortOrder": "Sort Order" }, "modelLibrary": "Model Library", + "outputExplorer": "Output Explorer", "downloads": "Downloads", "queueTab": { "showFlatList": "Show Flat List", @@ -489,7 +286,6 @@ "deleteFailed": "Attempt to delete the workflow failed.", "dirtyCloseTitle": "Save Changes?", "dirtyClose": "The files below have been changed. Would you like to save them before closing?", - "dirtyCloseHint": "Hold Shift to close without prompt", "confirmOverwriteTitle": "Overwrite existing file?", "confirmOverwrite": "The file below already exists. Would you like to overwrite it?", "workflowTreeType": { @@ -499,26 +295,6 @@ } } }, - "helpCenter": { - "docs": "Docs", - "github": "Github", - "helpFeedback": "Help & Feedback", - "more": "More...", - "whatsNew": "What's New?", - "clickToLearnMore": "Click to learn more →", - "loadingReleases": "Loading releases...", - "noRecentReleases": "No recent releases", - "updateAvailable": "Update", - "desktopUserGuide": "Desktop User Guide", - "openDevTools": "Open Dev Tools", - "reinstall": "Re-Install" - }, - "releaseToast": { - "newVersionAvailable": "New Version Available!", - "whatsNew": "What's New?", - "skip": "Skip", - "update": "Update" - }, "menu": { "hideMenu": "Hide Menu", "showMenu": "Show Menu", @@ -531,23 +307,16 @@ "instantTooltip": "The workflow will be queued instantly after a generation finishes", "onChange": "On Change", "onChangeTooltip": "The workflow will be queued once a change is made", - "runWorkflow": "Run workflow (Shift to queue at front)", - "runWorkflowFront": "Run workflow (Queue at front)", - "run": "Run", + "queueWorkflow": "Queue workflow (Shift to queue at front)", + "queueWorkflowFront": "Queue workflow at front", + "queue": "Queue", "execute": "Execute", "interrupt": "Cancel current run", "refresh": "Refresh node definitions", "clipspace": "Open Clipspace", "resetView": "Reset canvas view", "clear": "Clear workflow", - "toggleBottomPanel": "Toggle Bottom Panel", - "theme": "Theme", - "dark": "Dark", - "light": "Light", - "manageExtensions": "Manage Extensions", - "settings": "Settings", - "help": "Help", - "queue": "Queue Panel" + "toggleBottomPanel": "Toggle Bottom Panel" }, "tabMenu": { "duplicateTab": "Duplicate Tab", @@ -560,328 +329,11 @@ }, "templateWorkflows": { "title": "Get Started with a Template", - "loadingMore": "Loading more templates...", - "searchPlaceholder": "Search templates...", - "category": { - "ComfyUI Examples": "ComfyUI Examples", - "Custom Nodes": "Custom Nodes", - "Basics": "Basics", - "Flux": "Flux", - "ControlNet": "ControlNet", - "Upscaling": "Upscaling", - "Video": "Video", - "Image": "Image", - "Area Composition": "Area Composition", - "3D": "3D", - "Audio": "Audio", - "Image API": "Image API", - "Video API": "Video API", - "LLM API": "LLM API", - "All": "All Templates" - }, - "templateDescription": { - "Basics": { - "default": "Generate images from text prompts.", - "image2image": "Transform existing images using text prompts.", - "lora": "Generate images with LoRA models for specialized styles or subjects.", - "lora_multiple": "Generate images by combining multiple LoRA models.", - "inpaint_example": "Edit specific parts of images seamlessly.", - "inpaint_model_outpainting": "Extend images beyond their original boundaries.", - "embedding_example": "Generate images using textual inversion for consistent styles.", - "gligen_textbox_example": "Generate images with precise object placement using text boxes." - }, - "Flux": { - "flux_kontext_dev_basic": "Edit image using Flux Kontext with full node visibility, perfect for learning the workflow.", - "flux_kontext_dev_grouped": "Streamlined version of Flux Kontext with grouped nodes for cleaner workspace.", - "flux_dev_checkpoint_example": "Generate images using Flux Dev fp8 quantized version. Suitable for devices with limited VRAM, requires only one model file, but image quality is slightly lower than the full version.", - "flux_schnell": "Quickly generate images with Flux Schnell fp8 quantized version. Ideal for low-end hardware, requires only 4 steps to generate images.", - "flux_dev_full_text_to_image": "Generate high-quality images with Flux Dev full version. Requires larger VRAM and multiple model files, but provides the best prompt following capability and image quality.", - "flux_schnell_full_text_to_image": "Generate images quickly with Flux Schnell full version. Uses Apache2.0 license, requires only 4 steps to generate images while maintaining good image quality.", - "flux_fill_inpaint_example": "Fill missing parts of images using Flux inpainting.", - "flux_fill_outpaint_example": "Extend images beyond boundaries using Flux outpainting.", - "flux_canny_model_example": "Generate images guided by edge detection using Flux Canny.", - "flux_depth_lora_example": "Generate images guided by depth information using Flux LoRA.", - "flux_redux_model_example": "Generate images by transferring style from reference images using Flux Redux." - }, - "Image": { - "image_omnigen2_t2i": "Generate high-quality images from text prompts using OmniGen2's unified 7B multimodal model with dual-path architecture.", - "image_omnigen2_image_edit": "Edit images with natural language instructions using OmniGen2's advanced image editing capabilities and text rendering support.", - "image_cosmos_predict2_2B_t2i": "Generate images with Cosmos-Predict2 2B T2I, delivering physically accurate, high-fidelity, and detail-rich image generation.", - "image_chroma_text_to_image": "Chroma is modified from flux and has some changes in the architecture.", - "hidream_i1_dev": "Generate images with HiDream I1 Dev - Balanced version with 28 inference steps, suitable for medium-range hardware.", - "hidream_i1_fast": "Generate images quickly with HiDream I1 Fast - Lightweight version with 16 inference steps, ideal for rapid previews on lower-end hardware.", - "hidream_i1_full": "Generate images with HiDream I1 Full - Complete version with 50 inference steps for highest quality output.", - "hidream_e1_full": "Edit images with HiDream E1 - Professional natural language image editing model.", - "sd3_5_simple_example": "Generate images using SD 3.5.", - "sd3_5_large_canny_controlnet_example": "Generate images guided by edge detection using SD 3.5 Canny ControlNet.", - "sd3_5_large_depth": "Generate images guided by depth information using SD 3.5.", - "sd3_5_large_blur": "Generate images guided by blurred reference images using SD 3.5.", - "sdxl_simple_example": "Generate high-quality images using SDXL.", - "sdxl_refiner_prompt_example": "Enhance SDXL images using refiner models.", - "sdxl_revision_text_prompts": "Generate images by transferring concepts from reference images using SDXL Revision.", - "sdxl_revision_zero_positive": "Generate images using both text prompts and reference images with SDXL Revision.", - "sdxlturbo_example": "Generate images in a single step using SDXL Turbo.", - "image_lotus_depth_v1_1": "Run Lotus Depth in ComfyUI for zero-shot, efficient monocular depth estimation with high detail retention." - }, - "Video": { - "video_cosmos_predict2_2B_video2world_480p_16fps": "Generate videos with Cosmos-Predict2 2B Video2World, generating physically accurate, high-fidelity, and consistent video simulations.", - "video_wan_vace_14B_t2v": "Transform text descriptions into high-quality videos. Supports both 480p and 720p with VACE-14B model.", - "video_wan_vace_14B_ref2v": "Create videos that match the style and content of a reference image. Perfect for style-consistent video generation.", - "video_wan_vace_14B_v2v": "Generate videos by controlling input videos and reference images using Wan VACE.", - "video_wan_vace_outpainting": "Generate extended videos by expanding video size using Wan VACE outpainting.", - "video_wan_vace_flf2v": "Generate smooth video transitions by defining start and end frames. Supports custom keyframe sequences.", - "video_wan_vace_inpainting": "Edit specific regions in videos while preserving surrounding content. Great for object removal or replacement.", - "video_wan2_1_fun_camera_v1_1_1_3B": "Generate dynamic videos with cinematic camera movements using Wan 2.1 Fun Camera 1.3B model.", - "video_wan2_1_fun_camera_v1_1_14B": "Generate high-quality videos with advanced camera control using the full 14B model", - "text_to_video_wan": "Generate videos from text prompts using Wan 2.1.", - "image_to_video_wan": "Generate videos from images using Wan 2.1.", - "wan2_1_fun_inp": "Generate videos from start and end frames using Wan 2.1 inpainting.", - "wan2_1_fun_control": "Generate videos guided by pose, depth, and edge controls using Wan 2.1 ControlNet.", - "wan2_1_flf2v_720_f16": "Generate videos by controlling first and last frames using Wan 2.1 FLF2V.", - "ltxv_text_to_video": "Generate videos from text prompts.", - "ltxv_image_to_video": "Generate videos from still images.", - "mochi_text_to_video_example": "Generate videos from text prompts using Mochi model.", - "hunyuan_video_text_to_video": "Generate videos from text prompts using Hunyuan model.", - "image_to_video": "Generate videos from still images.", - "txt_to_image_to_video": "Generate videos by first creating images from text prompts." - }, - "Image API": { - "api_bfl_flux_1_kontext_multiple_images_input": "Input multiple images and edit them with Flux.1 Kontext.", - "api_bfl_flux_1_kontext_pro_image": "Edit images with Flux.1 Kontext pro image.", - "api_bfl_flux_1_kontext_max_image": "Edit images with Flux.1 Kontext max image.", - "api_bfl_flux_pro_t2i": "Generate images with excellent prompt following and visual quality using FLUX.1 Pro.", - "api_luma_photon_i2i": "Guide image generation using a combination of images and prompt.", - "api_luma_photon_style_ref": "Generate images by blending style references with precise control using Luma Photon.", - "api_recraft_image_gen_with_color_control": "Generate images with custom color palettes and brand-specific visuals using Recraft.", - "api_recraft_image_gen_with_style_control": "Control style with visual examples, align positioning, and fine-tune objects. Store and share styles for perfect brand consistency.", - "api_recraft_vector_gen": "Generate high-quality vector images from text prompts using Recraft's AI vector generator.", - "api_runway_text_to_image": "Generate high-quality images from text prompts using Runway's AI model.", - "api_runway_reference_to_image": "Generate new images based on reference styles and compositions with Runway's AI.", - "api_stability_ai_stable_image_ultra_t2i": "Generate high quality images with excellent prompt adherence. Perfect for professional use cases at 1 megapixel resolution.", - "api_stability_ai_i2i": "Transform images with high-quality generation using Stability AI, perfect for professional editing and style transfer.", - "api_stability_ai_sd3_5_t2i": "Generate high quality images with excellent prompt adherence. Perfect for professional use cases at 1 megapixel resolution.", - "api_stability_ai_sd3_5_i2i": "Generate high quality images with excellent prompt adherence. Perfect for professional use cases at 1 megapixel resolution.", - "api_ideogram_v3_t2i": "Generate professional-quality images with excellent prompt alignment, photorealism, and text rendering using Ideogram V3.", - "api_openai_image_1_t2i": "Generate images from text prompts using OpenAI GPT Image 1 API.", - "api_openai_image_1_i2i": "Generate images from input images using OpenAI GPT Image 1 API.", - "api_openai_image_1_inpaint": "Edit images using inpainting with OpenAI GPT Image 1 API.", - "api_openai_image_1_multi_inputs": "Generate images from multiple inputs using OpenAI GPT Image 1 API.", - "api_openai_dall_e_2_t2i": "Generate images from text prompts using OpenAI Dall-E 2 API.", - "api_openai_dall_e_2_inpaint": "Edit images using inpainting with OpenAI Dall-E 2 API.", - "api_openai_dall_e_3_t2i": "Generate images from text prompts using OpenAI Dall-E 3 API." - }, - "Video API": { - "api_moonvalley_text_to_video": "Generate cinematic, 1080p videos from text prompts through a model trained exclusively on licensed data.", - "api_moonvalley_image_to_video": "Generate cinematic, 1080p videos with an image through a model trained exclusively on licensed data.", - "api_kling_i2v": "Generate videos with excellent prompt adherence for actions, expressions, and camera movements using Kling.", - "api_kling_effects": "Generate dynamic videos by applying visual effects to images using Kling.", - "api_kling_flf": "Generate videos through controlling the first and last frames.", - "api_luma_i2v": "Take static images and instantly create magical high quality animations.", - "api_luma_t2v": "High-quality videos can be generated using simple prompts.", - "api_hailuo_minimax_t2v": "Generate high-quality videos directly from text prompts. Explore MiniMax's advanced AI capabilities to create diverse visual narratives with professional CGI effects and stylistic elements to bring your descriptions to life.", - "api_hailuo_minimax_i2v": "Generate refined videos from images and text with CGI integration using MiniMax.", - "api_pixverse_i2v": "Generate dynamic videos from static images with motion and effects using PixVerse.", - "api_pixverse_template_i2v": "Generate dynamic videos from static images with motion and effects using PixVerse.", - "api_pixverse_t2v": "Generate videos with accurate prompt interpretation and stunning video dynamics.", - "api_runway_gen3a_turbo_image_to_video": "Generate cinematic videos from static images using Runway Gen3a Turbo.", - "api_runway_gen4_turo_image_to_video": "Generate dynamic videos from images using Runway Gen4 Turbo.", - "api_runway_first_last_frame": "Generate smooth video transitions between two keyframes with Runway's precision.", - "api_pika_i2v": "Generate smooth animated videos from single static images using Pika AI.", - "api_pika_scene": "Generate videos that incorporate multiple input images using Pika Scenes.", - "api_veo2_i2v": "Generate videos from images using Google Veo2 API." - }, - "3D API": { - "api_rodin_image_to_model": "Generate detailed 3D models from single photos using Rodin AI.", - "api_rodin_multiview_to_model": "Sculpt comprehensive 3D models using Rodin's multi-angle reconstruction.", - "api_tripo_text_to_model": "Craft 3D objects from descriptions with Tripo's text-driven modeling.", - "api_tripo_image_to_model": "Generate professional 3D assets from 2D images using Tripo engine.", - "api_tripo_multiview_to_model": "Build 3D models from multiple angles with Tripo's advanced scanner." - }, - "LLM API": { - "api_openai_chat": "Engage with OpenAI's advanced language models for intelligent conversations.", - "api_google_gemini": "Experience Google's multimodal AI with Gemini's reasoning capabilities." - }, - "Upscaling": { - "hiresfix_latent_workflow": "Upscale images by enhancing quality in latent space.", - "esrgan_example": "Upscale images using ESRGAN models to enhance quality.", - "hiresfix_esrgan_workflow": "Upscale images using ESRGAN models during intermediate generation steps.", - "latent_upscale_different_prompt_model": "Upscale images while changing prompts across generation passes." - }, - "ControlNet": { - "controlnet_example": "Generate images guided by scribble reference images using ControlNet.", - "2_pass_pose_worship": "Generate images guided by pose references using ControlNet.", - "depth_controlnet": "Generate images guided by depth information using ControlNet.", - "depth_t2i_adapter": "Generate images guided by depth information using T2I adapter.", - "mixing_controlnets": "Generate images by combining multiple ControlNet models." - }, - "Area Composition": { - "area_composition": "Generate images by controlling composition with defined areas.", - "area_composition_square_area_for_subject": "Generate images with consistent subject placement using area composition." - }, - "3D": { - "3d_hunyuan3d_image_to_model": "Generate 3D models from single images using Hunyuan3D 2.0.", - "3d_hunyuan3d_multiview_to_model": "Generate 3D models from multiple views using Hunyuan3D 2.0 MV.", - "3d_hunyuan3d_multiview_to_model_turbo": "Generate 3D models from multiple views using Hunyuan3D 2.0 MV Turbo.", - "stable_zero123_example": "Generate 3D views from single images using Stable Zero123." - }, - "Audio": { - "audio_stable_audio_example": "Generate audio from text prompts using Stable Audio.", - "audio_ace_step_1_t2a_instrumentals": "Generate instrumental music from text prompts using ACE-Step v1.", - "audio_ace_step_1_t2a_song": "Generate songs with vocals from text prompts using ACE-Step v1, supporting multilingual and style customization.", - "audio_ace_step_1_m2m_editing": "Edit existing songs to change style and lyrics using ACE-Step v1 M2M." - } - }, "template": { - "Basics": { - "default": "Image Generation", - "image2image": "Image to Image", - "lora": "LoRA", - "lora_multiple": "LoRA Multiple", - "inpaint_example": "Inpaint", - "inpaint_model_outpainting": "Outpaint", - "embedding_example": "Embedding", - "gligen_textbox_example": "Gligen Textbox" - }, - "Flux": { - "flux_kontext_dev_basic": "Flux Kontext Dev(Basic)", - "flux_kontext_dev_grouped": "Flux Kontext Dev(Grouped)", - "flux_dev_checkpoint_example": "Flux Dev fp8", - "flux_schnell": "Flux Schnell fp8", - "flux_dev_full_text_to_image": "Flux Dev full text to image", - "flux_schnell_full_text_to_image": "Flux Schnell full text to image", - "flux_fill_inpaint_example": "Flux Inpaint", - "flux_fill_outpaint_example": "Flux Outpaint", - "flux_canny_model_example": "Flux Canny Model", - "flux_depth_lora_example": "Flux Depth LoRA", - "flux_redux_model_example": "Flux Redux Model" - }, - "Image": { - "image_omnigen2_t2i": "OmniGen2 Text to Image", - "image_omnigen2_image_edit": "OmniGen2 Image Edit", - "image_cosmos_predict2_2B_t2i": "Cosmos Predict2 2B T2I", - "image_chroma_text_to_image": "Chroma text to image", - "hidream_i1_dev": "HiDream I1 Dev", - "hidream_i1_fast": "HiDream I1 Fast", - "hidream_i1_full": "HiDream I1 Full", - "hidream_e1_full": "HiDream E1 Full", - "sd3_5_simple_example": "SD3.5 Simple", - "sd3_5_large_canny_controlnet_example": "SD3.5 Large Canny ControlNet", - "sd3_5_large_depth": "SD3.5 Large Depth", - "sd3_5_large_blur": "SD3.5 Large Blur", - "sdxl_simple_example": "SDXL Simple", - "sdxl_refiner_prompt_example": "SDXL Refiner Prompt", - "sdxl_revision_text_prompts": "SDXL Revision Text Prompts", - "sdxl_revision_zero_positive": "SDXL Revision Zero Positive", - "sdxlturbo_example": "SDXL Turbo", - "image_lotus_depth_v1_1": "Lotus Depth" - }, - "Video": { - "video_cosmos_predict2_2B_video2world_480p_16fps": "Cosmos Predict2 2B Video2World 480p 16fps", - "video_wan_vace_14B_t2v": "Wan VACE Text to Video", - "video_wan_vace_14B_ref2v": "Wan VACE Reference to Video", - "video_wan_vace_14B_v2v": "Wan VACE Control Video", - "video_wan_vace_outpainting": "Wan VACE Outpainting", - "video_wan_vace_flf2v": "Wan VACE First-Last Frame", - "video_wan_vace_inpainting": "Wan VACE Inpainting", - "video_wan2_1_fun_camera_v1_1_1_3B": "Wan 2.1 Fun Camera 1.3B", - "video_wan2_1_fun_camera_v1_1_14B": "Wan 2.1 Fun Camera 14B", - "text_to_video_wan": "Wan 2.1 Text to Video", - "image_to_video_wan": "Wan 2.1 Image to Video", - "wan2_1_fun_inp": "Wan 2.1 Inpainting", - "wan2_1_fun_control": "Wan 2.1 ControlNet", - "wan2_1_flf2v_720_f16": "Wan 2.1 FLF2V 720p F16", - "ltxv_text_to_video": "LTXV Text to Video", - "ltxv_image_to_video": "LTXV Image to Video", - "mochi_text_to_video_example": "Mochi Text to Video", - "hunyuan_video_text_to_video": "Hunyuan Video Text to Video", - "image_to_video": "SVD Image to Video", - "txt_to_image_to_video": "SVD Text to Image to Video" - }, - "Image API": { - "api_bfl_flux_1_kontext_multiple_images_input": "BFL Flux.1 Kontext Multiple Image Input", - "api_bfl_flux_1_kontext_pro_image": "BFL Flux.1 Kontext Pro", - "api_bfl_flux_1_kontext_max_image": "BFL Flux.1 Kontext Max", - "api_bfl_flux_pro_t2i": "BFL Flux[Pro]: Text to Image", - "api_luma_photon_i2i": "Luma Photon: Image to Image", - "api_luma_photon_style_ref": "Luma Photon: Style Reference", - "api_recraft_image_gen_with_color_control": "Recraft: Color Control Image Generation", - "api_recraft_image_gen_with_style_control": "Recraft: Style Control Image Generation", - "api_recraft_vector_gen": "Recraft: Vector Generation", - "api_runway_text_to_image": "Runway: Text to Image", - "api_runway_reference_to_image": "Runway: Reference to Image", - "api_stability_ai_stable_image_ultra_t2i": "Stability AI: Stable Image Ultra Text to Image", - "api_stability_ai_i2i": "Stability AI: Image to Image", - "api_stability_ai_sd3_5_t2i": "Stability AI: SD3.5 Text to Image", - "api_stability_ai_sd3_5_i2i": "Stability AI: SD3.5 Image to Image", - "api_ideogram_v3_t2i": "Ideogram V3: Text to Image", - "api_openai_image_1_t2i": "OpenAI: GPT-Image-1 Text to Image", - "api_openai_image_1_i2i": "OpenAI: GPT-Image-1 Image to Image", - "api_openai_image_1_inpaint": "OpenAI: GPT-Image-1 Inpaint", - "api_openai_image_1_multi_inputs": "OpenAI: GPT-Image-1 Multi Inputs", - "api_openai_dall_e_2_t2i": "OpenAI: Dall-E 2 Text to Image", - "api_openai_dall_e_2_inpaint": "OpenAI: Dall-E 2 Inpaint", - "api_openai_dall_e_3_t2i": "OpenAI: Dall-E 3 Text to Image" - }, - "Video API": { - "api_moonvalley_text_to_video": "Moonvalley: Text to Video", - "api_moonvalley_image_to_video": "Moonvalley: Image to Video", - "api_kling_i2v": "Kling: Image to Video", - "api_kling_effects": "Kling: Video Effects", - "api_kling_flf": "Kling: FLF2V", - "api_luma_i2v": "Luma: Image to Video", - "api_luma_t2v": "Luma: Text to Video", - "api_hailuo_minimax_t2v": "MiniMax: Text to Video", - "api_hailuo_minimax_i2v": "MiniMax: Image to Video", - "api_pixverse_i2v": "PixVerse: Image to Video", - "api_pixverse_template_i2v": "PixVerse Templates: Image to Video", - "api_pixverse_t2v": "PixVerse: Text to Video", - "api_runway_gen3a_turbo_image_to_video": "Runway: Gen3a Turbo Image to Video", - "api_runway_gen4_turo_image_to_video": "Runway: Gen4 Turbo Image to Video", - "api_runway_first_last_frame": "Runway: First Last Frame to Video", - "api_pika_i2v": "Pika: Image to Video", - "api_pika_scene": "Pika Scenes: Images to Video", - "api_veo2_i2v": "Veo2: Image to Video" - }, - "3D API": { - "api_rodin_image_to_model": "Rodin: Image to Model", - "api_rodin_multiview_to_model": "Rodin: Multiview to Model", - "api_tripo_text_to_model": "Tripo: Text to Model", - "api_tripo_image_to_model": "Tripo: Image to Model", - "api_tripo_multiview_to_model": "Tripo: Multiview to Model" - }, - "LLM API": { - "api_openai_chat": "OpenAI: Chat", - "api_google_gemini": "Google Gemini: Chat" - }, - "Upscaling": { - "hiresfix_latent_workflow": "Upscale", - "esrgan_example": "ESRGAN", - "hiresfix_esrgan_workflow": "HiresFix ESRGAN Workflow", - "latent_upscale_different_prompt_model": "Latent Upscale Different Prompt Model" - }, - "ControlNet": { - "controlnet_example": "Scribble ControlNet", - "2_pass_pose_worship": "Pose ControlNet 2 Pass", - "depth_controlnet": "Depth ControlNet", - "depth_t2i_adapter": "Depth T2I Adapter", - "mixing_controlnets": "Mixing ControlNets" - }, - "Area Composition": { - "area_composition": "Area Composition", - "area_composition_square_area_for_subject": "Area Composition Square Area for Subject" - }, - "3D": { - "3d_hunyuan3d_image_to_model": "Hunyuan3D 2.0", - "3d_hunyuan3d_multiview_to_model": "Hunyuan3D 2.0 MV", - "3d_hunyuan3d_multiview_to_model_turbo": "Hunyuan3D 2.0 MV Turbo", - "stable_zero123_example": "Stable Zero123" - }, - "Audio": { - "audio_stable_audio_example": "Stable Audio", - "audio_ace_step_1_t2a_instrumentals": "ACE-Step v1 Text to Instrumentals Music", - "audio_ace_step_1_t2a_song": "ACE Step v1 Text to Song", - "audio_ace_step_1_m2m_editing": "ACE Step v1 M2M Editing" - } + "default": "Image Generation", + "image2image": "Image to Image", + "upscale": "2 Pass Upscale", + "flux_schnell": "Flux Schnell" } }, "graphCanvasMenu": { @@ -891,8 +343,7 @@ "fitView": "Fit View", "selectMode": "Select Mode", "panMode": "Pan Mode", - "toggleLinkVisibility": "Toggle Link Visibility", - "toggleMinimap": "Toggle Minimap" + "toggleLinkVisibility": "Toggle Link Visibility" }, "groupNode": { "create": "Create group node", @@ -915,36 +366,10 @@ "cancel": "Cancel Download", "cancelled": "Cancelled" }, - "maskEditor": { - "Invert": "Invert", - "Clear": "Clear", - "Brush Settings": "Brush Settings", - "Brush Shape": "Brush Shape", - "Thickness": "Thickness", - "Opacity": "Opacity", - "Hardness": "Hardness", - "Smoothing Precision": "Smoothing Precision", - "Reset to Default": "Reset to Default", - "Paint Bucket Settings": "Paint Bucket Settings", - "Tolerance": "Tolerance", - "Fill Opacity": "Fill Opacity", - "Color Select Settings": "Color Select Settings", - "Selection Opacity": "Selection Opacity", - "Live Preview": "Live Preview", - "Apply to Whole Image": "Apply to Whole Image", - "Method": "Method", - "Stop at mask": "Stop at mask", - "Mask Tolerance": "Mask Tolerance", - "Layers": "Layers", - "Mask Layer": "Mask Layer", - "Mask Opacity": "Mask Opacity", - "Image Layer": "Image Layer" - }, "menuLabels": { - "File": "File", + "Workflow": "Workflow", "Edit": "Edit", "Help": "Help", - "Check for Updates": "Check for Updates", "Open Custom Nodes Folder": "Open Custom Nodes Folder", "Open Inputs Folder": "Open Inputs Folder", "Open Logs Folder": "Open Logs Folder", @@ -956,20 +381,11 @@ "Quit": "Quit", "Reinstall": "Reinstall", "Restart": "Restart", - "Open 3D Viewer (Beta) for Selected Node": "Open 3D Viewer (Beta) for Selected Node", "Browse Templates": "Browse Templates", - "Add Edit Model Step": "Add Edit Model Step", - "Delete Selected Items": "Delete Selected Items", - "Zoom to fit": "Zoom to fit", - "Move Selected Nodes Down": "Move Selected Nodes Down", - "Move Selected Nodes Left": "Move Selected Nodes Left", - "Move Selected Nodes Right": "Move Selected Nodes Right", - "Move Selected Nodes Up": "Move Selected Nodes Up", + "Fit view to selected nodes": "Fit view to selected nodes", "Reset View": "Reset View", - "Resize Selected Nodes": "Resize Selected Nodes", - "Node Links": "Node Links", + "Canvas Toggle Link Visibility": "Canvas Toggle Link Visibility", "Canvas Toggle Lock": "Canvas Toggle Lock", - "Minimap": "Minimap", "Pin/Unpin Selected Items": "Pin/Unpin Selected Items", "Bypass/Unbypass Selected Nodes": "Bypass/Unbypass Selected Nodes", "Collapse/Expand Selected Nodes": "Collapse/Expand Selected Nodes", @@ -979,17 +395,12 @@ "Zoom Out": "Zoom Out", "Clear Pending Tasks": "Clear Pending Tasks", "Clear Workflow": "Clear Workflow", - "Contact Support": "Contact Support", - "Show Model Selector (Dev)": "Show Model Selector (Dev)", "Duplicate Current Workflow": "Duplicate Current Workflow", "Export": "Export", "Export (API)": "Export (API)", "Give Feedback": "Give Feedback", - "Convert Selection to Subgraph": "Convert Selection to Subgraph", - "Exit Subgraph": "Exit Subgraph", "Fit Group To Contents": "Fit Group To Contents", "Group Selected Nodes": "Group Selected Nodes", - "Unpack the selected Subgraph": "Unpack the selected Subgraph", "Convert selected nodes to group node": "Convert selected nodes to group node", "Manage group nodes": "Manage group nodes", "Ungroup selected group nodes": "Ungroup selected group nodes", @@ -1000,44 +411,30 @@ "ComfyUI Issues": "ComfyUI Issues", "Interrupt": "Interrupt", "Load Default Workflow": "Load Default Workflow", - "Toggle the Custom Nodes Manager": "Toggle the Custom Nodes Manager", - "Toggle the Custom Nodes Manager Progress Bar": "Toggle the Custom Nodes Manager Progress Bar", - "Decrease Brush Size in MaskEditor": "Decrease Brush Size in MaskEditor", - "Increase Brush Size in MaskEditor": "Increase Brush Size in MaskEditor", - "Open Mask Editor for Selected Node": "Open Mask Editor for Selected Node", "New": "New", "Clipspace": "Clipspace", - "Manager": "Manager", "Open": "Open", "Queue Prompt": "Queue Prompt", "Queue Prompt (Front)": "Queue Prompt (Front)", - "Queue Selected Output Nodes": "Queue Selected Output Nodes", "Redo": "Redo", "Refresh Node Definitions": "Refresh Node Definitions", "Save": "Save", "Save As": "Save As", "Show Settings Dialog": "Show Settings Dialog", - "Canvas Performance": "Canvas Performance", - "Help Center": "Help Center", "Toggle Theme (Dark/Light)": "Toggle Theme (Dark/Light)", "Undo": "Undo", - "Open Sign In Dialog": "Open Sign In Dialog", - "Sign Out": "Sign Out", "Close Current Workflow": "Close Current Workflow", "Next Opened Workflow": "Next Opened Workflow", "Previous Opened Workflow": "Previous Opened Workflow", "Toggle Search Box": "Toggle Search Box", - "Bottom Panel": "Bottom Panel", - "Show Keybindings Dialog": "Show Keybindings Dialog", + "Toggle Bottom Panel": "Toggle Bottom Panel", "Toggle Terminal Bottom Panel": "Toggle Terminal Bottom Panel", "Toggle Logs Bottom Panel": "Toggle Logs Bottom Panel", - "Toggle Essential Bottom Panel": "Toggle Essential Bottom Panel", - "Toggle View Controls Bottom Panel": "Toggle View Controls Bottom Panel", - "Focus Mode": "Focus Mode", - "Model Library": "Model Library", - "Node Library": "Node Library", - "Queue Panel": "Queue Panel", - "Workflows": "Workflows" + "Toggle Focus Mode": "Toggle Focus Mode", + "Toggle Model Library Sidebar": "Toggle Model Library Sidebar", + "Toggle Node Library Sidebar": "Toggle Node Library Sidebar", + "Toggle Queue Sidebar": "Toggle Queue Sidebar", + "Toggle Workflows Sidebar": "Toggle Workflows Sidebar" }, "desktopMenu": { "reinstall": "Reinstall", @@ -1069,6 +466,7 @@ "BrushAdjustment": "Brush Adjustment", "NewEditor": "New Editor", "ModelLibrary": "Model Library", + "NodeInputConversionSubmenus": "Node Input Conversion Submenus", "NodeLibrary": "Node Library", "Node Search Box": "Node Search Box", "Pointer": "Pointer", @@ -1084,20 +482,7 @@ "Server-Config": "Server-Config", "About": "About", "EditTokenWeight": "Edit Token Weight", - "CustomColorPalettes": "Custom Color Palettes", - "UV": "UV", - "ContextMenu": "Context Menu", - "Reroute": "Reroute", - "Load 3D": "Load 3D", - "Camera": "Camera", - "Scene": "Scene", - "3D": "3D", - "Light": "Light", - "User": "User", - "Credits": "Credits", - "API Nodes": "API Nodes", - "Notification Preferences": "Notification Preferences", - "3DViewer": "3DViewer" + "CustomColorPalettes": "Custom Color Palettes" }, "serverConfigItems": { "listen": { @@ -1238,7 +623,6 @@ "image": "image", "preprocessors": "preprocessors", "advanced": "advanced", - "guidance": "guidance", "loaders": "loaders", "model_merging": "model_merging", "attention_experiments": "attention_experiments", @@ -1251,64 +635,44 @@ "inpaint": "inpaint", "scheduling": "scheduling", "create": "create", - "video": "video", "mask": "mask", + "DevTools": "DevTools", "deprecated": "deprecated", "latent": "latent", + "video": "video", "audio": "audio", - "3d": "3d", "ltxv": "ltxv", "sd3": "sd3", "sigmas": "sigmas", - "api node": "api node", - "BFL": "BFL", "model_patches": "model_patches", "unet": "unet", "gligen": "gligen", - "video_models": "video_models", - "Ideogram": "Ideogram", - "v1": "v1", - "v2": "v2", - "v3": "v3", "postprocessing": "postprocessing", "transform": "transform", "batch": "batch", + "video_models": "video_models", "upscaling": "upscaling", "instructpix2pix": "instructpix2pix", "compositing": "compositing", - "Kling": "Kling", "samplers": "samplers", "operations": "operations", - "lotus": "lotus", - "Luma": "Luma", - "MiniMax": "MiniMax", - "debug": "debug", - "model": "model", + "3d": "3d", "model_specific": "model_specific", - "OpenAI": "OpenAI", + "model": "model", "cond pair": "cond pair", "photomaker": "photomaker", - "Pika": "Pika", - "PixVerse": "PixVerse", - "utils": "utils", - "primitive": "primitive", - "Recraft": "Recraft", "animation": "animation", "api": "api", "upscale_diffusion": "upscale_diffusion", "clip": "clip", - "Stability AI": "Stability AI", + "guidance": "guidance", "stable_cascade": "stable_cascade", "3d_models": "3d_models", - "style_model": "style_model", - "sd": "sd", - "Veo": "Veo" + "style_model": "style_model" }, "dataTypes": { - "*": "*", "AUDIO": "AUDIO", "BOOLEAN": "BOOLEAN", - "CAMERA_CONTROL": "CAMERA_CONTROL", "CLIP": "CLIP", "CLIP_VISION": "CLIP_VISION", "CLIP_VISION_OUTPUT": "CLIP_VISION_OUTPUT", @@ -1327,370 +691,17 @@ "LATENT_OPERATION": "LATENT_OPERATION", "LOAD_3D": "LOAD_3D", "LOAD_3D_ANIMATION": "LOAD_3D_ANIMATION", - "LOAD3D_CAMERA": "LOAD3D_CAMERA", - "LUMA_CONCEPTS": "LUMA_CONCEPTS", - "LUMA_REF": "LUMA_REF", "MASK": "MASK", - "MESH": "MESH", "MODEL": "MODEL", "NOISE": "NOISE", "PHOTOMAKER": "PHOTOMAKER", - "PIXVERSE_TEMPLATE": "PIXVERSE_TEMPLATE", - "RECRAFT_COLOR": "RECRAFT_COLOR", - "RECRAFT_CONTROLS": "RECRAFT_CONTROLS", - "RECRAFT_V3_STYLE": "RECRAFT_V3_STYLE", "SAMPLER": "SAMPLER", "SIGMAS": "SIGMAS", "STRING": "STRING", "STYLE_MODEL": "STYLE_MODEL", - "SVG": "SVG", "TIMESTEPS_RANGE": "TIMESTEPS_RANGE", "UPSCALE_MODEL": "UPSCALE_MODEL", "VAE": "VAE", - "VIDEO": "VIDEO", - "VOXEL": "VOXEL", "WEBCAM": "WEBCAM" - }, - "maintenance": { - "title": "Maintenance", - "allOk": "No issues were detected.", - "status": "Status", - "detected": "Detected", - "refreshing": "Refreshing", - "None": "None", - "OK": "OK", - "Skipped": "Skipped", - "showManual": "Show maintenance tasks", - "confirmTitle": "Are you sure?", - "terminalDefaultMessage": "When you run a troubleshooting command, any output will be shown here.", - "consoleLogs": "Console Logs", - "error": { - "toastTitle": "Task error", - "taskFailed": "Task failed to run.", - "cannotContinue": "Unable to continue - errors remain", - "defaultDescription": "An error occurred while running a maintenance task." - } - }, - "missingModelsDialog": { - "doNotAskAgain": "Don't show this again", - "missingModels": "Missing Models", - "missingModelsMessage": "When loading the graph, the following models were not found" - }, - "loadWorkflowWarning": { - "outdatedVersion": "Some nodes require a newer version of ComfyUI (current: {version}). Please update to use all nodes.", - "outdatedVersionGeneric": "Some nodes require a newer version of ComfyUI. Please update to use all nodes.", - "coreNodesFromVersion": "Requires ComfyUI {version}:" - }, - "versionMismatchWarning": { - "title": "Version Compatibility Warning", - "frontendOutdated": "Frontend version {frontendVersion} is outdated. Backend requires version {requiredVersion} or higher.", - "frontendNewer": "Frontend version {frontendVersion} may not be compatible with backend version {backendVersion}.", - "updateFrontend": "Update Frontend", - "dismiss": "Dismiss" - }, - "errorDialog": { - "defaultTitle": "An error occurred", - "loadWorkflowTitle": "Loading aborted due to error reloading workflow data", - "noStackTrace": "No stacktrace available", - "extensionFileHint": "This may be due to the following script", - "promptExecutionError": "Prompt execution failed" - }, - "apiNodesSignInDialog": { - "title": "Sign In Required to Use API Nodes", - "message": "This workflow contains API Nodes, which require you to be signed in to your account in order to run." - }, - "apiNodesCostBreakdown": { - "title": "API Node(s)", - "costPerRun": "Cost per run", - "totalCost": "Total Cost" - }, - "desktopUpdate": { - "title": "Updating ComfyUI Desktop", - "description": "ComfyUI Desktop is installing new dependencies. This may take a few minutes.", - "terminalDefaultMessage": "Any console output from the update will be shown here.", - "updateFoundTitle": "Update Found (v{version})", - "updateAvailableMessage": "An update is available. Do you want to restart and update now?", - "noUpdateFound": "No update found", - "errorCheckingUpdate": "Error checking for updates", - "errorInstallingUpdate": "Error installing update" - }, - "clipboard": { - "successMessage": "Copied to clipboard", - "errorMessage": "Failed to copy to clipboard", - "errorNotSupported": "Clipboard API not supported in your browser" - }, - "load3d": { - "switchCamera": "Switch Camera", - "showGrid": "Show Grid", - "backgroundColor": "Background Color", - "lightIntensity": "Light Intensity", - "fov": "FOV", - "previewOutput": "Preview Output", - "uploadBackgroundImage": "Upload Background Image", - "removeBackgroundImage": "Remove Background Image", - "loadingModel": "Loading 3D Model...", - "upDirection": "Up Direction", - "materialMode": "Material Mode", - "scene": "Scene", - "model": "Model", - "camera": "Camera", - "light": "Light", - "switchingMaterialMode": "Switching Material Mode...", - "edgeThreshold": "Edge Threshold", - "export": "Export", - "exportModel": "Export Model", - "exportingModel": "Exporting model...", - "uploadTexture": "Upload Texture", - "applyingTexture": "Applying Texture...", - "materialModes": { - "normal": "Normal", - "wireframe": "Wireframe", - "original": "Original", - "depth": "Depth", - "lineart": "Lineart" - }, - "upDirections": { - "original": "Original" - }, - "startRecording": "Start Recording", - "stopRecording": "Stop Recording", - "exportRecording": "Export Recording", - "clearRecording": "Clear Recording", - "resizeNodeMatchOutput": "Resize Node to match output", - "loadingBackgroundImage": "Loading Background Image", - "cameraType": { - "perspective": "Perspective", - "orthographic": "Orthographic" - }, - "viewer": { - "title": "3D Viewer (Beta)", - "apply": "Apply", - "cancel": "Cancel", - "cameraType": "Camera Type", - "sceneSettings": "Scene Settings", - "cameraSettings": "Camera Settings", - "lightSettings": "Light Settings", - "exportSettings": "Export Settings", - "modelSettings": "Model Settings" - }, - "openIn3DViewer": "Open in 3D Viewer" - }, - "toastMessages": { - "nothingToQueue": "Nothing to queue", - "pleaseSelectOutputNodes": "Please select output nodes", - "no3dScene": "No 3D scene to apply texture", - "failedToApplyTexture": "Failed to apply texture", - "no3dSceneToExport": "No 3D scene to export", - "failedToExportModel": "Failed to export model as {format}", - "fileLoadError": "Unable to find workflow in {fileName}", - "dropFileError": "Unable to process dropped item: {error}", - "interrupted": "Execution has been interrupted", - "pendingTasksDeleted": "Pending tasks deleted", - "nothingToGroup": "Nothing to group", - "pleaseSelectNodesToGroup": "Please select the nodes (or other groups) to create a group for", - "emptyCanvas": "Empty canvas", - "fileUploadFailed": "File upload failed", - "unableToGetModelFilePath": "Unable to get model file path", - "couldNotDetermineFileType": "Could not determine file type", - "errorLoadingModel": "Error loading model", - "failedToDownloadFile": "Failed to download file", - "updateRequested": "Update requested", - "nodeDefinitionsUpdated": "Node definitions updated", - "errorSaveSetting": "Error saving setting {id}: {err}", - "errorCopyImage": "Error copying image: {error}", - "noTemplatesToExport": "No templates to export", - "failedToFetchLogs": "Failed to fetch server logs", - "migrateToLitegraphReroute": "Reroute nodes will be removed in future versions. Click to migrate to litegraph-native reroute.", - "userNotAuthenticated": "User not authenticated", - "failedToFetchBalance": "Failed to fetch balance: {error}", - "failedToCreateCustomer": "Failed to create customer: {error}", - "failedToInitiateCreditPurchase": "Failed to initiate credit purchase: {error}", - "failedToAccessBillingPortal": "Failed to access billing portal: {error}", - "failedToPurchaseCredits": "Failed to purchase credits: {error}", - "unauthorizedDomain": "Your domain {domain} is not authorized to use this service. Please contact {email} to add your domain to the whitelist.", - "useApiKeyTip": "Tip: Can't access normal login? Use the Comfy API Key option.", - "nothingSelected": "Nothing selected", - "cannotCreateSubgraph": "Cannot create subgraph", - "failedToConvertToSubgraph": "Failed to convert items to subgraph", - "failedToInitializeLoad3dViewer": "Failed to initialize 3D Viewer" - }, - "auth": { - "apiKey": { - "title": "API Key", - "label": "API Key", - "description": "Use your Comfy API key to enable API Nodes", - "placeholder": "Enter your API Key", - "error": "Invalid API Key", - "storageFailed": "Failed to store API Key", - "storageFailedDetail": "Please try again.", - "stored": "API Key stored", - "storedDetail": "Your API Key has been stored successfully", - "cleared": "API Key cleared", - "clearedDetail": "Your API Key has been cleared successfully", - "invalid": "Invalid API Key", - "invalidDetail": "Please enter a valid API Key", - "helpText": "Need an API key?", - "generateKey": "Get one here", - "whitelistInfo": "About non-whitelisted sites" - }, - "login": { - "title": "Log in to your account", - "useApiKey": "Comfy API Key", - "signInOrSignUp": "Sign In / Sign Up", - "forgotPasswordError": "Failed to send password reset email", - "passwordResetSent": "Password reset email sent", - "passwordResetSentDetail": "Please check your email for a link to reset your password.", - "newUser": "New here?", - "userAvatar": "User Avatar", - "signUp": "Sign up", - "emailLabel": "Email", - "emailPlaceholder": "Enter your email", - "passwordLabel": "Password", - "passwordPlaceholder": "Enter your password", - "confirmPasswordLabel": "Confirm Password", - "confirmPasswordPlaceholder": "Enter the same password again", - "forgotPassword": "Forgot password?", - "loginButton": "Log in", - "orContinueWith": "Or continue with", - "loginWithGoogle": "Log in with Google", - "loginWithGithub": "Log in with Github", - "termsText": "By clicking \"Next\" or \"Sign Up\", you agree to our", - "termsLink": "Terms of Use", - "andText": "and", - "privacyLink": "Privacy Policy", - "success": "Login successful", - "failed": "Login failed", - "insecureContextWarning": "This connection is insecure (HTTP) - your credentials may be intercepted by attackers if you proceed to login.", - "questionsContactPrefix": "Questions? Contact us at", - "noAssociatedUser": "There is no Comfy user associated with the provided API key" - }, - "signup": { - "title": "Create an account", - "alreadyHaveAccount": "Already have an account?", - "emailLabel": "Email", - "emailPlaceholder": "Enter your email", - "passwordLabel": "Password", - "passwordPlaceholder": "Enter new password", - "signUpButton": "Sign up", - "signIn": "Sign in", - "signUpWithGoogle": "Sign up with Google", - "signUpWithGithub": "Sign up with Github", - "regionRestrictionChina": "In accordance with local regulatory requirements, our services are temporarily unavailable to users located in China.", - "personalDataConsentLabel": "I agree to the processing of my personal data." - }, - "signOut": { - "signOut": "Log Out", - "success": "Signed out successfully", - "successDetail": "You have been signed out of your account." - }, - "passwordUpdate": { - "success": "Password Updated", - "successDetail": "Your password has been updated successfully" - } - }, - "validation": { - "invalidEmail": "Invalid email address", - "required": "Required", - "minLength": "Must be at least {length} characters", - "maxLength": "Must be no more than {length} characters", - "prefix": "Must start with {prefix}", - "length": "Must be {length} characters", - "password": { - "requirements": "Password requirements", - "minLength": "Must be between 8 and 32 characters", - "uppercase": "Must contain at least one uppercase letter", - "lowercase": "Must contain at least one lowercase letter", - "number": "Must contain at least one number", - "special": "Must contain at least one special character", - "match": "Passwords must match" - }, - "personalDataConsentRequired": "You must agree to the processing of your personal data." - }, - "credits": { - "activity": "Activity", - "credits": "Credits", - "yourCreditBalance": "Your credit balance", - "purchaseCredits": "Purchase Credits", - "invoiceHistory": "Invoice History", - "apiPricing": "API Pricing", - "faqs": "FAQs", - "messageSupport": "Message Support", - "lastUpdated": "Last updated", - "topUp": { - "insufficientTitle": "Insufficient Credits", - "insufficientMessage": "You don't have enough credits to run this workflow.", - "quickPurchase": "Quick Purchase", - "maxAmount": "(Max. $1,000 USD)", - "buyNow": "Buy now", - "seeDetails": "See details", - "topUp": "Top Up" - }, - "eventType": "Event Type", - "details": "Details", - "time": "Time", - "additionalInfo": "Additional Info", - "model": "Model", - "added": "Added", - "accountInitialized": "Account initialized" - }, - "userSettings": { - "title": "User Settings", - "name": "Name", - "email": "Email", - "provider": "Sign-in Provider", - "notSet": "Not set", - "updatePassword": "Update Password" - }, - "selectionToolbox": { - "executeButton": { - "tooltip": "Execute to selected output nodes (Highlighted with orange border)", - "disabledTooltip": "No output nodes selected" - } - }, - "chatHistory": { - "cancelEdit": "Cancel", - "editTooltip": "Edit message", - "cancelEditTooltip": "Cancel edit", - "copiedTooltip": "Copied", - "copyTooltip": "Copy message to clipboard" - }, - "nodeHelpPage": { - "inputs": "Inputs", - "outputs": "Outputs", - "type": "Type", - "moreHelp": "For more help, visit the", - "documentationPage": "documentation page", - "loadError": "Failed to load help: {error}" - }, - "whatsNewPopup": { - "learnMore": "Learn more", - "noReleaseNotes": "No release notes available." - }, - "breadcrumbsMenu": { - "duplicate": "Duplicate", - "clearWorkflow": "Clear Workflow", - "deleteWorkflow": "Delete Workflow", - "enterNewName": "Enter new name" - }, - "shortcuts": { - "essentials": "Essential", - "viewControls": "View Controls", - "manageShortcuts": "Manage Shortcuts", - "noKeybinding": "No keybinding", - "keyboardShortcuts": "Keyboard Shortcuts", - "subcategories": { - "workflow": "Workflow", - "node": "Node", - "queue": "Queue", - "view": "View", - "panelControls": "Panel Controls" - } - }, - "minimap": { - "nodeColors": "Node Colors", - "showLinks": "Show Links", - "showGroups": "Show Frames/Groups", - "renderBypassState": "Render Bypass State", - "renderErrorState": "Render Error State" } } \ No newline at end of file diff --git a/src/scripts/api.ts b/src/scripts/api.ts index e83eb9f8b..7251a58ec 100644 --- a/src/scripts/api.ts +++ b/src/scripts/api.ts @@ -699,6 +699,19 @@ export class ComfyApi extends EventTarget { return await res.json() } + /** + * Gets a list of output folder items (eg ['output', 'output/images', 'output/videos', ...]) + * @param {string} folder The folder to list items from, such as 'output' + * @returns The list of output folder items within the specified folder + */ + async getOutputFolderItems(folder: string) { + const res = await this.fetchApi(`/output${folder}`) + if (res.status === 404) { + return [] + } + return await res.json() + } + /** * Gets the metadata for a model * @param {string} folder The folder containing the model diff --git a/src/stores/workspace/sidebarTabStore.ts b/src/stores/workspace/sidebarTabStore.ts index b316aa605..47cec336c 100644 --- a/src/stores/workspace/sidebarTabStore.ts +++ b/src/stores/workspace/sidebarTabStore.ts @@ -3,6 +3,7 @@ import { computed, ref } from 'vue' import { useModelLibrarySidebarTab } from '@/composables/sidebarTabs/useModelLibrarySidebarTab' import { useNodeLibrarySidebarTab } from '@/composables/sidebarTabs/useNodeLibrarySidebarTab' +import { useOutputExplorerSidebarTab } from '@/composables/sidebarTabs/outputExplorerSidebarTab' import { useQueueSidebarTab } from '@/composables/sidebarTabs/useQueueSidebarTab' import { useWorkflowsSidebarTab } from '@/composables/sidebarTabs/useWorkflowsSidebarTab' import { t, te } from '@/i18n' @@ -92,6 +93,7 @@ export const useSidebarTabStore = defineStore('sidebarTab', () => { registerSidebarTab(useNodeLibrarySidebarTab()) registerSidebarTab(useModelLibrarySidebarTab()) registerSidebarTab(useWorkflowsSidebarTab()) +<<<<<<< HEAD const menuStore = useMenuItemStore() @@ -111,6 +113,9 @@ export const useSidebarTabStore = defineStore('sidebarTab', () => { ['View'], ['Comfy.Canvas.ZoomIn', 'Comfy.Canvas.ZoomOut', 'Comfy.Canvas.FitView'] ) +======= + registerSidebarTab(useOutputExplorerSidebarTab()) +>>>>>>> e9f3e42a (Add output explorer) } return {