# Permanent Screenshot Redaction - RedactShot (`dravara/redactshot`) Actor

Upload one screenshot to preview destination-aware redaction regions. Review the plan, then apply deterministic pixel overwrite, image flattening, and metadata removal.

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

## Pricing

from $0.15 / redaction preview created

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## RedactShot

**AI identifies sensitive information. Deterministic server-side code permanently overwrites the pixels, flattens the image, and removes metadata.**

RedactShot proposes sensitive regions based on the sharing destination, shows a
numbered preview, and requires a separate reviewed apply action. It never asks
an image model to fabricate a “redacted” result. The final PNG is rendered
server-side by overwriting pixels with solid masks, flattening alpha data,
applying safe orientation, and stripping metadata.

### Destination-aware checks

Choose public social media, customer support, coworker, bug report, AI
assistant, or general external sharing. The preview can identify names, email
addresses, phones, addresses, account/payment data, authentication tokens, API
keys, customer details, browser tabs, notifications, profile photos, internal
URLs, organization names, and other contextual risks.

### Reusable privacy profiles

Choose a profile for the work you repeat most often:

- `destination_default` keeps the destination-aware baseline.
- `strict_external` gives extra attention to anything unsafe outside the
  organization.
- `credentials_and_financial` emphasizes tokens, keys, account data, and
  payment details.
- `customer_data` emphasizes customer identifiers and support context.
- `screen_share` emphasizes browser chrome, notifications, profiles, and
  internal URLs.

A profile adds focus. It never suppresses the destination-aware baseline.

### Mandatory two-run workflow

1. Run `action: preview` and inspect every numbered region.
2. Copy `input_sha256` into `expected_input_sha256`.
3. Copy the signed `preview_token` into the apply run.
4. Copy `regions` into `confirmed_regions`.
5. If anything is wrong or missing, create a new preview with clearer guidance.
6. Otherwise run `action: apply` with the exact returned regions and
   `confirmation: APPLY REDACTIONS` within one hour.

Apply never runs detection again. It verifies that the normalized image still
matches the reviewed SHA-256 digest and that `confirmed_regions` exactly match
the plan bound into the signed preview token, then masks that reviewed plan.
Automatic detection can miss context-sensitive data, so do not share the
result without a final human inspection.

Every preview and apply result includes an `audit_report`. The preview report
records the input hash, signed-plan hash, selected profile, and proposed region
types without claiming that redaction happened. The apply report adds the
output hash and confirms the deterministic pixel overwrite, RGB flattening,
and metadata removal.

### Bounded batch workflow

The repository includes `scripts/redactshot_batch.py` for API users. It runs
one separately billed Actor run per image, stops on the first failed or
ambiguous run, and never retries a start request whose response was lost.
Preview and apply remain separate batches so every plan can be reviewed.

```text
python scripts/redactshot_batch.py preview \
  --manifest preview-items.json \
  --output preview-results.json \
  --max-paid-runs 5 \
  --max-total-charge-usd-per-run 1.25
```

Both cost-control flags are mandatory. `--max-paid-runs` caps the number of
images. `--max-total-charge-usd-per-run` is sent to Apify for each run. Choose
that ceiling only after checking Apify's current displayed total. An apply
manifest must carry each reviewed preview's exact image, destination, privacy
profile, input hash, signed token, regions, and `APPLY REDACTIONS`
confirmation.

No separate Dravara account, API key, integration, or support handoff is
required. Each preview and apply is an ordinary Actor run whose dataset and PNG
remain in that run's storage. A failed run does not continue in the background.
For validation failures, correct the named field and start the applicable step
again. For a temporary service failure, wait a few minutes and start one new
run. If a charge, dataset, or artifact state ever looks unclear, do not loop
automatic retries: inspect that run's **Charges**, default dataset, and
key-value store first. Never apply an unreviewed preview merely to recover from
an error. The **Self-service failure details** output opens the sanitized
key-value-store `OUTPUT` record with the stable error code, retry guidance,
and next action.

### Billing

Dravara's creator charge for a successful preview is $0.60005: the $0.00005
`apify-actor-start` event plus $0.60 for `redaction-preview-created`. The
creator charge for a successful apply is $0.10005: the start event plus $0.10
for `redacted-image-created`. The complete successful two-run workflow has a
$0.70010 Dravara creator charge. Apify separately passes its variable platform
usage for each run to the customer and determines the final displayed total;
Dravara does not reduce its creator charge to absorb that usage. Result events
are captured only after their artifacts exist. Failed validation or provider
steps skip the result event, but the Actor-start charge and Apify platform usage
can still apply. The synthetic preview input is billed like any other run.

### Privacy and limits

PNG, JPEG, and WebP; one image per run; up to 12 MB, 8,192 pixels per side,
and 20 megapixels. Screenshots selected with the Apify Console file uploader
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 because Apify
run-input requests have a smaller limit than uploaded or remote files. Preview
content is processed by Dravara, LLC's
private service and the OpenAI API using `store: false`; applicable provider
abuse-monitoring retention may still apply. Apply is deterministic server-side
code and does not call the image model again.
Apify retains run input/output under the runner's settings.

Do not use RedactShot as the sole control for regulated or legally mandated
redaction. Optional defect contact:
<support@dravarahq.com>. Send only the Apify run
ID and safe error text, never the input. Support does not complete or deliver
failed runs.

# Actor input Schema

## `action` (type: `string`):

Create a reviewable preview first, or apply an exact previously reviewed and signed plan.

## `image` (type: `string`):

One PNG, JPEG, or WebP screenshot. Apify Console file upload or public HTTPS URL: up to 12 MB. Inline data URL: up to 6 MB raw. Maximum 20 megapixels.

## `destination` (type: `string`):

Choose the intended audience so the preview can apply destination-aware privacy rules.

## `privacy_profile` (type: `string`):

Adds focused checks without weakening the destination-aware baseline. Review every proposed region before applying.

## `context` (type: `string`):

State anything that must remain visible. Used only for preview.

## `confirmed_regions` (type: `array`):

For apply only: copy the preview regions exactly. If anything is wrong or missing, create a new preview with clearer guidance instead of editing this list.

## `expected_input_sha256` (type: `string`):

For apply only: copy input\_sha256 from the reviewed preview. Apply fails if the image changed.

## `preview_token` (type: `string`):

For apply only: copy preview\_token from the reviewed preview. It proves a preview was created for this image and destination.

## `confirmation` (type: `string`):

For apply only, enter exactly: APPLY REDACTIONS

## Actor input object example

```json
{
  "action": "preview",
  "image": "data:image/webp;base64,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",
  "destination": "public_social",
  "context": "Prepare this support screenshot for a public post."
}
```

# Actor output Schema

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

No description

## `files` (type: `string`):

No description

## `failure` (type: `string`):

On a failed run, open the sanitized machine-readable error, retry guidance, and next action.

# 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 = {
    "image": "data:image/webp;base64,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",
    "context": "Prepare this support screenshot for a public post."
};

// Run the Actor and wait for it to finish
const run = await client.actor("dravara/redactshot").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 = {
    "image": "data:image/webp;base64,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",
    "context": "Prepare this support screenshot for a public post.",
}

# Run the Actor and wait for it to finish
run = client.actor("dravara/redactshot").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 '{
  "image": "data:image/webp;base64,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",
  "context": "Prepare this support screenshot for a public post."
}' |
apify call dravara/redactshot --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dravara/redactshot"
        }
    }
}
```

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/qjEzJwkAruIipfbLm/builds/5iwORqmAcH7EpU76C/openapi.json
