/* tslint:disable */
/* eslint-disable */
/**
 * recraft.ai external api
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * The version of the OpenAPI document: 0.0.1
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  GenerateImageRequest,
  GenerateImageResponse,
  ImageFormat,
  ImageStyle,
  ImageSubStyle,
  ProcessImageResponse,
  ResponseFormat,
  TextLayoutItem,
  TransformModel,
  UserControls,
} from '../models/index';
import {
    GenerateImageRequestFromJSON,
    GenerateImageRequestToJSON,
    GenerateImageResponseFromJSON,
    GenerateImageResponseToJSON,
    ImageFormatFromJSON,
    ImageFormatToJSON,
    ImageStyleFromJSON,
    ImageStyleToJSON,
    ImageSubStyleFromJSON,
    ImageSubStyleToJSON,
    ProcessImageResponseFromJSON,
    ProcessImageResponseToJSON,
    ResponseFormatFromJSON,
    ResponseFormatToJSON,
    TextLayoutItemFromJSON,
    TextLayoutItemToJSON,
    TransformModelFromJSON,
    TransformModelToJSON,
    UserControlsFromJSON,
    UserControlsToJSON,
} from '../models/index';

export interface ClarityUpscaleRequest {
    image: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

export interface CreativeUpscaleRequest {
    image: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

export interface CrispUpscaleRequest {
    image: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

export interface EraseRegionRequest {
    image: Blob;
    mask: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

export interface GenerateBackgroundRequest {
    image: Blob;
    prompt: string;
    mask: Blob;
    blockNsfw?: boolean;
    calculateFeatures?: boolean;
    expire?: boolean;
    imageFormat?: ImageFormat;
    model?: TransformModel;
    n?: number;
    negativePrompt?: string;
    randomSeed?: number;
    responseFormat?: ResponseFormat;
    style?: ImageStyle;
    styleId?: string;
    substyle?: ImageSubStyle;
    textLayout?: Array<TextLayoutItem>;
}

export interface GenerateImageOperationRequest {
    generateImageRequest?: GenerateImageRequest;
}

export interface GenerativeUpscaleRequest {
    image: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

export interface ImageToImageRequest {
    image: Blob;
    prompt: string;
    strength: number;
    blockNsfw?: boolean;
    calculateFeatures?: boolean;
    controls?: UserControls;
    expire?: boolean;
    imageFormat?: ImageFormat;
    model?: TransformModel;
    n?: number;
    negativePrompt?: string;
    randomSeed?: number;
    responseFormat?: ResponseFormat;
    style?: ImageStyle;
    styleId?: string;
    substyle?: ImageSubStyle;
    textLayout?: Array<TextLayoutItem>;
}

export interface InpaintImageRequest {
    image: Blob;
    prompt: string;
    mask: Blob;
    blockNsfw?: boolean;
    calculateFeatures?: boolean;
    expire?: boolean;
    imageFormat?: ImageFormat;
    model?: TransformModel;
    n?: number;
    negativePrompt?: string;
    randomSeed?: number;
    responseFormat?: ResponseFormat;
    style?: ImageStyle;
    styleId?: string;
    substyle?: ImageSubStyle;
    textLayout?: Array<TextLayoutItem>;
}

export interface RemoveBackgroundRequest {
    image: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

export interface ReplaceBackgroundRequest {
    image: Blob;
    prompt: string;
    blockNsfw?: boolean;
    calculateFeatures?: boolean;
    expire?: boolean;
    imageFormat?: ImageFormat;
    model?: TransformModel;
    n?: number;
    negativePrompt?: string;
    randomSeed?: number;
    responseFormat?: ResponseFormat;
    style?: ImageStyle;
    styleId?: string;
    substyle?: ImageSubStyle;
    textLayout?: Array<TextLayoutItem>;
}

export interface VectorizeImageRequest {
    image: Blob;
    expire?: boolean;
    imageFormat?: ImageFormat;
    responseFormat?: ResponseFormat;
}

/**
 * 
 */
export class ImageApi extends runtime.BaseAPI {

