diff --git a/public/assets/images/hf-logo.svg b/public/assets/images/hf-logo.svg new file mode 100644 index 0000000000..ab959d165f --- /dev/null +++ b/public/assets/images/hf-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/composables/useFeatureFlags.ts b/src/composables/useFeatureFlags.ts index 07b82ff40c..96e930aff7 100644 --- a/src/composables/useFeatureFlags.ts +++ b/src/composables/useFeatureFlags.ts @@ -14,7 +14,8 @@ export enum ServerFeatureFlag { ASSET_UPDATE_OPTIONS_ENABLED = 'asset_update_options_enabled', PRIVATE_MODELS_ENABLED = 'private_models_enabled', SUBSCRIPTION_TIERS_ENABLED = 'subscription_tiers_enabled', - ONBOARDING_SURVEY_ENABLED = 'onboarding_survey_enabled' + ONBOARDING_SURVEY_ENABLED = 'onboarding_survey_enabled', + HUGGINGFACE_MODEL_IMPORT_ENABLED = 'huggingface_model_import_enabled' } /** @@ -73,6 +74,16 @@ export function useFeatureFlags() { remoteConfig.value.onboarding_survey_enabled ?? api.getServerFeature(ServerFeatureFlag.ONBOARDING_SURVEY_ENABLED, true) ) + }, + get huggingfaceModelImportEnabled() { + // Check remote config first (from /api/features), fall back to websocket feature flags + return ( + remoteConfig.value.huggingface_model_import_enabled ?? + api.getServerFeature( + ServerFeatureFlag.HUGGINGFACE_MODEL_IMPORT_ENABLED, + false + ) + ) } }) diff --git a/src/locales/en/main.json b/src/locales/en/main.json index f6d66f3c23..1090fbdf7a 100644 --- a/src/locales/en/main.json +++ b/src/locales/en/main.json @@ -2230,6 +2230,7 @@ "civitaiLinkExample": "Example: https://civitai.com/models/10706/luisap-z-image-and-qwen-pixel-art-refiner?modelVersionId=2225295", "civitaiLinkLabel": "Civitai model download link", "civitaiLinkPlaceholder": "Paste link here", + "genericLinkPlaceholder": "Paste link here", "confirmModelDetails": "Confirm Model Details", "connectionError": "Please check your connection and try again", "errorFileTooLarge": "File exceeds the maximum allowed size limit", @@ -2248,6 +2249,7 @@ "finish": "Finish", "jobId": "Job ID", "loadingModels": "Loading {type}...", + "maxFileSize": "Max file size: 1 GB", "modelAssociatedWithLink": "The model associated with the link you provided:", "modelName": "Model Name", "modelNamePlaceholder": "Enter a name for this model", @@ -2258,6 +2260,7 @@ "noModelsInFolder": "No {type} available in this folder", "notSureLeaveAsIs": "Not sure? Just leave this as is", "onlyCivitaiUrlsSupported": "Only Civitai URLs are supported", + "unsupportedUrlSource": "Only URLs from {sources} are supported", "ownership": "Ownership", "ownershipAll": "All", "ownershipMyModels": "My models", @@ -2285,9 +2288,13 @@ "uploadModelDescription1": "Paste a Civitai model download link to add it to your library.", "uploadModelDescription2": "Only links from https://civitai.com/models are supported at the moment", "uploadModelDescription3": "Max file size: 1 GB", + "uploadModelDescription1Generic": "Paste a model download link to add it to your library.", + "uploadModelDescription2Generic": "Only URLs from the following providers are supported:", "uploadModelFailedToRetrieveMetadata": "Failed to retrieve metadata. Please check the link and try again.", "uploadModelFromCivitai": "Import a model from Civitai", + "uploadModelGeneric": "Import a model", "uploadModelHelpVideo": "Upload Model Help Video", + "uploadModelHelpFooterText": "Need help finding the URLs? Click on a provider below to see a how-to video.", "uploadModelHowDoIFindThis": "How do I find this?", "uploadSuccess": "Model imported successfully!", "ariaLabel": { diff --git a/src/platform/assets/components/UploadModelDialog.vue b/src/platform/assets/components/UploadModelDialog.vue index 5d1e6cdde6..d6be9e97e9 100644 --- a/src/platform/assets/components/UploadModelDialog.vue +++ b/src/platform/assets/components/UploadModelDialog.vue @@ -4,7 +4,13 @@ > + @@ -46,14 +52,17 @@ diff --git a/src/platform/assets/components/UploadModelFooter.vue b/src/platform/assets/components/UploadModelFooter.vue index 68c9bcdff0..672446a319 100644 --- a/src/platform/assets/components/UploadModelFooter.vue +++ b/src/platform/assets/components/UploadModelFooter.vue @@ -42,7 +42,7 @@ size="md" data-attr="upload-model-step1-continue-button" :disabled="!canFetchMetadata || isFetchingMetadata" - @click="emit('fetchMetadata')" + :on-click="() => emit('fetchMetadata')" >