Vintage Photo Restorer
Pricing
from $80.00 / 1,000 restored photos
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
Maintained by CommunityActor 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
| Field | Meaning |
|---|---|
restoredImageUrl | Download URL for the restored JPG, PNG, or WebP |
comparisonImageUrl | Optional side-by-side before/after JPEG |
originalWidth, originalHeight | Decoded source dimensions |
outputWidth, outputHeight | Restored dimensions after the optional size cap |
operations | Exact restoration stages applied |
scratchPixelsRepaired | Conservative inpainting-mask size |
processingTimeMs | End-to-end processing time for the photo |
sha256 | Output 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:
- Validates public network access and safely downloads the image with a 20 MB limit.
- Decodes JPG, PNG, or WebP and rejects images above 36 megapixels.
- Optionally scales down the longest side; it never enlarges a source.
- Conservatively detects thin high-contrast dust and scratch candidates and inpaints them.
- Optionally neutralizes a yellow/brown cast with bounded gray-world balance.
- Applies strength-dependent non-local denoising, adaptive contrast recovery, and unsharp masking.
- 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
| Field | Default | Notes |
|---|---|---|
imageUrls | Public sample photo | 1–20 public HTTP(S) JPG, PNG, or WebP URLs (Free plan: 1 URL per run) |
restorationLevel | balanced | gentle, balanced, or strong |
repairScratches | true | Disable for text, drawings, or line art |
neutralizeSepia | false | Reduces color cast; does not colorize |
outputFormat | jpeg | jpeg, png, or webp |
quality | 92 | JPEG/WebP quality from 60–100 |
maxDimension | 3000 | Longest side from 512–6000 px; no upscaling |
createComparison | true | Saves a side-by-side JPEG |
maxConcurrency | 2 | 1–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
| Event | Price |
|---|---|
| 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
gentleor disablerepairScratchesfor 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.