From de23f5593754da4002250ac95f6c87aaeb36f86b Mon Sep 17 00:00:00 2001
From: Alexander Brown <448862+DrJKL@users.noreply.github.com>
Date: Fri, 16 Jan 2026 17:26:56 -0800
Subject: [PATCH] feat: add editable Description field to model user_metadata
---
src/locales/en/main.json | 3 ++-
.../components/modelInfo/ModelInfoPanel.vue | 16 +++++++++++++++-
src/platform/assets/utils/assetMetadataUtils.ts | 11 +++++++++++
3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/src/locales/en/main.json b/src/locales/en/main.json
index 6fcca6634..d4b5fa01e 100644
--- a/src/locales/en/main.json
+++ b/src/locales/en/main.json
@@ -2413,7 +2413,8 @@
"noAdditionalTags": "No additional tags",
"modelDescription": "Model Description",
"triggerPhrases": "Trigger Phrases",
- "description": "Description"
+ "description": "Description",
+ "descriptionPlaceholder": "Add a description for this model..."
},
"media": {
"threeDModelPlaceholder": "3D Model",
diff --git a/src/platform/assets/components/modelInfo/ModelInfoPanel.vue b/src/platform/assets/components/modelInfo/ModelInfoPanel.vue
index 30799da0f..c75ddd880 100644
--- a/src/platform/assets/components/modelInfo/ModelInfoPanel.vue
+++ b/src/platform/assets/components/modelInfo/ModelInfoPanel.vue
@@ -134,6 +134,15 @@
>
{{ description }}
+
+
+
@@ -158,6 +167,7 @@ import {
getAssetModelType,
getAssetSourceUrl,
getAssetTriggerPhrases,
+ getAssetUserDescription,
getSourceName
} from '@/platform/assets/utils/assetMetadataUtils'
import { useAssetsStore } from '@/stores/assetsStore'
@@ -181,12 +191,14 @@ const additionalTags = ref(getAssetAdditionalTags(asset))
const selectedModelType = ref(
getAssetModelType(asset) ?? undefined
)
+const userDescription = ref(getAssetUserDescription(asset))
watch(
() => asset,
() => {
baseModels.value = getAssetBaseModels(asset)
additionalTags.value = getAssetAdditionalTags(asset)
selectedModelType.value = getAssetModelType(asset) ?? undefined
+ userDescription.value = getAssetUserDescription(asset)
}
)
const description = computed(() => getAssetDescription(asset))
@@ -205,7 +217,8 @@ async function saveMetadata() {
{
...asset.user_metadata,
base_model: baseModels.value,
- additional_tags: additionalTags.value
+ additional_tags: additionalTags.value,
+ user_description: userDescription.value
},
cacheKey
)
@@ -225,5 +238,6 @@ async function saveModelType(newModelType: string | undefined) {
watchDebounced(baseModels, saveMetadata, { debounce: 500 })
watchDebounced(additionalTags, saveMetadata, { debounce: 500 })
+watchDebounced(userDescription, saveMetadata, { debounce: 500 })
watchDebounced(selectedModelType, saveModelType, { debounce: 500 })
diff --git a/src/platform/assets/utils/assetMetadataUtils.ts b/src/platform/assets/utils/assetMetadataUtils.ts
index e69aa79ce..1d687b959 100644
--- a/src/platform/assets/utils/assetMetadataUtils.ts
+++ b/src/platform/assets/utils/assetMetadataUtils.ts
@@ -121,3 +121,14 @@ export function getAssetModelType(asset: AssetItem): string | null {
if (!typeTag) return null
return typeTag.includes('/') ? (typeTag.split('/').pop() ?? null) : typeTag
}
+
+/**
+ * Extracts user description from asset user_metadata
+ * @param asset - The asset to extract user description from
+ * @returns The user description string or empty string if not present
+ */
+export function getAssetUserDescription(asset: AssetItem): string {
+ return typeof asset.user_metadata?.user_description === 'string'
+ ? asset.user_metadata.user_description
+ : ''
+}