pixelcut/product-photo

Pixelcut's Background Remover produces fast, high-quality cutouts built for e-commerce product imagery
Inference
Commercial use
Partner

About

This is the path the FAL queue (and therefore marketplace callers) hit, so it reports billable units.

1. Calling the API#

Install the client#

The client provides a convenient way to interact with the model API.

npm install --save @fal-ai/client

Setup your API Key#

Set FAL_KEY as an environment variable in your runtime.

export FAL_KEY="YOUR_API_KEY"

Submit a request#

The client API handles the API submit protocol. It will handle the request status updates and return the result when the request is completed.

import { fal } from "@fal-ai/client";

const result = await fal.subscribe("pixelcut/product-photo", {
  input: {
    image_url: "https://cdn3.pixelcut.app/fal/product-photos/input.png"
  },
  logs: true,
  onQueueUpdate: (update) => {
    if (update.status === "IN_PROGRESS") {
      update.logs.map((log) => log.message).forEach(console.log);
    }
  },
});
console.log(result.data);
console.log(result.requestId);

2. Authentication#

The API uses an API Key for authentication. It is recommended you set the FAL_KEY environment variable in your runtime when possible.

API Key#

In case your app is running in an environment where you cannot set environment variables, you can set the API Key manually as a client configuration.
import { fal } from "@fal-ai/client";

fal.config({
  credentials: "YOUR_FAL_KEY"
});

3. Queue#

Submit a request#

The client API provides a convenient way to submit requests to the model.

import { fal } from "@fal-ai/client";

const { request_id } = await fal.queue.submit("pixelcut/product-photo", {
  input: {
    image_url: "https://cdn3.pixelcut.app/fal/product-photos/input.png"
  },
  webhookUrl: "https://optional.webhook.url/for/results",
});

Fetch request status#

You can fetch the status of a request to check if it is completed or still in progress.

import { fal } from "@fal-ai/client";

const status = await fal.queue.status("pixelcut/product-photo", {
  requestId: "764cabcf-b745-4b3e-ae38-1200304cf45b",
  logs: true,
});

Get the result#

Once the request is completed, you can fetch the result. See the Output Schema for the expected result format.

import { fal } from "@fal-ai/client";

const result = await fal.queue.result("pixelcut/product-photo", {
  requestId: "764cabcf-b745-4b3e-ae38-1200304cf45b"
});
console.log(result.data);
console.log(result.requestId);

4. Files#

Some attributes in the API accept file URLs as input. Whenever that's the case you can pass your own URL or a Base64 data URI.

Data URI (base64)#

You can pass a Base64 data URI as a file input. The API will handle the file decoding for you. Keep in mind that for large files, this alternative although convenient can impact the request performance.

Hosted files (URL)#

You can also pass your own URLs as long as they are publicly accessible. Be aware that some hosts might block cross-site requests, rate-limit, or consider the request as a bot.

Uploading files#

We provide a convenient file storage that allows you to upload files and use them in your requests. You can upload files using the client API and use the returned URL in your requests.

import { fal } from "@fal-ai/client";

const file = new File(["Hello, World!"], "hello.txt", { type: "text/plain" });
const url = await fal.storage.upload(file);

Read more about file handling in our file upload guide.

5. Schema#

Input#

image_url string* required

URL of the product image to be processed.

image_size ImageSize | Enum

Output canvas size. A preset (square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9) or a custom {width, height}. Defaults to square_hd (1024x1024). Default value: square_hd

Possible enum values: square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9

Note: For custom image sizes, you can pass the width and height as an object:

"image_size": {
  "width": 1280,
  "height": 720
}
background Background

Output background: solid color (default white), transparent, or an image.

margin Margin

Canvas margins around the product: all for every side plus optional per-side overrides. Defaults to 20% on all sides.

shadow Shadow

Shadow: choose a type ('Generative'/'Drop'; unset = no shadow) and set its params.

watermark Watermark

Optional logo/watermark image overlaid on top of the output. Off by default; omit for no watermark.

output_format Enum

The format of the resultant image (PNG or JPEG). When not set, matches the input format. A transparent background is always PNG.

Possible enum values: png, jpeg

sync_mode boolean

When true, return the result as a data URL instead of uploading to storage. Default value: true

