[backport cloud/1.36] feat: split asset_update_options_enabled into separate deletion and rename flags (#7888)

Backport of #7864 to `cloud/1.36`

Automatically created by backport workflow.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7888-backport-cloud-1-36-feat-split-asset_update_options_enabled-into-separate-deletion-and-2e26d73d365081edb755ede860c53f97)
by [Unito](https://www.unito.io)

Co-authored-by: Luke Mino-Altherr <luke@comfy.org>
Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
Comfy Org PR Bot
2026-01-08 09:28:14 +09:00
committed by GitHub
parent e9c47e80b9
commit 1de23b8aa2
3 changed files with 22 additions and 10 deletions

View File

@@ -11,7 +11,8 @@ export enum ServerFeatureFlag {
MAX_UPLOAD_SIZE = 'max_upload_size', MAX_UPLOAD_SIZE = 'max_upload_size',
MANAGER_SUPPORTS_V4 = 'extension.manager.supports_v4', MANAGER_SUPPORTS_V4 = 'extension.manager.supports_v4',
MODEL_UPLOAD_BUTTON_ENABLED = 'model_upload_button_enabled', MODEL_UPLOAD_BUTTON_ENABLED = 'model_upload_button_enabled',
ASSET_UPDATE_OPTIONS_ENABLED = 'asset_update_options_enabled', ASSET_DELETION_ENABLED = 'asset_deletion_enabled',
ASSET_RENAME_ENABLED = 'asset_rename_enabled',
PRIVATE_MODELS_ENABLED = 'private_models_enabled', PRIVATE_MODELS_ENABLED = 'private_models_enabled',
ONBOARDING_SURVEY_ENABLED = 'onboarding_survey_enabled', ONBOARDING_SURVEY_ENABLED = 'onboarding_survey_enabled',
HUGGINGFACE_MODEL_IMPORT_ENABLED = 'huggingface_model_import_enabled', HUGGINGFACE_MODEL_IMPORT_ENABLED = 'huggingface_model_import_enabled',
@@ -42,14 +43,16 @@ export function useFeatureFlags() {
) )
) )
}, },
get assetUpdateOptionsEnabled() { get assetDeletionEnabled() {
// Check remote config first (from /api/features), fall back to websocket feature flags
return ( return (
remoteConfig.value.asset_update_options_enabled ?? remoteConfig.value.asset_deletion_enabled ??
api.getServerFeature( api.getServerFeature(ServerFeatureFlag.ASSET_DELETION_ENABLED, false)
ServerFeatureFlag.ASSET_UPDATE_OPTIONS_ENABLED, )
false },
) get assetRenameEnabled() {
return (
remoteConfig.value.asset_rename_enabled ??
api.getServerFeature(ServerFeatureFlag.ASSET_RENAME_ENABLED, false)
) )
}, },
get privateModelsEnabled() { get privateModelsEnabled() {

View File

@@ -33,7 +33,7 @@
<AssetBadgeGroup :badges="asset.badges" /> <AssetBadgeGroup :badges="asset.badges" />
<IconGroup <IconGroup
v-if="flags.assetUpdateOptionsEnabled && !(asset.is_immutable ?? true)" v-if="showAssetOptions"
:class=" :class="
cn( cn(
'absolute top-2 right-2 invisible group-hover:visible', 'absolute top-2 right-2 invisible group-hover:visible',
@@ -44,6 +44,7 @@
<MoreButton ref="dropdown-menu-button" size="sm"> <MoreButton ref="dropdown-menu-button" size="sm">
<template #default> <template #default>
<Button <Button
v-if="flags.assetRenameEnabled"
variant="secondary" variant="secondary"
size="md" size="md"
class="justify-start" class="justify-start"
@@ -53,6 +54,7 @@
<span>{{ $t('g.rename') }}</span> <span>{{ $t('g.rename') }}</span>
</Button> </Button>
<Button <Button
v-if="flags.assetDeletionEnabled"
variant="secondary" variant="secondary"
size="md" size="md"
class="justify-start" class="justify-start"
@@ -160,6 +162,12 @@ const deletedLocal = ref(false)
const displayName = computed(() => newNameRef.value ?? asset.name) const displayName = computed(() => newNameRef.value ?? asset.name)
const showAssetOptions = computed(
() =>
(flags.assetDeletionEnabled || flags.assetRenameEnabled) &&
!(asset.is_immutable ?? true)
)
const tooltipDelay = computed<number>(() => const tooltipDelay = computed<number>(() =>
settingStore.get('LiteGraph.Node.TooltipDelay') settingStore.get('LiteGraph.Node.TooltipDelay')
) )

View File

@@ -35,7 +35,8 @@ export type RemoteConfig = {
firebase_config?: FirebaseRuntimeConfig firebase_config?: FirebaseRuntimeConfig
telemetry_disabled_events?: TelemetryEventName[] telemetry_disabled_events?: TelemetryEventName[]
model_upload_button_enabled?: boolean model_upload_button_enabled?: boolean
asset_update_options_enabled?: boolean asset_deletion_enabled?: boolean
asset_rename_enabled?: boolean
private_models_enabled?: boolean private_models_enabled?: boolean
onboarding_survey_enabled?: boolean onboarding_survey_enabled?: boolean
huggingface_model_import_enabled?: boolean huggingface_model_import_enabled?: boolean