diff --git a/src/main/invoke-manager.ts b/src/main/invoke-manager.ts index 79820eb..2cb4354 100644 --- a/src/main/invoke-manager.ts +++ b/src/main/invoke-manager.ts @@ -81,6 +81,10 @@ export class InvokeManager { env.INVOKEAI_HOST = '0.0.0.0'; } + if (this.store.get('enablePartialLoading')) { + env.INVOKEAI_ENABLE_PARTIAL_LOADING = '1'; + } + // Some torch operations are not yet supported on MPS. This tells torch to use CPU for those operations. // See: https://pytorch.org/docs/stable/mps_environment_variables.html if (process.platform === 'darwin') { diff --git a/src/renderer/features/SettingsModal/SettingsModal.tsx b/src/renderer/features/SettingsModal/SettingsModal.tsx index 4ada741..e6f59c0 100644 --- a/src/renderer/features/SettingsModal/SettingsModal.tsx +++ b/src/renderer/features/SettingsModal/SettingsModal.tsx @@ -14,6 +14,7 @@ import { import { useStore } from '@nanostores/react'; import { memo, useCallback } from 'react'; +import { SettingsModalEnablePartialLoading } from '@/renderer/features/SettingsModal/SettingsModalEnablePartialLoading'; import { SettingsModalNotifyForPrereleaseUpdates } from '@/renderer/features/SettingsModal/SettingsModalNotifyForPrereleaseUpdates'; import { SettingsModalResetButton } from '@/renderer/features/SettingsModal/SettingsModalResetButton'; import { SettingsModalServerMode } from '@/renderer/features/SettingsModal/SettingsModalServerMode'; @@ -36,6 +37,8 @@ export const SettingsModal = memo(() => { + + diff --git a/src/renderer/features/SettingsModal/SettingsModalEnablePartialLoading.tsx b/src/renderer/features/SettingsModal/SettingsModalEnablePartialLoading.tsx new file mode 100644 index 0000000..28eb281 --- /dev/null +++ b/src/renderer/features/SettingsModal/SettingsModalEnablePartialLoading.tsx @@ -0,0 +1,30 @@ +import { Checkbox, Flex, FormControl, FormHelperText, FormLabel } from '@invoke-ai/ui-library'; +import { useStore } from '@nanostores/react'; +import type { ChangeEvent } from 'react'; +import { memo, useCallback } from 'react'; + +import { persistedStoreApi } from '@/renderer/services/store'; + +export const SettingsModalEnablePartialLoading = memo(() => { + const { enablePartialLoading } = useStore(persistedStoreApi.$atom); + const onChange = useCallback((e: ChangeEvent) => { + persistedStoreApi.setKey('enablePartialLoading', e.target.checked); + }, []); + + return ( + + + Enable Partial Loading + + + + When loading models, if it won't fit in the available VRAM, it will be loaded by layer. This prevents out + of memory errors at the cost of generation speed. + + + When disabled, if a model will not fit in VRAM, you will get an out of memory error. + + + ); +}); +SettingsModalEnablePartialLoading.displayName = 'SettingsModalEnablePartialLoading'; diff --git a/src/renderer/features/SettingsModal/SettingsModalNotifyForPrereleaseUpdates.tsx b/src/renderer/features/SettingsModal/SettingsModalNotifyForPrereleaseUpdates.tsx index bd297c2..2368836 100644 --- a/src/renderer/features/SettingsModal/SettingsModalNotifyForPrereleaseUpdates.tsx +++ b/src/renderer/features/SettingsModal/SettingsModalNotifyForPrereleaseUpdates.tsx @@ -1,13 +1,14 @@ import { Checkbox, Flex, FormControl, FormHelperText, FormLabel } from '@invoke-ai/ui-library'; import { useStore } from '@nanostores/react'; +import type { ChangeEvent } from 'react'; import { memo, useCallback } from 'react'; import { persistedStoreApi } from '@/renderer/services/store'; export const SettingsModalNotifyForPrereleaseUpdates = memo(() => { const { notifyForPrereleaseUpdates } = useStore(persistedStoreApi.$atom); - const onChange = useCallback(() => { - persistedStoreApi.setKey('notifyForPrereleaseUpdates', !persistedStoreApi.$atom.get().notifyForPrereleaseUpdates); + const onChange = useCallback((e: ChangeEvent) => { + persistedStoreApi.setKey('notifyForPrereleaseUpdates', e.target.checked); }, []); return ( diff --git a/src/shared/types.ts b/src/shared/types.ts index a5acf9d..e9191ce 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -51,6 +51,7 @@ export type StoreData = { notifyForPrereleaseUpdates: boolean; launcherWindowProps?: WindowProps; appWindowProps?: WindowProps; + enablePartialLoading?: boolean; }; // The electron store uses JSON schema to validate its data. @@ -90,6 +91,10 @@ export const schema: Schema = { type: 'boolean', default: true, }, + enablePartialLoading: { + type: 'boolean', + default: true, + }, launcherWindowProps: winSizePropsSchema, appWindowProps: winSizePropsSchema, };