diff --git a/src/App.vue b/src/App.vue
index 90e7e30e76..d8f25a1bf3 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,13 +1,13 @@
-
-
-
+
+
+
+
+
diff --git a/src/components/loader/LogoComfyWaveLoader.stories.ts b/src/components/loader/LogoComfyWaveLoader.stories.ts
new file mode 100644
index 0000000000..7057b1a12e
--- /dev/null
+++ b/src/components/loader/LogoComfyWaveLoader.stories.ts
@@ -0,0 +1,96 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import LogoComfyWaveLoader from './LogoComfyWaveLoader.vue'
+
+const meta: Meta = {
+ title: 'Components/Loader/LogoComfyWaveLoader',
+ component: LogoComfyWaveLoader,
+ tags: ['autodocs'],
+ parameters: {
+ layout: 'centered',
+ backgrounds: { default: 'dark' }
+ },
+ argTypes: {
+ size: {
+ control: 'select',
+ options: ['sm', 'md', 'lg', 'xl']
+ },
+ color: {
+ control: 'select',
+ options: ['yellow', 'blue', 'white', 'black']
+ },
+ bordered: {
+ control: 'boolean'
+ },
+ disableAnimation: {
+ control: 'boolean'
+ }
+ }
+}
+
+export default meta
+type Story = StoryObj
+
+export const Default: Story = {}
+
+export const Small: Story = {
+ args: { size: 'sm' }
+}
+
+export const Large: Story = {
+ args: { size: 'lg' }
+}
+
+export const ExtraLarge: Story = {
+ args: { size: 'xl' }
+}
+
+export const NoBorder: Story = {
+ args: { bordered: false }
+}
+
+export const Static: Story = {
+ args: { disableAnimation: true }
+}
+
+export const BrandColors: Story = {
+ render: () => ({
+ components: { LogoComfyWaveLoader },
+ template: `
+
+
+ #F0FF41 (Yellow)
+
+
+
+ #172DD7 (Blue)
+
+
+
+ White
+
+
+
+
+ `
+ })
+}
+
+export const AllSizes: Story = {
+ render: () => ({
+ components: { LogoComfyWaveLoader },
+ template: `
+
+
+
+
+
+
+ `
+ })
+}
diff --git a/src/components/loader/LogoComfyWaveLoader.vue b/src/components/loader/LogoComfyWaveLoader.vue
new file mode 100644
index 0000000000..56f584d2aa
--- /dev/null
+++ b/src/components/loader/LogoComfyWaveLoader.vue
@@ -0,0 +1,111 @@
+
+
+
+ {{ t('g.loading') }}
+
+
+
+
+
+
diff --git a/src/components/toast/ProgressToastItem.vue b/src/components/toast/ProgressToastItem.vue
index 89a2bda3d8..2732c5b36f 100644
--- a/src/components/toast/ProgressToastItem.vue
+++ b/src/components/toast/ProgressToastItem.vue
@@ -2,7 +2,7 @@
import { computed } from 'vue'
import { useI18n } from 'vue-i18n'
-import Loader from '@/components/common/Loader.vue'
+import Loader from '@/components/loader/Loader.vue'
import StatusBadge from '@/components/common/StatusBadge.vue'
import type { AssetDownload } from '@/stores/assetDownloadStore'
import { cn } from '@/utils/tailwindUtil'
diff --git a/src/platform/assets/components/ActiveMediaAssetCard.vue b/src/platform/assets/components/ActiveMediaAssetCard.vue
index d6ba7c4b61..a87bd9ea55 100644
--- a/src/platform/assets/components/ActiveMediaAssetCard.vue
+++ b/src/platform/assets/components/ActiveMediaAssetCard.vue
@@ -74,7 +74,7 @@
import { computed, ref } from 'vue'
import { useI18n } from 'vue-i18n'
-import Loader from '@/components/common/Loader.vue'
+import Loader from '@/components/loader/Loader.vue'
import Button from '@/components/ui/button/Button.vue'
import { useJobActions } from '@/composables/queue/useJobActions'
import type { JobListItem } from '@/composables/queue/useJobList'
diff --git a/src/platform/assets/components/AssetExportProgressDialog.vue b/src/platform/assets/components/AssetExportProgressDialog.vue
index 95856fb93c..e28764d730 100644
--- a/src/platform/assets/components/AssetExportProgressDialog.vue
+++ b/src/platform/assets/components/AssetExportProgressDialog.vue
@@ -2,7 +2,7 @@
import { computed, ref } from 'vue'
import { useI18n } from 'vue-i18n'
-import Loader from '@/components/common/Loader.vue'
+import Loader from '@/components/loader/Loader.vue'
import HoneyToast from '@/components/honeyToast/HoneyToast.vue'
import Button from '@/components/ui/button/Button.vue'
import type { AssetExport } from '@/stores/assetExportStore'
diff --git a/src/platform/assets/components/ModelImportProgressDialog.vue b/src/platform/assets/components/ModelImportProgressDialog.vue
index 80c1716af5..8c02cb8eb4 100644
--- a/src/platform/assets/components/ModelImportProgressDialog.vue
+++ b/src/platform/assets/components/ModelImportProgressDialog.vue
@@ -4,7 +4,7 @@ import Popover from 'primevue/popover'
import { computed, ref } from 'vue'
import { useI18n } from 'vue-i18n'
-import Loader from '@/components/common/Loader.vue'
+import Loader from '@/components/loader/Loader.vue'
import HoneyToast from '@/components/honeyToast/HoneyToast.vue'
import ProgressToastItem from '@/components/toast/ProgressToastItem.vue'
import Button from '@/components/ui/button/Button.vue'
diff --git a/src/platform/assets/components/UploadModelFooter.vue b/src/platform/assets/components/UploadModelFooter.vue
index 6e8e7741f5..a7d10e76f6 100644
--- a/src/platform/assets/components/UploadModelFooter.vue
+++ b/src/platform/assets/components/UploadModelFooter.vue
@@ -106,7 +106,7 @@