From e5ba351dcc51072764e2ea5ecaf909613a06de4e Mon Sep 17 00:00:00 2001 From: Deep Mehta Date: Sun, 23 Nov 2025 20:53:13 +0530 Subject: [PATCH] [feat] Add cloud notification modal for macOS desktop users MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a one-time informational modal that introduces Comfy Cloud to macOS desktop users. The modal emphasizes that ComfyUI remains free and open source, with Cloud as an optional service for GPU access. Key features: - Shows once on first launch for macOS + Electron users - Persistent badge in topbar after dismissal for easy re-access - Clean design with Comfy Cloud branding - Non-intrusive messaging focused on infrastructure benefits 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/App.vue | 15 ++- .../content/CloudNotificationContent.vue | 104 ++++++++++++++++++ src/components/topbar/TopbarBadges.vue | 53 +++++++++ src/locales/en/main.json | 16 +++ .../settings/constants/coreSettings.ts | 6 + src/schemas/apiSchema.ts | 1 + src/services/dialogService.ts | 12 ++ 7 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 src/components/dialog/content/CloudNotificationContent.vue diff --git a/src/App.vue b/src/App.vue index 6b7c56be0..a6ff7c4f4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,6 +17,7 @@ import { computed, onMounted } from 'vue' import GlobalDialog from '@/components/dialog/GlobalDialog.vue' import config from '@/config' import { t } from '@/i18n' +import { useSettingStore } from '@/platform/settings/settingStore' import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' import { app } from '@/scripts/app' import { useDialogService } from '@/services/dialogService' @@ -47,7 +48,7 @@ const showContextMenu = (event: MouseEvent) => { } } -onMounted(() => { +onMounted(async () => { window['__COMFYUI_FRONTEND_VERSION__'] = config.app_version if (isElectron()) { @@ -77,5 +78,17 @@ onMounted(() => { // Initialize conflict detection in background // This runs async and doesn't block UI setup void conflictDetection.initializeConflictDetection() + + // Show cloud notification for macOS desktop users (one-time) + const isMacOS = navigator.platform.toLowerCase().includes('mac') + const settingStore = useSettingStore() + const hasShownNotification = settingStore.get( + 'Comfy.Desktop.CloudNotificationShown' + ) + + if (isElectron() && isMacOS && !hasShownNotification) { + dialogService.showCloudNotification() + await settingStore.set('Comfy.Desktop.CloudNotificationShown', true) + } }) diff --git a/src/components/dialog/content/CloudNotificationContent.vue b/src/components/dialog/content/CloudNotificationContent.vue new file mode 100644 index 000000000..657d9dcb9 --- /dev/null +++ b/src/components/dialog/content/CloudNotificationContent.vue @@ -0,0 +1,104 @@ + + + diff --git a/src/components/topbar/TopbarBadges.vue b/src/components/topbar/TopbarBadges.vue index 301973960..de0d8386f 100644 --- a/src/components/topbar/TopbarBadges.vue +++ b/src/components/topbar/TopbarBadges.vue @@ -1,5 +1,22 @@