# 360 Image Widget Generator (`parseforge/360-image-widget-generator`) Actor

AI-powered 360-degree product view generator. Upload product images and get 8 different angle views at hip level. Includes an interactive HTML widget that responds to mouse movement for smooth 360-degree rotation effect. Perfect for e-commerce, product showcases, and interactive product displays.

- **URL**: https://apify.com/parseforge/360-image-widget-generator.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Developer tools, Other
- **Stats:** 71 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🌀 360 Image Widget Generator

> 🚀 **Generate 360-degree product views in minutes.** Upload product photos, get 4 or 8 angle renders plus an interactive HTML widget. No 3D scanner, no studio.

> 🕒 **Last updated:** 2026-05-09 · **📐 4 or 8 angles** · **🖱️ Interactive HTML widget** · **🚫 No 3D scanner needed**


<table><tr>
<td style="border-left:4px solid #0F766E;padding:12px 16px;font-weight:600">Pull structured records from 360 Image Widget Generator — clean fields ready as CSV, JSON, JSONL, Excel, or XML for downstream pipelines.</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

````

parseforge/360-image-widget-generator on Apify. Call: ApifyClient("TOKEN").actor("parseforge/360-image-widget-generator").call(run\_input={...}), then client.dataset(run\["defaultDatasetId"]).list\_items().items for results. Key inputs: imageUrls (array, default \["https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ), imageCount (string, default "8"), distance (string, default "close"), temperature (number, default 0.8), customPrompt (string, default "replace background with white room, place toy in a brown wo). Full actor spec: fetch build via GET https://api.apify.com/v2/acts/parseforge~360-image-widget-generator (Bearer TOKEN). Get token: https://console.apify.com/account/integrations

````

Generate 360-degree interactive product views from regular product photos. Upload one or more images of the same object, and the actor returns 4 or 8 angle renders plus a ready-to-embed HTML widget that responds to mouse movement for smooth 360-degree rotation. Built for e-commerce product pages, marketplace listings, product showcases, and interactive media without the cost of 3D scanning or studio rigs.

The output is a structured record per run with the generated angle URLs, an interactive HTML widget URL, and a usage-example page. Drop the widget into your storefront with an iframe or by hosting the HTML.

| 👥 Built for | 🎯 Primary use cases |
|---|---|
| E-commerce stores | Add 360 views to product pages without 3D scanning |
| Marketplace sellers | Stand out with interactive product showcases |
| Brand and DTC teams | Build premium product detail experiences |
| Marketing and content | Generate product spin-views for ads and social |
| Product photographers | Augment shoots with synthetic angles |
| Indie devs | Add 360 views to side projects without rendering rigs |

---

### 📋 What the 360 Image Widget Generator does

- 📷 **AI-generated angles.** From your reference photos, generate 4 or 8 angle renders around the object.
- 🎯 **Configurable smoothness.** 4 angles for quick previews, 8 angles for smooth rotation.
- 📏 **Camera distance control.** Close, medium, or far framing.
- 🌡️ **Generation temperature.** Tune how creative vs. consistent the renders are.
- ✏️ **Custom prompt.** Optional extra instructions (background, lighting, styling).
- 🖱️ **Interactive widget.** A ready-made HTML widget that responds to mouse position for the 360 rotation effect.

The actor accepts product images, generates renders for each angle, builds the HTML widget, and pushes a single record per run with all the URLs. Reference image consistency is maintained across all generated angles.

> 💡 **Why it matters:** 360-degree product views improve conversion and reduce returns but cost thousands per product to produce with traditional 3D scanning rigs. AI-generated views from existing photos cut that cost to cents per product.

---

### 🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing image upload, a live run, and how to embed the widget into a Shopify product page.

---

### ⚙️ Input

| Field | Type | Name | Description |
|---|---|---|---|
| imageUrls | array | Product Images | Required. URLs to one or more product images of the same object from different angles. |
| imageCount | enum | Number of Views | `4` (every 90 degrees) or `8` (every 45 degrees, smoother). |
| distance | enum | Camera Distance | close, medium, far. |
| temperature | number | Generation Temperature | Float `0.1` - `1.0`. Lower = more consistent, higher = more creative. |
| customPrompt | string | Additional Instructions | Optional extra instructions for background, lighting, or styling. |

Example 1. Generate 8 smooth angle views of a sneaker at medium distance.

```json
{
  "imageUrls": [
    "https://example.com/sneaker-front.jpg",
    "https://example.com/sneaker-side.jpg",
    "https://example.com/sneaker-back.jpg"
  ],
  "imageCount": "8",
  "distance": "medium",
  "temperature": 0.5
}
````

Example 2. Generate 4 close-up angle views with custom styling.

```json
{
  "imageUrls": [
    "https://example.com/jewelry-1.jpg",
    "https://example.com/jewelry-2.jpg"
  ],
  "imageCount": "4",
  "distance": "close",
  "temperature": 0.4,
  "customPrompt": "Keep background pure white, emphasize gold highlights, soft studio lighting"
}
```

> ⚠️ **Good to Know:** for best results, supply 3 reference images showing different sides of the object. Background consistency improves with lower temperature values (0.4 - 0.6 recommended).

***

### 📊 Output

The dataset returns a single structured record per run with the generated angle image URLs, an interactive HTML widget, and a usage example page. Consume the dataset as JSON, CSV, Excel, XML, or RSS via the Apify console or API.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🖼️ widgetUsageExamplePage | string (url) | `https://api.apify.com/v2/key-value-stores/.../example.html` |
| 🖱️ interactiveWidget | string (url) | `https://api.apify.com/v2/key-value-stores/.../widget.html` |
| 🖼️ angle0 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-0.jpg` |
| 🖼️ angle45 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-45.jpg` |
| 🖼️ angle90 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-90.jpg` |
| 🖼️ angle135 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-135.jpg` |
| 🖼️ angle180 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-180.jpg` |
| 🖼️ angle225 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-225.jpg` |
| 🖼️ angle270 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-270.jpg` |
| 🖼️ angle315 | string (url) | `https://api.apify.com/v2/key-value-stores/.../angle-315.jpg` |
| ❗ error | string or null | null |
| 📅 timestamp | ISO datetime | `2026-05-09T12:00:00.000Z` |

#### 📦 Sample records

##### 1. Typical record (8 angles, smooth rotation)

```json
{
  "widgetUsageExamplePage": "https://api.apify.com/v2/key-value-stores/abc/records/example.html",
  "interactiveWidget": "https://api.apify.com/v2/key-value-stores/abc/records/widget.html",
  "angle0": "https://api.apify.com/v2/key-value-stores/abc/records/angle-0.jpg",
  "angle45": "https://api.apify.com/v2/key-value-stores/abc/records/angle-45.jpg",
  "angle90": "https://api.apify.com/v2/key-value-stores/abc/records/angle-90.jpg",
  "angle135": "https://api.apify.com/v2/key-value-stores/abc/records/angle-135.jpg",
  "angle180": "https://api.apify.com/v2/key-value-stores/abc/records/angle-180.jpg",
  "angle225": "https://api.apify.com/v2/key-value-stores/abc/records/angle-225.jpg",
  "angle270": "https://api.apify.com/v2/key-value-stores/abc/records/angle-270.jpg",
  "angle315": "https://api.apify.com/v2/key-value-stores/abc/records/angle-315.jpg",
  "error": null,
  "timestamp": "2026-05-09T12:00:00.000Z"
}
```

##### 2. 4-angle quick preview

```json
{
  "widgetUsageExamplePage": "https://api.apify.com/v2/key-value-stores/def/records/example.html",
  "interactiveWidget": "https://api.apify.com/v2/key-value-stores/def/records/widget.html",
  "angle0": "https://api.apify.com/v2/key-value-stores/def/records/angle-0.jpg",
  "angle90": "https://api.apify.com/v2/key-value-stores/def/records/angle-90.jpg",
  "angle180": "https://api.apify.com/v2/key-value-stores/def/records/angle-180.jpg",
  "angle270": "https://api.apify.com/v2/key-value-stores/def/records/angle-270.jpg",
  "error": null,
  "timestamp": "2026-05-09T12:00:00.000Z"
}
```

##### 3. Error record (input image unreadable)

```json
{
  "widgetUsageExamplePage": null,
  "interactiveWidget": null,
  "error": "Could not download input image: HTTP 404",
  "timestamp": "2026-05-09T12:00:00.000Z"
}
```

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🎯 | **Built for the job.** Single-purpose 360-view generation with sensible defaults. |
| 🖱️ | **Ready-to-embed widget.** Returns interactive HTML that you drop into any storefront. |
| ⚙️ | **Configurable.** Tune angles, distance, temperature, and custom prompts. |
| 🔁 | **Live processing.** Every run runs end to end with no caching of input images. |
| 🌐 | **No infra to manage.** Apify handles compute, scaling, scheduling, and storage. |
| 🛡️ | **Reliable.** Error handling per run, no partial outputs. |
| 🚫 | **No code required.** Configure in the UI, run from CLI, schedule via cron, or call from any language with the Apify SDK. |

> 📊 Production-grade 360 product views without owning a 3D scanner or studio rig.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Quality | Setup |
|---|---|---|---|---|---|
| **⭐ 360 Image Widget Generator** *(this Actor)* | $5 free credit, then pay-per-use | Any product photo | **Live per run** | High, AI-generated | ⚡ 2 min |
| Traditional 3D scanning | Hundreds to thousands per product | Per scan | Per session | Highest | 🐢 Days |
| Studio photo rig | Studio time + post | Per shoot | Per session | High | 🐢 Hours |
| 360 video software | $$ monthly | Per upload | Per session | Variable | ⏳ Hours |

Pick this Actor when you want fast, scalable 360 views without owning the infrastructure.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the 360 Image Widget Generator page on the Apify Store.
3. 🎯 **Upload images.** Drop 1-3 product images and pick angle count and distance.
4. 🚀 **Run it.** Click **Start** and let the Actor generate the views and widget.
5. 📥 **Embed.** Grab the interactiveWidget URL from the dataset and embed it in your storefront.

> ⏱️ Total time from signup to first widget: **5-10 minutes** depending on angle count.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 📊 E-commerce and retail

- Add 360 product views to product pages
- Reduce returns by giving shoppers more confidence
- Stand out vs. competitors with static images
- Build premium product detail experiences

</td>
<td width="50%" valign="top">

#### 🏢 Marketplace sellers

- Differentiate on Amazon, Etsy, Shopify
- Spin up 360 views without studio time
- Refresh listings with interactive media
- Power A/B tests with 360 vs static media

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 🎯 Marketing and content

- Generate spin-views for paid social ads
- Build product launch microsites
- Create swipe-style content for IG and TikTok
- Power product gifs from generated angles

</td>
<td width="50%" valign="top">

#### 🛠️ Engineering and product

- Add 360 views to internal product catalogs
- Wire generation into your CMS via webhooks
- Replace bespoke 3D pipelines for simple SKUs
- Skip the rendering and rigging maintenance entirely

</td>
</tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating 360 Image Widget Generator

This Actor exposes a REST endpoint, so you can drive it from any language or workflow tool.

- **Node.js** - call it via the [Apify JS SDK](https://docs.apify.com/sdk/js).
- **Python** - call it via the [Apify Python SDK](https://docs.apify.com/sdk/python).
- **REST** - hit it directly through the [Apify v2 API](https://docs.apify.com/api/v2).

**Schedules.** Use Apify Scheduler to batch-generate 360 views for new product uploads. Combine with webhooks to trigger downstream workflows the moment a widget is ready.

***

### ❓ Frequently Asked Questions

<details>
<summary><b>💳 Do I need a paid Apify plan to run this actor?</b></summary>

No. You can start right now on the free Apify plan, which includes **$5 in monthly credit**. That is enough to run the actor several times and explore the output. Paid plans unlock higher item caps, more concurrent runs, and larger datasets. [Create a free Apify account here](https://console.apify.com/sign-up?fpr=vmoqkp).

</details>

<details>
<summary><b>🚨 What happens if my run fails or returns no results?</b></summary>

Failed runs are not charged. If your input image is unreachable or the AI service hits an error, the actor records the error and exits gracefully. Re-run with a working image URL or open our [contact form](https://tally.so/r/BzdKgA).

</details>

<details>
<summary><b>📏 How many input images can I upload?</b></summary>

Any number, but 3 is the sweet spot. The AI uses all input images as references for every generated angle. More references = more consistent output across views.

</details>

<details>
<summary><b>🌡️ What temperature should I use?</b></summary>

`0.4` to `0.6` is the recommended range for product views. Lower = more consistent backgrounds, higher = more creative variation.

</details>

<details>
<summary><b>🎯 Which imageCount should I pick?</b></summary>

Use `8` for smooth rotation in product pages. Use `4` for quick previews or when you want fewer images and faster runs.

</details>

<details>
<summary><b>🧑‍💻 Can I call this actor from my own code?</b></summary>

Yes. Apify exposes every actor as a REST endpoint and ships first-class SDKs for [Node.js](https://docs.apify.com/sdk/js) and [Python](https://docs.apify.com/sdk/python). You can start a run, read the dataset, and handle webhooks from your own app in a few lines.

</details>

<details>
<summary><b>📤 How do I export the data?</b></summary>

Every Apify dataset can be downloaded in one click as CSV, JSON, JSONL, Excel, HTML, XML, or RSS. You can also pull results programmatically via the [Apify API](https://docs.apify.com/api/v2) or stream into BigQuery, S3, and other destinations through built-in integrations.

</details>

<details>
<summary><b>📅 Can I schedule the actor to run automatically?</b></summary>

Yes. Use the Apify scheduler to run the actor on any cadence. Trigger from a webhook to generate 360 views as soon as new products are uploaded to your CMS.

</details>

<details>
<summary><b>🏪 Can I use the data commercially?</b></summary>

Yes. The generated images and widget are yours to use in your own product pages, marketing, and ads, subject to ownership of the input photos.

</details>

<details>
<summary><b>💼 Which plan should I pick for production use?</b></summary>

Apify's Starter and Scale plans are designed for production workloads. Pick the plan that matches your generation volume.

</details>

<details>
<summary><b>🛠️ Can you add more angles or video output?</b></summary>

Open the [contact form](https://tally.so/r/BzdKgA) and tell us about your use case. We add features regularly when there is a clear use case behind the request.

</details>

<details>
<summary><b>⚖️ Is it legal to use this Actor?</b></summary>

Yes, provided you have rights to the input images. You are responsible for compliance with copyright, IP, and licensing laws applicable to the source photos.

***

</details>

### 🔌 Integrate with any app

360 Image Widget Generator connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get run notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe results into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a widget completes.

***

### 🔗 Recommended Actors

- [**🖼️ Vintage Photo Restorer**](https://apify.com/parseforge/vintage-photo-restorer) - Restore old photos to high quality
- [**🍽️ Restaurant Photo Enhancer**](https://apify.com/parseforge/restaurant-photo-enhancer) - Enhance restaurant photos for menus
- [**👤 AI Face Blurring**](https://apify.com/parseforge/ai-face-blurring) - Auto-blur faces in images
- [**🖼️ Auto Video Thumbnail Generator**](https://apify.com/parseforge/auto-video-thumbnail-generator) - Generate thumbnails from video uploads
- [**📄 PDF to JSON Parser**](https://apify.com/parseforge/pdf-to-json-parser) - Convert PDFs into structured JSON

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new actor, propose a custom project, or report an issue.

***

> ⚠️ **Disclaimer.** This Actor is an independent tool. The actor processes only images you supply by URL and is intended for legitimate product-content workflows. Users are responsible for ensuring they hold the rights to the source photos and for compliance with copyright, IP, and licensing laws in their jurisdiction.

# Actor input Schema

## `imageUrls` (type: `array`):

Upload one or more images of the SAME object from different angles. This helps the AI understand the complete 3D structure, features, colors, and details of your object.

📸 How it affects output:
• All input images are used as reference for every generated view to maintain consistency
• Images are automatically optimized before processing
• Works best with 3 input pictures showing different sides of your object

💡 Tip: Upload 3 images showing different sides of your object (e.g., front, side, back) for best results.

Supported formats: JPG, PNG, WebP

## `imageCount` (type: `string`):

Choose how many angle views to generate around your object. This determines the smoothness of the 360° rotation in your widget.

📸 How it affects output:
• More views = Smoother rotation experience = More processing time
• Fewer views = Faster generation = Less smooth rotation

✅ 4 Images (every 90°)
Generates: Front (0°), Right (90°), Back (180°), Left (270°)
Best for: Quick previews, simple objects
Processing time: ~2-4 minutes

✅ 8 Images (every 45°)
Generates: Front, Front-Right, Right, Back-Right, Back, Back-Left, Left, Front-Left
Best for: Professional product showcases, smooth rotation
Processing time: ~4-8 minutes

💡 Recommended: 8 images for the best balance of quality and smoothness.

## `distance` (type: `string`):

Control how close or far the camera appears from your object in all generated views. This affects the framing and how much background is visible.

📸 How it affects output:
• Close: Object fills more of the frame, less background visible, great for detail shots
• Medium: Balanced view, object and background both visible, recommended for most products
• Far: Object appears smaller, more background visible, shows context and environment

✅ Close
Effect: Camera is very close to the object
Best for: Detail-focused products, jewelry, small items
Object size: Large in frame
Background: Minimal

✅ Medium (Recommended)
Effect: Camera at comfortable viewing distance
Best for: Most products, general use cases
Object size: Balanced
Background: Moderate

✅ Far
Effect: Camera is far from the object
Best for: Showing context, environment, large items in setting
Object size: Smaller in frame
Background: Extensive

💡 All views maintain the same distance - only the angle changes around the object.

## `temperature` (type: `number`):

Control how strictly the AI follows instructions versus being creative. This affects consistency and adherence to your requirements.

📸 How it affects output:
• Lower temperature (0.1-0.4): More consistent, strictly follows instructions, better background consistency, less variation
• Medium temperature (0.5-0.7): Balanced approach, good consistency with some flexibility
• Higher temperature (0.8-1.0): More creative, may vary more, less strict adherence

⚠️ Too Low (below 0.3):
• May be too rigid and repetitive
• Could produce very similar images across angles
• Might miss some creative details
• Best for: Maximum consistency when background must be identical

✅ Recommended (0.4-0.6):
• Good balance of consistency and quality
• Follows instructions well while maintaining natural appearance
• Best for: Most use cases, professional product showcases

⚠️ Too High (above 0.7):
• May introduce unwanted variations
• Background consistency might suffer
• Could deviate from angle requirements
• Best for: Creative variations when strict consistency isn't critical

💡 Default: 0.5 provides the best balance for most products.

## `customPrompt` (type: `string`):

Add specific instructions to customize how your 360° views are generated. These instructions are combined with the standard requirements.

📸 How it affects output:
• Your instructions guide the AI's generation style and focus
• Use for specific styling, background preferences, or special requirements
• Leave empty to use default professional settings

💡 Example instructions:
• "Keep the background minimal and clean"
• "Emphasize product details and textures"
• "Maintain professional studio lighting"
• "Show the object in a natural environment"
• "Keep colors vibrant and saturated"
• "Use soft, diffused lighting"

⚠️ Note: Instructions should complement, not contradict, the standard requirements (like maintaining background consistency).

## Actor input object example

```json
{
  "imageUrls": [
    "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074453.jpg",
    "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074519.jpg"
  ],
  "imageCount": "8",
  "distance": "close",
  "temperature": 0.8,
  "customPrompt": "replace background with white room, place toy in a brown wood circular table"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "imageUrls": [
        "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074453.jpg",
        "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074519.jpg"
    ],
    "imageCount": "8",
    "distance": "close",
    "temperature": 0.8,
    "customPrompt": "replace background with white room, place toy in a brown wood circular table"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/360-image-widget-generator").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 = {
    "imageUrls": [
        "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074453.jpg",
        "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074519.jpg",
    ],
    "imageCount": "8",
    "distance": "close",
    "temperature": 0.8,
    "customPrompt": "replace background with white room, place toy in a brown wood circular table",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/360-image-widget-generator").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "imageUrls": [
    "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074453.jpg",
    "https://api.apify.com/v2/key-value-stores/S8l2sknfAAra9YPZ7/records/IMG_20240809_074519.jpg"
  ],
  "imageCount": "8",
  "distance": "close",
  "temperature": 0.8,
  "customPrompt": "replace background with white room, place toy in a brown wood circular table"
}' |
apify call parseforge/360-image-widget-generator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/360-image-widget-generator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "360 Image Widget Generator",
        "description": "AI-powered 360-degree product view generator. Upload product images and get 8 different angle views at hip level. Includes an interactive HTML widget that responds to mouse movement for smooth 360-degree rotation effect. Perfect for e-commerce, product showcases, and interactive product displays.",
        "version": "1.0",
        "x-build-id": "gd3KUYXycIvwKutvo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~360-image-widget-generator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-360-image-widget-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~360-image-widget-generator/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-360-image-widget-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~360-image-widget-generator/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-360-image-widget-generator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "imageUrls"
                ],
                "properties": {
                    "imageUrls": {
                        "title": "Product Images (For better results, use the same object and background in all images)",
                        "type": "array",
                        "description": "Upload one or more images of the SAME object from different angles. This helps the AI understand the complete 3D structure, features, colors, and details of your object.\n\n📸 How it affects output:\n• All input images are used as reference for every generated view to maintain consistency\n• Images are automatically optimized before processing\n• Works best with 3 input pictures showing different sides of your object\n\n💡 Tip: Upload 3 images showing different sides of your object (e.g., front, side, back) for best results.\n\nSupported formats: JPG, PNG, WebP"
                    },
                    "imageCount": {
                        "title": "Number of Views to Generate",
                        "enum": [
                            "4",
                            "8"
                        ],
                        "type": "string",
                        "description": "Choose how many angle views to generate around your object. This determines the smoothness of the 360° rotation in your widget.\n\n📸 How it affects output:\n• More views = Smoother rotation experience = More processing time\n• Fewer views = Faster generation = Less smooth rotation\n\n✅ 4 Images (every 90°)\nGenerates: Front (0°), Right (90°), Back (180°), Left (270°)\nBest for: Quick previews, simple objects\nProcessing time: ~2-4 minutes\n\n✅ 8 Images (every 45°)\nGenerates: Front, Front-Right, Right, Back-Right, Back, Back-Left, Left, Front-Left\nBest for: Professional product showcases, smooth rotation\nProcessing time: ~4-8 minutes\n\n💡 Recommended: 8 images for the best balance of quality and smoothness.",
                        "default": "8"
                    },
                    "distance": {
                        "title": "Camera Distance from Object",
                        "enum": [
                            "close",
                            "medium",
                            "far"
                        ],
                        "type": "string",
                        "description": "Control how close or far the camera appears from your object in all generated views. This affects the framing and how much background is visible.\n\n📸 How it affects output:\n• Close: Object fills more of the frame, less background visible, great for detail shots\n• Medium: Balanced view, object and background both visible, recommended for most products\n• Far: Object appears smaller, more background visible, shows context and environment\n\n✅ Close\nEffect: Camera is very close to the object\nBest for: Detail-focused products, jewelry, small items\nObject size: Large in frame\nBackground: Minimal\n\n✅ Medium (Recommended)\nEffect: Camera at comfortable viewing distance\nBest for: Most products, general use cases\nObject size: Balanced\nBackground: Moderate\n\n✅ Far\nEffect: Camera is far from the object\nBest for: Showing context, environment, large items in setting\nObject size: Smaller in frame\nBackground: Extensive\n\n💡 All views maintain the same distance - only the angle changes around the object.",
                        "default": "medium"
                    },
                    "temperature": {
                        "title": "Generation Temperature",
                        "minimum": 0.1,
                        "maximum": 1,
                        "type": "number",
                        "description": "Control how strictly the AI follows instructions versus being creative. This affects consistency and adherence to your requirements.\n\n📸 How it affects output:\n• Lower temperature (0.1-0.4): More consistent, strictly follows instructions, better background consistency, less variation\n• Medium temperature (0.5-0.7): Balanced approach, good consistency with some flexibility\n• Higher temperature (0.8-1.0): More creative, may vary more, less strict adherence\n\n⚠️ Too Low (below 0.3):\n• May be too rigid and repetitive\n• Could produce very similar images across angles\n• Might miss some creative details\n• Best for: Maximum consistency when background must be identical\n\n✅ Recommended (0.4-0.6):\n• Good balance of consistency and quality\n• Follows instructions well while maintaining natural appearance\n• Best for: Most use cases, professional product showcases\n\n⚠️ Too High (above 0.7):\n• May introduce unwanted variations\n• Background consistency might suffer\n• Could deviate from angle requirements\n• Best for: Creative variations when strict consistency isn't critical\n\n💡 Default: 0.5 provides the best balance for most products.",
                        "default": 0.5
                    },
                    "customPrompt": {
                        "title": "Additional Instructions (Optional)",
                        "type": "string",
                        "description": "Add specific instructions to customize how your 360° views are generated. These instructions are combined with the standard requirements.\n\n📸 How it affects output:\n• Your instructions guide the AI's generation style and focus\n• Use for specific styling, background preferences, or special requirements\n• Leave empty to use default professional settings\n\n💡 Example instructions:\n• \"Keep the background minimal and clean\"\n• \"Emphasize product details and textures\"\n• \"Maintain professional studio lighting\"\n• \"Show the object in a natural environment\"\n• \"Keep colors vibrant and saturated\"\n• \"Use soft, diffused lighting\"\n\n⚠️ Note: Instructions should complement, not contradict, the standard requirements (like maintaining background consistency)."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
