feat: add inpaint region functionality and related tools
- Enhanced cursor behavior for new tools: semantic select, mask lasso, and mask rectangle. - Updated mask edit state to include mask asset ID and kind. - Implemented inpaint region commands for adding, applying, and removing inpaint regions. - Introduced new operations for lasso and semantic selection tools. - Created UI components for candidate review and inpaint region management. - Added tests for inpaint region commands to ensure functionality. - Updated various components to support new inpaint features and improve user experience.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import type { ImageDocument } from "@core/document";
|
||||
import type { Angle, Rect, Size, Transform, Vec2D } from "@core/geometry";
|
||||
import type { ArtboardId, AssetId, GenerationCandidateId, GenerationJobId, LayerId } from "@core/id";
|
||||
import type { ArtboardId, AssetId, GenerationCandidateId, GenerationJobId, InpaintRegionId, LayerId } from "@core/id";
|
||||
import type { GenerateArchitecture, GenerateMode, GenerateSettings, ToolState } from "./tools";
|
||||
import type { TransformSession } from "./transform";
|
||||
|
||||
@@ -19,8 +19,11 @@ export type SelectionState = {
|
||||
export type MaskViewMode = "composite" | "blackWhite" | "alpha" | "overlay";
|
||||
|
||||
export type MaskEditState = {
|
||||
kind: "layerMask" | "inpaintRegion";
|
||||
targetLayerId: LayerId;
|
||||
maskLayerId: LayerId;
|
||||
maskAssetId: AssetId;
|
||||
maskLayerId?: LayerId;
|
||||
inpaintRegionId?: InpaintRegionId;
|
||||
viewMode?: MaskViewMode;
|
||||
};
|
||||
|
||||
@@ -34,6 +37,12 @@ export type BrushStrokePreviewState = {
|
||||
source: string;
|
||||
};
|
||||
|
||||
export type MaskShapeSession = {
|
||||
shape: "lasso" | "rectangle";
|
||||
points: Vec2D[];
|
||||
mode: "replace" | "add" | "subtract";
|
||||
};
|
||||
|
||||
export type GenerationCandidate = {
|
||||
id: GenerationCandidateId;
|
||||
source: string;
|
||||
@@ -42,10 +51,12 @@ export type GenerationCandidate = {
|
||||
mode: GenerateSettings["mode"];
|
||||
settings: GenerateSettings;
|
||||
seed: number;
|
||||
favorite?: boolean;
|
||||
width: number;
|
||||
height: number;
|
||||
inputImage?: string;
|
||||
maskImage?: string;
|
||||
blendMaskImage?: string;
|
||||
placement: {
|
||||
artboardId: ArtboardId;
|
||||
layerName: string;
|
||||
@@ -53,11 +64,14 @@ export type GenerationCandidate = {
|
||||
};
|
||||
inpaint?: {
|
||||
targetLayerId: LayerId;
|
||||
maskLayerId: LayerId;
|
||||
regionId: InpaintRegionId;
|
||||
sourceAssetId: AssetId;
|
||||
maskAssetId: AssetId;
|
||||
inputImage: string;
|
||||
maskImage: string;
|
||||
editMaskImage: string;
|
||||
blendMaskImage: string;
|
||||
revision: { source: string; mask: string };
|
||||
crop: {
|
||||
assetBounds: Rect;
|
||||
documentBounds: Rect;
|
||||
@@ -81,7 +95,7 @@ export type GenerationCandidate = {
|
||||
|
||||
export type GenerationCompareMode = "result" | "before" | "split";
|
||||
|
||||
export type GenerationJobKind = "generate" | "regenerate" | "refine" | "replace";
|
||||
export type GenerationJobKind = "generate" | "regenerate" | "refine" | "replace" | "mask";
|
||||
export type GenerationJobStatus = "running" | "succeeded" | "failed" | "cancelled";
|
||||
|
||||
export type GenerationJob = {
|
||||
@@ -92,6 +106,8 @@ export type GenerationJob = {
|
||||
startedAt: number;
|
||||
finishedAt?: number;
|
||||
error?: string;
|
||||
progress?: number;
|
||||
detail?: string;
|
||||
};
|
||||
|
||||
export type GenerationState = {
|
||||
@@ -113,10 +129,15 @@ export type GenerationArchitectureOption = {
|
||||
export type GenerationOptions = {
|
||||
architectures?: GenerationArchitectureOption[];
|
||||
models?: string[];
|
||||
inpaintModels?: string[];
|
||||
textEncoders?: string[];
|
||||
vaes?: string[];
|
||||
samplers?: string[];
|
||||
schedulers?: string[];
|
||||
controlModels?: string[];
|
||||
structureControls?: Array<"canny" | "depth" | "pose">;
|
||||
semanticSelection?: boolean;
|
||||
sam3Models?: string[];
|
||||
};
|
||||
|
||||
export type GenerationResourcesState = { status: "idle" | "loading" | "ready" | "failed"; options?: GenerationOptions; error?: string };
|
||||
@@ -148,6 +169,7 @@ export type EditorState = {
|
||||
maskEdit?: MaskEditState;
|
||||
brushPreview?: BrushPreviewState;
|
||||
brushStrokePreview?: BrushStrokePreviewState;
|
||||
maskShapeSession?: MaskShapeSession;
|
||||
pointerSession?: { type: "pan" };
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user