{
  "image_url": "https://cdn3.pixelcut.app/fal/product-photos/input.png",
  "image_size": "square_hd",
  "background": {
    "image_fit": "Cover",
    "mode": "Color",
    "color": {
      "g": 255,
      "r": 255,
      "b": 255
    }
  },
  "margin": {
    "all": "20%"
  },
  "shadow": {
    "type": "Generative"
  },
  "sync_mode": true
}

Output#

image Image

Catalog-ready product photo.

{
  "image": {
    "url": "https://cdn3.pixelcut.app/fal/product-photos/output.png"
  }
}

Other types#

ShadowLightSource#

size float

Apparent emitter size/softness. Higher = softer penumbra. Leave unset to auto-estimate the light from the image.

Shadow#

type Enum

Shadow style: 'Generative' (generative AI shadow) or 'Drop' (deterministic drop shadow). Leave unset for no shadow.

Possible enum values: Generative, Drop

generative GenerativeShadow

Generative AI-shadow params (used when type is 'Generative').

Drop-shadow params (used when type is 'Drop').

Margin#

all string

Margin applied to all sides. '%' (0–49%) of the canvas dimension, or 'px' (>=0px). Default value: "20%"

left string

Left-side override of all. '%' (0–49%) or 'px' (>=0px).

right string

Right-side override of all. '%' (0–49%) or 'px' (>=0px).

top string

Top-side override of all. '%' (0–49%) or 'px' (>=0px).

bottom string

Bottom-side override of all. '%' (0–49%) or 'px' (>=0px).

ImageSize#

width integer

The width of the generated image. Default value: 512

height integer

The height of the generated image. Default value: 512

Watermark#

image_url string

Logo/watermark image URL. If empty, no watermark is added.

remove_background boolean

Remove the watermark image's own background (via background removal) before overlaying it.

position PositionEnum

Where to place the watermark. Default value: "bottom_right"

Possible enum values: top_left, top_right, bottom_left, bottom_right, center

scale float

Watermark width as a fraction of the canvas width. Default value: 0.1

opacity float

Watermark opacity (0–1). Default value: 1

margin string

Inset from the edge. '%' (0–49%) of the canvas, or 'px'. Default value: "3%"

GenerativeShadow#

opacity float

Final composited shadow opacity (0–1). Default value: 0.2

light_source ShadowLightSource

Virtual light used to synthesize the shadow. When omitted, the light direction is estimated from the image.

Background#

mode ModeEnum

'Color' fills with color (white by default); 'Transparent' leaves it transparent (always PNG); 'Image' composites onto image_url. Default value: "Color"

Possible enum values: Transparent, Color, Image

color RGBColor

Solid background color (R/G/B, 0–255). Applies when mode is 'Color'. Defaults to white.

image_url string

Background image URL. Required when mode is 'Image'.

image_fit ImageFitEnum

How the background image fills the canvas: 'Cover' fills and crops, 'Contain' fits and letterboxes onto color, 'Stretch' distorts to fit. Default value: "Cover"

Possible enum values: Cover, Contain, Stretch

DropShadow#

color RGBColor

Shadow color (R/G/B). Defaults to black.

horizontal float

Horizontal shadow offset, as a percentage of the canvas width. Positive moves the shadow right, negative moves it left. Clamped to ±10%. Default value: 5

vertical float

Vertical shadow offset, as a percentage of the canvas height. Positive moves the shadow down, negative moves it up. Clamped to ±10%. Default value: 0.8

blur float

Shadow blur radius, as a percentage of the smaller canvas dimension. 0 is a hard-edged shadow; larger values are softer. Clamped to 5%. Default value: 1.2

opacity float

Shadow opacity (0–1). Default value: 0.25

ShadowLightSourcePosition#

x float

Horizontal light position, normalized to image center (-1 to 1). Leave unset to auto-estimate the light from the image.

y float

Vertical light position, normalized to image center (-1 to 1). Leave unset to auto-estimate the light from the image.

z float

Height above subject (0 to 2). Leave unset to auto-estimate the light from the image.

Image#

url string* required

The URL where the file can be downloaded from.

content_type string

The mime type of the file.

file_name string

The name of the file. It will be auto-generated if not provided.

file_size integer

The size of the file in bytes.

width integer

The width of the image in pixels.

height integer

The height of the image in pixels.

RGBColor#

r integer* required
g integer* required
b integer* required