pixelcut/product-photo
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/clientMigrate to @fal-ai/client
The @fal-ai/serverless-client package has been deprecated in favor of @fal-ai/client. Please check the migration guide for more information.
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#
import { fal } from "@fal-ai/client";
fal.config({
credentials: "YOUR_FAL_KEY"
});Protect your API Key
When running code on the client-side (e.g. in a browser, mobile app or GUI applications), make sure to not expose your FAL_KEY. Instead, use a server-side proxy to make requests to the API. For more information, check out our server-side integration guide.
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);Auto uploads
The client will auto-upload the file for you if you pass a binary object (e.g. File, Data).
Read more about file handling in our file upload guide.
5. Schema#
Input#
image_url string* requiredURL of the product image to be processed.
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
}Output background: solid color (default white), transparent, or an image.
Canvas margins around the product: all for every side plus optional per-side overrides. Defaults to 20% on all sides.
Shadow: choose a type ('Generative'/'Drop'; unset = no shadow) and set its params.
Optional logo/watermark image overlaid on top of the output. Off by default; omit for no watermark.
output_format EnumThe 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 booleanWhen 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#
Catalog-ready product photo.
{
"image": {
"url": "https://cdn3.pixelcut.app/fal/product-photos/output.png"
}
}Other types#
ShadowLightSource#
size floatApparent emitter size/softness. Higher = softer penumbra. Leave unset to auto-estimate the light from the image.
Shadow#
type EnumShadow style: 'Generative' (generative AI shadow) or 'Drop' (deterministic drop shadow). Leave unset for no shadow.
Possible enum values: Generative, Drop
Generative AI-shadow params (used when type is 'Generative').
Drop-shadow params (used when type is 'Drop').
Margin#
all stringMargin applied to all sides. '%' (0–49%) of the canvas dimension, or 'px' (>=0px). Default value: "20%"
left stringLeft-side override of all. '%' (0–49%) or 'px' (>=0px).
right stringRight-side override of all. '%' (0–49%) or 'px' (>=0px).
top stringTop-side override of all. '%' (0–49%) or 'px' (>=0px).
bottom stringBottom-side override of all. '%' (0–49%) or 'px' (>=0px).
ImageSize#
width integerThe width of the generated image. Default value: 512
height integerThe height of the generated image. Default value: 512
Watermark#
image_url stringLogo/watermark image URL. If empty, no watermark is added.
remove_background booleanRemove the watermark image's own background (via background removal) before overlaying it.
position PositionEnumWhere to place the watermark. Default value: "bottom_right"
Possible enum values: top_left, top_right, bottom_left, bottom_right, center
scale floatWatermark width as a fraction of the canvas width. Default value: 0.1
opacity floatWatermark opacity (0–1). Default value: 1
margin stringInset from the edge. '%' (0–49%) of the canvas, or 'px'. Default value: "3%"
GenerativeShadow#
opacity floatFinal composited shadow opacity (0–1). Default value: 0.2
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
Solid background color (R/G/B, 0–255). Applies when mode is 'Color'. Defaults to white.
image_url stringBackground image URL. Required when mode is 'Image'.
image_fit ImageFitEnumHow 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#
Shadow color (R/G/B). Defaults to black.
horizontal floatHorizontal 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 floatVertical 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 floatShadow 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 floatShadow opacity (0–1). Default value: 0.25
ShadowLightSourcePosition#
x floatHorizontal light position, normalized to image center (-1 to 1). Leave unset to auto-estimate the light from the image.
y floatVertical light position, normalized to image center (-1 to 1). Leave unset to auto-estimate the light from the image.
z floatHeight above subject (0 to 2). Leave unset to auto-estimate the light from the image.
Image#
url string* requiredThe URL where the file can be downloaded from.
content_type stringThe mime type of the file.
file_name stringThe name of the file. It will be auto-generated if not provided.
file_size integerThe size of the file in bytes.
width integerThe width of the image in pixels.
height integerThe height of the image in pixels.