# AI Screenshot Change Analyzer - DiffShot (`westerly_palisade/diffshot-by-dravara`) Actor

Compare screenshots for QA and visual regression review. Detect and explain meaningful text, number, price, control, and layout changes; return structured findings, a pixel-change ratio, and an annotated side-by-side PNG.

- **URL**: https://apify.com/westerly\_palisade/diffshot-by-dravara.md
- **Developed by:** [Dravara LLC](https://apify.com/westerly_palisade) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / image pair compared

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## DiffShot

**Review meaningful differences between two image versions.**

DiffShot compares a before screenshot with an after screenshot and reports what
changed in human terms. It is not another website-change monitor: its job is to
separate substantive changes from pixel or formatting noise.

### Changes it can explain

- Added, removed, or revised text
- Changed numbers, dates, and prices
- Added, removed, or changed controls
- Changed obligations or policy language visible in the images
- Moved elements
- Formatting-only changes when explicitly requested

The result includes structured before/after regions, severity, an explanation,
a local pixel-change ratio, and a side-by-side annotated PNG.

### Supported input

Exactly two PNG, JPEG, or WebP images per run; each at most 12 MB, 8,192 pixels
per side, and 20 megapixels. Console uploads are read inside this limited Actor
with its scoped storage access. Direct inline data URLs should stay at or below
6 MB of raw image bytes each because Apify run-input requests have a smaller
limit than uploaded or remote files. Image order is always before, then after.
Identical normalized images skip model analysis and return an exact no-change result.

### Billing

A successful run costs $0.40005: the $0.00005 `apify-actor-start` event plus
$0.40 for `image-pair-compared`. The result event is captured only after the
comparison artifact and dataset item exist. Validation or provider failures
skip the result charge, but the Actor-start charge can still apply. The
synthetic sample input is billed like any other run.

### Privacy

Both images and optional context are processed by Dravara, LLC's private
service and the OpenAI API using `store: false`; applicable provider
abuse-monitoring retention may still apply. Apify retains normal run storage
under the runner's settings. Remove credentials and unrelated personal or
regulated information before upload.

Support: [support@dravarahq.com](mailto:support@dravarahq.com)

# Actor input Schema

## `before_image` (type: `string`):

Console upload/HTTPS up to 12 MB; inline data URL up to 6 MB raw. Maximum 20 megapixels.
## `after_image` (type: `string`):

Console upload/HTTPS up to 12 MB; inline data URL up to 6 MB raw. Maximum 20 megapixels.
## `context` (type: `string`):

Explain what changed or what reviewers should pay particular attention to.
## `include_formatting` (type: `boolean`):

Include changes that appear to affect only layout, spacing, typography, color, or other formatting.

## Actor input object example

```json
{
  "before_image": "data:image/webp;base64,UklGRnQEAABXRUJQVlA4TGgEAAAvf8JZAAfmsG0bSXLfW/lzMbHIXA8O27aRJGP77/feiAjatk24nj+Dr55/AkmbBHePcb9+IAEYBCAgAEAyAOZmBQbpDQBEwAACASzp9z/zPwaIVVk+31qBtEOgDQmggIC0aewABI2502YTpmkEQNpAxIDf75sbQwA0NMRoaH7/06bN4TUgIHOHBGBZKDSCr+0/27KszZ1Gc7S2aWgaYEBvNp4YZ24DMkibM3yPuJ4H1K5tOx5XZ/O2Gc/Utm3btm17bBtvktq222eQpN36b+/zjD7t9WzcEf2HxEaSIsnLHMt8t/T60/oNxH/iP/Gf+E/8J/4T/4n/xH9/I2D9BuI/8Z/4T1T1l30Z/CedRbmSIv4T/4n/rJuw23BjImE3cH8Gm+/dvrexlRiUbuvPPhBpAJSVomD8XW11jxfc6E73G3PNGFPxmc2gQjMtFr55unyvnQJMrTFjDPG1owpAzQ5YLHNqPQvy3scCse/NGMPyfdzzowjMslTCbqBkMGH35ve+mrh3Zowh9eGdj/NQzAxarBmg4MDBmqnAtCozRufcggUXUNAw23KZUDj/Rgrdb8xpy/RLEP/UMz1kucS/8G25f/veJloRvnHjxumzq4DAGAXURezf7d7iP/Gf+E/8J/4T//2vtYOWT/LRX0dioHtqIwypckv7aK76OnIkUZZJ2Y7GQxcgtEtBzRzmXPLEXKLdlH3yLVHFb4e+KPjq4DzzLFwNqGsvt2W+2kPf8mB5X9SJwKPlHPu92it4vNwiyctt6QngqVvOSuU5nwJEJw/8Y9KgD2RtYEMm4T0MfaPVRfYw8o1F4t/126eVhiFFDXu/aIsAhB2iPhTvY4h5T7Q7NHr0Aqu0MjXuteGwnxE3gLF7AZQx64OmySzRCywS16+6PzcULuPEDuDAqNZlrWNdFkrX5ENZJisCv0JzDcNv3L7oA67Quv4VwYp+prJS26Sdh+HF9u9+P/Gf+E/8J/4T/4n//oeb6lCGasO8V657vD0mbWzrVVRYLBu20SkDZWEYLymhZ6Fb3RsFSqvpUxJKVfTIrA1OYteD+/PhwFIz9UwoOAR1fbf+ihSMOj382O/VXqVdYbykhLS1bL7UCjLWsSzKlckMfMiXpNHpcP7yjZJhnsga1hcRWWC8IgWl15nhWqVlEe0Ojbzz46SYmngbQ9cW3rqu+9xJLZoHnNvBinpP2E/MJ5p9xitSUEadGe5VWhZNgOJjTCsZdI/yOQZ/mI+x+KbD9MLrMNjB+eppdoh5jYIPOr3ODNcqbcvcmuLVbD3peTuOHRGKVrMmQv5aFlWkBLolfIbspUzVxqJLWJ+KwnxFCnqdEd7Uw6u0Moa5gZLu3D3E8icNpxVDgsFTigEVgbqh7L/3YCeMuOFWanOr1GBJLxTGK1Iw6ozwslKv0nLd7q1ofeD8aNft3lZNTpb9u99P/Cf+E/+J/8R/4j/xn/hP/Cf+E/+J/8R/4r//vLN/v7uf/wizfgPxn/hP/Cf+E/+JygA=",
  "after_image": "data:image/webp;base64,UklGRnoEAABXRUJQVlA4TG4EAAAvf8JZAPflsG0bSXLD1z/2iYm9TBEM2jaSVP4Il8neM1MjaNs24c/1DL56/gkkbXgB9xjX/YEEIBCAgAAASQCYnRUIJGgBgAgIsxPAit45M0cABYC0E0g+31qB1AQEZieAAgLSzidZAAQts6edbZgOgQBIOwDw/t+7Z7WgU7TMnHbe+Q6uAAF55wQgOVNbAgFaVtCOZFGbOh3Y1F3LzAEBugMEAiKcsS2Q8I88/PvD7zygv23b8Ua6JuwwY9u2bdu2WdtuNLbtmbdIsv7j8r1vmv62x7t4IvrvCJIkRcl94YU7HPL60/oN8Z/4T/wn/hP/if/Ef+I/8d/fCFi/If4T/4n/RFV/2Zfxn3QW5UqK+E/8J/6zbmLBpugkYsHQg1lsu3/7/pYUMSjdjl/6QbwJUFaKggl3tdU9WRTtSc/ofDPGVH5+G6jIbIuF745OPxqmAtPqzRhDl4bRxUlzQxbLvAbHosIPGUDGBzPGsPIQ930oQnMslVgwVDGMWPDmj/6azu/NGEPmozufFiTNDlusGaDgyNH6acD0WjNG574Fiy6hoGmu5TKxZGE0QM/ovPbMvAJdnjtmRiyXLi9d2x/cvr+VFGLRaPTshTVAaKwCGuP273Zv8Z/4T/wn/hP/if/+19pRy6fHiV+P+2F75NFCx5K45pqrI0cSZZlU7W4+dok+IdeY50D3Wy0O/xXSpuyT791Ul12MWUPXr8DltcqxeC2grr/amft6P/2rw9X9UadCj1dy8vc6p+DJSouksKCtNwBbrsGMUjQXA0BiypA/Jg/9SN5mNucS28+It6Agvp9Rby0S397fPq8GRj7tg//OQN01gJibhAvFBz/+DyR6QrNDL7BKK1Pj30C3e1Ngw7Ng8PdsGHcQQBmzPmpazBK9wCIJ+lTPF3QqXp/iig0cGZ1a3kY25qF0LS6UZbIq9GtkPttag8HKFK6S2sCacM0AU1WlbZLmYXiZ/bvfT/wn/hP/if/Ef+K//+GmOpSh2tMzsxkCZdGyQDomb2lvWirslMheBecOcPAMHR/KqjAmKaF3SbCuLwqUVtOvIpKp6JXbEJ7M3ocPFgL9SXo6kEFPtODzkfBw1I19+nQpGI16/snf65xWW8KYpISs9Wy7kgI5G1mR4OoUhjzia/cx2WbkNxeur474OjaVEl9kTJeC0hvNfK3Vmkj0hGbe+3AHTC288+Np410wGHzhzixdQBpiPvyfaXUZ06WgjEYz32m1JloAxSd/igx6JvjixxfjUwaumTCz5IajnRmtbvxvUPBRpzea+VqrPZlbU76WHacd78azO07pWtbFKVrP0ppAyNv1i8ZYyllHYjmbMpPM6VLQG438ll5Oq2UxMhiq6MndY6x81nRWMTwcPqMYXBNqHMHh+w/36FKukcoMV/RJMqZLwWg08qsqnVbLdbu3IvVw/0zrdm+rJj/P/t3vJ/4T/4n/xH/iP/Gf+E/8J/4T/4n/xH/iP/Hff9jZv//dz3+EWb8h/hP/if/Ef+I/URk=",
  "context": "Compare customer-visible plan changes.",
  "include_formatting": false
}
````

# Actor output Schema

## `results` (type: `string`):

No description

## `files` (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 = {
    "before_image": "data:image/webp;base64,UklGRnQEAABXRUJQVlA4TGgEAAAvf8JZAAfmsG0bSXLfW/lzMbHIXA8O27aRJGP77/feiAjatk24nj+Dr55/AkmbBHePcb9+IAEYBCAgAEAyAOZmBQbpDQBEwAACASzp9z/zPwaIVVk+31qBtEOgDQmggIC0aewABI2502YTpmkEQNpAxIDf75sbQwA0NMRoaH7/06bN4TUgIHOHBGBZKDSCr+0/27KszZ1Gc7S2aWgaYEBvNp4YZ24DMkibM3yPuJ4H1K5tOx5XZ/O2Gc/Utm3btm17bBtvktq222eQpN36b+/zjD7t9WzcEf2HxEaSIsnLHMt8t/T60/oNxH/iP/Gf+E/8J/4T/4n/xH9/I2D9BuI/8Z/4T1T1l30Z/CedRbmSIv4T/4n/rJuw23BjImE3cH8Gm+/dvrexlRiUbuvPPhBpAJSVomD8XW11jxfc6E73G3PNGFPxmc2gQjMtFr55unyvnQJMrTFjDPG1owpAzQ5YLHNqPQvy3scCse/NGMPyfdzzowjMslTCbqBkMGH35ve+mrh3Zowh9eGdj/NQzAxarBmg4MDBmqnAtCozRufcggUXUNAw23KZUDj/Rgrdb8xpy/RLEP/UMz1kucS/8G25f/veJloRvnHjxumzq4DAGAXURezf7d7iP/Gf+E/8J/4T//2vtYOWT/LRX0dioHtqIwypckv7aK76OnIkUZZJ2Y7GQxcgtEtBzRzmXPLEXKLdlH3yLVHFb4e+KPjq4DzzLFwNqGsvt2W+2kPf8mB5X9SJwKPlHPu92it4vNwiyctt6QngqVvOSuU5nwJEJw/8Y9KgD2RtYEMm4T0MfaPVRfYw8o1F4t/126eVhiFFDXu/aIsAhB2iPhTvY4h5T7Q7NHr0Aqu0MjXuteGwnxE3gLF7AZQx64OmySzRCywS16+6PzcULuPEDuDAqNZlrWNdFkrX5ENZJisCv0JzDcNv3L7oA67Quv4VwYp+prJS26Sdh+HF9u9+P/Gf+E/8J/4T/4n//oeb6lCGasO8V657vD0mbWzrVVRYLBu20SkDZWEYLymhZ6Fb3RsFSqvpUxJKVfTIrA1OYteD+/PhwFIz9UwoOAR1fbf+ihSMOj382O/VXqVdYbykhLS1bL7UCjLWsSzKlckMfMiXpNHpcP7yjZJhnsga1hcRWWC8IgWl15nhWqVlEe0Ojbzz46SYmngbQ9cW3rqu+9xJLZoHnNvBinpP2E/MJ5p9xitSUEadGe5VWhZNgOJjTCsZdI/yOQZ/mI+x+KbD9MLrMNjB+eppdoh5jYIPOr3ODNcqbcvcmuLVbD3peTuOHRGKVrMmQv5aFlWkBLolfIbspUzVxqJLWJ+KwnxFCnqdEd7Uw6u0Moa5gZLu3D3E8icNpxVDgsFTigEVgbqh7L/3YCeMuOFWanOr1GBJLxTGK1Iw6ozwslKv0nLd7q1ofeD8aNft3lZNTpb9u99P/Cf+E/+J/8R/4j/xn/hP/Cf+E/+J/8R/4r//vLN/v7uf/wizfgPxn/hP/Cf+E/+JygA=",
    "after_image": "data:image/webp;base64,UklGRnoEAABXRUJQVlA4TG4EAAAvf8JZAPflsG0bSXLD1z/2iYm9TBEM2jaSVP4Il8neM1MjaNs24c/1DL56/gkkbXgB9xjX/YEEIBCAgAAASQCYnRUIJGgBgAgIsxPAit45M0cABYC0E0g+31qB1AQEZieAAgLSzidZAAQts6edbZgOgQBIOwDw/t+7Z7WgU7TMnHbe+Q6uAAF55wQgOVNbAgFaVtCOZFGbOh3Y1F3LzAEBugMEAiKcsS2Q8I88/PvD7zygv23b8Ua6JuwwY9u2bdu2WdtuNLbtmbdIsv7j8r1vmv62x7t4IvrvCJIkRcl94YU7HPL60/oN8Z/4T/wn/hP/if/Ef+I/8d/fCFi/If4T/4n/RFV/2Zfxn3QW5UqK+E/8J/6zbmLBpugkYsHQg1lsu3/7/pYUMSjdjl/6QbwJUFaKggl3tdU9WRTtSc/ofDPGVH5+G6jIbIuF745OPxqmAtPqzRhDl4bRxUlzQxbLvAbHosIPGUDGBzPGsPIQ930oQnMslVgwVDGMWPDmj/6azu/NGEPmozufFiTNDlusGaDgyNH6acD0WjNG574Fiy6hoGmu5TKxZGE0QM/ovPbMvAJdnjtmRiyXLi9d2x/cvr+VFGLRaPTshTVAaKwCGuP273Zv8Z/4T/wn/hP/if/+19pRy6fHiV+P+2F75NFCx5K45pqrI0cSZZlU7W4+dok+IdeY50D3Wy0O/xXSpuyT791Ul12MWUPXr8DltcqxeC2grr/amft6P/2rw9X9UadCj1dy8vc6p+DJSouksKCtNwBbrsGMUjQXA0BiypA/Jg/9SN5mNucS28+It6Agvp9Rby0S397fPq8GRj7tg//OQN01gJibhAvFBz/+DyR6QrNDL7BKK1Pj30C3e1Ngw7Ng8PdsGHcQQBmzPmpazBK9wCIJ+lTPF3QqXp/iig0cGZ1a3kY25qF0LS6UZbIq9GtkPttag8HKFK6S2sCacM0AU1WlbZLmYXiZ/bvfT/wn/hP/if/Ef+K//+GmOpSh2tMzsxkCZdGyQDomb2lvWirslMheBecOcPAMHR/KqjAmKaF3SbCuLwqUVtOvIpKp6JXbEJ7M3ocPFgL9SXo6kEFPtODzkfBw1I19+nQpGI16/snf65xWW8KYpISs9Wy7kgI5G1mR4OoUhjzia/cx2WbkNxeur474OjaVEl9kTJeC0hvNfK3Vmkj0hGbe+3AHTC288+Np410wGHzhzixdQBpiPvyfaXUZ06WgjEYz32m1JloAxSd/igx6JvjixxfjUwaumTCz5IajnRmtbvxvUPBRpzea+VqrPZlbU76WHacd78azO07pWtbFKVrP0ppAyNv1i8ZYyllHYjmbMpPM6VLQG438ll5Oq2UxMhiq6MndY6x81nRWMTwcPqMYXBNqHMHh+w/36FKukcoMV/RJMqZLwWg08qsqnVbLdbu3IvVw/0zrdm+rJj/P/t3vJ/4T/4n/xH/iP/Gf+E/8J/4T/4n/xH/iP/Hff9jZv//dz3+EWb8h/hP/if/Ef+I/URk=",
    "context": "Compare customer-visible plan changes."
};

// Run the Actor and wait for it to finish
const run = await client.actor("westerly_palisade/diffshot-by-dravara").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 = {
    "before_image": "data:image/webp;base64,UklGRnQEAABXRUJQVlA4TGgEAAAvf8JZAAfmsG0bSXLfW/lzMbHIXA8O27aRJGP77/feiAjatk24nj+Dr55/AkmbBHePcb9+IAEYBCAgAEAyAOZmBQbpDQBEwAACASzp9z/zPwaIVVk+31qBtEOgDQmggIC0aewABI2502YTpmkEQNpAxIDf75sbQwA0NMRoaH7/06bN4TUgIHOHBGBZKDSCr+0/27KszZ1Gc7S2aWgaYEBvNp4YZ24DMkibM3yPuJ4H1K5tOx5XZ/O2Gc/Utm3btm17bBtvktq222eQpN36b+/zjD7t9WzcEf2HxEaSIsnLHMt8t/T60/oNxH/iP/Gf+E/8J/4T/4n/xH9/I2D9BuI/8Z/4T1T1l30Z/CedRbmSIv4T/4n/rJuw23BjImE3cH8Gm+/dvrexlRiUbuvPPhBpAJSVomD8XW11jxfc6E73G3PNGFPxmc2gQjMtFr55unyvnQJMrTFjDPG1owpAzQ5YLHNqPQvy3scCse/NGMPyfdzzowjMslTCbqBkMGH35ve+mrh3Zowh9eGdj/NQzAxarBmg4MDBmqnAtCozRufcggUXUNAw23KZUDj/Rgrdb8xpy/RLEP/UMz1kucS/8G25f/veJloRvnHjxumzq4DAGAXURezf7d7iP/Gf+E/8J/4T//2vtYOWT/LRX0dioHtqIwypckv7aK76OnIkUZZJ2Y7GQxcgtEtBzRzmXPLEXKLdlH3yLVHFb4e+KPjq4DzzLFwNqGsvt2W+2kPf8mB5X9SJwKPlHPu92it4vNwiyctt6QngqVvOSuU5nwJEJw/8Y9KgD2RtYEMm4T0MfaPVRfYw8o1F4t/126eVhiFFDXu/aIsAhB2iPhTvY4h5T7Q7NHr0Aqu0MjXuteGwnxE3gLF7AZQx64OmySzRCywS16+6PzcULuPEDuDAqNZlrWNdFkrX5ENZJisCv0JzDcNv3L7oA67Quv4VwYp+prJS26Sdh+HF9u9+P/Gf+E/8J/4T/4n//oeb6lCGasO8V657vD0mbWzrVVRYLBu20SkDZWEYLymhZ6Fb3RsFSqvpUxJKVfTIrA1OYteD+/PhwFIz9UwoOAR1fbf+ihSMOj382O/VXqVdYbykhLS1bL7UCjLWsSzKlckMfMiXpNHpcP7yjZJhnsga1hcRWWC8IgWl15nhWqVlEe0Ojbzz46SYmngbQ9cW3rqu+9xJLZoHnNvBinpP2E/MJ5p9xitSUEadGe5VWhZNgOJjTCsZdI/yOQZ/mI+x+KbD9MLrMNjB+eppdoh5jYIPOr3ODNcqbcvcmuLVbD3peTuOHRGKVrMmQv5aFlWkBLolfIbspUzVxqJLWJ+KwnxFCnqdEd7Uw6u0Moa5gZLu3D3E8icNpxVDgsFTigEVgbqh7L/3YCeMuOFWanOr1GBJLxTGK1Iw6ozwslKv0nLd7q1ofeD8aNft3lZNTpb9u99P/Cf+E/+J/8R/4j/xn/hP/Cf+E/+J/8R/4r//vLN/v7uf/wizfgPxn/hP/Cf+E/+JygA=",
    "after_image": "data:image/webp;base64,UklGRnoEAABXRUJQVlA4TG4EAAAvf8JZAPflsG0bSXLD1z/2iYm9TBEM2jaSVP4Il8neM1MjaNs24c/1DL56/gkkbXgB9xjX/YEEIBCAgAAASQCYnRUIJGgBgAgIsxPAit45M0cABYC0E0g+31qB1AQEZieAAgLSzidZAAQts6edbZgOgQBIOwDw/t+7Z7WgU7TMnHbe+Q6uAAF55wQgOVNbAgFaVtCOZFGbOh3Y1F3LzAEBugMEAiKcsS2Q8I88/PvD7zygv23b8Ua6JuwwY9u2bdu2WdtuNLbtmbdIsv7j8r1vmv62x7t4IvrvCJIkRcl94YU7HPL60/oN8Z/4T/wn/hP/if/Ef+I/8d/fCFi/If4T/4n/RFV/2Zfxn3QW5UqK+E/8J/6zbmLBpugkYsHQg1lsu3/7/pYUMSjdjl/6QbwJUFaKggl3tdU9WRTtSc/ofDPGVH5+G6jIbIuF745OPxqmAtPqzRhDl4bRxUlzQxbLvAbHosIPGUDGBzPGsPIQ930oQnMslVgwVDGMWPDmj/6azu/NGEPmozufFiTNDlusGaDgyNH6acD0WjNG574Fiy6hoGmu5TKxZGE0QM/ovPbMvAJdnjtmRiyXLi9d2x/cvr+VFGLRaPTshTVAaKwCGuP273Zv8Z/4T/wn/hP/if/+19pRy6fHiV+P+2F75NFCx5K45pqrI0cSZZlU7W4+dok+IdeY50D3Wy0O/xXSpuyT791Ul12MWUPXr8DltcqxeC2grr/amft6P/2rw9X9UadCj1dy8vc6p+DJSouksKCtNwBbrsGMUjQXA0BiypA/Jg/9SN5mNucS28+It6Agvp9Rby0S397fPq8GRj7tg//OQN01gJibhAvFBz/+DyR6QrNDL7BKK1Pj30C3e1Ngw7Ng8PdsGHcQQBmzPmpazBK9wCIJ+lTPF3QqXp/iig0cGZ1a3kY25qF0LS6UZbIq9GtkPttag8HKFK6S2sCacM0AU1WlbZLmYXiZ/bvfT/wn/hP/if/Ef+K//+GmOpSh2tMzsxkCZdGyQDomb2lvWirslMheBecOcPAMHR/KqjAmKaF3SbCuLwqUVtOvIpKp6JXbEJ7M3ocPFgL9SXo6kEFPtODzkfBw1I19+nQpGI16/snf65xWW8KYpISs9Wy7kgI5G1mR4OoUhjzia/cx2WbkNxeur474OjaVEl9kTJeC0hvNfK3Vmkj0hGbe+3AHTC288+Np410wGHzhzixdQBpiPvyfaXUZ06WgjEYz32m1JloAxSd/igx6JvjixxfjUwaumTCz5IajnRmtbvxvUPBRpzea+VqrPZlbU76WHacd78azO07pWtbFKVrP0ppAyNv1i8ZYyllHYjmbMpPM6VLQG438ll5Oq2UxMhiq6MndY6x81nRWMTwcPqMYXBNqHMHh+w/36FKukcoMV/RJMqZLwWg08qsqnVbLdbu3IvVw/0zrdm+rJj/P/t3vJ/4T/4n/xH/iP/Gf+E/8J/4T/4n/xH/iP/Hff9jZv//dz3+EWb8h/hP/if/Ef+I/URk=",
    "context": "Compare customer-visible plan changes.",
}

# Run the Actor and wait for it to finish
run = client.actor("westerly_palisade/diffshot-by-dravara").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 '{
  "before_image": "data:image/webp;base64,UklGRnQEAABXRUJQVlA4TGgEAAAvf8JZAAfmsG0bSXLfW/lzMbHIXA8O27aRJGP77/feiAjatk24nj+Dr55/AkmbBHePcb9+IAEYBCAgAEAyAOZmBQbpDQBEwAACASzp9z/zPwaIVVk+31qBtEOgDQmggIC0aewABI2502YTpmkEQNpAxIDf75sbQwA0NMRoaH7/06bN4TUgIHOHBGBZKDSCr+0/27KszZ1Gc7S2aWgaYEBvNp4YZ24DMkibM3yPuJ4H1K5tOx5XZ/O2Gc/Utm3btm17bBtvktq222eQpN36b+/zjD7t9WzcEf2HxEaSIsnLHMt8t/T60/oNxH/iP/Gf+E/8J/4T/4n/xH9/I2D9BuI/8Z/4T1T1l30Z/CedRbmSIv4T/4n/rJuw23BjImE3cH8Gm+/dvrexlRiUbuvPPhBpAJSVomD8XW11jxfc6E73G3PNGFPxmc2gQjMtFr55unyvnQJMrTFjDPG1owpAzQ5YLHNqPQvy3scCse/NGMPyfdzzowjMslTCbqBkMGH35ve+mrh3Zowh9eGdj/NQzAxarBmg4MDBmqnAtCozRufcggUXUNAw23KZUDj/Rgrdb8xpy/RLEP/UMz1kucS/8G25f/veJloRvnHjxumzq4DAGAXURezf7d7iP/Gf+E/8J/4T//2vtYOWT/LRX0dioHtqIwypckv7aK76OnIkUZZJ2Y7GQxcgtEtBzRzmXPLEXKLdlH3yLVHFb4e+KPjq4DzzLFwNqGsvt2W+2kPf8mB5X9SJwKPlHPu92it4vNwiyctt6QngqVvOSuU5nwJEJw/8Y9KgD2RtYEMm4T0MfaPVRfYw8o1F4t/126eVhiFFDXu/aIsAhB2iPhTvY4h5T7Q7NHr0Aqu0MjXuteGwnxE3gLF7AZQx64OmySzRCywS16+6PzcULuPEDuDAqNZlrWNdFkrX5ENZJisCv0JzDcNv3L7oA67Quv4VwYp+prJS26Sdh+HF9u9+P/Gf+E/8J/4T/4n//oeb6lCGasO8V657vD0mbWzrVVRYLBu20SkDZWEYLymhZ6Fb3RsFSqvpUxJKVfTIrA1OYteD+/PhwFIz9UwoOAR1fbf+ihSMOj382O/VXqVdYbykhLS1bL7UCjLWsSzKlckMfMiXpNHpcP7yjZJhnsga1hcRWWC8IgWl15nhWqVlEe0Ojbzz46SYmngbQ9cW3rqu+9xJLZoHnNvBinpP2E/MJ5p9xitSUEadGe5VWhZNgOJjTCsZdI/yOQZ/mI+x+KbD9MLrMNjB+eppdoh5jYIPOr3ODNcqbcvcmuLVbD3peTuOHRGKVrMmQv5aFlWkBLolfIbspUzVxqJLWJ+KwnxFCnqdEd7Uw6u0Moa5gZLu3D3E8icNpxVDgsFTigEVgbqh7L/3YCeMuOFWanOr1GBJLxTGK1Iw6ozwslKv0nLd7q1ofeD8aNft3lZNTpb9u99P/Cf+E/+J/8R/4j/xn/hP/Cf+E/+J/8R/4r//vLN/v7uf/wizfgPxn/hP/Cf+E/+JygA=",
  "after_image": "data:image/webp;base64,UklGRnoEAABXRUJQVlA4TG4EAAAvf8JZAPflsG0bSXLD1z/2iYm9TBEM2jaSVP4Il8neM1MjaNs24c/1DL56/gkkbXgB9xjX/YEEIBCAgAAASQCYnRUIJGgBgAgIsxPAit45M0cABYC0E0g+31qB1AQEZieAAgLSzidZAAQts6edbZgOgQBIOwDw/t+7Z7WgU7TMnHbe+Q6uAAF55wQgOVNbAgFaVtCOZFGbOh3Y1F3LzAEBugMEAiKcsS2Q8I88/PvD7zygv23b8Ua6JuwwY9u2bdu2WdtuNLbtmbdIsv7j8r1vmv62x7t4IvrvCJIkRcl94YU7HPL60/oN8Z/4T/wn/hP/if/Ef+I/8d/fCFi/If4T/4n/RFV/2Zfxn3QW5UqK+E/8J/6zbmLBpugkYsHQg1lsu3/7/pYUMSjdjl/6QbwJUFaKggl3tdU9WRTtSc/ofDPGVH5+G6jIbIuF745OPxqmAtPqzRhDl4bRxUlzQxbLvAbHosIPGUDGBzPGsPIQ930oQnMslVgwVDGMWPDmj/6azu/NGEPmozufFiTNDlusGaDgyNH6acD0WjNG574Fiy6hoGmu5TKxZGE0QM/ovPbMvAJdnjtmRiyXLi9d2x/cvr+VFGLRaPTshTVAaKwCGuP273Zv8Z/4T/wn/hP/if/+19pRy6fHiV+P+2F75NFCx5K45pqrI0cSZZlU7W4+dok+IdeY50D3Wy0O/xXSpuyT791Ul12MWUPXr8DltcqxeC2grr/amft6P/2rw9X9UadCj1dy8vc6p+DJSouksKCtNwBbrsGMUjQXA0BiypA/Jg/9SN5mNucS28+It6Agvp9Rby0S397fPq8GRj7tg//OQN01gJibhAvFBz/+DyR6QrNDL7BKK1Pj30C3e1Ngw7Ng8PdsGHcQQBmzPmpazBK9wCIJ+lTPF3QqXp/iig0cGZ1a3kY25qF0LS6UZbIq9GtkPttag8HKFK6S2sCacM0AU1WlbZLmYXiZ/bvfT/wn/hP/if/Ef+K//+GmOpSh2tMzsxkCZdGyQDomb2lvWirslMheBecOcPAMHR/KqjAmKaF3SbCuLwqUVtOvIpKp6JXbEJ7M3ocPFgL9SXo6kEFPtODzkfBw1I19+nQpGI16/snf65xWW8KYpISs9Wy7kgI5G1mR4OoUhjzia/cx2WbkNxeur474OjaVEl9kTJeC0hvNfK3Vmkj0hGbe+3AHTC288+Np410wGHzhzixdQBpiPvyfaXUZ06WgjEYz32m1JloAxSd/igx6JvjixxfjUwaumTCz5IajnRmtbvxvUPBRpzea+VqrPZlbU76WHacd78azO07pWtbFKVrP0ppAyNv1i8ZYyllHYjmbMpPM6VLQG438ll5Oq2UxMhiq6MndY6x81nRWMTwcPqMYXBNqHMHh+w/36FKukcoMV/RJMqZLwWg08qsqnVbLdbu3IvVw/0zrdm+rJj/P/t3vJ/4T/4n/xH/iP/Gf+E/8J/4T/4n/xH/iP/Hff9jZv//dz3+EWb8h/hP/if/Ef+I/URk=",
  "context": "Compare customer-visible plan changes."
}' |
apify call westerly_palisade/diffshot-by-dravara --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=westerly_palisade/diffshot-by-dravara",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AI Screenshot Change Analyzer - DiffShot",
        "description": "Compare screenshots for QA and visual regression review. Detect and explain meaningful text, number, price, control, and layout changes; return structured findings, a pixel-change ratio, and an annotated side-by-side PNG.",
        "version": "1.1",
        "x-build-id": "I5b25wJI5eZmUrEIg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/westerly_palisade~diffshot-by-dravara/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-westerly_palisade-diffshot-by-dravara",
                "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/westerly_palisade~diffshot-by-dravara/runs": {
            "post": {
                "operationId": "runs-sync-westerly_palisade-diffshot-by-dravara",
                "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/westerly_palisade~diffshot-by-dravara/run-sync": {
            "post": {
                "operationId": "run-sync-westerly_palisade-diffshot-by-dravara",
                "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": [
                    "before_image",
                    "after_image"
                ],
                "properties": {
                    "before_image": {
                        "title": "Before image",
                        "type": "string",
                        "description": "Console upload/HTTPS up to 12 MB; inline data URL up to 6 MB raw. Maximum 20 megapixels."
                    },
                    "after_image": {
                        "title": "After image",
                        "type": "string",
                        "description": "Console upload/HTTPS up to 12 MB; inline data URL up to 6 MB raw. Maximum 20 megapixels."
                    },
                    "context": {
                        "title": "Optional comparison context",
                        "maxLength": 2000,
                        "type": "string",
                        "description": "Explain what changed or what reviewers should pay particular attention to."
                    },
                    "include_formatting": {
                        "title": "Include formatting-only changes",
                        "type": "boolean",
                        "description": "Include changes that appear to affect only layout, spacing, typography, color, or other formatting.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
