mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-04-23 03:00:31 -04:00
Compare commits
7 Commits
feature/sq
...
v6.9.0rc2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34928ee931 | ||
|
|
c25992de51 | ||
|
|
c2c882a306 | ||
|
|
7efaffdea4 | ||
|
|
3316e05d2c | ||
|
|
1c73c6eb94 | ||
|
|
84b1590b29 |
@@ -28,17 +28,6 @@ if TYPE_CHECKING:
|
||||
pass
|
||||
|
||||
|
||||
class URLModelSource(BaseModel):
|
||||
type: Literal[ModelSourceType.Url] = Field(default=ModelSourceType.Url)
|
||||
url: str = Field(
|
||||
description="The URL from which the model was installed.",
|
||||
)
|
||||
api_response: str | None = Field(
|
||||
default=None,
|
||||
description="The original API response from the source, as stringified JSON.",
|
||||
)
|
||||
|
||||
|
||||
class Config_Base(ABC, BaseModel):
|
||||
"""
|
||||
Abstract base class for model configurations. A model config describes a specific combination of model base, type and
|
||||
|
||||
@@ -2748,9 +2748,8 @@
|
||||
"whatsNew": {
|
||||
"whatsNewInInvoke": "What's New in Invoke",
|
||||
"items": [
|
||||
"Crop tool for Ref Images",
|
||||
"Improved Model Manager tab UI",
|
||||
"Navigate prompt history with keyboard shortcuts (alt/option + up/down)"
|
||||
"Model Manager: If a model cannot be identified during installation, you can now manually select the model type and architecture.",
|
||||
"Internal: Improved model identification system, making it easier for contributors to add support for new models."
|
||||
],
|
||||
"readReleaseNotes": "Read Release Notes",
|
||||
"watchRecentReleaseVideos": "Watch Recent Release Videos",
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { Box } from '@invoke-ai/ui-library';
|
||||
import { useStore } from '@nanostores/react';
|
||||
import { GlobalHookIsolator } from 'app/components/GlobalHookIsolator';
|
||||
import { GlobalModalIsolator } from 'app/components/GlobalModalIsolator';
|
||||
import { clearStorage } from 'app/store/enhancers/reduxRemember/driver';
|
||||
import Loading from 'common/components/Loading/Loading';
|
||||
import { AppContent } from 'features/ui/components/AppContent';
|
||||
import { navigationApi } from 'features/ui/layouts/navigation-api';
|
||||
import { memo } from 'react';
|
||||
import { ErrorBoundary } from 'react-error-boundary';
|
||||
|
||||
@@ -16,11 +19,12 @@ const errorBoundaryOnReset = () => {
|
||||
};
|
||||
|
||||
const App = () => {
|
||||
const isNavigationAPIConnected = useStore(navigationApi.$isConnected);
|
||||
return (
|
||||
<ThemeLocaleProvider>
|
||||
<ErrorBoundary onReset={errorBoundaryOnReset} FallbackComponent={AppErrorBoundaryFallback}>
|
||||
<Box id="invoke-app-wrapper" w="100dvw" h="100dvh" position="relative" overflow="hidden">
|
||||
<AppContent />
|
||||
{isNavigationAPIConnected ? <AppContent /> : <Loading />}
|
||||
</Box>
|
||||
<GlobalHookIsolator />
|
||||
<GlobalModalIsolator />
|
||||
|
||||
@@ -34,6 +34,7 @@ export const GlobalHookIsolator = memo(() => {
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
// singleton!
|
||||
useNavigationApi();
|
||||
useReadinessWatcher();
|
||||
useSocketIO();
|
||||
useGlobalModifiersInit();
|
||||
@@ -41,7 +42,6 @@ export const GlobalHookIsolator = memo(() => {
|
||||
useGetOpenAPISchemaQuery();
|
||||
useSyncLoggingConfig();
|
||||
useCloseChakraTooltipsOnDragFix();
|
||||
useNavigationApi();
|
||||
useDndMonitor();
|
||||
useSyncNodeErrors();
|
||||
useSyncLangDirection();
|
||||
|
||||
@@ -127,6 +127,7 @@ describe('AppNavigationApi', () => {
|
||||
|
||||
describe('Basic Connection', () => {
|
||||
it('should connect to app', () => {
|
||||
expect(navigationApi.$isConnected.get()).toBe(false);
|
||||
navigationApi.connectToApp(mockAppApi);
|
||||
|
||||
expect(navigationApi._app).not.toBeNull();
|
||||
@@ -135,6 +136,7 @@ describe('AppNavigationApi', () => {
|
||||
expect(navigationApi._app?.storage.set).toBe(mockSetStorage);
|
||||
expect(navigationApi._app?.storage.get).toBe(mockGetStorage);
|
||||
expect(navigationApi._app?.storage.delete).toBe(mockDeleteStorage);
|
||||
expect(navigationApi.$isConnected.get()).toBe(true);
|
||||
});
|
||||
|
||||
it('should disconnect from app', () => {
|
||||
@@ -142,6 +144,7 @@ describe('AppNavigationApi', () => {
|
||||
navigationApi.disconnectFromApp();
|
||||
|
||||
expect(navigationApi._app).toBeNull();
|
||||
expect(navigationApi.$isConnected.get()).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -112,6 +112,12 @@ export class NavigationApi {
|
||||
*/
|
||||
_app: NavigationAppApi | null = null;
|
||||
|
||||
/**
|
||||
* A flag indicating if the application is currently connected to the navigation API.
|
||||
*/
|
||||
private _$isConnected = atom(false);
|
||||
$isConnected: Atom<boolean> = this._$isConnected;
|
||||
|
||||
/**
|
||||
* Connect to the application to manage tab switching.
|
||||
* @param api - The application API that provides methods to set and get the current app tab and manage panel
|
||||
@@ -119,6 +125,7 @@ export class NavigationApi {
|
||||
*/
|
||||
connectToApp = (api: NavigationAppApi): void => {
|
||||
this._app = api;
|
||||
this._$isConnected.set(true);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -126,6 +133,7 @@ export class NavigationApi {
|
||||
*/
|
||||
disconnectFromApp = (): void => {
|
||||
this._app = null;
|
||||
this._$isConnected.set(false);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -75,7 +75,20 @@ from invokeai.app.services.image_records.image_records_common import ImageCatego
|
||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowWithoutID
|
||||
from invokeai.app.util.misc import SEED_MAX, get_random_seed
|
||||
from invokeai.backend.model_manager.configs.factory import AnyModelConfig, ModelConfigFactory
|
||||
from invokeai.backend.model_manager.load.load_base import LoadedModel
|
||||
from invokeai.backend.model_manager.taxonomy import (
|
||||
BaseModelType,
|
||||
ClipVariantType,
|
||||
FluxLoRAFormat,
|
||||
FluxVariantType,
|
||||
ModelFormat,
|
||||
ModelSourceType,
|
||||
ModelType,
|
||||
ModelVariantType,
|
||||
SchedulerPredictionType,
|
||||
SubModelType,
|
||||
)
|
||||
from invokeai.backend.stable_diffusion.diffusers_pipeline import PipelineIntermediateState
|
||||
from invokeai.backend.stable_diffusion.diffusion.conditioning_data import (
|
||||
BasicConditioningInfo,
|
||||
@@ -184,4 +197,18 @@ __all__ = [
|
||||
# invokeai.app.util.misc
|
||||
"SEED_MAX",
|
||||
"get_random_seed",
|
||||
# invokeai.backend.model_manager.taxonomy
|
||||
"BaseModelType",
|
||||
"ModelType",
|
||||
"ModelSourceType",
|
||||
"ModelFormat",
|
||||
"ModelVariantType",
|
||||
"SchedulerPredictionType",
|
||||
"SubModelType",
|
||||
"ClipVariantType",
|
||||
"FluxLoRAFormat",
|
||||
"FluxVariantType",
|
||||
# invokeai.backend.model_manager.configs.factory
|
||||
"AnyModelConfig",
|
||||
"ModelConfigFactory",
|
||||
]
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "6.9.0a3"
|
||||
__version__ = "6.9.0rc2"
|
||||
|
||||
Reference in New Issue
Block a user