mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Merge branch 'main' into lstein/new-model-manager
This commit is contained in:
commit
165c1adcf8
@ -15,6 +15,7 @@ import { PartialAppConfig } from 'app/types/invokeai';
|
|||||||
|
|
||||||
import '../../i18n';
|
import '../../i18n';
|
||||||
import { socketMiddleware } from 'services/events/middleware';
|
import { socketMiddleware } from 'services/events/middleware';
|
||||||
|
import { Middleware } from '@reduxjs/toolkit';
|
||||||
|
|
||||||
const App = lazy(() => import('./App'));
|
const App = lazy(() => import('./App'));
|
||||||
const ThemeLocaleProvider = lazy(() => import('./ThemeLocaleProvider'));
|
const ThemeLocaleProvider = lazy(() => import('./ThemeLocaleProvider'));
|
||||||
@ -25,6 +26,7 @@ interface Props extends PropsWithChildren {
|
|||||||
config?: PartialAppConfig;
|
config?: PartialAppConfig;
|
||||||
headerComponent?: ReactNode;
|
headerComponent?: ReactNode;
|
||||||
setIsReady?: (isReady: boolean) => void;
|
setIsReady?: (isReady: boolean) => void;
|
||||||
|
middleware?: Middleware[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const InvokeAIUI = ({
|
const InvokeAIUI = ({
|
||||||
@ -33,6 +35,7 @@ const InvokeAIUI = ({
|
|||||||
config,
|
config,
|
||||||
headerComponent,
|
headerComponent,
|
||||||
setIsReady,
|
setIsReady,
|
||||||
|
middleware,
|
||||||
}: Props) => {
|
}: Props) => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// configure API client token
|
// configure API client token
|
||||||
@ -54,8 +57,12 @@ const InvokeAIUI = ({
|
|||||||
// the `apiUrl`/`token` dynamically.
|
// the `apiUrl`/`token` dynamically.
|
||||||
|
|
||||||
// rebuild socket middleware with token and apiUrl
|
// rebuild socket middleware with token and apiUrl
|
||||||
|
if (middleware && middleware.length > 0) {
|
||||||
|
addMiddleware(socketMiddleware(), ...middleware);
|
||||||
|
} else {
|
||||||
addMiddleware(socketMiddleware());
|
addMiddleware(socketMiddleware());
|
||||||
}, [apiUrl, token]);
|
}
|
||||||
|
}, [apiUrl, token, middleware]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
|
@ -55,7 +55,11 @@ import { useGetUrl } from 'common/util/getUrl';
|
|||||||
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
|
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
|
||||||
import { useParameters } from 'features/parameters/hooks/useParameters';
|
import { useParameters } from 'features/parameters/hooks/useParameters';
|
||||||
import { initialImageSelected } from 'features/parameters/store/actions';
|
import { initialImageSelected } from 'features/parameters/store/actions';
|
||||||
import { requestedImageDeletion } from '../store/actions';
|
import {
|
||||||
|
requestedImageDeletion,
|
||||||
|
sentImageToCanvas,
|
||||||
|
sentImageToImg2Img,
|
||||||
|
} from '../store/actions';
|
||||||
import FaceRestoreSettings from 'features/parameters/components/Parameters/FaceRestore/FaceRestoreSettings';
|
import FaceRestoreSettings from 'features/parameters/components/Parameters/FaceRestore/FaceRestoreSettings';
|
||||||
import UpscaleSettings from 'features/parameters/components/Parameters/Upscale/UpscaleSettings';
|
import UpscaleSettings from 'features/parameters/components/Parameters/Upscale/UpscaleSettings';
|
||||||
import { allParametersSet } from 'features/parameters/store/generationSlice';
|
import { allParametersSet } from 'features/parameters/store/generationSlice';
|
||||||
@ -252,6 +256,7 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => {
|
|||||||
useHotkeys('p', handleUsePrompt, [image]);
|
useHotkeys('p', handleUsePrompt, [image]);
|
||||||
|
|
||||||
const handleSendToImageToImage = useCallback(() => {
|
const handleSendToImageToImage = useCallback(() => {
|
||||||
|
dispatch(sentImageToImg2Img());
|
||||||
dispatch(initialImageSelected(image));
|
dispatch(initialImageSelected(image));
|
||||||
}, [dispatch, image]);
|
}, [dispatch, image]);
|
||||||
|
|
||||||
@ -327,6 +332,7 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => {
|
|||||||
|
|
||||||
const handleSendToCanvas = useCallback(() => {
|
const handleSendToCanvas = useCallback(() => {
|
||||||
if (!image) return;
|
if (!image) return;
|
||||||
|
dispatch(sentImageToCanvas());
|
||||||
if (isLightboxOpen) dispatch(setIsLightboxOpen(false));
|
if (isLightboxOpen) dispatch(setIsLightboxOpen(false));
|
||||||
|
|
||||||
// dispatch(setInitialCanvasImage(selectedImage));
|
// dispatch(setInitialCanvasImage(selectedImage));
|
||||||
@ -417,6 +423,7 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => {
|
|||||||
size="sm"
|
size="sm"
|
||||||
onClick={handleSendToImageToImage}
|
onClick={handleSendToImageToImage}
|
||||||
leftIcon={<FaShare />}
|
leftIcon={<FaShare />}
|
||||||
|
id="send-to-img2img"
|
||||||
>
|
>
|
||||||
{t('parameters.sendToImg2Img')}
|
{t('parameters.sendToImg2Img')}
|
||||||
</IAIButton>
|
</IAIButton>
|
||||||
@ -425,6 +432,7 @@ const CurrentImageButtons = (props: CurrentImageButtonsProps) => {
|
|||||||
size="sm"
|
size="sm"
|
||||||
onClick={handleSendToCanvas}
|
onClick={handleSendToCanvas}
|
||||||
leftIcon={<FaShare />}
|
leftIcon={<FaShare />}
|
||||||
|
id="send-to-canvas"
|
||||||
>
|
>
|
||||||
{t('parameters.sendToUnifiedCanvas')}
|
{t('parameters.sendToUnifiedCanvas')}
|
||||||
</IAIButton>
|
</IAIButton>
|
||||||
|
@ -33,7 +33,11 @@ import { isEqual } from 'lodash-es';
|
|||||||
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
|
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
|
||||||
import { useParameters } from 'features/parameters/hooks/useParameters';
|
import { useParameters } from 'features/parameters/hooks/useParameters';
|
||||||
import { initialImageSelected } from 'features/parameters/store/actions';
|
import { initialImageSelected } from 'features/parameters/store/actions';
|
||||||
import { requestedImageDeletion } from '../store/actions';
|
import {
|
||||||
|
requestedImageDeletion,
|
||||||
|
sentImageToCanvas,
|
||||||
|
sentImageToImg2Img,
|
||||||
|
} from '../store/actions';
|
||||||
import { useAppToaster } from 'app/components/Toaster';
|
import { useAppToaster } from 'app/components/Toaster';
|
||||||
|
|
||||||
export const selector = createSelector(
|
export const selector = createSelector(
|
||||||
@ -157,6 +161,7 @@ const HoverableImage = memo((props: HoverableImageProps) => {
|
|||||||
}, [image, recallSeed]);
|
}, [image, recallSeed]);
|
||||||
|
|
||||||
const handleSendToImageToImage = useCallback(() => {
|
const handleSendToImageToImage = useCallback(() => {
|
||||||
|
dispatch(sentImageToImg2Img());
|
||||||
dispatch(initialImageSelected(image));
|
dispatch(initialImageSelected(image));
|
||||||
}, [dispatch, image]);
|
}, [dispatch, image]);
|
||||||
|
|
||||||
@ -168,6 +173,7 @@ const HoverableImage = memo((props: HoverableImageProps) => {
|
|||||||
* TODO: the rest of these
|
* TODO: the rest of these
|
||||||
*/
|
*/
|
||||||
const handleSendToCanvas = () => {
|
const handleSendToCanvas = () => {
|
||||||
|
dispatch(sentImageToCanvas());
|
||||||
dispatch(setInitialCanvasImage(image));
|
dispatch(setInitialCanvasImage(image));
|
||||||
|
|
||||||
dispatch(resizeAndScaleCanvas());
|
dispatch(resizeAndScaleCanvas());
|
||||||
@ -250,11 +256,16 @@ const HoverableImage = memo((props: HoverableImageProps) => {
|
|||||||
<MenuItem
|
<MenuItem
|
||||||
icon={<FaShare />}
|
icon={<FaShare />}
|
||||||
onClickCapture={handleSendToImageToImage}
|
onClickCapture={handleSendToImageToImage}
|
||||||
|
id="send-to-img2img"
|
||||||
>
|
>
|
||||||
{t('parameters.sendToImg2Img')}
|
{t('parameters.sendToImg2Img')}
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
{isCanvasEnabled && (
|
{isCanvasEnabled && (
|
||||||
<MenuItem icon={<FaShare />} onClickCapture={handleSendToCanvas}>
|
<MenuItem
|
||||||
|
icon={<FaShare />}
|
||||||
|
onClickCapture={handleSendToCanvas}
|
||||||
|
id="send-to-canvas"
|
||||||
|
>
|
||||||
{t('parameters.sendToUnifiedCanvas')}
|
{t('parameters.sendToUnifiedCanvas')}
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
)}
|
)}
|
||||||
|
@ -5,3 +5,7 @@ import { SelectedImage } from 'features/parameters/store/actions';
|
|||||||
export const requestedImageDeletion = createAction<
|
export const requestedImageDeletion = createAction<
|
||||||
Image | SelectedImage | undefined
|
Image | SelectedImage | undefined
|
||||||
>('gallery/requestedImageDeletion');
|
>('gallery/requestedImageDeletion');
|
||||||
|
|
||||||
|
export const sentImageToCanvas = createAction('gallery/sentImageToCanvas');
|
||||||
|
|
||||||
|
export const sentImageToImg2Img = createAction('gallery/sentImageToImg2Img');
|
||||||
|
@ -132,6 +132,7 @@ const CancelButton = (
|
|||||||
isDisabled={!isConnected || !isProcessing || !isCancelable}
|
isDisabled={!isConnected || !isProcessing || !isCancelable}
|
||||||
onClick={handleClickCancel}
|
onClick={handleClickCancel}
|
||||||
colorScheme="error"
|
colorScheme="error"
|
||||||
|
id="cancel-button"
|
||||||
{...rest}
|
{...rest}
|
||||||
/>
|
/>
|
||||||
<Menu closeOnSelect={false}>
|
<Menu closeOnSelect={false}>
|
||||||
|
@ -56,6 +56,7 @@ export default function InvokeButton(props: InvokeButton) {
|
|||||||
tooltip={t('parameters.invoke')}
|
tooltip={t('parameters.invoke')}
|
||||||
tooltipProps={{ placement: 'bottom' }}
|
tooltipProps={{ placement: 'bottom' }}
|
||||||
colorScheme="accent"
|
colorScheme="accent"
|
||||||
|
id="invoke-button"
|
||||||
{...rest}
|
{...rest}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
@ -67,6 +68,7 @@ export default function InvokeButton(props: InvokeButton) {
|
|||||||
flexGrow={1}
|
flexGrow={1}
|
||||||
w="100%"
|
w="100%"
|
||||||
colorScheme="accent"
|
colorScheme="accent"
|
||||||
|
id="invoke-button"
|
||||||
fontWeight={700}
|
fontWeight={700}
|
||||||
{...rest}
|
{...rest}
|
||||||
>
|
>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user