diff --git a/tests/test_downloads_tab_workflow_route.mjs b/tests/test_downloads_tab_workflow_route.mjs index 2720302..93b1b3e 100644 --- a/tests/test_downloads_tab_workflow_route.mjs +++ b/tests/test_downloads_tab_workflow_route.mjs @@ -2497,6 +2497,44 @@ test('download category normalization maps select safetensors alias to diffusion assert.equal(normalizeDownloadCategory('SELECT SAFETENSORS'), 'diffusion_models'); }); +test('category display names use exact ComfyUI folder keys', () => { + const normalizeDownloadCategory = eval(`(${extractMethod(downloadTargetMethodsSource, 'normalizeDownloadCategory')})`); + const getCategoryDisplayName = eval(`(${extractMethod(downloadTargetMethodsSource, 'getCategoryDisplayName')})`); + const dialog = { normalizeDownloadCategory }; + + assert.equal(getCategoryDisplayName.call(dialog, 'audio_encoders'), 'audio_encoders'); + assert.equal(getCategoryDisplayName.call(dialog, 'audio_encoder'), 'audio_encoders'); + assert.equal(getCategoryDisplayName.call(dialog, 'text_encoders'), 'text_encoders'); + assert.equal(getCategoryDisplayName.call(dialog, 'style_models'), 'style_models'); + assert.equal(getCategoryDisplayName.call(dialog, 'model_patches'), 'model_patches'); + assert.equal(getCategoryDisplayName.call(dialog, 'upscale_models'), 'upscale_models'); + assert.equal(getCategoryDisplayName.call(dialog, 'loras'), 'loras'); + assert.equal(getCategoryDisplayName.call(dialog, 'checkpoints'), 'checkpoints'); +}); + +test('download path settings label categories with exact folder keys', () => { + const getDefaultDownloadPathTemplates = eval(`(${extractMethod(downloadTargetMethodsSource, 'getDefaultDownloadPathTemplates')})`); + const getDownloadPathTemplateCategoryDefinitions = eval(`(${extractMethod(downloadTargetMethodsSource, 'getDownloadPathTemplateCategoryDefinitions')})`); + const getDefaultRootCategoryDefinitions = eval(`(${extractMethod(downloadTargetMethodsSource, 'getDefaultRootCategoryDefinitions')})`); + const dialog = { getDefaultDownloadPathTemplates }; + + const templateCategories = getDownloadPathTemplateCategoryDefinitions.call(dialog); + const rootCategories = getDefaultRootCategoryDefinitions.call(dialog); + + assert.deepEqual( + templateCategories.map(item => item.label), + templateCategories.map(item => item.key) + ); + assert.equal( + rootCategories.find(item => item.key === 'text_encoders').label, + 'text_encoders' + ); + assert.equal( + rootCategories.find(item => item.key === 'upscale_models').label, + 'upscale_models' + ); +}); + test('missing model preview shows accepted GGUF format next to its category', () => { const renderMissingModelFormatBadges = eval(`(${extractMethod(missingBrowserMethodsSource, 'renderMissingModelFormatBadges')})`); const dialog = { diff --git a/web/resolver/search/download_target_methods.js b/web/resolver/search/download_target_methods.js index 76467f5..138c75f 100644 --- a/web/resolver/search/download_target_methods.js +++ b/web/resolver/search/download_target_methods.js @@ -714,35 +714,7 @@ export const downloadTargetMethods = { getCategoryDisplayName(category = '') { category = this.normalizeDownloadCategory(category); - const displayNames = { - 'checkpoints': 'checkpoint', - 'loras': 'lora', - 'vae': 'vae', - 'controlnet': 'controlnet', - 'embeddings': 'embedding', - 'upscale_models': 'upscale_model', - 'latent_upscale_models': 'latent_upscale_model', - 'diffusion_models': 'diffusion_models', - 'text_encoders': 'text encoders', - 'clip': 'clip', - 'clip_vision': 'clip_vision', - 'hypernetworks': 'hypernetwork', - 'style_models': 'style model', - 'gligen': 'GLIGEN', - 'diffusers': 'Diffusers', - 'vae_approx': 'TAESD / VAE approx', - 'audio_encoders': 'audio encoder', - 'background_removal': 'background removal', - 'frame_interpolation': 'frame interpolation', - 'geometry_estimation': 'geometry estimation', - 'detection': 'detection', - 'model_patches': 'model patch', - 'photomaker': 'PhotoMaker', - 'optical_flow': 'optical flow', - 'sams': 'SAM', - 'ultralytics': 'Ultralytics' - }; - return displayNames[category] || category || 'unknown'; + return category || 'unknown'; }, getModelTypeColorClass(value = '') { @@ -1107,27 +1079,19 @@ export const downloadTargetMethods = { }, getDownloadPathTemplateCategoryDefinitions() { - return [ - { key: 'loras', label: 'LoRAs' }, - { key: 'checkpoints', label: 'Checkpoints' }, - { key: 'embeddings', label: 'Embeddings' }, - { key: 'diffusion_models', label: 'Diffusion models' }, - { key: 'text_encoders', label: 'Text encoders' }, - { key: 'controlnet', label: 'ControlNet' }, - { key: 'vae', label: 'VAE' }, - { key: 'upscale_models', label: 'Upscale models' } - ]; + return Object.keys(this.getDefaultDownloadPathTemplates()) + .map(key => ({ key, label: key })); }, getDefaultRootCategoryDefinitions() { return [ - { key: 'loras', label: 'LoRA root', settingKey: 'default_lora_root', storageKey: 'ModelResolver.defaultLoraRoot' }, - { key: 'checkpoints', label: 'Checkpoint root', settingKey: 'default_checkpoint_root', storageKey: 'ModelResolver.defaultCheckpointRoot' }, - { key: 'diffusion_models', label: 'Diffusion model root', settingKey: 'default_unet_root', storageKey: 'ModelResolver.defaultUnetRoot' }, - { key: 'embeddings', label: 'Embedding root', settingKey: 'default_embedding_root', storageKey: 'ModelResolver.defaultEmbeddingRoot' }, - { key: 'text_encoders', label: 'Text encoder root', settingKey: 'default_text_encoder_root', storageKey: 'ModelResolver.defaultTextEncoderRoot' }, - { key: 'vae', label: 'VAE root', settingKey: 'default_vae_root', storageKey: 'ModelResolver.defaultVaeRoot' }, - { key: 'upscale_models', label: 'Upscale model root', settingKey: 'default_upscale_model_root', storageKey: 'ModelResolver.defaultUpscaleModelRoot' } + { key: 'loras', label: 'loras', settingKey: 'default_lora_root', storageKey: 'ModelResolver.defaultLoraRoot' }, + { key: 'checkpoints', label: 'checkpoints', settingKey: 'default_checkpoint_root', storageKey: 'ModelResolver.defaultCheckpointRoot' }, + { key: 'diffusion_models', label: 'diffusion_models', settingKey: 'default_unet_root', storageKey: 'ModelResolver.defaultUnetRoot' }, + { key: 'embeddings', label: 'embeddings', settingKey: 'default_embedding_root', storageKey: 'ModelResolver.defaultEmbeddingRoot' }, + { key: 'text_encoders', label: 'text_encoders', settingKey: 'default_text_encoder_root', storageKey: 'ModelResolver.defaultTextEncoderRoot' }, + { key: 'vae', label: 'vae', settingKey: 'default_vae_root', storageKey: 'ModelResolver.defaultVaeRoot' }, + { key: 'upscale_models', label: 'upscale_models', settingKey: 'default_upscale_model_root', storageKey: 'ModelResolver.defaultUpscaleModelRoot' } ]; },