Old Photo Restoration — Restore Old Photos in Bulk avatar

Old Photo Restoration — Restore Old Photos in Bulk

Pricing

from $80.00 / 1,000 restored photos

Go to Apify Store
Old Photo Restoration — Restore Old Photos in Bulk

Old Photo Restoration — Restore Old Photos in Bulk

Restore old photos in bulk from image URLs: dust and scratch repair, denoising, contrast recovery, before/after previews. USD 100 per 1,000 photos.

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

0

Monthly active users

16 days ago

Last modified

Categories

Features

Limited permissions

Share

Old Photo Restoration takes up to 20 public JPG, PNG, or WebP image URLs per run, repairs dust and thin scratches, reduces noise, recovers contrast, and returns downloadable restored files with a before/after preview, for family historians, archives, museums, and digitization teams. It costs USD 100 per 1,000 restored photos on the FREE pricing tier (USD 0.10 per photo), and failed photos are not charged.

The restoration is classical image processing that runs inside the Actor. It does not invent detail, reconstruct faces, colorize, or upscale.

What does the old photo restoration Actor return?

Each successfully restored photo produces one dataset item and one or two image files in the run's key-value store.

FieldWhat it contains
sourceUrlThe image URL you supplied
restoredImageUrlDownload link for the restored file
comparisonImageUrlDownload link for the side-by-side before/after JPEG, or null when previews are off
restoredImageKey, comparisonImageKeyKey-value store keys, such as restored-001.jpg and comparison-001.jpg
originalWidth, originalHeightPixel size of the source image
outputWidth, outputHeightPixel size after the optional size cap
inputBytes, outputBytesSource and restored file sizes
outputFormat, restorationLevelThe format and strength used
operationsSteps applied, for example downscale, scratchRepair, denoise, contrastRecovery, sharpen
scratchPixelsRepairedNumber of pixels filled by dust and scratch repair
processingTimeMsDownload and processing time for this photo
sha256Checksum of the restored file

The OUTPUT record summarises the run: status (DATA, BLOCKED, REJECTED, or FAILED), requested, delivered, and failed counts, warnings, and links to the results.

What does the restoration actually fix?

It fixes small, common damage on scanned prints. For each photo it:

  1. downloads the file (20 MB maximum) and rejects images above 36 megapixels;
  2. optionally shrinks the longest side to your maxDimension (it never enlarges);
  3. finds thin, high-contrast dust specks and scratches and fills them from the surrounding pixels;
  4. optionally neutralizes a yellow or brown sepia cast;
  5. reduces noise, recovers local contrast, and sharpens, with the strength you choose;
  6. saves the restored file and an optional side-by-side preview.

It does not repair torn-away corners, fill large missing areas, sharpen faces with generated detail, colorize black-and-white photos, or increase resolution.

When should you use it, and when not?

Use it for:

  • batch clean-up of scanned family photos before printing or sharing;
  • archive and museum digitization queues that need consistent, repeatable processing and checksums;
  • genealogy or estate collections where faces must not be altered.

Do not use it for:

How do I restore old photos in bulk?

Paste up to 20 public image URLs and choose a strength. Every other field has a safe default.

InputDefaultAccepted values
imageUrlsOne sample portrait1–20 public HTTP(S) JPG, PNG, or WebP URLs
restorationLevelbalancedgentle, balanced, strong
repairScratchestrueTurn off for handwriting, drawings, and line art
neutralizeSepiafalseReduces a color cast; does not colorize
outputFormatjpegjpeg, png, webp
quality9260–100 (JPEG and WebP only)
maxDimension3000512–6000 pixels on the longest side
createComparisontrueSaves a before/after JPEG
maxConcurrency21–4 photos processed at once
{
"imageUrls": [
"https://upload.wikimedia.org/wikipedia/commons/d/d3/Albert_Einstein_Head.jpg"
],
"restorationLevel": "balanced",
"repairScratches": true,
"neutralizeSepia": false,
"outputFormat": "jpeg",
"maxDimension": 3000,
"createComparison": true
}

Use it from an AI assistant

Old Photo Restoration works from Claude, ChatGPT, Cursor, or any other MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/vintage-photo-restorer to your client and ask, for example: "Restore these three scanned family photos gently, keep them as PNG, and give me the download links."

