mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 14:30:41 +00:00
Add AMD ROCm GPU option to the desktop installer ## What changed - Add an AMD GPU choice to the installer picker with updated recommended badge logic, logo asset, and i18n copy. - Accept and auto-select the new `amd` device type in the install flow when it is detected. - Update `@comfyorg/comfyui-electron-types` and lockfile entries required for the new device enum. ## Why - Desktop users with AMD GPUs need a first-class install path instead of falling back to CPU/manual options. - This reuses the existing picker/device model to keep the change scoped and consistent with current UX. - Tradeoffs: torch mirror selection still falls back to the CPU mirror for AMD until a dedicated ROCm mirror is available. ## Evidence - Interactive Storybook file `apps/desktop-ui/src/components/install/GpuPicker.stories.ts` <img width="1377" height="834" alt="image" src="https://github.com/user-attachments/assets/34145f46-d8cc-4e59-b587-0ab5ee79f888" />
85 lines
2.1 KiB
TypeScript
85 lines
2.1 KiB
TypeScript
// eslint-disable-next-line storybook/no-renderer-packages
|
|
import type { Meta, StoryObj } from '@storybook/vue3'
|
|
import type {
|
|
ElectronAPI,
|
|
TorchDeviceType
|
|
} from '@comfyorg/comfyui-electron-types'
|
|
import { ref } from 'vue'
|
|
|
|
import GpuPicker from './GpuPicker.vue'
|
|
|
|
type Platform = ReturnType<ElectronAPI['getPlatform']>
|
|
type ElectronAPIStub = Pick<ElectronAPI, 'getPlatform'>
|
|
type WindowWithElectron = Window & { electronAPI?: ElectronAPIStub }
|
|
|
|
const meta: Meta<typeof GpuPicker> = {
|
|
title: 'Desktop/Components/GpuPicker',
|
|
component: GpuPicker,
|
|
parameters: {
|
|
layout: 'padded',
|
|
backgrounds: {
|
|
default: 'dark',
|
|
values: [
|
|
{ name: 'dark', value: '#0a0a0a' },
|
|
{ name: 'neutral-900', value: '#171717' },
|
|
{ name: 'neutral-950', value: '#0a0a0a' }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
export default meta
|
|
type Story = StoryObj<typeof meta>
|
|
|
|
function createElectronDecorator(platform: Platform) {
|
|
function getPlatform() {
|
|
return platform
|
|
}
|
|
|
|
return function ElectronDecorator() {
|
|
const windowWithElectron = window as WindowWithElectron
|
|
windowWithElectron.electronAPI = { getPlatform }
|
|
return { template: '<story />' }
|
|
}
|
|
}
|
|
|
|
function renderWithDevice(device: TorchDeviceType | null) {
|
|
return function Render() {
|
|
return {
|
|
components: { GpuPicker },
|
|
setup() {
|
|
const selected = ref<TorchDeviceType | null>(device)
|
|
return { selected }
|
|
},
|
|
template: `
|
|
<div class="min-h-screen bg-neutral-950 p-8">
|
|
<GpuPicker v-model:device="selected" />
|
|
</div>
|
|
`
|
|
}
|
|
}
|
|
}
|
|
|
|
const windowsDecorator = createElectronDecorator('win32')
|
|
const macDecorator = createElectronDecorator('darwin')
|
|
|
|
export const WindowsNvidiaSelected: Story = {
|
|
decorators: [windowsDecorator],
|
|
render: renderWithDevice('nvidia')
|
|
}
|
|
|
|
export const WindowsAmdSelected: Story = {
|
|
decorators: [windowsDecorator],
|
|
render: renderWithDevice('amd')
|
|
}
|
|
|
|
export const WindowsCpuSelected: Story = {
|
|
decorators: [windowsDecorator],
|
|
render: renderWithDevice('cpu')
|
|
}
|
|
|
|
export const MacMpsSelected: Story = {
|
|
decorators: [macDecorator],
|
|
render: renderWithDevice('mps')
|
|
}
|