diff --git a/packages/inference/src/lib/getProviderHelper.ts b/packages/inference/src/lib/getProviderHelper.ts index a733a37b65..3fb09216e0 100644 --- a/packages/inference/src/lib/getProviderHelper.ts +++ b/packages/inference/src/lib/getProviderHelper.ts @@ -181,6 +181,8 @@ export const PROVIDERS: Record + params: BodyParams< + | ImageToImageArgs + | ImageTextToImageArgs + | ImageTextToVideoArgs + | TextToImageArgs + | TextToVideoArgs + | ImageToVideoArgs + > ): Record { const payload: Record = { ...omit(params.args, ["inputs", "parameters"]), @@ -221,3 +232,34 @@ export class WavespeedAIImageToVideoTask extends WavespeedAITask implements Imag return { ...args, inputs: args.parameters?.prompt, image: base, images }; } } + +// 1x1 fully transparent PNG for use when no input image is provided +const TRANSPARENT_1PX_PNG_BASE64 = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="; + +function getTransparentPngBlob(): Blob { + const bytes = Uint8Array.from(Buffer.from(TRANSPARENT_1PX_PNG_BASE64, "base64")); + return new Blob([bytes], { type: "image/png" }); +} + +export class WavespeedAIImageTextToImageTask extends WavespeedAIImageToImageTask implements ImageTextToImageTaskHelper { + constructor() { + super(); + } + + override async preparePayloadAsync(args: ImageTextToImageArgs): Promise { + const inputs = args.inputs ?? getTransparentPngBlob(); + return super.preparePayloadAsync({ ...args, inputs } as ImageToImageArgs); + } +} + +export class WavespeedAIImageTextToVideoTask extends WavespeedAIImageToVideoTask implements ImageTextToVideoTaskHelper { + constructor() { + super(); + } + + override async preparePayloadAsync(args: ImageTextToVideoArgs): Promise { + const inputs = args.inputs ?? getTransparentPngBlob(); + return super.preparePayloadAsync({ ...args, inputs } as ImageToVideoArgs); + } +}