# Product Photo Pack Generator (`junyayamamotolab/10k-product-001`) Actor

Turn one product photo into a white-background hero image and three studio-ready ecommerce/social formats while preserving the original product foreground instead of generatively redrawing it.

- **URL**: https://apify.com/junyayamamotolab/10k-product-001.md
- **Developed by:** [junya yamamoto](https://apify.com/junyayamamotolab) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $490.00 / 1,000 listing packs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Create four ecommerce product photos from one image

Turn one product photo into a white-background hero image and three studio-ready ecommerce/social formats while preserving the original product foreground instead of generatively redrawing it.

The Actor accepts one source photo, isolates its foreground with Product Cutout, generates one text-only studio background, and composites the foreground locally into four fixed formats. The product image is not sent to the generative background model.

### What you get

| Output | Size | Storage |
| --- | ---: | --- |
| `white-hero` | 1200×1200 | `white-hero.png` |
| `studio-square` | 1080×1080 | `studio-square.png` |
| `studio-portrait` | 1080×1350 | `studio-portrait.png` |
| `studio-vertical` | 1080×1920 | `studio-vertical.png` |

### Best for

- Handmade products
- Jewelry and accessories
- Small ecommerce brands
- Packaged products
- Social media listing assets

### Input

| Field | Required | Description |
| --- | --- | --- |
| `imageUrl` | Yes | Public HTTPS URL for an image you own or have permission to process. |
| `productCategory` | Yes | Short generic category, such as `handbag`, `mug`, or `shoe`. |
| `backgroundStyle` | No | Background environment description; defaults to `clean premium studio`. |

One source image is processed per run. Batch processing is not part of this MVP.

### Source photo tips

For more reliable cutouts, use a rights-cleared image with the full product inside the frame, a simple or high-contrast background, no props touching or overlapping the product, and no strong overlapping shadows. Transparent parts and thin wires may require visual review. Complex source backgrounds can leave some contamination around the cutout.

### Product-preserving workflow

1. The source bytes are validated before processing.
2. Product Cutout isolates a foreground from the source image.
3. The product foreground is not sent to the generative background model.
4. A studio background is generated from text only.
5. The foreground is composited locally and deterministically into the four fixed sizes.

The cutout step can alter edge and alpha pixels. This tool does not promise exact pixel identity, a perfect cutout, universal product fidelity, marketplace compliance, zero hallucination, or legal compliance.

### Output and API

The default dataset contains one metadata-only row with the run status, four artifact names and storage keys, dimensions, content types, the product-lock statement, and the completed listing-pack billing event. The four PNG files are stored in the run's default key-value store under flat record keys. No image base64 or provider response body is written to the dataset.

### Pricing

One successfully completed listing pack costs **USD 0.49**, plus the Apify actor-start synthetic event according to the current pay-per-event configuration. The listing-pack event is charged only after all four files are stored successfully. Validation and failed runs do not charge that event.

Public Store runs require a **paid Apify plan** because each completed pack incurs third-party image-processing cost. Free-plan Store/API runs exit before BRIA initialization or submission and do not charge the `listing-pack` event. Owner runs started from the Actor's Development view remain available for private validation.

### Limitations

- Results require ordinary visual review, especially for thin, translucent, reflective, or overlapping products.
- The background prompt describes an environment only; it does not preserve every detail of a source background.
- Accepted remote image formats are JPEG, PNG, and WebP; public URLs must use HTTPS on the standard port.
- Remote downloads are bounded to 12 MiB and decoded images are bounded to 8192 pixels per dimension and 16 megapixels total.
- Redirects and URLs containing credentials are rejected. DNS answers are checked once, unsafe answers fail closed, and a selected safe destination is pinned while the original hostname remains used for TLS verification.
- The run makes at most two BRIA submission calls: one cutout and one text-only background generation.
- External providers process the image under their current terms and privacy policies; review those terms before commercial use.

### Privacy and rights

Only submit images you own or have permission to process. An external image processor is used. This repository does not verify or promise provider training, retention, or privacy behavior beyond the controls described above.

### FAQ

#### Does AI redraw my product?

The product foreground is isolated and then composited locally. It is not passed to the generative background step. Cutout edges can still change, so review the result.

#### Why did part of my original background remain?

Cutout quality depends on the source image. Strong shadows, overlapping props, low contrast, and complex backgrounds can make separation less complete.

#### Which input images work best?

Use a rights-cleared image with the entire product visible, good contrast, and space around the product. Avoid props or shadows that overlap the product.

#### Do failed runs charge the listing-pack event?

No. The listing-pack event is charged only after all four output files are stored successfully. Apify's actor-start synthetic event follows the configured pay-per-event settings.

#### Can Free-plan users run the full image pipeline?

No. Public Free-plan runs stop before third-party image processing and before the `listing-pack` charge. A paid Apify plan is required for the full Store workflow.

#### Can I generate multiple products in one run?

No. The MVP processes one source image per run.

# Actor input Schema

## `imageUrl` (type: `string`):

Public HTTPS URL to an image you have the right to use.

## `productCategory` (type: `string`):

Short generic category, e.g. handbag, mug, shoe.

## `backgroundStyle` (type: `string`):

Describe only the background environment; the product itself is never sent to the background generator.

## Actor input object example

```json
{
  "imageUrl": "https://media.pichicom.com/10k/product-001/e2e/2026/09/source-earrings.jpg",
  "productCategory": "handmade blue floral earrings",
  "backgroundStyle": "clean premium studio"
}
```

# Actor output Schema

## `metadata` (type: `string`):

Metadata for the completed pack. The dataset contains no image bytes or provider internals.

## `whiteHero` (type: `string`):

The 1200x1200 white-background hero PNG.

## `studioSquare` (type: `string`):

The 1080x1080 studio square PNG.

## `studioPortrait` (type: `string`):

The 1080x1350 studio portrait PNG.

## `studioVertical` (type: `string`):

The 1080x1920 studio vertical PNG.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "imageUrl": "https://media.pichicom.com/10k/product-001/e2e/2026/09/source-earrings.jpg",
    "productCategory": "handmade blue floral earrings",
    "backgroundStyle": "clean premium studio"
};

// Run the Actor and wait for it to finish
const run = await client.actor("junyayamamotolab/10k-product-001").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "imageUrl": "https://media.pichicom.com/10k/product-001/e2e/2026/09/source-earrings.jpg",
    "productCategory": "handmade blue floral earrings",
    "backgroundStyle": "clean premium studio",
}

# Run the Actor and wait for it to finish
run = client.actor("junyayamamotolab/10k-product-001").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "imageUrl": "https://media.pichicom.com/10k/product-001/e2e/2026/09/source-earrings.jpg",
  "productCategory": "handmade blue floral earrings",
  "backgroundStyle": "clean premium studio"
}' |
apify call junyayamamotolab/10k-product-001 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,junyayamamotolab/10k-product-001"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/B1yyDuBprO781M0GW/builds/7BeP0bU0kb8KGSade/openapi.json
