- Implemented ComfyGenerateRequest type and associated functions for generating images using various architectures and modes. - Added functions for listing generation options and handling image uploads. - Created workflows for different generation modes including SDXL, Z-Image, Z-Image Turbo, and Anima. - Introduced GenerationJobStatus component to display the status of ongoing generation jobs. - Developed MaskControls for managing mask operations and displaying mask analysis. - Created palette items for tool selection, layer management, and generation settings.
33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
export type BrowserImageFile = {
|
|
name: string;
|
|
mimeType: string;
|
|
source: string;
|
|
intrinsicSize: { w: number; h: number };
|
|
release(): void;
|
|
};
|
|
|
|
export async function decodeBrowserImageFile(file: File): Promise<BrowserImageFile | undefined> {
|
|
if (!file.type.startsWith("image/")) return undefined;
|
|
const source = await fileToDataUrl(file);
|
|
const intrinsicSize = await loadImageSize(source);
|
|
return { name: file.name, mimeType: file.type, source, intrinsicSize, release: () => undefined };
|
|
}
|
|
|
|
function fileToDataUrl(file: File): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.onload = () => typeof reader.result === "string" ? resolve(reader.result) : reject(new Error("Failed to read image file"));
|
|
reader.onerror = () => reject(reader.error ?? new Error("Failed to read image file"));
|
|
reader.readAsDataURL(file);
|
|
});
|
|
}
|
|
|
|
function loadImageSize(source: string): Promise<{ w: number; h: number }> {
|
|
return new Promise((resolve, reject) => {
|
|
const image = new Image();
|
|
image.onload = () => resolve({ w: image.naturalWidth, h: image.naturalHeight });
|
|
image.onerror = () => reject(new Error("Failed to load image"));
|
|
image.src = source;
|
|
});
|
|
}
|