Run it with the API

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/vintage-photo-restorer').call({
imageUrls: ['https://example.com/archive/family-1948.jpg'],
restorationLevel: 'gentle',
outputFormat: 'png',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((photo) => console.log(photo.restoredImageUrl));

Python (apify-client 3.x):

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/vintage-photo-restorer").call(
run_input={"imageUrls": ["https://example.com/archive/family-1948.jpg"], "restorationLevel": "gentle"}
)
for photo in client.dataset(run.default_dataset_id).iterate_items():
print(photo["restoredImageUrl"], photo["operations"])

Output example

From the default input, run on 2026-10-26 (the 3250 × 4333 source was capped to 3000 pixels):

{
"sourceUrl": "https://upload.wikimedia.org/wikipedia/commons/d/d3/Albert_Einstein_Head.jpg",
"restoredImageUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/restored-001.jpg",
"comparisonImageUrl": "https://api.apify.com/v2/key-value-stores/<storeId>/records/comparison-001.jpg",
"restoredImageKey": "restored-001.jpg",
"comparisonImageKey": "comparison-001.jpg",
"originalWidth": 3250,
"originalHeight": 4333,
"outputWidth": 2250,
"outputHeight": 3000,
"inputBytes": 2309396,
"outputBytes": 1185997,
"outputFormat": "jpeg",
"restorationLevel": "balanced",
"operations": ["downscale", "scratchRepair", "denoise", "contrastRecovery", "sharpen"],
"scratchPixelsRepaired": 14526,
"processingTimeMs": 3249,
"sha256": "27450f7a80cc42a1af271bd22532048a343edda55c668179ba49bc98732bafe9"
}

That run took about 8 seconds end to end at 1 GB of memory.

Pricing: how much does it cost to restore an old photo?

You pay per restored photo delivered, plus a start fee. Apify platform usage is included in these prices.

EventFREEBRONZESILVERGOLD, PLATINUM, DIAMOND
Restored photo (primary event)USD 0.100001USD 0.0975USD 0.095USD 0.08
Per 1,000 photosUSD 100.00USD 97.50USD 95.00USD 80.00
Actor start, per started GB of allocated memoryUSD 0.006251USD 0.006094USD 0.005938USD 0.005

The default memory is 1 GB (one start event). A 2 GB run counts two start events.

  • Default run, 1 photo, FREE tier: USD 0.006251 + USD 0.100001 = about USD 0.11.
  • Full run, 20 photos at 1 GB, FREE tier: USD 0.006251 + 20 × USD 0.100001 = about USD 2.01 (about USD 1.61 on GOLD).

Photos that fail to download or decode create no dataset item and are not charged. When your maximum charge for the run is reached, the Actor stops starting new photos.

Reliability, privacy, and limits

  • Only public HTTP(S) URLs are accepted. Private, local, and link-local addresses are blocked, and redirects are re-checked (four at most).
  • Downloads time out after 30 seconds; files above 20 MB or 36 megapixels are rejected with a warning in OUTPUT.
  • EXIF and IPTC metadata and transparency are not kept. Keep your originals if you need them.
  • Scratch repair can soften genuine fine lines. Use gentle, or turn repairScratches off, for documents, handwriting, and drawings.
  • Photo pixels are processed inside the Actor and are not sent to any outside service.
  • Files stay in your run storage under your Apify data-retention settings.

FAQ

How much does it cost to restore an old photo with this Actor?

USD 0.10 per photo on the FREE tier, or USD 0.08 on GOLD, plus a start fee of under one cent per run.

Does it use AI, and will it change faces?

No. It uses classical filters (inpainting, denoising, contrast, and sharpening) and never generates new facial detail.

Can it colorize black-and-white photos?

No. The sepia option only removes a color cast; it does not add color.

Can it fix torn photos or missing corners?

No. It repairs thin scratches and dust specks only. Large damaged areas need manual retouching.

What is the best way to restore an old photo with it?

Scan the print at 300 dpi or more, start with balanced, and compare the before/after preview. Switch to gentle for fragile detail or strong for heavy noise.

Where do I download the restored photos?

Use restoredImageUrl from each dataset item, or open the run's key-value store and download the restored- and comparison- files.

Only process images you own or are authorized to modify. Review photos that show private individuals or sensitive information before you share run storage or exports.

Last verified: 2026-10-27