    /**
     * Clarity Upscale
     * @deprecated
     */
    async clarityUpscaleRaw(requestParameters: ClarityUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling clarityUpscale().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/clarityUpscale`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Clarity Upscale
     * @deprecated
     */
    async clarityUpscale(requestParameters: ClarityUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.clarityUpscaleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Creative Upscale
     */
    async creativeUpscaleRaw(requestParameters: CreativeUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling creativeUpscale().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/creativeUpscale`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Creative Upscale
     */
    async creativeUpscale(requestParameters: CreativeUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.creativeUpscaleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Crisp Upscale
     */
    async crispUpscaleRaw(requestParameters: CrispUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling crispUpscale().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/crispUpscale`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Crisp Upscale
     */
    async crispUpscale(requestParameters: CrispUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.crispUpscaleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Erase Region
     */
    async eraseRegionRaw(requestParameters: EraseRegionRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling eraseRegion().'
            );
        }

        if (requestParameters['mask'] == null) {
            throw new runtime.RequiredError(
                'mask',
                'Required parameter "mask" was null or undefined when calling eraseRegion().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['mask'] != null) {
            formParams.append('mask', requestParameters['mask'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/eraseRegion`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Erase Region
     */
    async eraseRegion(requestParameters: EraseRegionRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.eraseRegionRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Generate Background
     */
    async generateBackgroundRaw(requestParameters: GenerateBackgroundRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GenerateImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling generateBackground().'
            );
        }

        if (requestParameters['prompt'] == null) {
            throw new runtime.RequiredError(
                'prompt',
                'Required parameter "prompt" was null or undefined when calling generateBackground().'
            );
        }

        if (requestParameters['mask'] == null) {
            throw new runtime.RequiredError(
                'mask',
                'Required parameter "mask" was null or undefined when calling generateBackground().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['blockNsfw'] != null) {
            formParams.append('block_nsfw', requestParameters['blockNsfw'] as any);
        }

        if (requestParameters['calculateFeatures'] != null) {
            formParams.append('calculate_features', requestParameters['calculateFeatures'] as any);
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['model'] != null) {
            formParams.append('model', requestParameters['model'] as any);
        }

        if (requestParameters['n'] != null) {
            formParams.append('n', requestParameters['n'] as any);
        }

        if (requestParameters['negativePrompt'] != null) {
            formParams.append('negative_prompt', requestParameters['negativePrompt'] as any);
        }

        if (requestParameters['prompt'] != null) {
            formParams.append('prompt', requestParameters['prompt'] as any);
        }

        if (requestParameters['randomSeed'] != null) {
            formParams.append('random_seed', requestParameters['randomSeed'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        if (requestParameters['style'] != null) {
            formParams.append('style', requestParameters['style'] as any);
        }

        if (requestParameters['styleId'] != null) {
            formParams.append('style_id', requestParameters['styleId'] as any);
        }

        if (requestParameters['substyle'] != null) {
            formParams.append('substyle', requestParameters['substyle'] as any);
        }

        if (requestParameters['textLayout'] != null) {
            formParams.append('text_layout', requestParameters['textLayout']!.join(runtime.COLLECTION_FORMATS["csv"]));
        }

        if (requestParameters['mask'] != null) {
            formParams.append('mask', requestParameters['mask'] as any);
        }

        const response = await this.request({
            path: `/v1/images/generateBackground`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => GenerateImageResponseFromJSON(jsonValue));
    }

    /**
     * Generate Background
     */
    async generateBackground(requestParameters: GenerateBackgroundRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<GenerateImageResponse> {
        const response = await this.generateBackgroundRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Generate image from prompt
     */
    async generateImageRaw(requestParameters: GenerateImageOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GenerateImageResponse>> {
        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json';

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const response = await this.request({
            path: `/v1/images/generations`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: GenerateImageRequestToJSON(requestParameters['generateImageRequest']),
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => GenerateImageResponseFromJSON(jsonValue));
    }

    /**
     * Generate image from prompt
     */
    async generateImage(requestParameters: GenerateImageOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<GenerateImageResponse> {
        const response = await this.generateImageRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Generative Upscale
     * @deprecated
     */
    async generativeUpscaleRaw(requestParameters: GenerativeUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling generativeUpscale().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/generativeUpscale`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Generative Upscale
     * @deprecated
     */
    async generativeUpscale(requestParameters: GenerativeUpscaleRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.generativeUpscaleRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Generate image from image and prompt
     */
    async imageToImageRaw(requestParameters: ImageToImageRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GenerateImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling imageToImage().'
            );
        }

        if (requestParameters['prompt'] == null) {
            throw new runtime.RequiredError(
                'prompt',
                'Required parameter "prompt" was null or undefined when calling imageToImage().'
            );
        }

        if (requestParameters['strength'] == null) {
            throw new runtime.RequiredError(
                'strength',
                'Required parameter "strength" was null or undefined when calling imageToImage().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['blockNsfw'] != null) {
            formParams.append('block_nsfw', requestParameters['blockNsfw'] as any);
        }

        if (requestParameters['calculateFeatures'] != null) {
            formParams.append('calculate_features', requestParameters['calculateFeatures'] as any);
        }

        if (requestParameters['controls'] != null) {
            formParams.append('controls', new Blob([JSON.stringify(GenerateImageResponseToJSON(requestParameters['controls']))], { type: "application/json", }));
                    }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['model'] != null) {
            formParams.append('model', requestParameters['model'] as any);
        }

        if (requestParameters['n'] != null) {
            formParams.append('n', requestParameters['n'] as any);
        }

        if (requestParameters['negativePrompt'] != null) {
            formParams.append('negative_prompt', requestParameters['negativePrompt'] as any);
        }

        if (requestParameters['prompt'] != null) {
            formParams.append('prompt', requestParameters['prompt'] as any);
        }

        if (requestParameters['randomSeed'] != null) {
            formParams.append('random_seed', requestParameters['randomSeed'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        if (requestParameters['strength'] != null) {
            formParams.append('strength', requestParameters['strength'] as any);
        }

        if (requestParameters['style'] != null) {
            formParams.append('style', requestParameters['style'] as any);
        }

        if (requestParameters['styleId'] != null) {
            formParams.append('style_id', requestParameters['styleId'] as any);
        }

        if (requestParameters['substyle'] != null) {
            formParams.append('substyle', requestParameters['substyle'] as any);
        }

        if (requestParameters['textLayout'] != null) {
            formParams.append('text_layout', requestParameters['textLayout']!.join(runtime.COLLECTION_FORMATS["csv"]));
        }

        const response = await this.request({
            path: `/v1/images/imageToImage`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => GenerateImageResponseFromJSON(jsonValue));
    }

    /**
     * Generate image from image and prompt
     */
    async imageToImage(requestParameters: ImageToImageRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<GenerateImageResponse> {
        const response = await this.imageToImageRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Inpaint Image
     */
    async inpaintImageRaw(requestParameters: InpaintImageRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GenerateImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling inpaintImage().'
            );
        }

        if (requestParameters['prompt'] == null) {
            throw new runtime.RequiredError(
                'prompt',
                'Required parameter "prompt" was null or undefined when calling inpaintImage().'
            );
        }

        if (requestParameters['mask'] == null) {
            throw new runtime.RequiredError(
                'mask',
                'Required parameter "mask" was null or undefined when calling inpaintImage().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['blockNsfw'] != null) {
            formParams.append('block_nsfw', requestParameters['blockNsfw'] as any);
        }

        if (requestParameters['calculateFeatures'] != null) {
            formParams.append('calculate_features', requestParameters['calculateFeatures'] as any);
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['model'] != null) {
            formParams.append('model', requestParameters['model'] as any);
        }

        if (requestParameters['n'] != null) {
            formParams.append('n', requestParameters['n'] as any);
        }

        if (requestParameters['negativePrompt'] != null) {
            formParams.append('negative_prompt', requestParameters['negativePrompt'] as any);
        }

        if (requestParameters['prompt'] != null) {
            formParams.append('prompt', requestParameters['prompt'] as any);
        }

        if (requestParameters['randomSeed'] != null) {
            formParams.append('random_seed', requestParameters['randomSeed'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        if (requestParameters['style'] != null) {
            formParams.append('style', requestParameters['style'] as any);
        }

        if (requestParameters['styleId'] != null) {
            formParams.append('style_id', requestParameters['styleId'] as any);
        }

        if (requestParameters['substyle'] != null) {
            formParams.append('substyle', requestParameters['substyle'] as any);
        }

        if (requestParameters['textLayout'] != null) {
            formParams.append('text_layout', requestParameters['textLayout']!.join(runtime.COLLECTION_FORMATS["csv"]));
        }

        if (requestParameters['mask'] != null) {
            formParams.append('mask', requestParameters['mask'] as any);
        }

        const response = await this.request({
            path: `/v1/images/inpaint`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => GenerateImageResponseFromJSON(jsonValue));
    }

    /**
     * Inpaint Image
     */
    async inpaintImage(requestParameters: InpaintImageRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<GenerateImageResponse> {
        const response = await this.inpaintImageRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Remove background
     */
    async removeBackgroundRaw(requestParameters: RemoveBackgroundRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling removeBackground().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/removeBackground`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Remove background
     */
    async removeBackground(requestParameters: RemoveBackgroundRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.removeBackgroundRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Replace Background
     */
    async replaceBackgroundRaw(requestParameters: ReplaceBackgroundRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GenerateImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling replaceBackground().'
            );
        }

        if (requestParameters['prompt'] == null) {
            throw new runtime.RequiredError(
                'prompt',
                'Required parameter "prompt" was null or undefined when calling replaceBackground().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['blockNsfw'] != null) {
            formParams.append('block_nsfw', requestParameters['blockNsfw'] as any);
        }

        if (requestParameters['calculateFeatures'] != null) {
            formParams.append('calculate_features', requestParameters['calculateFeatures'] as any);
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['model'] != null) {
            formParams.append('model', requestParameters['model'] as any);
        }

        if (requestParameters['n'] != null) {
            formParams.append('n', requestParameters['n'] as any);
        }

        if (requestParameters['negativePrompt'] != null) {
            formParams.append('negative_prompt', requestParameters['negativePrompt'] as any);
        }

        if (requestParameters['prompt'] != null) {
            formParams.append('prompt', requestParameters['prompt'] as any);
        }

        if (requestParameters['randomSeed'] != null) {
            formParams.append('random_seed', requestParameters['randomSeed'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        if (requestParameters['style'] != null) {
            formParams.append('style', requestParameters['style'] as any);
        }

        if (requestParameters['styleId'] != null) {
            formParams.append('style_id', requestParameters['styleId'] as any);
        }

        if (requestParameters['substyle'] != null) {
            formParams.append('substyle', requestParameters['substyle'] as any);
        }

        if (requestParameters['textLayout'] != null) {
            formParams.append('text_layout', requestParameters['textLayout']!.join(runtime.COLLECTION_FORMATS["csv"]));
        }

        const response = await this.request({
            path: `/v1/images/replaceBackground`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => GenerateImageResponseFromJSON(jsonValue));
    }

    /**
     * Replace Background
     */
    async replaceBackground(requestParameters: ReplaceBackgroundRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<GenerateImageResponse> {
        const response = await this.replaceBackgroundRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Vectorize image
     */
    async vectorizeImageRaw(requestParameters: VectorizeImageRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<ProcessImageResponse>> {
        if (requestParameters['image'] == null) {
            throw new runtime.RequiredError(
                'image',
                'Required parameter "image" was null or undefined when calling vectorizeImage().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.accessToken) {
            const token = this.configuration.accessToken;
            const tokenString = await token("auth0", []);

            if (tokenString) {
                headerParameters["Authorization"] = `Bearer ${tokenString}`;
            }
        }
        const consumes: runtime.Consume[] = [
            { contentType: 'multipart/form-data' },
        ];
        // @ts-ignore: canConsumeForm may be unused
        const canConsumeForm = runtime.canConsumeForm(consumes);

        let formParams: { append(param: string, value: any): any };
        let useForm = false;
        // use FormData to transmit files using content-type "multipart/form-data"
        useForm = canConsumeForm;
        if (useForm) {
            formParams = new FormData();
        } else {
            formParams = new URLSearchParams();
        }

        if (requestParameters['expire'] != null) {
            formParams.append('expire', requestParameters['expire'] as any);
        }

        if (requestParameters['image'] != null) {
            formParams.append('image', requestParameters['image'] as any);
        }

        if (requestParameters['imageFormat'] != null) {
            formParams.append('image_format', requestParameters['imageFormat'] as any);
        }

        if (requestParameters['responseFormat'] != null) {
            formParams.append('response_format', requestParameters['responseFormat'] as any);
        }

        const response = await this.request({
            path: `/v1/images/vectorize`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: formParams,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => ProcessImageResponseFromJSON(jsonValue));
    }

    /**
     * Vectorize image
     */
    async vectorizeImage(requestParameters: VectorizeImageRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<ProcessImageResponse> {
        const response = await this.vectorizeImageRaw(requestParameters, initOverrides);
        return await response.value();
    }

}
