Merge branch 'main' into lstein/feat/simple-mm2-api

This commit is contained in:
Lincoln Stein 2024-04-15 09:14:55 -04:00
commit f1e79d5a8f
22 changed files with 118 additions and 41 deletions

View File

@ -8,7 +8,7 @@
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0"> <meta http-equiv="Expires" content="0">
<title>Invoke - Community Edition</title> <title>Invoke - Community Edition</title>
<link rel="icon" type="icon" href="assets/images/invoke-favicon.svg" /> <link id="invoke-favicon" rel="icon" type="icon" href="assets/images/invoke-favicon.svg" />
<style> <style>
html, html,
body { body {

View File

@ -1,6 +1,7 @@
import type { KnipConfig } from 'knip'; import type { KnipConfig } from 'knip';
const config: KnipConfig = { const config: KnipConfig = {
project: ['src/**/*.{ts,tsx}!'],
ignore: [ ignore: [
// This file is only used during debugging // This file is only used during debugging
'src/app/store/middleware/debugLoggerMiddleware.ts', 'src/app/store/middleware/debugLoggerMiddleware.ts',
@ -10,6 +11,9 @@ const config: KnipConfig = {
'src/features/nodes/types/v2/**', 'src/features/nodes/types/v2/**',
], ],
ignoreBinaries: ['only-allow'], ignoreBinaries: ['only-allow'],
paths: {
'public/*': ['public/*'],
},
}; };
export default config; export default config;

View File

@ -24,7 +24,7 @@
"build": "pnpm run lint && vite build", "build": "pnpm run lint && vite build",
"typegen": "node scripts/typegen.js", "typegen": "node scripts/typegen.js",
"preview": "vite preview", "preview": "vite preview",
"lint:knip": "knip --tags=-@knipignore", "lint:knip": "knip",
"lint:dpdm": "dpdm --no-warning --no-tree --transform --exit-code circular:1 src/main.tsx", "lint:dpdm": "dpdm --no-warning --no-tree --transform --exit-code circular:1 src/main.tsx",
"lint:eslint": "eslint --max-warnings=0 .", "lint:eslint": "eslint --max-warnings=0 .",
"lint:prettier": "prettier --check .", "lint:prettier": "prettier --check .",

View File

@ -0,0 +1,5 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="16" height="16" rx="2" fill="#E6FD13"/>
<path d="M9.61889 5.45H12.5V3.5H3.5V5.45H6.38111L9.61889 10.55H12.5V12.5H3.5V10.55H6.38111" stroke="black"/>
<circle cx="12" cy="4" r="3" fill="#f5480c" stroke="#0d1117" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 345 B

View File

@ -326,7 +326,8 @@
"drop": "Drop", "drop": "Drop",
"dropOrUpload": "$t(gallery.drop) or Upload", "dropOrUpload": "$t(gallery.drop) or Upload",
"dropToUpload": "$t(gallery.drop) to Upload", "dropToUpload": "$t(gallery.drop) to Upload",
"deleteImage": "Delete Image", "deleteImage_one": "Delete Image",
"deleteImage_other": "Delete {{count}} Images",
"deleteImageBin": "Deleted images will be sent to your operating system's Bin.", "deleteImageBin": "Deleted images will be sent to your operating system's Bin.",
"deleteImagePermanent": "Deleted images cannot be restored.", "deleteImagePermanent": "Deleted images cannot be restored.",
"download": "Download", "download": "Download",

View File

@ -444,7 +444,8 @@
"hfTokenInvalidErrorMessage2": "Aggiornalo in ", "hfTokenInvalidErrorMessage2": "Aggiornalo in ",
"main": "Principali", "main": "Principali",
"noModelsInstalledDesc1": "Installa i modelli con", "noModelsInstalledDesc1": "Installa i modelli con",
"ipAdapters": "Adattatori IP" "ipAdapters": "Adattatori IP",
"noMatchingModels": "Nessun modello corrispondente"
}, },
"parameters": { "parameters": {
"images": "Immagini", "images": "Immagini",
@ -526,7 +527,12 @@
"aspect": "Aspetto", "aspect": "Aspetto",
"setToOptimalSizeTooLarge": "$t(parameters.setToOptimalSize) (potrebbe essere troppo grande)", "setToOptimalSizeTooLarge": "$t(parameters.setToOptimalSize) (potrebbe essere troppo grande)",
"remixImage": "Remixa l'immagine", "remixImage": "Remixa l'immagine",
"coherenceEdgeSize": "Dim. bordo" "coherenceEdgeSize": "Dim. bordo",
"infillMosaicTileWidth": "Larghezza piastrella",
"infillMosaicMinColor": "Colore minimo",
"infillMosaicMaxColor": "Colore massimo",
"infillMosaicTileHeight": "Altezza piastrella",
"infillColorValue": "Colore di riempimento"
}, },
"settings": { "settings": {
"models": "Modelli", "models": "Modelli",
@ -620,7 +626,8 @@
"uploadInitialImage": "Carica l'immagine iniziale", "uploadInitialImage": "Carica l'immagine iniziale",
"problemDownloadingImage": "Impossibile scaricare l'immagine", "problemDownloadingImage": "Impossibile scaricare l'immagine",
"prunedQueue": "Coda ripulita", "prunedQueue": "Coda ripulita",
"modelImportCanceled": "Importazione del modello annullata" "modelImportCanceled": "Importazione del modello annullata",
"parameters": "Parametri"
}, },
"tooltip": { "tooltip": {
"feature": { "feature": {
@ -689,7 +696,10 @@
"coherenceModeBoxBlur": "Sfocatura Box", "coherenceModeBoxBlur": "Sfocatura Box",
"coherenceModeStaged": "Maschera espansa", "coherenceModeStaged": "Maschera espansa",
"invertBrushSizeScrollDirection": "Inverti scorrimento per dimensione pennello", "invertBrushSizeScrollDirection": "Inverti scorrimento per dimensione pennello",
"discardCurrent": "Scarta l'attuale" "discardCurrent": "Scarta l'attuale",
"initialFitImageSize": "Adatta dimensione immagine al rilascio",
"hideBoundingBox": "Nascondi il rettangolo di selezione",
"showBoundingBox": "Mostra il rettangolo di selezione"
}, },
"accessibility": { "accessibility": {
"invokeProgressBar": "Barra di avanzamento generazione", "invokeProgressBar": "Barra di avanzamento generazione",
@ -832,7 +842,8 @@
"editMode": "Modifica nell'editor del flusso di lavoro", "editMode": "Modifica nell'editor del flusso di lavoro",
"resetToDefaultValue": "Ripristina il valore predefinito", "resetToDefaultValue": "Ripristina il valore predefinito",
"noFieldsViewMode": "Questo flusso di lavoro non ha campi selezionati da visualizzare. Visualizza il flusso di lavoro completo per configurare i valori.", "noFieldsViewMode": "Questo flusso di lavoro non ha campi selezionati da visualizzare. Visualizza il flusso di lavoro completo per configurare i valori.",
"edit": "Modifica" "edit": "Modifica",
"graph": "Grafico"
}, },
"boards": { "boards": {
"autoAddBoard": "Aggiungi automaticamente bacheca", "autoAddBoard": "Aggiungi automaticamente bacheca",
@ -1346,13 +1357,13 @@
] ]
}, },
"seamlessTilingXAxis": { "seamlessTilingXAxis": {
"heading": "Asse X di piastrellatura senza cuciture", "heading": "Piastrella senza giunte sull'asse X",
"paragraphs": [ "paragraphs": [
"Affianca senza soluzione di continuità un'immagine lungo l'asse orizzontale." "Affianca senza soluzione di continuità un'immagine lungo l'asse orizzontale."
] ]
}, },
"seamlessTilingYAxis": { "seamlessTilingYAxis": {
"heading": "Asse Y di piastrellatura senza cuciture", "heading": "Piastrella senza giunte sull'asse Y",
"paragraphs": [ "paragraphs": [
"Affianca senza soluzione di continuità un'immagine lungo l'asse verticale." "Affianca senza soluzione di continuità un'immagine lungo l'asse verticale."
] ]
@ -1476,7 +1487,11 @@
"name": "Nome", "name": "Nome",
"updated": "Aggiornato", "updated": "Aggiornato",
"projectWorkflows": "Flussi di lavoro del progetto", "projectWorkflows": "Flussi di lavoro del progetto",
"opened": "Aperto" "opened": "Aperto",
"convertGraph": "Converti grafico",
"loadWorkflow": "$t(common.load) Flusso di lavoro",
"autoLayout": "Disposizione automatica",
"loadFromGraph": "Carica il flusso di lavoro dal grafico"
}, },
"app": { "app": {
"storeNotInitialized": "Il negozio non è inizializzato" "storeNotInitialized": "Il negozio non è inizializzato"

View File

@ -448,7 +448,9 @@
"loraModels": "LoRAs", "loraModels": "LoRAs",
"main": "Основные", "main": "Основные",
"noModelsInstalled": "Нет установленных моделей", "noModelsInstalled": "Нет установленных моделей",
"noModelsInstalledDesc1": "Установите модели с помощью" "noModelsInstalledDesc1": "Установите модели с помощью",
"noMatchingModels": "Нет подходящих моделей",
"ipAdapters": "IP адаптеры"
}, },
"parameters": { "parameters": {
"images": "Изображения", "images": "Изображения",
@ -532,7 +534,12 @@
"lockAspectRatio": "Заблокировать соотношение", "lockAspectRatio": "Заблокировать соотношение",
"remixImage": "Ремикс изображения", "remixImage": "Ремикс изображения",
"coherenceMinDenoise": "Мин. шумоподавление", "coherenceMinDenoise": "Мин. шумоподавление",
"coherenceEdgeSize": "Размер края" "coherenceEdgeSize": "Размер края",
"infillMosaicTileWidth": "Ширина плиток",
"infillMosaicTileHeight": "Высота плиток",
"infillMosaicMinColor": "Мин цвет",
"infillMosaicMaxColor": "Макс цвет",
"infillColorValue": "Цвет заливки"
}, },
"settings": { "settings": {
"models": "Модели", "models": "Модели",
@ -626,7 +633,8 @@
"uploadInitialImage": "Загрузить начальное изображение", "uploadInitialImage": "Загрузить начальное изображение",
"resetInitialImage": "Сбросить начальное изображение", "resetInitialImage": "Сбросить начальное изображение",
"prunedQueue": "Урезанная очередь", "prunedQueue": "Урезанная очередь",
"modelImportCanceled": "Импорт модели отменен" "modelImportCanceled": "Импорт модели отменен",
"parameters": "Параметры"
}, },
"tooltip": { "tooltip": {
"feature": { "feature": {
@ -695,7 +703,8 @@
"coherenceModeGaussianBlur": "Размытие по Гауссу", "coherenceModeGaussianBlur": "Размытие по Гауссу",
"coherenceModeBoxBlur": "коробчатое размытие", "coherenceModeBoxBlur": "коробчатое размытие",
"discardCurrent": "Отбросить текущее", "discardCurrent": "Отбросить текущее",
"invertBrushSizeScrollDirection": "Инвертировать прокрутку для размера кисти" "invertBrushSizeScrollDirection": "Инвертировать прокрутку для размера кисти",
"initialFitImageSize": "Подогнать размер изображения при перебросе"
}, },
"accessibility": { "accessibility": {
"uploadImage": "Загрузить изображение", "uploadImage": "Загрузить изображение",
@ -921,7 +930,8 @@
"modelSize": "Размер модели", "modelSize": "Размер модели",
"small": "Маленький", "small": "Маленький",
"body": "Тело", "body": "Тело",
"hands": "Руки" "hands": "Руки",
"selectCLIPVisionModel": "Выбрать модель CLIP Vision"
}, },
"boards": { "boards": {
"autoAddBoard": "Авто добавление Доски", "autoAddBoard": "Авто добавление Доски",

View File

@ -65,7 +65,12 @@
"nextPage": "下一页", "nextPage": "下一页",
"saveAs": "保存为", "saveAs": "保存为",
"ai": "ai", "ai": "ai",
"or": "或" "or": "或",
"aboutDesc": "使用 Invoke 工作?查看:",
"add": "添加",
"loglevel": "日志级别",
"copy": "复制",
"localSystem": "本地系统"
}, },
"gallery": { "gallery": {
"galleryImageSize": "预览大小", "galleryImageSize": "预览大小",
@ -599,7 +604,8 @@
"loadMore": "加载更多", "loadMore": "加载更多",
"mode": "模式", "mode": "模式",
"resetUI": "$t(accessibility.reset) UI", "resetUI": "$t(accessibility.reset) UI",
"createIssue": "创建问题" "createIssue": "创建问题",
"about": "关于"
}, },
"tooltip": { "tooltip": {
"feature": { "feature": {
@ -1201,7 +1207,16 @@
"workflows": "工作流", "workflows": "工作流",
"noDescription": "无描述", "noDescription": "无描述",
"uploadWorkflow": "从文件中加载", "uploadWorkflow": "从文件中加载",
"newWorkflowCreated": "已创建新的工作流" "newWorkflowCreated": "已创建新的工作流",
"name": "名称",
"defaultWorkflows": "默认工作流",
"created": "已创建",
"ascending": "升序",
"descending": "降序",
"updated": "已更新",
"userWorkflows": "我的工作流",
"projectWorkflows": "项目工作流",
"opened": "已打开"
}, },
"app": { "app": {
"storeNotInitialized": "商店尚未初始化" "storeNotInitialized": "商店尚未初始化"
@ -1219,7 +1234,8 @@
"title": "生成" "title": "生成"
}, },
"advanced": { "advanced": {
"title": "高级" "title": "高级",
"options": "$t(accordions.advanced.title) 选项"
}, },
"image": { "image": {
"title": "图像" "title": "图像"

View File

@ -1,5 +1,6 @@
import { Box, useGlobalModifiersInit } from '@invoke-ai/ui-library'; import { Box, useGlobalModifiersInit } from '@invoke-ai/ui-library';
import { useSocketIO } from 'app/hooks/useSocketIO'; import { useSocketIO } from 'app/hooks/useSocketIO';
import { useSyncQueueStatus } from 'app/hooks/useSyncQueueStatus';
import { useLogger } from 'app/logging/useLogger'; import { useLogger } from 'app/logging/useLogger';
import { appStarted } from 'app/store/middleware/listenerMiddleware/listeners/appStarted'; import { appStarted } from 'app/store/middleware/listenerMiddleware/listeners/appStarted';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
@ -70,6 +71,7 @@ const App = ({ config = DEFAULT_CONFIG, selectedImage }: Props) => {
}, [dispatch]); }, [dispatch]);
useStarterModelsToast(); useStarterModelsToast();
useSyncQueueStatus();
return ( return (
<ErrorBoundary onReset={handleReset} FallbackComponent={AppErrorBoundaryFallback}> <ErrorBoundary onReset={handleReset} FallbackComponent={AppErrorBoundaryFallback}>

View File

@ -0,0 +1,25 @@
import { useEffect } from 'react';
import { useGetQueueStatusQuery } from 'services/api/endpoints/queue';
const baseTitle = document.title;
const invokeLogoSVG = 'assets/images/invoke-favicon.svg';
const invokeAlertLogoSVG = 'assets/images/invoke-alert-favicon.svg';
/**
* This hook synchronizes the queue status with the page's title and favicon.
* It should be considered a singleton and only used once in the component tree.
*/
export const useSyncQueueStatus = () => {
const { queueSize } = useGetQueueStatusQuery(undefined, {
selectFromResult: (res) => ({
queueSize: res.data ? res.data.queue.pending + res.data.queue.in_progress : 0,
}),
});
useEffect(() => {
document.title = queueSize > 0 ? `(${queueSize}) ${baseTitle}` : baseTitle;
const faviconEl = document.getElementById('invoke-favicon');
if (faviconEl instanceof HTMLLinkElement) {
faviconEl.href = queueSize > 0 ? invokeAlertLogoSVG : invokeLogoSVG;
}
}, [queueSize]);
};

View File

@ -1,5 +1,4 @@
import { Flex, Image, Spinner } from '@invoke-ai/ui-library'; import { Flex, Image, Spinner } from '@invoke-ai/ui-library';
/** @knipignore */
import InvokeLogoWhite from 'public/assets/images/invoke-symbol-wht-lrg.svg'; import InvokeLogoWhite from 'public/assets/images/invoke-symbol-wht-lrg.svg';
import { memo } from 'react'; import { memo } from 'react';

View File

@ -13,13 +13,15 @@ export const DeleteImageButton = memo((props: DeleteImageButtonProps) => {
const { onClick, isDisabled } = props; const { onClick, isDisabled } = props;
const { t } = useTranslation(); const { t } = useTranslation();
const isConnected = useAppSelector((s) => s.system.isConnected); const isConnected = useAppSelector((s) => s.system.isConnected);
const imageSelectionLength: number = useAppSelector((s) => s.gallery.selection.length);
const labelMessage: string = `${t('gallery.deleteImage', { count: imageSelectionLength })} (Del)`;
return ( return (
<IconButton <IconButton
onClick={onClick} onClick={onClick}
icon={<PiTrashSimpleBold />} icon={<PiTrashSimpleBold />}
tooltip={`${t('gallery.deleteImage')} (Del)`} tooltip={labelMessage}
aria-label={`${t('gallery.deleteImage')} (Del)`} aria-label={labelMessage}
isDisabled={isDisabled || !isConnected} isDisabled={isDisabled || !isConnected}
colorScheme="error" colorScheme="error"
/> />

View File

@ -80,7 +80,7 @@ const DeleteImageModal = () => {
return ( return (
<ConfirmationAlertDialog <ConfirmationAlertDialog
title={t('gallery.deleteImage')} title={t('gallery.deleteImage', { count: imagesToDelete.length })}
isOpen={isModalOpen} isOpen={isModalOpen}
onClose={handleClose} onClose={handleClose}
cancelButtonText={t('boards.cancel')} cancelButtonText={t('boards.cancel')}

View File

@ -6,7 +6,6 @@ import type { RemoveFromBoardDropData } from 'features/dnd/types';
import AutoAddIcon from 'features/gallery/components/Boards/AutoAddIcon'; import AutoAddIcon from 'features/gallery/components/Boards/AutoAddIcon';
import BoardContextMenu from 'features/gallery/components/Boards/BoardContextMenu'; import BoardContextMenu from 'features/gallery/components/Boards/BoardContextMenu';
import { autoAddBoardIdChanged, boardIdSelected } from 'features/gallery/store/gallerySlice'; import { autoAddBoardIdChanged, boardIdSelected } from 'features/gallery/store/gallerySlice';
/** @knipignore */
import InvokeLogoSVG from 'public/assets/images/invoke-symbol-wht-lrg.svg'; import InvokeLogoSVG from 'public/assets/images/invoke-symbol-wht-lrg.svg';
import { memo, useCallback, useMemo, useState } from 'react'; import { memo, useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';

View File

@ -51,6 +51,7 @@ const CurrentImageButtons = () => {
const shouldShowImageDetails = useAppSelector((s) => s.ui.shouldShowImageDetails); const shouldShowImageDetails = useAppSelector((s) => s.ui.shouldShowImageDetails);
const shouldShowProgressInViewer = useAppSelector((s) => s.ui.shouldShowProgressInViewer); const shouldShowProgressInViewer = useAppSelector((s) => s.ui.shouldShowProgressInViewer);
const lastSelectedImage = useAppSelector(selectLastSelectedImage); const lastSelectedImage = useAppSelector(selectLastSelectedImage);
const selection = useAppSelector((s) => s.gallery.selection);
const shouldDisableToolbarButtons = useAppSelector(selectShouldDisableToolbarButtons); const shouldDisableToolbarButtons = useAppSelector(selectShouldDisableToolbarButtons);
const isUpscalingEnabled = useFeatureStatus('upscaling').isFeatureEnabled; const isUpscalingEnabled = useFeatureStatus('upscaling').isFeatureEnabled;
@ -102,8 +103,8 @@ const CurrentImageButtons = () => {
if (!imageDTO) { if (!imageDTO) {
return; return;
} }
dispatch(imagesToDeleteSelected([imageDTO])); dispatch(imagesToDeleteSelected(selection));
}, [dispatch, imageDTO]); }, [dispatch, imageDTO, selection]);
useHotkeys( useHotkeys(
'Shift+U', 'Shift+U',

View File

@ -188,7 +188,7 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => {
)} )}
<MenuDivider /> <MenuDivider />
<MenuItem color="error.300" icon={<PiTrashSimpleBold />} onClickCapture={handleDelete}> <MenuItem color="error.300" icon={<PiTrashSimpleBold />} onClickCapture={handleDelete}>
{t('gallery.deleteImage')} {t('gallery.deleteImage', { count: 1 })}
</MenuItem> </MenuItem>
</> </>
); );

View File

@ -180,7 +180,7 @@ const GalleryImage = (props: HoverableImageProps) => {
<IAIDndImageIcon <IAIDndImageIcon
onClick={handleDelete} onClick={handleDelete}
icon={<PiTrashSimpleFill size="16px" />} icon={<PiTrashSimpleFill size="16px" />}
tooltip={t('gallery.deleteImage')} tooltip={t('gallery.deleteImage', { count: 1 })}
styleOverrides={imageIconStyleOverrides} styleOverrides={imageIconStyleOverrides}
/> />
)} )}

View File

@ -1,7 +1,6 @@
import { Button, Flex, Image, Text } from '@invoke-ai/ui-library'; import { Button, Flex, Image, Text } from '@invoke-ai/ui-library';
import { useAppDispatch } from 'app/store/storeHooks'; import { useAppDispatch } from 'app/store/storeHooks';
import { workflowModeChanged } from 'features/nodes/store/workflowSlice'; import { workflowModeChanged } from 'features/nodes/store/workflowSlice';
/** @knipignore */
import InvokeLogoSVG from 'public/assets/images/invoke-symbol-wht-lrg.svg'; import InvokeLogoSVG from 'public/assets/images/invoke-symbol-wht-lrg.svg';
import { useCallback } from 'react'; import { useCallback } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';

View File

@ -29,6 +29,7 @@ const selector = createMemoizedSelector(
const { shouldRandomizeSeed, model } = generation; const { shouldRandomizeSeed, model } = generation;
const { hrfEnabled } = hrf; const { hrfEnabled } = hrf;
const badges: string[] = []; const badges: string[] = [];
const isSDXL = model?.base === 'sdxl';
if (activeTabName === 'unifiedCanvas') { if (activeTabName === 'unifiedCanvas') {
const { const {
@ -53,10 +54,10 @@ const selector = createMemoizedSelector(
badges.push('Manual Seed'); badges.push('Manual Seed');
} }
if (hrfEnabled) { if (hrfEnabled && !isSDXL) {
badges.push('HiRes Fix'); badges.push('HiRes Fix');
} }
return { badges, activeTabName, isSDXL: model?.base === 'sdxl' }; return { badges, activeTabName, isSDXL };
} }
); );

View File

@ -21,7 +21,6 @@ import {
import ScrollableContent from 'common/components/OverlayScrollbars/ScrollableContent'; import ScrollableContent from 'common/components/OverlayScrollbars/ScrollableContent';
import { discordLink, githubLink, websiteLink } from 'features/system/store/constants'; import { discordLink, githubLink, websiteLink } from 'features/system/store/constants';
import { map } from 'lodash-es'; import { map } from 'lodash-es';
/** @knipignore */
import InvokeLogoYellow from 'public/assets/images/invoke-tag-lrg.svg'; import InvokeLogoYellow from 'public/assets/images/invoke-tag-lrg.svg';
import type { ReactElement } from 'react'; import type { ReactElement } from 'react';
import { cloneElement, memo, useCallback } from 'react'; import { cloneElement, memo, useCallback } from 'react';

View File

@ -2,7 +2,6 @@
import { Image, Text, Tooltip } from '@invoke-ai/ui-library'; import { Image, Text, Tooltip } from '@invoke-ai/ui-library';
import { useStore } from '@nanostores/react'; import { useStore } from '@nanostores/react';
import { $logo } from 'app/store/nanostores/logo'; import { $logo } from 'app/store/nanostores/logo';
/** @knipignore */
import InvokeLogoYellow from 'public/assets/images/invoke-symbol-ylw-lrg.svg'; import InvokeLogoYellow from 'public/assets/images/invoke-symbol-ylw-lrg.svg';
import { memo, useMemo, useRef } from 'react'; import { memo, useMemo, useRef } from 'react';
import { useGetAppVersionQuery } from 'services/api/endpoints/appInfo'; import { useGetAppVersionQuery } from 'services/api/endpoints/appInfo';

View File

@ -33,7 +33,7 @@ classifiers = [
] ]
dependencies = [ dependencies = [
# Core generation dependencies, pinned for reproducible builds. # Core generation dependencies, pinned for reproducible builds.
"accelerate==0.28.0", "accelerate==0.29.2",
"clip_anytorch==2.5.2", # replacing "clip @ https://github.com/openai/CLIP/archive/eaa22acb90a5876642d0507623e859909230a52d.zip", "clip_anytorch==2.5.2", # replacing "clip @ https://github.com/openai/CLIP/archive/eaa22acb90a5876642d0507623e859909230a52d.zip",
"compel==2.0.2", "compel==2.0.2",
"controlnet-aux==0.0.7", "controlnet-aux==0.0.7",
@ -47,16 +47,16 @@ dependencies = [
"pytorch-lightning==2.1.3", "pytorch-lightning==2.1.3",
"safetensors==0.4.2", "safetensors==0.4.2",
"timm==0.6.13", # needed to override timm latest in controlnet_aux, see https://github.com/isl-org/ZoeDepth/issues/26 "timm==0.6.13", # needed to override timm latest in controlnet_aux, see https://github.com/isl-org/ZoeDepth/issues/26
"torch==2.2.1", "torch==2.2.2",
"torchmetrics==0.11.4", "torchmetrics==0.11.4",
"torchsde==0.2.6", "torchsde==0.2.6",
"torchvision==0.17.1", "torchvision==0.17.2",
"transformers==4.39.1", "transformers==4.39.3",
# Core application dependencies, pinned for reproducible builds. # Core application dependencies, pinned for reproducible builds.
"fastapi-events==0.11.0", "fastapi-events==0.11.0",
"fastapi==0.110.0", "fastapi==0.110.0",
"huggingface-hub==0.21.4", "huggingface-hub==0.22.2",
"pydantic-settings==2.2.1", "pydantic-settings==2.2.1",
"pydantic==2.6.3", "pydantic==2.6.3",
"python-socketio==5.11.1", "python-socketio==5.11.1",
@ -96,7 +96,7 @@ dependencies = [
[project.optional-dependencies] [project.optional-dependencies]
"xformers" = [ "xformers" = [
# Core generation dependencies, pinned for reproducible builds. # Core generation dependencies, pinned for reproducible builds.
"xformers==0.0.25; sys_platform!='darwin'", "xformers==0.0.25post1; sys_platform!='darwin'",
# Auxiliary dependencies, pinned only if necessary. # Auxiliary dependencies, pinned only if necessary.
"triton; sys_platform=='linux'", "triton; sys_platform=='linux'",
] ]