Vintage Photo Restorer avatar

Vintage Photo Restorer

Pricing

from $80.00 / 1,000 restored photos

Go to Apify Store
Vintage Photo Restorer

Vintage Photo Restorer

Restore faded and scratched vintage photos locally with denoising, dust repair, contrast recovery, optional sepia neutralization, and downloadable image files.

Pricing

from $80.00 / 1,000 restored photos

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Restore faded, noisy, scratched, or sepia-toned vintage photos in bulk without supplying a third-party AI API key.

Vintage Photo Restorer downloads up to 20 public JPG, PNG, or WebP images, applies conservative local restoration, saves the restored files and optional before/after previews to the run key-value store, and writes one structured dataset item per successful photo. It is useful for family-history archives, museums, digitization teams, estate collections, and content production workflows.

Apify Free plan limit: Free-plan users can restore 1 photo per run. Paid-plan users retain the 20-photo limit. If a Free-plan run includes multiple URLs, the Actor exits gracefully with a clear REJECTED status before downloading or processing any photo.

What the Actor produces

FieldMeaning
restoredImageUrlDownload URL for the restored JPG, PNG, or WebP
comparisonImageUrlOptional side-by-side before/after JPEG
originalWidth, originalHeightDecoded source dimensions
outputWidth, outputHeightRestored dimensions after the optional size cap
operationsExact restoration stages applied
scratchPixelsRepairedConservative inpainting-mask size
processingTimeMsEnd-to-end processing time for the photo
sha256Output checksum for archive workflows

The OUTPUT key contains the run classification (DATA, BLOCKED, REJECTED, or FAILED), requested/delivered/failed counts, warnings, and result links. Diagnostics are never inserted into the homogeneous result dataset.

Restoration pipeline

The Actor uses deterministic OpenCV processing inside its container:

  1. Validates public network access and safely downloads the image with a 20 MB limit.
  2. Decodes JPG, PNG, or WebP and rejects images above 36 megapixels.
  3. Optionally scales down the longest side; it never enlarges a source.
  4. Conservatively detects thin high-contrast dust and scratch candidates and inpaints them.
  5. Optionally neutralizes a yellow/brown cast with bounded gray-world balance.
  6. Applies strength-dependent non-local denoising, adaptive contrast recovery, and unsharp masking.
  7. Encodes the restored image and optional side-by-side preview.

This Actor performs classical restoration, not generative reconstruction. It does not hallucinate faces, add missing objects, or AI-colorize black-and-white photos.

Input

FieldDefaultNotes
imageUrlsPublic sample photo1–20 public HTTP(S) JPG, PNG, or WebP URLs (Free plan: 1 URL per run)
restorationLevelbalancedgentle, balanced, or strong
repairScratchestrueDisable for text, drawings, or line art
neutralizeSepiafalseReduces color cast; does not colorize
outputFormatjpegjpeg, png, or webp
quality92JPEG/WebP quality from 60–100
maxDimension3000Longest side from 512–6000 px; no upscaling
createComparisontrueSaves a side-by-side JPEG
maxConcurrency21–4 parallel photos

Example input:

{
"imageUrls": [
"https://upload.wikimedia.org/wikipedia/commons/d/d3/Albert_Einstein_Head.jpg"
],
"restorationLevel": "balanced",
"repairScratches": true,
"neutralizeSepia": false,
"outputFormat": "jpeg",
"quality": 92,
"maxDimension": 3000,
"createComparison": true,
"maxConcurrency": 2
}

Run it with the Apify API by POSTing this object to the Actor run endpoint. After completion, read the default dataset for metadata and the default key-value store for image files. The output schema exposes direct collection links to both.

Output example

{
"sourceUrl": "https://example.com/archive/family-photo.jpg",
"restoredImageUrl": "https://api.apify.com/v2/key-value-stores/abc/records/restored-001.jpg",
"comparisonImageUrl": "https://api.apify.com/v2/key-value-stores/abc/records/comparison-001.jpg",
"restoredImageKey": "restored-001.jpg",
"comparisonImageKey": "comparison-001.jpg",
"originalWidth": 1200,
"originalHeight": 1600,
"outputWidth": 1200,
"outputHeight": 1600,
"inputBytes": 284521,
"outputBytes": 331208,
"outputFormat": "jpeg",
"restorationLevel": "balanced",
"operations": ["scratchRepair", "denoise", "contrastRecovery", "sharpen"],
"scratchPixelsRepaired": 1421,
"processingTimeMs": 1834,
"sha256": "3a7bd3e2360a3d29eea436fcfb7e44c735f..."
}

Pay-per-event pricing

EventPrice
Actor start$0.0001 per run
Restored photo$0.08 per successfully delivered dataset item

A one-photo run costs $0.0801 in configured events. A 10-photo run in which all photos succeed costs $0.8001. Failed downloads and rejected images do not create dataset items and therefore do not create restored-photo events. Apify's run spending limit is honored by the SDK; processing stops cleanly when the event limit is reached.

Free-plan usage

Apify provides the Actor with the plan status of the user who started each run. When that status is Free, the server-side guard accepts only one photo URL per run; submitting multiple URLs is rejected before any image is downloaded. This protects the shared restoration/API budget and cannot be bypassed by changing input fields. Paid users keep the normal 1–20 photo range.

Reliability, privacy, and limits

  • Only public HTTP(S) URLs are accepted. Localhost, private, reserved, and link-local destinations are blocked to prevent server-side request forgery.
  • Redirects are revalidated and limited. Downloads are capped at 20 MB and decoded images at 36 megapixels.
  • Source photos and restored files remain in the run's Apify storage according to the user's storage retention settings. This deployed build performs deterministic OpenCV restoration locally and sends no photo pixels to OpenRouter or any other outside AI provider.
  • Valid photos already delivered are preserved if another URL fails. Per-photo warnings and run counts appear in OUTPUT.
  • OpenCV encoding does not preserve EXIF/IPTC metadata or alpha transparency. Download the original separately if archival metadata must be retained.
  • Scratch detection is intentionally conservative, but any automated inpainting can affect real fine lines. Use gentle or disable repairScratches for documents, handwriting, drawings, and line art.
  • The Actor does not repair torn-away regions, reconstruct faces, upscale resolution, or colorize monochrome photos.

Only process images you own or are authorized to transform. Review photos containing sensitive personal information before sharing run storage or exports.

Support

For an unexpected result, include the run ID, input settings, source format and dimensions, and whether the issue affects the restored file, comparison, dataset record, or billing. Do not post private source-photo URLs in public support messages.