feat: add Node bridge for outpainting

This commit is contained in:
SnapOtter
2026-05-11 21:08:08 +08:00
parent 9466df90e0
commit 4a863e1ce8
2 changed files with 46 additions and 0 deletions
+2
View File
@@ -15,6 +15,8 @@ export { detectFaceLandmarks } from "./face-landmarks.js";
export { inpaint } from "./inpainting.js";
export { noiseRemoval } from "./noise-removal.js";
export { extractText } from "./ocr.js";
export type { OutpaintOptions } from "./outpainting.js";
export { outpaint } from "./outpainting.js";
export { removeRedEye } from "./red-eye-removal.js";
export { restorePhoto } from "./restoration.js";
export { seamCarve } from "./seam-carving.js";
+44
View File
@@ -0,0 +1,44 @@
import { readFile, writeFile } from "node:fs/promises";
import { join } from "node:path";
import sharp from "sharp";
import { type ProgressCallback, parseStdoutJson, runPythonWithProgress } from "./bridge.js";
export interface OutpaintOptions {
extendTop: number;
extendRight: number;
extendBottom: number;
extendLeft: number;
}
export async function outpaint(
inputBuffer: Buffer,
options: OutpaintOptions,
outputDir: string,
onProgress?: ProgressCallback,
): Promise<Buffer> {
const inputPath = join(outputDir, "input_outpaint.png");
const outputPath = join(outputDir, "output_outpaint.png");
const pngInput = await sharp(inputBuffer).png().toBuffer();
await writeFile(inputPath, pngInput);
const { stdout } = await runPythonWithProgress(
"outpaint.py",
[
inputPath,
outputPath,
String(options.extendTop),
String(options.extendRight),
String(options.extendBottom),
String(options.extendLeft),
],
{ onProgress },
);
const result = parseStdoutJson(stdout);
if (!result.success) {
throw new Error(result.error || "Outpainting failed");
}
return readFile(outputPath);
}