import type { Rect, Size } from "./geometry"; import type { AssetId, GenerationCandidateId, LayerId } from "./id"; export type GeneratedAssetMode = "text-to-image" | "image-to-image" | "inpaint" | "outpaint"; export type GeneratedAssetAcceptance = "layer" | "replacement"; export type AssetGenerationProvenance = { kind: "generated"; candidateId: GenerationCandidateId; mode: GeneratedAssetMode; acceptance: GeneratedAssetAcceptance; prompt: string; negativePrompt: string; seed: number; outputSize: Size; settings: { architecture: string; model: string; textEncoder: string; vae: string; strength: number; steps: number; cfg: number; sampler: string; scheduler: string; width: number; height: number; }; inpaint?: { targetLayerId: LayerId; maskLayerId: LayerId; sourceAssetId: AssetId; maskAssetId: AssetId; crop: { assetBounds: Rect; documentBounds: Rect; padding: number; maskedAreaOnly: boolean; }; mask: { polarity: "hidden" | "revealed"; activeBounds: Rect; }; backend: { growMaskBy: number; maskedContent: string; maskBlur: number; maskFeather: number; maskExpand: number; cropPadding: number; }; }; }; export type AssetProvenance = AssetGenerationProvenance;